15#include "Framework/Conventions/GBuild.h"
55 const InitialState & init_state = interaction -> InitState();
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;
#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.
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 ProcessInfo & ProcInfo(void) const
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
const InitialState & InitState(void) const
Generated/set kinematical variables for an event.
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsWeakCC(void) const
bool IsCoherentProduction(void) const
A registry. Provides the container for algorithm configuration parameters.
double Integral(const Interaction *i) const
double fRo
nuclear size scale parameter
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
const XSecIntegratorI * fXSecIntegrator
void Configure(const Registry &config)
bool fModPCAC
use modified PCAC (including f/s lepton mass)
virtual ~ReinSehgalCOHPiPXSec()
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double fReIm
Re/Im {forward pion scattering amplitude}.
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
bool HitNucIsSet(void) const
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
Cross Section Integrator Interface.
static const double kPionMass2
static const double kNucleonMass
static const double kPionMass
bool IsNeutrino(int pdgc)
bool IsAntiNeutrino(int pdgc)
static constexpr double fermi
Simple functions for loading and reading nucleus dependent keys from config files.
double TotalPionNucleonXSec(double Epion, bool isChargedPion=true)
double InelasticPionNucleonXSec(double Epion, bool isChargedPion=true)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
Root of GENIE utility namespaces.
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EKinePhaseSpace KinePhaseSpace_t
const UInt_t kISkipProcessChk
if set, skip process validity checks