24 #include "Framework/Conventions/GBuild.h"
42 using std::ostringstream;
44 using namespace genie;
45 using namespace genie::constants;
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;
204 const Target & target = init_state.
Tgt();
218 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
220 <<
"Subtracting charm piece: " << xsec_charm <<
" / out of " << xsec;
222 xsec = TMath::Max(0., xsec-xsec_charm);
239 const InitialState & init_state = interaction -> InitState();
240 int probe_pdg = init_state.
ProbePdg();
261 Registry r(
"QPMDMDISPXSec_specific",
false ) ;
263 RgKey xdefkey =
"XSecModel@genie::EventGenerator/DIS-CC-CHARM";
264 RgKey local_key =
"CharmXSec" ;
290 this->
GetParam(
"WeinbergAngle", thw ) ;
291 fSin48w = TMath::Power( TMath::Sin(thw), 4 );
311 string keysubstr = this->
Id().
Key() +
"/DMDIS-RES-Join";
333 RgKey local_key =
"CharmXSec" ;
337 <<
"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...
bool IsWeakCC(void) const
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)
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
int HitNucPdg(void) const
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 IsWeakNC(void) const
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.
virtual double XSec(const Interaction *i, KinePhaseSpace_t k=kPSfE) const =0
Compute the cross section for the input interaction.
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)
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 fEMScale
cross section scaling factor for EM processes
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
static Cache * Instance(void)
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
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...
double fCCScale
cross section scaling factor for CC processes
const UInt_t kISkipProcessChk
if set, skip process validity checks
static AlgConfigPool * Instance()
double fNCScale
cross section scaling factor for NC processes
Initial State information.
const Algorithm * SubAlg(const RgKey ®istry_key) const