16 #include "Framework/Conventions/GBuild.h"
31 using namespace genie;
32 using namespace genie::constants;
61 const Kinematics & kinematics = interaction -> Kine();
62 const InitialState & init_state = interaction -> InitState();
71 int qpdg = (qset) ? target.
HitQrkPdg() : 0;
72 bool sea = (qset) ? target.
HitSeaQrk() :
false;
82 double x = kinematics.
x();
83 double y = kinematics.
y();
84 double x2 = TMath::Power(x, 2);
86 double Mnuc2 = TMath::Power(Mnuc, 2);
87 double Q2 = 2*Mnuc*E*x*y;
88 double inverse_eta = 0.5/x + TMath::Sqrt( 0.25/x2 + Mnuc2/Q2 );
89 double eta = 1 / inverse_eta;
90 double xi = eta * (1 +
fMc2/
Q2);
91 double coshpsi = (2-y)/y;
92 double sinh2psi = TMath::Power(coshpsi, 2) - 1;
95 if(xi<=0 || xi>1)
return 0;
112 tmp = uv; uv = dv; dv = tmp;
113 tmp =
us; us = ds; ds = tmp;
118 if(isnub) {
bool pass = (isdb||issb)&&sea;
if(!pass)
return 0; }
119 if(isnu) {
bool pass = isd||(iss&&sea);
if(!pass)
return 0; }
120 dv = ( isd && !sea) ? dv : 0.;
121 ds = ( (isd||isdb) && sea) ? ds : 0.;
122 s = ( (iss||issb) && sea) ? s : 0.;
129 double f1 = TMath::Power( (1+coshpsi)/2, 2);
130 double f2 = 0.25 * (
fMc2/
Q2) * sinh2psi;
131 double xsec_0 = 2 * Gw2 * (y*Q2/
kPi) * (f1+f2);
132 double xsec_d = xsec_0 *
fVcd2 * (dv+ds);
133 double xsec_s = xsec_0 *
fVcs2 *
s;
134 double xsec = xsec_d + xsec_s;
136 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
137 double W2 = Mnuc2 + 2*Mnuc*E*y*(1-x);
138 double W = TMath::Max(0., TMath::Sqrt(W2));
140 <<
"\n dxsec[DISCharm,FreeN]/dxdy (E= " << E
141 <<
", x= " << x <<
", y= " << y
142 <<
", W= " << W <<
", Q2 = " << Q2 <<
") = " << xsec;
156 int NNucl = (isP) ? target.
Z() : target.
N();
177 if(!proc_info.
IsWeak())
return false;
180 if(!is_inclusive_charm)
return false;
Cross Section Calculation Interface.
bool HitSeaQrk(void) const
static const double kSqrt2
static constexpr double us
bool IsNeutrino(int pdgc)
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 DownValence(void) const
int HitQrkPdg(void) const
double HitNucMass(void) const
static constexpr double s
Generated/set kinematical variables for an event.
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double x(bool selected=false) const
bool IsAntiSQuark(int pdgc)
enum genie::EKinePhaseSpace KinePhaseSpace_t
Pure abstract base class. Defines the PDFModelI interface to be implemented by wrapper classes to exi...
virtual ~AivazisCharmPXSecLO()
bool IsAntiDQuark(int pdgc)
Contains minimal information for tagging exclusive processes.
double y(bool selected=false) const
bool IsCharmEvent(void) const
double W(const Interaction *const i)
double DownSea(void) const
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
const XSecIntegratorI * fXSecIntegrator
bool IsWeakNC(void) const
double Strange(void) const
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsAntiNeutrino(int pdgc)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
void SetModel(const PDFModelI *model)
void Calculate(double x, double q2)
bool IsDeepInelastic(void) const
void Configure(const Registry &config)
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double UpValence(void) const
bool HitQrkIsSet(void) const
bool IsDarkMatter(void) const
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
const XclsTag & ExclTag(void) const
double Integral(const Interaction *i) const
bool IsInclusiveCharm(void) const
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
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
const PDFModelI * fPDFModel
Initial State information.
const Algorithm * SubAlg(const RgKey ®istry_key) const