15 #include "Framework/Conventions/GBuild.h"
26 using namespace genie;
27 using namespace genie::constants;
28 using namespace genie::utils;
54 const Kinematics & kinematics = interaction -> Kine();
55 const InitialState & init_state = interaction -> InitState();
60 double x = kinematics.
x();
61 double y = kinematics.
y();
63 double A = (double) init_state.
Tgt().
A();
64 double A2 = TMath::Power(A,2.);
65 double A_3 = TMath::Power(A,1./3.);
68 double fp2 = TMath::Power(fp,2.);
70 double ma2 = TMath::Power(
fMa,2);
71 double propg = TMath::Power(ma2/(ma2+Q2),2.);
72 double r2 = TMath::Power(
fReIm,2.);
74 double sTot2 = TMath::Power(sTot,2.);
79 double Fabs = TMath::Exp( -9.*A_3*sInel / (16.*
kPi*Ro2) );
83 double Epi2 = TMath::Power(Epi,2.);
85 double R2 = TMath::Power(R,2.);
86 double b = 0.33333 * R2;
89 double tA = 1. + MxEpi - 0.5*mEpi2;
90 double tB = TMath::Sqrt(1. + 2*MxEpi) * TMath::Sqrt(1.-mEpi2);
91 double tmin = 2*Epi2 * (tA-tB);
92 double tmax = 2*Epi2 * (tA+tB);
93 double tint = (TMath::Exp(-b*tmin) - TMath::Exp(-b*tmax))/b;
95 double xsec = Gf*fp2 * A2 * E*(1-y) * sTot2 * (1+r2)*propg * Fabs*tint;
97 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
99 <<
"\n momentum transfer .............. Q2 = " << Q2
100 <<
"\n mass number .................... A = " << A
101 <<
"\n pion energy .................... Epi = " << Epi
102 <<
"\n propagator term ................ propg = " << propg
103 <<
"\n Re/Im of fwd pion scat. ampl. .. Re/Im = " <<
fReIm
104 <<
"\n total pi+N cross section ....... sigT = " << sTot
105 <<
"\n inelastic pi+N cross section ... sigI = " << sInel
106 <<
"\n nuclear size scale ............. Ro = " <<
fRo
107 <<
"\n pion absorption factor ......... Fabs = " << Fabs
108 <<
"\n t integration range ............ [" << tmin <<
"," << tmax <<
"]"
109 <<
"\n t integration factor ........... tint = " << tint;
122 double ml2 = TMath::Power(ml,2);
123 double Q2min = ml2 * y/(1-y);
125 double C1 = TMath::Power(1-0.5*Q2min/(Q2+
kPionMass2), 2);
126 double C2 = 0.25*y*Q2min*(Q2-Q2min)/ TMath::Power(Q2+
kPionMass2,2);
135 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
137 <<
"d2xsec/dxdy[COHPi] (x= " << x <<
", y="
138 << y <<
", E=" << E <<
") = "<< xsec;
163 const Target & target = init_state.
Tgt();
168 if (!proc_info.
IsWeak())
return false;
170 if (!(target.
A()>1))
return false;
Cross Section Calculation Interface.
bool IsWeakCC(void) const
bool IsNeutrino(int pdgc)
double J(double q0, double q3, double Enu, double ml)
Cross Section Integrator Interface.
static const double kNucleonMass
double Q2(const Interaction *const i)
Generated/set kinematical variables for an event.
double x(bool selected=false) const
virtual ~ReinSehgalCOHPiPXSec()
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
bool IsCoherentProduction(void) const
enum genie::EKinePhaseSpace KinePhaseSpace_t
bool fModPCAC
use modified PCAC (including f/s lepton mass)
double fReIm
Re/Im {forward pion scattering amplitude}.
double y(bool selected=false) const
static constexpr double b
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
double Integral(const Interaction *i) const
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double A
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)
const XSecIntegratorI * fXSecIntegrator
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
double InelasticPionNucleonXSec(double Epion, bool isChargedPion=true)
static const double kPionMass
bool HitNucIsSet(void) const
A registry. Provides the container for algorithm configuration parameters.
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
static constexpr double fermi
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 fRo
nuclear size scale parameter
void Configure(const Registry &config)
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
double TotalPionNucleonXSec(double Epion, bool isChargedPion=true)
Initial State information.
static const double kPionMass2
const Algorithm * SubAlg(const RgKey ®istry_key) const