13 #include "Framework/Conventions/GBuild.h" 34 using namespace genie;
51 LOG(
"NewQELXSec",
pDEBUG) <<
"Beginning integrate";
59 model->
SubAlg(
"IntegralNuclearModel") );
73 .
GetString(
"IntegralNucleonBindingMode" );
90 double abstol = 1
e-16;
99 double kine_min[2] = { cos_theta_0_lim.
min, phi_0_lim.
min };
100 double kine_max[2] = { cos_theta_0_lim.
max, phi_0_lim.
max };
105 double xsec_total = ig.Integral(kine_min, kine_max);
119 .
GetDouble(
"IntegralNuclearInfluenceCutoffEnergy");
122 if ( !tgt->
IsNucleus() || probeE > E_lab_cutoff ) {
132 double xsec_total = ig.Integral(kine_min, kine_max);
142 double xsec_sum = 0.;
148 TVector3 vertex_pos = vtx_gen->
GenerateVertex( interaction, tgt->
A() );
149 double radius = vertex_pos.Mag();
159 double xsec = ig.Integral(kine_min, kine_max);
194 GetParamDef(
"VertexGenAlg", vertexGenID,
RgAlg(
"genie::VertexGenerator",
"Default") );
211 : fXSecModel( xsec_model ), fInteraction( new
Interaction(*interaction) ),
212 fHitNucleonBindingMode( binding_mode ),
fMinAngleEM( min_angle_EM )
254 double cos_theta0 = xin[0];
255 double phi0 = xin[1];
258 double dummy_Eb = 0.;
Cross Section Calculation Interface.
TVector3 GenerateVertex(const Interaction *in, double A) const
bool fAverageOverNucleons
Interaction * GetInteractionPtr()
THE MAIN GENIE PROJECT NAMESPACE
Cross Section Integrator Interface.
ROOT::Math::IntegrationMultiDim::Type IntegrationNDimTypeFromString(string type)
A simple [min,max] interval for doubles.
double Integrate(const XSecAlgorithmI *model, const Interaction *i) const
XSecIntegratorI interface implementation.
bool IsNucleus(void) const
Simple utilities for integrating GSL in the GENIE framework.
Pure abstract base class. Defines the NuclearModelI interface to be implemented by any physics model ...
void SetHitNucPosition(double r)
RgDbl GetDouble(RgKey key) const
double DoEval(const double *xin) const
double ComputeFullQELPXSec(Interaction *interaction, const NuclearModelI *nucl_model, const XSecAlgorithmI *xsec_model, double cos_theta_0, double phi_0, double &Eb, QELEvGen_BindingMode_t hitNucleonBindingMode, double min_angle_EM=0., bool bind_nucleon=true)
enum genie::EQELEvGenBindingMode QELEvGen_BindingMode_t
void Configure(const Registry &config)
virtual const Registry & GetConfig(void) const
unsigned int NDim(void) const
Summary information for an interaction.
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
const Interaction & GetInteraction() const
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
const Algorithm * GetAlgorithm(const AlgId &algid)
static int max(int a, int b)
const NuclearModelI * fNuclModel
QELEvGen_BindingMode_t fHitNucleonBindingMode
Algorithm ID (algorithm name + configuration set name)
const XSecAlgorithmI * fXSecModel
void SetRemovalEnergy(double E) const
FullQELdXSec(const XSecAlgorithmI *xsec_model, const Interaction *interaction, QELEvGen_BindingMode_t binding_mode, double min_angle_EM)
RgStr GetString(RgKey key) const
static AlgFactory * Instance()
void SetMomentum3(const TVector3 &mom) const
A registry. Provides the container for algorithm configuration parameters.
const UInt_t kIAssumeFreeNucleon
QELEvGen_BindingMode_t StringToQELBindingMode(const std::string &mode_str)
Target * TgtPtr(void) const
virtual bool ValidProcess(const Interaction *i) const =0
Can this cross section algorithm handle the input process?
virtual bool GenerateNucleon(const Target &) const =0
const InitialState & InitState(void) const
bool GetParamDef(const RgKey &name, T &p, const T &def) const
Interaction * fInteraction
The GENIE Algorithm Factory.
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
double ProbeE(RefFrame_t rf) const
const UInt_t kISkipProcessChk
if set, skip process validity checks
const Algorithm * SubAlg(const RgKey ®istry_key) const