11 #include <Math/IFunction.h>
12 #include <Math/IntegratorMultiDim.h>
13 #include "Math/AdaptiveIntegratorMultiDim.h"
15 #include "Framework/Conventions/GBuild.h"
34 using namespace genie;
35 using namespace genie::constants;
36 using namespace genie::controls;
37 using namespace genie::utils;
60 LOG(
"SKXSec",
pDEBUG) <<
"Integrating the Alam Simo Athar Vacas model";
68 LOG(
"SKXSec",
pDEBUG) <<
"*** Below energy threshold";
79 init_state.
Tgt().
Z() : init_state.
Tgt().
N();
92 <<
"From XSecSplineList: XSec[SK,free nucleon] (E = " << Ev <<
" GeV) = " << xsec;
95 LOG(
"SKXSec",
pINFO) <<
"XSec[SK] (E = " << Ev <<
" GeV) = " << xsec;
113 double tmax = Enu - mk - ml;
116 <<
"Lepton/Kaon KE integration range = [" << 0.0 <<
", " << tmax <<
"]";
126 ROOT::Math::IBaseFunctionMultiDim *
func =
128 double kine_min[3] = { zero, zero, -20 };
129 double kine_max[3] = { tmax, tmax, 0.69314718056 };
131 ROOT::Math::IntegrationMultiDim::Type ig_type =
137 xsec = ig.Integral(kine_min, kine_max) * (1E-38 *
units::cm2);
173 ROOT::Math::IBaseFunctionMultiDim(),
203 double Enu = fInteraction->InitState().ProbeE(
kRfLab);
207 else if( Enu > 1.0 ) phikq =
constants::kPi*(0.5 + 0.025*(Enu-1.0));
209 Kinematics * kinematics = fInteraction->KinePtr();
214 double log_oneminuscostheta = xin[2];
215 double cos_theta_l = 1.0 - TMath::Exp(log_oneminuscostheta);
216 double J = 1.0 - cos_theta_l;
218 kinematics->SetKV(
kKVTl, T_l);
219 kinematics->SetKV(
kKVTk, T_k);
220 kinematics->SetKV(
kKVctl, cos_theta_l);
223 double xsec = fModel->XSec(fInteraction);
225 <<
"t_l = " << T_l <<
" t_k = " << T_k
226 <<
" costhetal = " << cos_theta_l <<
" phikq = " << phikq
227 <<
" enu = " << Enu <<
" Xsec = " << xsec;
236 ROOT::Math::IBaseFunctionMultiDim *
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
Cross Section Calculation Interface.
const KPhaseSpace & PhaseSpace(void) const
string fGSLIntgType
name of GSL numerical integrator
double J(double q0, double q3, double Enu, double ml)
Cross Section Integrator Interface.
ROOT::Math::IntegrationMultiDim::Type IntegrationNDimTypeFromString(string type)
int HitNucPdg(void) const
bool SplineExists(const XSecAlgorithmI *alg, const Interaction *i) const
A numeric analysis tool class for interpolating 1-D functions.
bool IsNucleus(void) const
Generated/set kinematical variables for an event.
double Mass(Resonance_t res)
resonance mass (GeV)
static XSecSplineList * Instance()
double Evaluate(double x) const
int FSPrimLeptonPdg(void) const
final state primary lepton pdg
Summary information for an interaction.
int StrangeHadronPdg(void) const
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double cm2
AlamSimoAtharVacasSKXSec()
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
d3Xsec_dTldTkdCosThetal(const XSecAlgorithmI *m, const Interaction *i)
double func(double x, double y)
double Integrate(const XSecAlgorithmI *model, const Interaction *i) const
void Configure(const Registry &config)
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
virtual bool ValidProcess(const Interaction *i) const =0
Can this cross section algorithm handle the input process?
virtual ~AlamSimoAtharVacasSKXSec()
~d3Xsec_dTldTkdCosThetal()
int fGSLMaxEval
GSL max evaluations.
static PDGLibrary * Instance(void)
double DoEval(const double *xin) const
unsigned int NDim(void) const
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
const XclsTag & ExclTag(void) const
Target * TgtPtr(void) const
bool IsAboveThreshold(void) const
Checks whether the interaction is above the energy threshold.
InitialState * InitStatePtr(void) const
TParticlePDG * Find(int pdgc, bool must_exist=true)
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Target & Tgt(void) const
const Spline * GetSpline(const XSecAlgorithmI *alg, const Interaction *i) const
List of cross section vs energy splines.
double ProbeE(RefFrame_t rf) const
static constexpr double m
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.
double fGSLRelTol
required relative tolerance (error)