14 #include "Framework/Conventions/GBuild.h"
25 using namespace genie;
26 using namespace genie::constants;
27 using namespace genie::utils;
60 const Kinematics & kinematics = interaction -> Kine();
61 const InitialState & init_state = interaction -> InitState();
67 double Q2 = kinematics.
Q2();
68 double y = kinematics.
y();
69 double t = kinematics.
t();
76 "Pion COM momentum negative for Q2 = " << Q2 <<
82 LOG(
"BergerSehgalFMCohPi",
pDEBUG) <<
"Exact kin. form = " << front <<
83 " E = " << E <<
" Q2 = " << Q2 <<
" y = " << y;
87 double A = (double) init_state.
Tgt().
A();
88 double A2 = TMath::Power(A, 2.);
89 double A_3 = TMath::Power(A, 1./3.);
90 double M = init_state.
Tgt().
Mass();
92 double M_pi2 = M_pi * M_pi;
93 double Epi = y * E - t / (2 * M);
94 double Epi2 = Epi * Epi;
96 double Ga = ma2 / (ma2 +
Q2);
99 double ppi2 = Epi2 - M_pi2;
100 double ppi = ppi2 > 0.0 ? sqrt(ppi2) : 0.0;
103 double costheta = (t - Q2 - M_pi * M_pi) / (2 * ( (y *E - Epi) * Epi -
104 ppi * sqrt(TMath::Power(y * E - Epi, 2.) + t) ) );
106 if ((costheta > 1.0) || (costheta < -1.0))
return 0.0;
111 double sTot2 = sTot * sTot;
119 double Fabs_input = (9.0 * A_3) / (16.0 *
kPi * Ro2);
120 double Fabs = TMath::Exp( -1.0 * Fabs_input * sInel);
126 double b = 0.33333 * R2;
127 double expbt = TMath::Exp( -b * t );
128 double dsigEldt = sTot2 / (16. *
kPi);
129 double dsigpiNdt = A2 * dsigEldt * expbt * Fabs;
133 double tpihigh = 0.0;
134 double sighigh = 0.0;
143 double edep_dsigpiNdt = dsigpiNdt;
158 LOG(
"BergerSehgalFMCohPi",
pWARN) <<
159 "Unable to retrieve pion-nucleus cross section with A = " <<
160 A <<
", t_pi = " << tpi;
161 dsigdt = siglow + (sighigh - siglow) * (tpi - tpilow) / (tpihigh - tpilow);
162 dsigdt = dsigdt / (2.0 * ppistar * ppistar) *
units::mb;
163 edep_dsigpiNdt = dsigdt;
167 xsec = front * Ga2 * edep_dsigpiNdt;
178 double ml2 = TMath::Power(ml,2);
179 double Q2min = ml2 * y/(1-y);
181 double C1 = TMath::Power(Ga - 0.5 * Q2min / (Q2 +
kPionMass2), 2);
182 double C2 = 0.25 * y * Q2min * (Q2 - Q2min) /
191 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
193 <<
"\n momentum transfer .............. Q2 = " << Q2
194 <<
"\n mass number .................... A = " << A
195 <<
"\n pion energy .................... Epi = " << Epi
196 <<
"\n propagator term ................ propg = " << propg
197 <<
"\n Re/Im of fwd pion scat. ampl. .. Re/Im = " << fReIm
198 <<
"\n total pi+N cross section ....... sigT = " << sTot
199 <<
"\n inelastic pi+N cross section ... sigI = " << sInel
200 <<
"\n nuclear size scale ............. Ro = " <<
fRo
201 <<
"\n pion absorption factor ......... Fabs = " << Fabs
202 <<
"\n t integration factor ........... tint = " << tint;
204 <<
"d3xsec/dQ2dydt[COHPi] (x= " << x <<
", y="
205 << y <<
", E=" << E <<
") = "<< xsec;
219 const Kinematics & kinematics = interaction -> Kine();
220 const InitialState & init_state = interaction -> InitState();
225 double Q2 = kinematics.
Q2();
226 double y = kinematics.
y();
227 double fp2 = (0.93 * M_pi)*(0.93 * M_pi);
229 double term = ((
kGF2 * fp2) / (4.0 *
kPi2)) *
230 ((E * (1.0 - y)) / sqrt(y*E * y*E + Q2)) *
231 (1.0 - Q2 / (4.0 * E*E * (1.0 - y)));
240 const Kinematics & kinematics = interaction -> Kine();
241 const InitialState & init_state = interaction -> InitState();
246 double Q2 = kinematics.
Q2();
247 double y = kinematics.
y();
248 double MT = init_state.
Tgt().
Mass();
250 double W2 = MT * MT - Q2 + 2.0 * y * E * MT;
251 double arg = (2.0 * MT * (y * E - M_pi) - Q2 - M_pi * M_pi) *
252 (2.0 * MT * (y * E + M_pi) - Q2 - M_pi * M_pi);
253 if (arg < 0)
return arg;
254 double ppistar = TMath::Sqrt(arg) / 2.0 / TMath::Sqrt(W2);
271 const Target & target = init_state.
Tgt();
276 if (!proc_info.
IsWeak())
return false;
278 if (!(target.
A()>1))
return false;
303 fCos8c2 = TMath::Power(TMath::Cos(thc), 2);
Cross Section Calculation Interface.
bool IsWeakCC(void) const
bool IsNeutrino(int pdgc)
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
double fCos8c2
cos^2(Cabibbo angle)
virtual ~BergerSehgalFMCOHPiPXSec2015()
static const double kPi0Mass
double TotalPionNucleonXSec(double Epion, bool isChargedPion=true)
const XSecIntegratorI * fXSecIntegrator
Generated/set kinematical variables for an event.
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
bool IsCoherentProduction(void) const
enum genie::EKinePhaseSpace KinePhaseSpace_t
double y(bool selected=false) const
static constexpr double b
double ExactKinematicTerm(const Interaction *i) const
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool fRSPionXSec
Use Rein-Sehgal "style" pion-nucleon xsecs.
#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...
static constexpr double mb
bool IsAntiNeutrino(int pdgc)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
double PionCOMAbsMomentum(const Interaction *i) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
BergerSehgalFMCOHPiPXSec2015()
double fRo
nuclear size scale parameter
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
static const double kPionMass
double Integral(const Interaction *i) const
bool HitNucIsSet(void) const
A registry. Provides the container for algorithm configuration parameters.
void Configure(const Registry &config)
double InelasticPionNucleonXSec(double Epion, bool isChargedPion=true)
static constexpr double fermi
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
double t(bool selected=false) const
double Q2(bool selected=false) 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
Initial State information.
int PionNucleusXSec(double tpi, double ppistar, double t_new, double A, double &tpilow, double &siglow, double &tpihigh, double &sighigh)
static const double kPionMass2
const Algorithm * SubAlg(const RgKey ®istry_key) const