20 #include "Framework/Conventions/GBuild.h"
32 using namespace genie;
33 using namespace genie::constants;
34 using namespace genie::controls;
61 const InitialState & init_state = interaction -> InitState();
62 const Kinematics & kinematics = interaction -> Kine();
63 const ProcessInfo & proc_info = interaction -> ProcInfo();
66 double Ev2 = TMath::Power(Ev,2);
68 double me2 = TMath::Power(me,2);
70 double ml2 = TMath::Power(ml,2);
71 double y = kinematics.
y();
72 double MZ2 = TMath::Power(
fMedMass,2);
73 double A =
fgZp4 * TMath::Power(Ev,3) * me / (4.0 *
kPi * (Ev2 - ml2) * TMath::Power(MZ2 + 2.0*Ev*me*(1.0 - y),2));
79 double QeV2 = TMath::Power(0.5*(
fQeL+
fQeR),2);
80 double QeA2 = TMath::Power(0.5*(-
fQeL+
fQeR),2);
81 double QeVA = 0.25*(TMath::Power(
fQeR,2) - TMath::Power(
fQeL,2));
89 double QdmV2 = TMath::Power(0.5*(
fQdmL+
fQdmR),2);
90 double QdmA2 = TMath::Power(0.5*(-
fQdmL+
fQdmR),2);
91 double QdmVA = 0.25*(TMath::Power(
fQdmR,2) - TMath::Power(
fQdmL,2));
92 double T1 = 1 + TMath::Power(y,2);
93 double T2 = (1.0 - y)* me / Ev;
94 double T3 = (1.0 - y)*ml2 / Ev / me;
95 double T4 = 2.0 * ml2 / Ev2;
96 double TL = 2.0*TMath::Power(2.0*(1.0 - y) * me * ml / MZ2 + ml/Ev,2);
97 xsec = (T1 - T2 - T3)*QdmV2*QeV2;
98 xsec += (T1 - T2 + T3 - T4)*QdmA2*QeV2;
99 xsec += (T1 + T2 - T3 - T4)*QdmV2*QeA2;
100 xsec += (T1 + T2 + T3 + T4 + TL)*QdmA2*QeA2;
102 xsec += 4.0 * (1.0 - TMath::Power(y,2))*QdmVA*QeVA;
105 xsec -= 4.0 * (1.0 - TMath::Power(y,2))*QdmVA*QeVA;
112 double QdmS2 = TMath::Power(
fQdmS,2);
114 double T2 = (1.0 - y)*me2 / Ev / me;
115 double T3 = (1.0 - y)*ml2 / Ev / me;
116 double T4 = 2.0 * ml2 / Ev2;
117 xsec = (T1 - T3)*QeV2*QdmS2;
118 xsec += (T1 - T2 - T3 - T4)*QeA2*QdmS2;
122 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
124 <<
"*** dxsec(ve-)/dy [free e-](Ev="<< Ev <<
", y= "<< y<<
") = "<< xsec;
131 LOG(
"Elastic",
pDEBUG) <<
"Multiplying by jacobian " <<
J;
139 int Ne = init_state.
Tgt().
Z();
141 LOG(
"Elastic",
pDEBUG) <<
"Multiplying by Ne " << Ne;
187 fgZp4 = TMath::Power(gZp, 4);
Cross Section Calculation Interface.
double J(double q0, double q3, double Enu, double ml)
Cross Section Integrator Interface.
Generated/set kinematical variables for an event.
bool IsDarkMatter(int pdgc)
enum genie::EKinePhaseSpace KinePhaseSpace_t
static const double kElectronMass
double y(bool selected=false) const
const XSecIntegratorI * fXSecIntegrator
Summary information for an interaction.
void Configure(const Registry &config)
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double A
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
virtual void Configure(const Registry &config)
double Integral(const Interaction *i) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
static PDGLibrary * Instance(void)
bool IsDarkMatter(void) const
A registry. Provides the container for algorithm configuration parameters.
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
TParticlePDG * Find(int pdgc, bool must_exist=true)
virtual ~DMElectronPXSec()
bool GetParamDef(const RgKey &name, T &p, const T &def) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
const UInt_t kISkipProcessChk
if set, skip process validity checks
Initial State information.
const UInt_t kIAssumeFreeElectron
const Algorithm * SubAlg(const RgKey ®istry_key) const