45 using namespace genie;
81 double W = kinematics.
W();
82 double Q2 = kinematics.
Q2();
91 double M2n2 = M2n*M2n;
97 if(W < Wlim.min || W > Wlim.
max)
105 if(Q2 < Q2lim.min || Q2 > Q2lim.
max)
119 double Q2dep = Q2*TMath::Power((1+Q2/
fMq2d),-8.);
122 double FF2 = Wdep * Q2dep;
135 double sin2_halftheta = M2n*Q2 / (4*M2n*E2 - 2*E*
Q2);
137 double cos2_halftheta = 1.-sin2_halftheta;
139 double tan2_halftheta = sin2_halftheta/cos2_halftheta;
143 double tau = Q2/(4*M2n2);
147 double Ep = E / (1. + 2.*(E/M2n)*sin2_halftheta);
151 xsec = 4*
kAem2*Ep2*cos2_halftheta/Q4 * FF2 * (tau/(1+tau) +2*tau*tan2_halftheta);
156 double tau = Q2/(4*M2n2);
157 double tau2 = tau*tau;
158 double smufac = 4*M2n*Ev - Q2 - ml*ml;
159 double A = (ml*ml+
Q2)/M2n2 * (tau*(1+tau) - tau2*(1-tau)+4*tau2)/TMath::Power(1+tau,2.) * FF2;
160 double C = tau/4/(1+tau) * FF2;
161 xsec = A + smufac*smufac*
C;
166 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ 168 <<
"Jacobian for transformation to: " 224 double fFracADep = 1.;
225 if(A>=12) fFracADep = TMath::Power((N/6.),
fMECAPower-1.);
232 double fFracCCQE_cluster=0.;
239 xsec *=
fFracCCQE*fFracCCQE_cluster*fFracADep;
262 double fFracADep = 1.;
263 if(A>=12) fFracADep = TMath::Power((A/12.),
fMECAPower-1.);
268 double fFracNCQE_cluster=0.;
269 if(nucleon_cluster_pdg==2000000200) fFracNCQE_cluster= 0.5*(1-
fFracPN_NC);
270 if(nucleon_cluster_pdg==2000000201) fFracNCQE_cluster=
fFracPN_NC;
271 if(nucleon_cluster_pdg==2000000202) fFracNCQE_cluster= 0.5*(1-
fFracPN_NC);
272 xsec *=
fFracNCQE*fFracNCQE_cluster*fFracADep;
290 double fFracADep = 1.;
291 if(A>=12) fFracADep = TMath::Power((A/12.),
fMECAPower-1.);
296 double fFracEMQE_cluster=0.;
297 if(nucleon_cluster_pdg==2000000200) fFracEMQE_cluster= 0.5*(1-
fFracPN_EM);
298 if(nucleon_cluster_pdg==2000000201) fFracEMQE_cluster=
fFracPN_EM;
299 if(nucleon_cluster_pdg==2000000202) fFracEMQE_cluster= 0.5*(1-
fFracPN_EM);
300 xsec *=
fFracEMQE*fFracEMQE_cluster*fFracADep;
314 if(!proc_info.
IsMEC())
return false;
330 string global_key_head =
"XSecModel@genie::EventGenerator/" ;
331 string local_key_head =
"XSecModel-" ;
333 Registry r(
"EmpiricalMECPXSec2015_specific",
false ) ;
334 r.
Set( local_key_head +
"QEL-NC", algos -> GetAlg( global_key_head +
"QEL-NC") ) ;
335 r.
Set( local_key_head +
"QEL-CC", algos -> GetAlg( global_key_head +
"QEL-CC") ) ;
336 r.
Set( local_key_head +
"QEL-EM", algos -> GetAlg( global_key_head +
"QEL-EM") ) ;
362 string key_head =
"XSecModel-" ;
Cross Section Calculation Interface.
double W(bool selected=false) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
bool IsWeakCC(void) const
bool IsNeutrino(int pdgc)
double J(double q0, double q3, double Enu, double ml)
THE MAIN GENIE PROJECT NAMESPACE
Range1D_t InelWLim(double El, double ml, double M)
double Q2(const Interaction *const i)
int HitNucPdg(void) const
void Configure(const Registry &config)
Range1D_t InelWLim(double Ev, double M, double ml)
A simple [min,max] interval for doubles.
double fFracPN_NC
toy model param: fraction of nucleon pairs that are pn, not nn or pp
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
Generated/set kinematical variables for an event.
double Mass(Resonance_t res)
resonance mass (GeV)
const XSecAlgorithmI * fXSecAlgCCQE
cross section algorithm for CCQE
const XSecAlgorithmI * fXSecAlgNCQE
cross section algorithm for NCQE
enum genie::EKinePhaseSpace KinePhaseSpace_t
static Interaction * QELCC(int tgt, int nuc, int probe, double E=0)
double fMass
toy model param: peak of W distribution (GeV)
static const double kMinQ2Limit
Range1D_t InelQ2Lim_W(double Ev, double M, double ml, double W, double Q2min_cut=controls::kMinQ2Limit)
Summary information for an interaction.
bool IsWeakNC(void) const
double fFracPN_CC
toy model param: fraction of nucleon pairs that are pn, not nn or pp
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static const double kAem2
static string AsString(KinePhaseSpace_t kps)
static Interaction * QELNC(int tgt, int nuc, int probe, double E=0)
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsAntiNeutrino(int pdgc)
void WQ2toXY(double Ev, double M, double W, double Q2, double &x, double &y)
virtual double Integral(const Interaction *i) const =0
virtual void Configure(const Registry &config)
double fWidth
toy model param: width of W distribution (GeV)
double Gaus(TH1D *h, double &err, bool isTruth)
Misc GENIE control constants.
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
double fMq2d
toy model param: `mass' in dipole (Q2 - dependence) form factor (GeV)
double fFracPN_EM
toy model param: fraction of nucleon pairs that are pn, not nn or pp
Range1D_t InelQ2Lim_W(double El, double ml, double M, double W)
static PDGLibrary * Instance(void)
const XSecAlgorithmI * fXSecAlgEMQE
cross section algorithm for EMQE
double Integral(const Interaction *i) const
static Interaction * QELEM(int tgt, int nuc, int probe, double E=0)
double fFracEMQE
empirical model param: MEC cross section is taken to be this fraction of Rosenbluth xs ...
A registry. Provides the container for algorithm configuration parameters.
double fFracNCQE
empirical model param: MEC cross section is taken to be this fraction of NCQE cross section ...
TParticlePDG * Find(int pdgc)
assert(nhit_max >=nhit_nbins)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
double fFracCCQE
empirical model param: MEC cross section is taken to be this fraction of CCQE cross section ...
double fMECAPower
power of A relative to carbon
double Q2(bool selected=false) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
void Set(RgIMapPair entry)
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
virtual ~EmpiricalMECPXSec2015()
const UInt_t kISkipProcessChk
if set, skip process validity checks
static AlgConfigPool * Instance()
const Algorithm * SubAlg(const RgKey ®istry_key) const