GENIEGenerator
Loading...
Searching...
No Matches
COHDNuXSec.cxx
Go to the documentation of this file.
1//____________________________________________________________________________
2/*
3 Copyright (c) 2003-2025, The GENIE Collaboration
4 For the full text of the license visit http://copyright.genie-mc.org
5
6 Author: Iker de Icaza <i.de-icaza-astiz \at sussex.ac.uk>
7 University of Sussex
8
9 Costas Andreopoulos <c.andreopoulos \at cern.ch>
10 University of Liverpool
11*/
12//____________________________________________________________________________
13
14#include <limits>
15
16#include <TMath.h>
17#include <Math/IFunction.h>
18#include <Math/Integrator.h>
19
26
27using namespace genie;
28using namespace genie::constants;
29using namespace genie::utils;
30
31//____________________________________________________________________________
33XSecIntegratorI("genie::COHDNuXSec")
34{
35
36}
37//____________________________________________________________________________
39XSecIntegratorI("genie::COHDNuXSec", config)
40{
41
42}
43//____________________________________________________________________________
48//____________________________________________________________________________
50 const XSecAlgorithmI * model, const Interaction * in) const
51{
52 if(!model->ValidProcess(in) ) return 0.;
53 if(!in->PhaseSpace().IsAboveThreshold()) return 0.;
54
55 Interaction interaction(*in);
56 interaction.SetBit(kISkipProcessChk);
57 interaction.SetBit(kISkipKinematicChk);
58
59 ROOT::Math::IntegrationOneDim::Type ig_type =
61
62 utils::gsl::dXSec_dEDNu_E func( model, & interaction, fDNuMass );
63 Range1D_t DNuEnergy = func.IntegrationRange();
64
65 ROOT::Math::Integrator ig( func, ig_type, fGSLAbsTol, fGSLRelTol, fGSLMaxSizeOfSubintervals );
66 double xsec = ig.Integral(DNuEnergy.min, DNuEnergy.max) * (1E-38 * units::cm2); // units: GeV^-2
67
68 const InitialState & init_state = in->InitState();
69 double Ev = init_state.ProbeE(kRfLab);
70 LOG("COHDNuXSec", pINFO)
71 << "XSec[COHDNu] (E = " << Ev << " GeV) = " << xsec/(units::cm2) << " cm^2";
72
73 return xsec;
74}
75//____________________________________________________________________________
81//____________________________________________________________________________
87//____________________________________________________________________________
89{
90 fDNuMass = 0.;
91 this->GetParam("Dark-NeutrinoMass", fDNuMass);
92
93 // Get GSL integration type & relative tolerance
94 this->GetParamDef("gsl-integration-type", fGSLIntgType, string("adaptive"));
95 this->GetParamDef("gsl-relative-tolerance", fGSLRelTol, 1E-2);
96 this->GetParamDef("gsl-absolute-tolerance", fGSLAbsTol, std::numeric_limits<double>::max());
97
98 int max_subint = 0 ;
99 this->GetParamDef("gsl-max-subintervals", max_subint, 500);
100 fGSLMaxSizeOfSubintervals = (unsigned int) max_subint ;
101
102 // unused parameters from XSecIntegratorI
104}
105//____________________________________________________________________________
#define pINFO
Definition Messenger.h:62
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
virtual void Configure(const Registry &config)
Definition Algorithm.cxx:62
bool GetParamDef(const RgKey &name, T &p, const T &def) const
void Configure(const Registry &config)
void LoadConfig(void)
virtual ~COHDNuXSec()
double Integrate(const XSecAlgorithmI *model, const Interaction *i) const
Initial State information.
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
Definition Interaction.h:56
const KPhaseSpace & PhaseSpace(void) const
Definition Interaction.h:73
const InitialState & InitState(void) const
Definition Interaction.h:69
bool IsAboveThreshold(void) const
Checks whether the interaction is above the energy threshold.
A simple [min,max] interval for doubles.
Definition Range1.h:43
A registry. Provides the container for algorithm configuration parameters.
Definition Registry.h:65
Cross Section Calculation Interface.
virtual bool ValidProcess(const Interaction *i) const =0
Can this cross section algorithm handle the input process?
int fGSLMinEval
GSL min evaluations. Ignored by some integrators.
string fGSLIntgType
name of GSL numerical integrator
unsigned int fGSLMaxSizeOfSubintervals
GSL maximum number of sub-intervals for 1D integrator.
int fGSLMaxEval
GSL max evaluations.
double fGSLRelTol
required relative tolerance (error)
double func(double x, double y)
Basic constants.
static constexpr double cm2
Definition Units.h:69
Simple functions for loading and reading nucleus dependent keys from config files.
ROOT::Math::IntegrationOneDim::Type Integration1DimTypeFromString(string type)
Definition GSLUtils.cxx:23
Root of GENIE utility namespaces.
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
Definition Interaction.h:48
@ kRfLab
Definition RefFrame.h:26
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition Interaction.h:47