16#include "Framework/Conventions/GBuild.h"
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;
103 double us = pdfs.
UpSea()/xi;
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;
#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.
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
void Configure(const Registry &config)
double Integral(const Interaction *i) const
const XSecIntegratorI * fXSecIntegrator
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
virtual ~AivazisCharmPXSecLO()
const PDFModelI * fPDFModel
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
Initial State information.
const Target & Tgt(void) const
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
const XclsTag & ExclTag(void) const
const ProcessInfo & ProcInfo(void) const
const InitialState & InitState(void) const
Generated/set kinematical variables for an event.
double y(bool selected=false) const
double x(bool selected=false) const
Pure abstract base class. Defines the PDFModelI interface to be implemented by wrapper classes to exi...
void SetModel(const PDFModelI *model)
double DownSea(void) const
void Calculate(double x, double q2)
double UpValence(void) const
double DownValence(void) const
double Strange(void) 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 IsDarkMatter(void) const
A registry. Provides the container for algorithm configuration parameters.
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
int HitNucPdg(void) const
int HitQrkPdg(void) const
bool HitSeaQrk(void) const
double HitNucMass(void) const
bool HitQrkIsSet(void) const
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
Cross Section Integrator Interface.
Contains minimal information for tagging exclusive processes.
bool IsInclusiveCharm(void) const
bool IsCharmEvent(void) const
static const double kSqrt2
bool IsAntiSQuark(int pdgc)
bool IsNeutrino(int pdgc)
bool IsAntiDQuark(int pdgc)
bool IsAntiNeutrino(int pdgc)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EKinePhaseSpace KinePhaseSpace_t
const UInt_t kISkipProcessChk
if set, skip process validity checks
const UInt_t kIAssumeFreeNucleon