12 #include <Math/Integrator.h>
29 using namespace genie;
30 using namespace genie::utils;
31 using namespace genie::constants;
57 const InitialState & init_state = interaction -> InitState();
58 const Kinematics & kinematics = interaction -> Kine();
63 double Q2 = kinematics.
Q2();
71 LOG(
"CEvNS",
pDEBUG) <<
"M = " << M <<
" GeV";
74 double TA = Q2*E / (2*E*M+
Q2);
77 <<
"Q2 = " << Q2 <<
" GeV^2, E = " << E <<
" GeV "
78 <<
"--> TA = " << TA <<
" GeV";
100 <<
"Nuclear density moments:"
101 <<
" <Rn^2> = " << Rn2 <<
" fm^2,"
102 <<
" <Rn^4> = " << Rn4 <<
" fm^4,"
103 <<
" <Rn^6> = " << Rn6 <<
" fm^6";
115 double Fn = N * (1 - Q2*Rn2/6. + Q4*Rn4/120. - Q6*Rn6/5040.);
117 double F = (Fn - (1-4*
fSin2thw)*Fp);
118 F = TMath::Max(0.,F);
122 <<
"Form factors: Fp = " << Fp <<
", Fn = " << Fn <<
", F = " << F;
125 double const_factor = 0.125*
kGF2/
kPi;
126 double kinematic_term = M * (2 - 2*TA/E + TA2/E2 - M*TA/E2);
127 kinematic_term = TMath::Max(0., kinematic_term);
130 <<
"kinematic term: " << kinematic_term;
132 double xsec = const_factor * kinematic_term * F2;
135 <<
"dsig[vA,CEvNS]/dTA (Ev = "
136 << E <<
" GeV, Q2 = "<< Q2 <<
" GeV^2; TA = " << TA <<
" GeV) = "
146 J = 2*E2*M / TMath::Power(2*E*M+Q2, 2.);
167 ROOT::Math::IBaseFunctionOneDim * integrand =
new
170 ROOT::Math::IntegrationOneDim::Type ig_type =
177 ROOT::Math::Integrator ig(
203 const Target & target = init_state.
Tgt();
224 this->
GetParam(
"WeinbergAngle", thw);
225 fSin2thw = TMath::Power(TMath::Sin(thw), 2.);
228 "nuclear-density-moment-gsl-upper-limit",
232 "nuclear-density-moment-gsl-rel-tol",
236 "nuclear-density-moment-gsl-abs-tol",
240 "nuclear-density-moment-gsl-max-eval",
Cross Section Calculation Interface.
virtual ~PattonCEvNSPXSec()
ROOT::Math::IntegrationOneDim::Type Integration1DimTypeFromString(string type)
double J(double q0, double q3, double Enu, double ml)
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double fNuclDensMomentCalc_AbsoluteTolerance
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double fNuclDensMomentCalc_RelativeTolerance
bool IsNucleus(void) const
Generated/set kinematical variables for an event.
int fNuclDensMomentCalc_MaxNumOfEvaluations
const XSecIntegratorI * fXSecIntegrator
cross section integrator
enum genie::EKinePhaseSpace KinePhaseSpace_t
double Integral(const Interaction *i) const
double Radius(int A, double Ro=constants::kNucRo)
void Configure(const Registry &config)
double NuclearDensityMoment(int A, int k) const
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...
bool IsCoherentElastic(void) const
static constexpr double A
static constexpr double cm2
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
double fSin2thw
sin^2(weinberg angle)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
double fNuclDensMomentCalc_UpperIntegrationLimit
static PDGLibrary * Instance(void)
A registry. Provides the container for algorithm configuration parameters.
Integrand for the calculation of the k^th nuclear density moment: {0}^{} {A}(r) r^k d^{3}r where {A}(...
int IonPdgCode(int A, int Z)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
static constexpr double fm
TParticlePDG * Find(int pdgc, bool must_exist=true)
double Q2(bool selected=false) const
bool GetParamDef(const RgKey &name, T &p, const T &def) 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
const UInt_t kISkipProcessChk
if set, skip process validity checks
Initial State information.
const Algorithm * SubAlg(const RgKey ®istry_key) const