29 using namespace genie;
62 const InitialState & init_state = interaction -> InitState();
68 double Q2 = kinematics.
Q2();
69 double y = kinematics.
y();
70 double x = kinematics.
x();
76 LOG(
"BergerSehgalCohPi",
pDEBUG) <<
"Pion COM momentum negative for Q2 = " << Q2 <<
77 " x = " << x <<
" y = " <<
y;
82 LOG(
"BergerSehgalCohPi",
pDEBUG) <<
"Exact kin. form = " << front <<
83 " E = " << E <<
" Q2 = " << Q2 <<
" y = " << y <<
" x = " <<
x;
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();
93 double ma2 = TMath::Power(
fMa, 2);
94 double Ga = ma2 / (ma2 +
Q2);
95 double Ga2 = TMath::Power(Ga, 2.);
100 double Epi2 = TMath::Power(Epi, 2.);
102 double R2 = TMath::Power(R, 2.);
103 double b = 0.33333 * R2;
104 double MxEpi = M * x / Epi;
105 double mEpi2 = (M_pi * M_pi) / Epi2;
106 double tA = 1. + MxEpi - 0.5 * mEpi2;
108 double tmin = 2 * Epi2 * (tA - tB);
109 double tmax = 2 * Epi2 * (tA + tB);
119 double siginel_pin = sigtot_pin - sigel_pin;
124 double fabs_input = (9.0 * A_3) / (16.0 *
kPi * Ro2);
125 double fabs = TMath::Exp( -1.0 * fabs_input * siginel_pin);
132 double RS_factor = (A2 * fabs) / (16.0 *
kPi) * (sigtot_pin * sigtot_pin);
135 double tpi = (E *
y) - M_pi - ((Q2 + M_pi * M_pi) / (2 * M));
138 double tpihigh = 0.0;
139 double sighigh = 0.0;
140 double dsigdzfit = 0.0;
141 double dsigdtfit = 0.0;
145 double logt_step = TMath::Abs(
log(tmax) -
log(tmin)) / tstep;
146 double logt =
log(tmin) - logt_step/2.0;
147 double t_itt = TMath::Exp(logt);
148 double t_width = 0.0;
150 for (
double t_step = 0; t_step<tstep; t_step++) {
152 logt = logt + logt_step;
153 t_itt = TMath::Exp(logt);
154 t_width = t_itt*logt_step;
159 LOG(
"BergerSehgalCohPi",
pERROR) <<
"Call to PionNucleusXSec code failed - return xsec of 0.0";
162 dsigdzfit = siglow + (sighigh - siglow) * (tpi - tpilow) / (tpihigh - tpilow);
163 dsigdtfit = dsigdzfit / (2.0 * ppistar * ppistar);
165 dsig += 1.0 * front * Ga2 * t_width * dsigdtfit *
units::mb;
168 dsig += front * Ga2 * t_width * RS_factor * exp(-1.0*b*t_itt);
183 double ml2 = TMath::Power(ml,2);
184 double Q2min = ml2 * y/(1-
y);
186 double C1 = TMath::Power(Ga - 0.5 * Q2min / (Q2 +
kPionMass2), 2);
187 double C2 = 0.25 * y * Q2min * (Q2 - Q2min) /
196 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__ 198 <<
"\n momentum transfer .............. Q2 = " << Q2
199 <<
"\n mass number .................... A = " << A
200 <<
"\n pion energy .................... Epi = " << Epi
201 <<
"\n propagator term ................ Ga2 = " << Ga2
202 <<
"\n total pi+N cross section ....... sigT = " << sigtot_pin
203 <<
"\n inelastic pi+N cross section ... sigI = " << siginel_pin
204 <<
"\n nuclear size scale ............. Ro = " <<
fRo 205 <<
"\n pion absorption factor ......... Fabs = " << fabs
206 <<
"\n t integration range ............ [" << tmin <<
"," << tmax <<
"]" 208 <<
"d2xsec/dQ2dy[COHPi] (Q2= " << Q2 <<
", y=" 209 << y <<
", E=" << E <<
") = "<<
xsec;
227 const InitialState & init_state = interaction -> InitState();
232 double Q2 = kinematics.
Q2();
233 double y = kinematics.
y();
234 double fp2 = (0.93 * M_pi)*(0.93 * M_pi);
236 double term = ((
kGF2 * fp2) / (4.0 *
kPi2)) *
237 ((E * (1.0 - y)) /
sqrt(y*E * y*E + Q2)) *
238 (1.0 - Q2 / (4.0 * E*E * (1.0 - y)));
247 const InitialState & init_state = interaction -> InitState();
252 double Q2 = kinematics.
Q2();
253 double y = kinematics.
y();
254 double MT = init_state.
Tgt().
Mass();
256 double W2 = MT*MT - Q2 + 2.0 * y * E * MT;
257 double arg = (2.0*MT*(y*E - M_pi) - Q2 - M_pi*M_pi)*(2.0*MT*(y*E + M_pi) - Q2 - M_pi*M_pi);
258 if (arg < 0)
return arg;
281 if (!proc_info.
IsWeak())
return false;
283 if (!(target.
A()>1))
return false;
308 fCos8c2 = TMath::Power(TMath::Cos(thc), 2);
Cross Section Calculation Interface.
bool IsWeakCC(void) const
bool IsNeutrino(int pdgc)
double J(double q0, double q3, double Enu, double ml)
THE MAIN GENIE PROJECT NAMESPACE
Cross Section Integrator Interface.
bool fRSPionXSec
Use Rein-Sehgal "style" pion-nucleon xsecs.
double Q2(const Interaction *const i)
static const double fermi
Generated/set kinematical variables for an event.
double PionNucleonXSec(double Epion, bool get_total, bool isChargedPion=true)
double fRo
nuclear size scale parameter
virtual ~BergerSehgalCOHPiPXSec2015()
double x(bool selected=false) const
enum genie::EKinePhaseSpace KinePhaseSpace_t
double PionCOMAbsMomentum(const Interaction *i) const
double y(bool selected=false) const
BergerSehgalCOHPiPXSec2015()
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
#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)
double ExactKinematicTerm(const Interaction *i) const
double fCos8c2
cos^2(Cabibbo angle)
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
void Configure(const Registry &config)
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
const XSecIntegratorI * fXSecIntegrator
static const double kPionMass
bool HitNucIsSet(void) const
Var Sqrt(const Var &v)
Use to take sqrt of a var.
A registry. Provides the container for algorithm configuration parameters.
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
assert(nhit_max >=nhit_nbins)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) 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
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
Root of GENIE utility namespaces.
const UInt_t kISkipProcessChk
if set, skip process validity checks
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double Integral(const Interaction *i) const
Initial State information.
int PionNucleusXSec(double tpi, double ppistar, double t_new, double A, double &tpilow, double &siglow, double &tpihigh, double &sighigh)
bool IsCoherent(void) const
static const double kPionMass2
const Algorithm * SubAlg(const RgKey ®istry_key) const