24 #include "Framework/Conventions/GBuild.h" 42 using std::ostringstream;
44 using namespace genie;
73 const Kinematics & kinematics = interaction -> Kine();
74 const InitialState & init_state = interaction -> InitState();
75 const ProcessInfo & proc_info = interaction -> ProcInfo();
82 double x = kinematics.
x();
83 double y = kinematics.
y();
90 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ 92 <<
"Computing d2xsec/dxdy @ E = " << E <<
", x = " << x <<
", y = " <<
y;
106 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ 128 <<
"Using a mediator mass " <<
fMedMass;
129 double Mzp2 = TMath::Power(
fMedMass,2);
132 double gzp4 = TMath::Power(gzp,4);
133 double g2 = gzp4 / TMath::Power((Q2 + Mzp2), 2);
134 double p2 = TMath::Max(E2 - ml2,0.);
135 double front_factor = (g2*Mnuc*
E) / (64.0 *
kPi) * (E2 / p2);
152 double QchiVA = TMath::Power(0.5*
fQchiL,2) - TMath::Power(0.5*
fQchiR,2);
153 double LongF = TMath::Power(1.0 + 2.0 * x * y * Mnuc * E / Mzp2,2);
154 term1 = 8.0 * y * ((QchiV2 + QchiA2) * x * y - (QchiV2 - (2.0 + LongF) * QchiA2) * ml2 / (E * Mnuc));
155 term2 = 4.0 * (2.0 * (QchiV2 + QchiA2) * (1.0 - y - 0.5 * Mnuc / E * x * y) - QchiA2 * ml2 / E * (2.0 / E + y / x / Mnuc * (1.0 - LongF)));
156 term3 = sign * 8.0 * (2.0 -
y) * x * y * QchiVA;
157 term4 = 16.0 * QchiA2 * LongF * ml2 * x * y / (E * Mnuc);
158 term5 = -8.0 * QchiA2 * LongF * ml2 * y / (E * Mnuc);
162 double QchiS2 = TMath::Power(
fQchiS, 2);
163 term1 = - 4.0 * QchiS2 * y * (x * y + 2.0 * ml2/(E*Mnuc));
164 term2 = 2.0 * QchiS2 * TMath::Power(y - 2.0,2);
166 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ 168 <<
"\nd2xsec/dxdy ~ (" << term1 <<
")*F1+(" << term2 <<
")*F2+(" 169 << term3 <<
")*F3+(" << term4 <<
")*F4+(" << term5 <<
")*F5";
179 <<
"\nd2xsec/dxdy ~ (" << term1 <<
")+(" << term2 <<
")+(" 180 << term3 <<
")+(" << term4 <<
")+(" << term5 <<
")";
183 double xsec = front_factor * (term1 + term2 + term3 + term4 + term5);
184 xsec = TMath::Max(xsec,0.);
186 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ 188 <<
"d2xsec/dxdy[FreeN] (E= " << E
189 <<
", x= " << x <<
", y= " << y <<
") = " << xsec;
216 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ 218 <<
"Subtracting charm piece: " << xsec_charm <<
" / out of " << xsec;
220 xsec = TMath::Max(0., xsec-xsec_charm);
237 const InitialState & init_state = interaction -> InitState();
238 int probe_pdg = init_state.
ProbePdg();
259 Registry r(
"QPMDMDISPXSec_specific",
false ) ;
261 RgKey xdefkey =
"XSecModel@genie::EventGenerator/DIS-CC-CHARM";
262 RgKey local_key =
"CharmXSec" ;
286 this->
GetParam(
"WeinbergAngle", thw ) ;
287 fSin48w = TMath::Power( TMath::Sin(thw), 4 );
307 string keysubstr = this->
Id().
Key() +
"/DMDIS-RES-Join";
329 RgKey local_key =
"CharmXSec" ;
333 <<
"Loading the cross section model: " << xalg;
void SetModel(const DISStructureFuncModelI *model)
Attach an algorithm.
Cross Section Calculation Interface.
Pure Abstract Base Class. Defines the DISStructureFuncModelI interface to be implemented by any algor...
double fgzp
Coupling to the mediator Zprime.
double F2(void) const
Get the computed structure function F2.
double J(double q0, double q3, double Enu, double ml)
THE MAIN GENIE PROJECT NAMESPACE
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
int HitNucPdg(void) const
virtual double XSec(const Interaction *i, KinePhaseSpace_t k=kPSfE) const =0
Compute the cross section for the input interaction.
double HitNucMass(void) const
double fSin48w
sin^4(Weingberg angle)
Generated/set kinematical variables for an event.
bool IsDarkMatter(int pdgc)
double x(bool selected=false) const
int fVelMode
velcoity dependence for xsec
double Integral(const Interaction *i) const
enum genie::EKinePhaseSpace KinePhaseSpace_t
const XSecAlgorithmI * fCharmProdModel
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
void SetCharm(int charm_pdgc=0)
double y(bool selected=false) const
double F4(void) const
Get the computed structure function F4.
double fQchiS
Scalar DM charge.
Summary information for an interaction.
double F1(void) const
Get the computed structure function F1.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool BareXSecPreCalc(void) const
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
bool IsAntiDarkMatter(int pdgc)
double fQchiR
Right-handed DM charge.
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
const DISStructureFuncModelI * fDISSFModel
SF model.
double XYtoQ2(double Ev, double M, double x, double y)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
double fMedMass
Mediator mass.
bool fUseCache
cache reduction factors used in joining scheme
double fQchiL
Left-handed DM charge.
double fScale
cross section scaling factor
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
const XSecIntegratorI * fXSecIntegrator
diff. xsec integrator
double F5(void) const
Get the computed structure function F5.
XclsTag * ExclTagPtr(void) const
double F3(void) const
Get the computed structure function F3.
virtual const AlgId & Id(void) const
Get algorithm ID.
static PDGLibrary * Instance(void)
static RunOpt * Instance(void)
bool HitNucIsSet(void) const
void Configure(const Registry &config)
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
bool IsNeutronOrProton(int pdgc)
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const ProcessInfo & ProcInfo(void) const
void Calculate(const Interaction *interaction)
Calculate the S/F's for the input interaction using the attached algorithm.
void RmMatchedCacheBranches(string key_substring)
TParticlePDG * Find(int pdgc, bool must_exist=true)
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.
static Cache * Instance(void)
bool IsDarkMatterDeepInelastic(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...
const UInt_t kISkipProcessChk
if set, skip process validity checks
static AlgConfigPool * Instance()
Initial State information.
const Algorithm * SubAlg(const RgKey ®istry_key) const