23 using namespace genie;
51 const InitialState & init_state = interaction -> InitState();
58 if ( TMath::Sqrt(s)<
fWmin )
return 0.;
60 const Kinematics & kinematics = interaction -> Kine();
61 const XclsTag & xclstag = interaction -> ExclTag();
64 double y = kinematics.
y();
72 double branch = 64.41/10.63;
74 double Gw2 = TMath::Power(Gw, 2);
75 double m_w2 = TMath::Power(m_w,2);
76 double m_z2 = TMath::Power(m_z,2);
77 double Sin4thw = TMath::Power(Sin2thw,2);
79 double prop = TMath::Power(1-s/m_w2, 2) + Gw2/m_w2;
84 xsec = s0*TMath::Power(1-y, 2) + (3*kElectronMass2+ml2)*(1-y) +
kElectronMass*(kElectronMass2+ml2)/E;
89 xsec = s0*TMath::Power(1-y, 2) + (3*kElectronMass2+ml2)*(1-y) +
kElectronMass*(kElectronMass2+ml2)/E;
94 xsec = ( s0*TMath::Power(1-y, 2) + (3*kElectronMass2+ml2)*(1-y) +
kElectronMass*(kElectronMass2+ml2)/E ) * branch;
99 double t = 2 * kElectronMass2 - s - u;
100 double L = Sin2thw - 1./2.;
102 double x1 = L*m_z2*(s-m_w2) + m_w2*(u-m_z2);
103 double y1 = L * m_z2 * Gw * m_w;
104 double x2 = (u - m_z2) * (s - m_w2);
105 double y2 = (u - m_z2) * Gw * m_w;
106 double y3 = ( x1*x2 + y1*y2 ) / ( TMath::Power(x2,2) + TMath::Power(y2,2) );
107 double x3 = ( x2*y1 - x1*y2 ) / ( TMath::Power(x2,2) + TMath::Power(y2,2) );
109 xsec = gf * s0 * ( Sin4thw/TMath::Power(u/m_z2-1,2) + (TMath::Power(x3,2)+TMath::Power(y3,2))*TMath::Power(t-kElectronMass2,2)/TMath::Power(s0,2) );
113 LOG(
"GLRESPXSec",
pINFO) <<
"dxsec/dy (E= " << E <<
", y= " << y <<
") = " << xsec;
126 int Ne = init_state.
Tgt().
Z();
149 bool ccprcok = proc_info.
IsWeakCC();
151 if ( !nuok )
return false;
152 if ( !nucok )
return false;
153 if ( !ccprcok )
return false;
Cross Section Calculation Interface.
bool IsWeakCC(void) const
int FinalLeptonPdg(void) const
double J(double q0, double q3, double Enu, double ml)
THE MAIN GENIE PROJECT NAMESPACE
Cross Section Integrator Interface.
double fWmin
Minimum value of W.
Generated/set kinematical variables for an event.
enum genie::EKinePhaseSpace KinePhaseSpace_t
static const double kElectronMass
Contains minimal information for tagging exclusive processes.
double y(bool selected=false) const
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static const double kElectronMass2
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
static const double kTauMass2
static const double kMuonMass2
virtual void Configure(const Registry &config)
void Configure(const Registry &config)
static PDGLibrary * Instance(void)
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator
bool HitNucIsSet(void) const
A registry. Provides the container for algorithm configuration parameters.
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double Integral(const Interaction *i) const
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
TParticlePDG * Find(int pdgc, bool must_exist=true)
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
bool IsElectron(int pdgc)
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