19 #include <Math/IFunction.h>
20 #include <Math/IntegratorMultiDim.h>
21 #include <Math/AdaptiveIntegratorMultiDim.h>
24 #include "Framework/Conventions/GBuild.h"
44 using namespace genie;
45 using namespace genie::constants;
46 using namespace genie::units;
112 << Enu <<
" GeV) = " << xsec/(1E-38 *
cm2)<<
" x 1E-38 cm^2";
136 <<
"Finding cache branch with key: " << key;
141 <<
"No cached ResSPP v-production data for input neutrino"
142 <<
" (pdgc: " << nu_pdgc <<
")";
144 <<
"Wait while computing/caching ResSPP production xsec first...";
148 LOG(
"SPPXSec",
pINFO) <<
"Done caching resonance xsec data";
150 <<
"Finding newly created cache branch with key: " << key;
153 assert(cache_branch);
160 double rxsec = (Enu<
fEMax-1) ? cbranch(Enu) : cbranch(
fEMax-1);
165 <<
"/free] (E="<< Enu <<
" GeV) = " << rxsec/(1E-38 *
genie::units::cm2) <<
" x 1E-38 cm^2";
179 <<
"*** Integrating d^3 XSec/dWdQ^2dCosTheta for Ch: "
185 if (ig_type == ROOT::Math::IntegrationMultiDim::kADAPTIVE)
187 ROOT::Math::AdaptiveIntegratorMultiDim * cast =
dynamic_cast<ROOT::Math::AdaptiveIntegratorMultiDim*
>( ig.GetIntegrator() );
191 ig.SetFunction(*func);
192 double kine_min[3] = { 0., 0., 0.};
193 double kine_max[3] = { 1., 1., 1.};
194 double xsec = ig.Integral(kine_min, kine_max)*(1E-38 *
units::cm2);
199 <<
"] (E="<< Enu <<
" GeV) = " << xsec <<
" x 1E-38 cm^2";
220 bool good_conf = true ;
235 LOG(
"SPPXSec",
pERROR) <<
"E max is required to be at least 20 GeV, you set " <<
fEMax <<
" GeV" ;
241 <<
"Invalid configuration: Exiting" ;
Cross Section Calculation Interface.
static SppChannel_t FromInteraction(const Interaction *interaction)
const KPhaseSpace & PhaseSpace(void) const
InteractionType_t InteractionTypeId(void) const
string fGSLIntgType
name of GSL numerical integrator
bool IsNeutrino(int pdgc)
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
double Threshold_SPP_iso(void) const
Energy limit for resonance single pion production on isoscalar nucleon.
static XSecSplineList * Instance()
double Evaluate(double x) const
bool fUsePauliBlocking
account for Pauli blocking?
enum genie::ESppChannel SppChannel_t
static string AsString(SppChannel_t channel)
Summary information for an interaction.
string CacheBranchName(SppChannel_t spp_channel, InteractionType_t it, int nu) const
bool BareXSecPreCalc(void) const
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static int InitStateNucleon(SppChannel_t channel)
static constexpr double cm2
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
const XSecAlgorithmI * fSinglePionProductionXSecModel
double func(double x, double y)
virtual bool ValidProcess(const Interaction *i) const =0
Can this cross section algorithm handle the input process?
CacheBranchI * FindCacheBranch(string key)
finding/adding cache branches
int fGSLMaxEval
GSL max evaluations.
static RunOpt * Instance(void)
Class that caches neutrino resonance SPP cross sections on free nucleons. This significantly speeds t...
void CacheResExcitationXSec(const Interaction *interaction) const
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
Target * TgtPtr(void) const
InitialState * InitStatePtr(void) const
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) 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
static Cache * Instance(void)
A simple cache branch storing the cached data in a TNtuple.
#define SLOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a short string (using the FUNCTION and...
const Spline * GetSpline(const XSecAlgorithmI *alg, const Interaction *i) const
List of cross section vs energy splines.
void Configure(const Registry &config)
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
enum genie::EInteractionType InteractionType_t
int fGSLMinEval
GSL min evaluations. Ignored by some integrators.
double Integrate(const XSecAlgorithmI *model, const Interaction *i) const
Initial State information.
double fGSLRelTol
required relative tolerance (error)