32 using namespace genie;
33 using namespace genie::utils;
34 using namespace genie::constants;
60 const InitialState & init_state = interaction -> InitState();
61 const Kinematics & kinematics = interaction -> Kine();
68 double Q2 = kinematics.
Q2();
70 double M2 = TMath::Power(M, 2.);
71 double E2 = TMath::Power(E, 2.);
72 double ml2 = TMath::Power(ml,2.);
74 double qmv2 = TMath::Power(1 + Q2/
fMv2, 2);
75 double qma2 = TMath::Power(1 + Q2/fMa2, 2);
85 LOG(
"AhrensDMEL",
pNOTICE) <<
"Calculating for nuclear sign " << nucsign;
88 double Geu =
fQuV * (1.5 + nucsign*0.5) / qmv2;
89 double Gmu =
fQuV * ((1.5 + nucsign*0.5) *
fMuP + (1.5 - nucsign*0.5) *
fMuN) / qmv2;
93 double Ged =
fQdV * (1.5 - nucsign*0.5) / qmv2;
94 double Gmd =
fQdV * ((1.5 - nucsign*0.5) *
fMuP + (1.5 + nucsign*0.5) *
fMuN) / qmv2;
98 double pole3 = 4.0*M2 / (Q2 +
fMpi2);
99 double pole0 = 4.0*M2 / (Q2 +
fMeta2);
100 double FPu = 0.5 * (pole3 * (FAu - FAd) + pole0 * (FAu + FAd));
101 double FPd = 0.5 * (- pole3 * (FAu - FAd) + pole0 * (FAu + FAd));
110 double Ge = Geu + Ged + Ges;
111 double Gm = Gmu + Gmd + Gms;
112 double FA = FAu + FAd + FAs;
113 double FP = FPu + FPd + FPs;
114 double tau = 0.25 * Q2/M2;
115 double F1 = (Ge + tau * Gm) / (1.0 + tau);
116 double F2 = (Gm - Ge) / (1.0 + tau);
117 double F12 = TMath::Power(F1,2);
118 double F22 = TMath::Power(F2,2);
119 double FA2 = TMath::Power(FA,2);
123 double del = ml2 / M2;
132 double QchiV2 = TMath::Power(
fQchiV,2);
133 double QchiA2 = TMath::Power(
fQchiA,2);
134 C = (QchiA2 + QchiV2) * (F12 + F22 * tau + FA2);
136 AL = 16. * QchiA2 * del * TMath::Power(tau*(FA - 2.*FP*tau),2);
137 AT_F1F1 = QchiA2*(tau-1.)*(del+tau) + QchiV2*tau*(-del+tau-1);
138 AT_F2F2 = -tau*(QchiA2*(tau-1.)*(del+tau) + QchiV2*(del + (tau-1.)*tau));
139 AT_FAFA = (1.+tau)*(QchiA2*(del+tau) + QchiV2*(tau-del));
140 AT_F1F2 = 2.*tau*(2.*QchiA2*(del+tau) - QchiV2*(del-2.*tau));
143 double QchiS2 = TMath::Power(
fQchiS,2);
144 C = QchiS2 * (F12 + F22 * tau + FA2);
145 AT_F1F1 = -QchiS2 * tau * (del + tau);
147 AT_FAFA = -QchiS2 * (tau + 1.) * (del + tau);
148 AT_F1F2 = 2.*AT_F1F1;
150 double smu = E/M - tau;
151 double MZ2 = TMath::Power(
fMedMass,2);
152 double lon = TMath::Power(M2 / MZ2 + 0.25/tau,2);
154 <<
"Using a mediator mass of " <<
fMedMass;
157 double gZp4 = TMath::Power(gZp,4);
158 double prop = 1. / (Q2 + MZ2);
159 double prop2 = TMath::Power(prop,2);
160 double xsec0 = gZp4 * M2 * prop2 / (4. *
kPi * (E2 - ml2));
161 xsec = xsec0 * (AL * lon + AT_F1F1 * F12 + AT_F2F2 * F22 + AT_FAFA * FA2 + AT_F1F2 * F1 * F2 + nusign * B * smu + C * smu * smu);
164 <<
"dXSec[vN,El]/dQ2 [FreeN](Ev = "<< E<<
", Q2 = "<< Q2 <<
") = "<< xsec;
184 <<
"Nuclear suppression factor R(Q2) = " << R <<
", NNucl = " << NNucl;
220 this->
GetParam(
"DarkLeftCharge", QchiL ) ;
221 this->
GetParam(
"DarkRightCharge", QchiR ) ;
223 fQchiV = 0.5*(QchiL + QchiR);
224 fQchiA = 0.5*(- QchiL + QchiR);
227 double QuL, QuR, QdL, QdR, QsL, QsR;
228 this->
GetParam(
"UpLeftCharge", QuL ) ;
229 this->
GetParam(
"UpRightCharge", QuR ) ;
230 this->
GetParam(
"DownLeftCharge", QdL ) ;
231 this->
GetParam(
"DownRightCharge", QdR ) ;
232 this->
GetParam(
"StrangeLeftCharge", QsL ) ;
233 this->
GetParam(
"StrangeRightCharge", QsR ) ;
234 fQuV = 0.5*(QuL + QuR);
235 fQuA = 0.5*(- QuL + QuR);
236 fQdV = 0.5*(QdL + QdR);
237 fQdA = 0.5*(- QdL + QdR);
238 fQsV = 0.5*(QsL + QsR);
239 fQsA = 0.5*(- QsL + QsR);
242 double ma, mv, mp, mpi, meta ;
247 this->
GetParam(
"DMEL-Meta", meta ) ;
248 fMa2 = TMath::Power(ma,2);
249 fMv2 = TMath::Power(mv,2);
250 fMp2 = TMath::Power(mp,2);
251 fMpi2 = TMath::Power(mpi,2);
252 fMeta2 = TMath::Power(meta,2);
Cross Section Calculation Interface.
double J(double q0, double q3, double Enu, double ml)
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
int HitNucPdg(void) const
double HitNucMass(void) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
Generated/set kinematical variables for an event.
enum genie::EKinePhaseSpace KinePhaseSpace_t
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
bool IsAntiDarkMatter(int pdgc)
double Integral(const Interaction *i) const
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
const XSecIntegratorI * fXSecIntegrator
static PDGLibrary * Instance(void)
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
virtual ~AhrensDMELPXSec()
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
TParticlePDG * Find(int pdgc, bool must_exist=true)
double Q2(bool selected=false) const
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
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
TLorentzVector * GetProbeP4(RefFrame_t rf=kRfHitNucRest) const
const UInt_t kISkipProcessChk
if set, skip process validity checks
void Configure(const Registry &config)
double NuclQELXSecSuppression(string kftable, double pmax, const Interaction *in)
Initial State information.
const Algorithm * SubAlg(const RgKey ®istry_key) const