20#include "Framework/Conventions/GBuild.h"
37using std::ostringstream;
68 const Kinematics & kinematics = interaction -> Kine();
69 const InitialState & init_state = interaction -> InitState();
70 const ProcessInfo & proc_info = interaction -> ProcInfo();
75 double x = kinematics.
x();
76 double y = kinematics.
y();
80 double ml4 = ml2 * ml2;
81 double Mnuc2 = Mnuc * Mnuc;
83#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
85 <<
"Computing d2xsec/dxdy @ E = " << E <<
", x = " << x <<
", y = " << y;
92 int sign = (is_nubar_cc) ? -1 : 1;
95 fDISSF.Calculate(interaction);
97#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
118 if(proc_info.
IsEM()) {
126 double front_factor = (g2*Mnuc*E) /
kPi;
129 double term1 = y * ( x*y + ml2/(2*E*Mnuc) );
130 double term2 = 1 - y - Mnuc*x*y/(2*E) - ml2/(4*E2);
131 double term3 = sign * (x*y*(1-y/2) - y*ml2/(4*Mnuc*E));
132 double term4 = x*y*ml2/(2*Mnuc*E) + ml4/(4*Mnuc2*E2);
133 double term5 = -1.*ml2/(2*Mnuc*E);
135#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
137 <<
"\nd2xsec/dxdy ~ (" << term1 <<
")*F1+(" << term2 <<
")*F2+("
138 << term3 <<
")*F3+(" << term4 <<
")*F4+(" << term5 <<
")*F5";
147 double xsec = front_factor * (term1 + term2 + term3 + term4 + term5);
148 xsec = TMath::Max(xsec,0.);
150#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
152 <<
"d2xsec/dxdy[FreeN] (E= " << E
153 <<
", x= " << x <<
", y= " << y <<
") = " << xsec;
168 const Target & target = init_state.
Tgt();
182#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
184 <<
"Subtracting charm piece: " << xsec_charm <<
" / out of " << xsec;
186 xsec = TMath::Max(0., xsec-xsec_charm);
203 const InitialState & init_state = interaction -> InitState();
204 int probe_pdg = init_state.
ProbePdg();
225 Registry r(
"QPMDISPXSec_specific",
false ) ;
227 RgKey xdefkey =
"XSecModel@genie::EventGenerator/DIS-CC-CHARM";
228 RgKey local_key =
"CharmXSec" ;
255 fSin48w = TMath::Power( TMath::Sin(thw), 4 );
264 string keysubstr = this->
Id().
Key() +
"/DIS-RES-Join";
275 RgKey local_key =
"CharmXSec" ;
279 <<
"Loading the cross section model: " << xalg;
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
static AlgConfigPool * Instance()
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
virtual void Configure(const Registry &config)
const Algorithm * SubAlg(const RgKey ®istry_key) const
virtual const AlgId & Id(void) const
Get algorithm ID.
static Cache * Instance(void)
void RmMatchedCacheBranches(string key_substring)
Pure Abstract Base Class. Defines the DISStructureFuncModelI interface to be implemented by any algor...
Initial State information.
const Target & Tgt(void) const
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
XclsTag * ExclTagPtr(void) const
const ProcessInfo & ProcInfo(void) const
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
Generated/set kinematical variables for an event.
double y(bool selected=false) const
double x(bool selected=false) const
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsWeakNC(void) const
bool IsDeepInelastic(void) const
bool IsWeakCC(void) const
double fEMScale
cross section scaling factor
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
const XSecAlgorithmI * fCharmProdModel
double Integral(const Interaction *i) const
double fCCScale
cross section scaling factor
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double fNCScale
cross section scaling factor
void Configure(const Registry &config)
const DISStructureFuncModelI * fDISSFModel
SF model.
double fSin48w
sin^4(Weingberg angle)
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator
A registry. Provides the container for algorithm configuration parameters.
void Set(RgIMapPair entry)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
int HitNucPdg(void) const
double HitNucMass(void) const
bool HitNucIsSet(void) const
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
Cross Section Integrator Interface.
void SetCharm(int charm_pdgc=0)
static const double kAem2
bool IsNeutronOrProton(int pdgc)
bool IsAntiNeutrino(int pdgc)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
double XYtoQ2(double Ev, double M, double x, double y)
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EKinePhaseSpace KinePhaseSpace_t
const UInt_t kISkipProcessChk
if set, skip process validity checks
const UInt_t kIAssumeFreeNucleon