29#include <Math/IFunction.h>
30#include <Math/IntegratorMultiDim.h>
31#include "Math/AdaptiveIntegratorMultiDim.h"
62 LOG(
"DISXSec",
pDEBUG) <<
"*** Below energy threshold";
87 LOG(
"HEDISXSec",
pINFO) <<
"From XSecSplineList: XSec[HEDIS,free nucleon] (E = " << Ev <<
" GeV) = " << xsec;
90 LOG(
"HEDISXSec",
pINFO) <<
"XSec[HEDIS] (E = " << Ev <<
" GeV) = " << xsec;
102 LOG(
"HEDISXSec",
pDEBUG) <<
"X only kinematic range = [" << xl.
min <<
", " << xl.
max <<
"]";
103 LOG(
"HEDISXSec",
pDEBUG) <<
"Q2 only kinematic range = [" << Q2l.
min <<
", " << Q2l.
max <<
"]";
109 LOG(
"HEDISXSec",
pDEBUG) <<
"X kinematic+PDF range = [" << xl.
min <<
", " << xl.
max <<
"]";
110 LOG(
"HEDISXSec",
pDEBUG) <<
"Q2 kinematic+PDF range = [" << Q2l.
min <<
", " << Q2l.
max <<
"]";
114 (Q2l.
min >= 0. && Q2l.
max >= 0. && Q2l.
max >= Q2l.
min &&
117 if (!phsp_ok)
return 0.;
132 ROOT::Math::IntegratorMultiDim ig(*
func, ig_type, abstol, reltol,
fGSLMaxEval);
133 double kine_min[2] = { TMath::Log10(xl.
min), TMath::Log10(Q2l.
min) };
134 double kine_max[2] = {TMath::Log10(xl.
max), TMath::Log10(Q2l.
max) };
135 xsec = ig.Integral(kine_min, kine_max) * (1E-38 *
units::cm2);
140 LOG(
"HEDISXSec",
pINFO) <<
"XSec[HEDIS] (E = " << Ev <<
" GeV) = " << xsec * (1E+38/
units::cm2) <<
" x 1E-38 cm^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)
bool GetParamDef(const RgKey &name, T &p, const T &def) const
void Configure(const Registry &config)
double fSFQ2min
minimum value of Q2 for which SF tables are computed
double fSFXmin
minimum value of x for which SF tables are computed
double fSFQ2max
maximum value of Q2 for which SF tables are computed
double Integrate(const XSecAlgorithmI *model, const Interaction *i) const
XSecIntegratorI interface implementation.
Initial State information.
const Target & Tgt(void) const
double ProbeE(RefFrame_t rf) const
Target * TgtPtr(void) const
Summary information for an interaction.
string AsString(void) const
InitialState * InitStatePtr(void) const
const KPhaseSpace & PhaseSpace(void) const
const InitialState & InitState(void) const
Range1D_t XLim(void) const
x limits
bool IsAboveThreshold(void) const
Checks whether the interaction is above the energy threshold.
Range1D_t Q2Lim(void) const
Q2 limits.
A simple [min,max] interval for doubles.
A registry. Provides the container for algorithm configuration parameters.
A numeric analysis tool class for interpolating 1-D functions.
double Evaluate(double x) const
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
int HitNucPdg(void) const
bool IsNucleus(void) const
Cross Section Calculation Interface.
virtual bool ValidProcess(const Interaction *i) const =0
Can this cross section algorithm handle the input process?
string fGSLIntgType
name of GSL numerical integrator
int fGSLMaxEval
GSL max evaluations.
List of cross section vs energy splines.
bool SplineExists(const XSecAlgorithmI *alg, const Interaction *i) const
const Spline * GetSpline(const XSecAlgorithmI *alg, const Interaction *i) const
static XSecSplineList * Instance()
double func(double x, double y)
static constexpr double cm2
ROOT::Math::IntegrationMultiDim::Type IntegrationNDimTypeFromString(string type)
THE MAIN GENIE PROJECT NAMESPACE
const UInt_t kIAssumeFreeNucleon