14#include "Framework/Conventions/GBuild.h"
61 const InitialState & init_state = interaction -> InitState();
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;
220 const InitialState & init_state = interaction -> InitState();
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)));
241 const InitialState & init_state = interaction -> InitState();
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);
#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
double ExactKinematicTerm(const Interaction *i) const
double fCos8c2
cos^2(Cabibbo angle)
double Integral(const Interaction *i) const
virtual ~BergerSehgalFMCOHPiPXSec2015()
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
const XSecIntegratorI * fXSecIntegrator
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
BergerSehgalFMCOHPiPXSec2015()
bool fRSPionXSec
Use Rein-Sehgal "style" pion-nucleon xsecs.
double PionCOMAbsMomentum(const Interaction *i) const
void Configure(const Registry &config)
double fRo
nuclear size scale parameter
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.
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 kPionMass
static const double kPi0Mass
bool IsNeutrino(int pdgc)
bool IsAntiNeutrino(int pdgc)
static constexpr double mb
static constexpr double fermi
Simple functions for loading and reading nucleus dependent keys from config files.
double InelasticPionNucleonXSec(double Epion, bool isChargedPion=true)
double TotalPionNucleonXSec(double Epion, bool isChargedPion=true)
int PionNucleusXSec(double tpi, double ppistar, double t_new, double A, double &tpilow, double &siglow, double &tpihigh, double &sighigh)
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