26 #include <Math/IFunction.h>
27 #include <Math/Integrator.h>
30 #include "Framework/Conventions/GBuild.h"
41 using namespace genie;
42 using std::ostringstream;
65 LOG(
"SMQELXSec",
pDEBUG) <<
"Beginning integrate";
74 LOG(
"SMQELXSec",
pDEBUG) <<
"*** Below energy threshold";
78 if(rQ2.
min<0 || rQ2.
max<0)
return 0;
105 double kine_min[2] = { 0, 0};
106 double kine_max[2] = { 1, 1};
113 xsec = ig.Integral(kine_min, kine_max) * (1E-38 *
units::cm2);
133 Registry r(
"SmithMonizQELCCXSec_specific",
false ) ;
134 r.
Set(
"sm_utils_algo",
RgAlg(
"genie::SmithMonizUtils",
"Default") ) ;
147 int max_size_of_subintervals;
148 GetParamDef(
"gsl-max-size-of-subintervals", max_size_of_subintervals, 40000);
160 this ->
SubAlg(
"sm_utils_algo") ) );
168 ROOT::Math::IBaseFunctionMultiDim(),
170 fInteraction(interaction)
197 double Q2 = (rQ2.max-rQ2.min)*xin[0]+rQ2.min;
198 Range1D_t rv = sm_utils->vQES_SM_lim(Q2);
199 double v = (rv.max-rv.min)*xin[1]+rv.
min;
200 double J = (rQ2.max-rQ2.min)*(rv.max-rv.min);
202 Kinematics * kinematics = fInteraction->KinePtr();
206 double xsec=fModel->XSec(fInteraction,
kPSQ2vfE);
213 ROOT::Math::IBaseFunctionMultiDim *
void SetInteraction(const Interaction *i)
Cross Section Calculation Interface.
Range1D_t Q2QES_SM_lim(void) const
const KPhaseSpace & PhaseSpace(void) const
ROOT::Math::IntegrationOneDim::Type Integration1DimTypeFromString(string type)
string fGSLIntgType
name of GSL numerical integrator
double J(double q0, double q3, double Enu, double ml)
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
ROOT::Math::IntegrationMultiDim::Type IntegrationNDimTypeFromString(string type)
double E_nu_thr_SM(void) const
A simple [min,max] interval for doubles.
double fGSLRelTol2D
required relative tolerance (error) for 2D integrator
Generated/set kinematical variables for an event.
unsigned int fGSLRule
GSL Gauss-Kronrod integration rule (only for GSL 1D adaptive type)
Range1D_t Limits(KineVar_t kvar) const
Return the kinematical variable limits.
string fGSLIntgType2D
name of GSL 2D numerical integrator
void Configure(const Registry &config)
Summary information for an interaction.
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double cm2
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
SmithMonizUtils * sm_utils
const Algorithm * GetAlgorithm(const AlgId &algid)
unsigned int NDim(void) const
SmithMonizUtils * sm_utils
double func(double x, double y)
virtual ~SmithMonizQELCCXSec()
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?
void SetKV(KineVar_t kv, double value)
int fGSLMaxEval
GSL max evaluations.
Contains auxiliary functions for Smith-Moniz model. .
static AlgFactory * Instance()
unsigned int fGSLMaxSizeOfSubintervals
GSL maximum number of sub-intervals for 1D integrator.
A registry. Provides the container for algorithm configuration parameters.
bool IsAboveThreshold(void) const
Checks whether the interaction is above the energy threshold.
double DoEval(const double *xin) const
const InitialState & InitState(void) const
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Target & Tgt(void) const
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
The GENIE Algorithm Factory.
void Set(RgIMapPair entry)
double ProbeE(RefFrame_t rf) const
static constexpr double m
const UInt_t kISkipProcessChk
if set, skip process validity checks
Initial State information.
double Integrate(const XSecAlgorithmI *model, const Interaction *i) const
XSecIntegratorI interface implementation.
double fGSLRelTol
required relative tolerance (error)
d2Xsec_dQ2dv(const XSecAlgorithmI *m, const Interaction *i)
const Algorithm * SubAlg(const RgKey ®istry_key) const