GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
INukeHadroData2018.h
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*!
3 
4 \class genie::INukeHadroData
5 
6 \brief Singleton class to load & serve hadron x-section splines used by
7  GENIE's version of the INTRANUKE cascade MC.
8 
9  See $GENIE/src/HadronTransport/Intranuke.h for more details on the
10  INTRANUKE cascade MC developed primarity by S.Dytman and H.Gallagher
11  continuing older work from R.Edgecock, G.F.Pearce, W.A.Mann,
12  R.Merenyi and others.
13 
14  The hadron x-section data used to build the x-section splines stored
15  at this singleton are provided & maintained by Steve Dytman.
16  See the data files in $GENIE/data/hadron_xsec/ for more details on
17  Steve's data sources and applied corrections.
18  In a nutshell:
19  The h+N x-sections come mostly from the SAID (Arndt et al.) PWA fit
20  while the h+A x-sections come from a combination of Ashery, Carroll
21  data and extrapolations, and INC model results from Mashnik et al.
22  for h+Fe56.
23 
24 \author Costas Andreopoulos <c.andreopoulos \at cern.ch>, Rutherford Lab.
25  Steve Dytman <dytman+@pitt.edu>, Pittsburgh Univ.
26  Aaron Meyer <asm58@pitt.edu>, Pittsburgh Univ.
27  Alex Bell, Pittsburgh Univ.
28 
29 \created February 01, 2007
30 
31 \cpright Copyright (c) 2003-2024, The GENIE Collaboration
32  For the full text of the license visit http://copyright.genie-mc.org
33 
34 
35 */
36 //____________________________________________________________________________
37 
38 #ifndef _INTRANUKE_HADRON_CROSS_SECTIONS_2018_H_
39 #define _INTRANUKE_HADRON_CROSS_SECTIONS_2018_H_
40 
44 
45 class TGraph2D;
46 
47 namespace genie {
48 
49 class Spline;
50 
52 {
53 public:
54  static INukeHadroData2018 * Instance (void);
55 
56 // Note that, unlike most the rest of GENIE where everything is expressed
57 // in natural units, all x-section splines included here are evaluated in
58 // kinetic energies given in MeV and return the x-section value in mbarns
59 
60  double XSec (int hpdgc, int tgt, int nprod, INukeFateHN_t rxnType, double ke, double costh) const;
61  double XSec (int hpdgc, INukeFateHN_t fate, double ke, int targA, int targZ) const;
62  double FracADep (int hpdgc, INukeFateHA_t fate, double ke, int targA) const;
63  double FracAIndep (int hpdgc, INukeFateHA_t fate, double ke) const;
64  double Frac (int hpdgc, INukeFateHN_t fate, double ke, int targA=0, int targZ=0) const;
65  double IntBounce (const GHepParticle* p, int target, int s1, INukeFateHN_t fate);
66 
67 
68  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
69  // hN mode hadron x-section splines
70  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71  const Spline * XSecPipn_Tot (void) const { return fXSecPipn_Tot; }
72  const Spline * XSecPipn_CEx (void) const { return fXSecPipn_CEx; }
73  const Spline * XSecPipn_Elas (void) const { return fXSecPipn_Elas; }
74  const Spline * XSecPipn_Reac (void) const { return fXSecPipn_Reac; }
75  const Spline * XSecPipp_Tot (void) const { return fXSecPipp_Tot; }
76  const Spline * XSecPipp_CEx (void) const { return fXSecPipp_CEx; }
77  const Spline * XSecPipp_Elas (void) const { return fXSecPipp_Elas; }
78  const Spline * XSecPipp_Reac (void) const { return fXSecPipp_Reac; }
79  const Spline * XSecPipp_Abs (void) const { return fXSecPipd_Abs; }
80  const Spline * XSecPi0n_Tot (void) const { return fXSecPi0n_Tot; }
81  const Spline * XSecPi0n_CEx (void) const { return fXSecPi0n_CEx; }
82  const Spline * XSecPi0n_Elas (void) const { return fXSecPi0n_Elas; }
83  const Spline * XSecPi0n_Reac (void) const { return fXSecPi0n_Reac; }
84  const Spline * XSecPi0p_Tot (void) const { return fXSecPi0p_Tot; }
85  const Spline * XSecPi0p_CEx (void) const { return fXSecPi0p_CEx; }
86  const Spline * XSecPi0p_Elas (void) const { return fXSecPi0p_Elas; }
87  const Spline * XSecPi0p_Reac (void) const { return fXSecPi0p_Reac; }
88  const Spline * XSecPi0p_Abs (void) const { return fXSecPi0d_Abs; }
89  const Spline * XSecPp_Tot (void) const { return fXSecPp_Tot; }
90  const Spline * XSecPp_Elas (void) const { return fXSecPp_Elas; }
91  const Spline * XSecPp_Reac (void) const { return fXSecPp_Reac; }
92  const Spline * XSecPn_Tot (void) const { return fXSecPn_Tot; }
93  const Spline * XSecPn_Elas (void) const { return fXSecPn_Elas; }
94  const Spline * XSecPn_Reac (void) const { return fXSecPn_Reac; }
95  const Spline * XSecNn_Tot (void) const { return fXSecNn_Tot; }
96  const Spline * XSecNn_Elas (void) const { return fXSecNn_Elas; }
97  const Spline * XSecNn_Reac (void) const { return fXSecNn_Reac; }
98  const Spline * XSecKpn_Elas (void) const { return fXSecKpn_Elas; }
99  const Spline * XSecKpn_CEx (void) const { return fXSecKpn_CEx; }
100  const Spline * XSecKpp_Elas (void) const { return fXSecKpp_Elas; }
101  const Spline * XSecKpN_Abs (void) const { return fXSecKpN_Abs; } //not implemented
102  const Spline * XSecKpN_Tot (void) const { return fXSecKpN_Tot; }
103  const Spline * XSecGamp_fs (void) const { return fXSecGamp_fs; }
104  const Spline * XSecGamn_fs (void) const { return fXSecGamn_fs; }
105  const Spline * XSecGamN_Tot (void) const { return fXSecGamN_Tot; }
106  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107  // hA mode hadron x-section splines
108  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
109  const Spline * FracPA_Tot (void) const { return fFracPA_Tot; }
110  const Spline * FracPA_Elas (void) const { return fFracPA_Elas; }
111  const Spline * FracPA_Inel (void) const { return fFracPA_Inel; }
112  const Spline * FracPA_CEx (void) const { return fFracPA_CEx; }
113  const Spline * FracPA_Abs (void) const { return fFracPA_Abs; }
114  const Spline * FracPA_PiPro (void) const { return fFracPA_PiPro; }
115  const Spline * FracNA_Tot (void) const { return fFracNA_Tot; }
116  const Spline * FracNA_Elas (void) const { return fFracNA_Elas; }
117  const Spline * FracNA_Inel (void) const { return fFracNA_Inel; }
118  const Spline * FracNA_CEx (void) const { return fFracNA_CEx; }
119  const Spline * FracNA_Abs (void) const { return fFracNA_Abs; }
120  const Spline * FracNA_PiPro (void) const { return fFracNA_PiPro; }
121  const Spline * FracKA_Tot (void) const { return fFracKA_Tot; }
122  const Spline * FracKA_Elas (void) const { return fFracKA_Elas; }
123  const Spline * FracKA_Inel (void) const { return fFracKA_Inel; }
124  const Spline * FracKA_CEx (void) const { return fFracKA_CEx; }
125  const Spline * FracKA_Abs (void) const { return fFracKA_Abs; }
126 
127  const Spline * FracPA_Cmp (void) const { return fFracPA_Cmp; }
128  const Spline * FracNA_Cmp (void) const { return fFracNA_Cmp; } //suarez
129 
130 
131  const BLI2DNonUnifGrid * hN2dXSecPP_Elas (void) const { return fhN2dXSecPP_Elas; }
132  const BLI2DNonUnifGrid * hN2dXSecNP_Elas (void) const { return fhN2dXSecNP_Elas; }
133  const BLI2DNonUnifGrid * hN2dXSecPipN_Elas (void) const { return fhN2dXSecPipN_Elas; }
134  const BLI2DNonUnifGrid * hN2dXSecPi0N_Elas (void) const { return fhN2dXSecPi0N_Elas; }
135  const BLI2DNonUnifGrid * hN2dXSecPimN_Elas (void) const { return fhN2dXSecPimN_Elas; }
136  const BLI2DNonUnifGrid * hN2dXSecKpN_Elas (void) const { return fhN2dXSecKpN_Elas; }
137  const BLI2DNonUnifGrid * hN2dXSecKpP_Elas (void) const { return fhN2dXSecKpP_Elas; }
138  const BLI2DNonUnifGrid * hN2dXSecPiN_CEx (void) const { return fhN2dXSecPiN_CEx; }
139  const BLI2DNonUnifGrid * hN2dXSecPiN_Abs (void) const { return fhN2dXSecPiN_Abs; }
144 
145  static double fMinKinEnergy; ///<
146  static double fMaxKinEnergyHA; ///<
147  static double fMaxKinEnergyHN; ///<
148 
149 private:
153 
154  void LoadCrossSections(void);
155 
156  void ReadhNFile(
157  string filename, double ke, int npoints, int & curr_point,
158  /*double * ke_array,*/ double * costh_array, double * xsec_array, int cols);
159 
161 
162  Spline * fXSecPipn_Tot; ///< pi+n hN x-section splines
166  Spline * fXSecPipp_Tot; ///< pi+p hN x-section splines
171  Spline * fXSecPi0n_Tot; ///< pi0n hN x-section splines
175  Spline * fXSecPi0p_Tot; ///< pi0p hN x-section splines
180  Spline * fXSecPp_Tot; ///< p/nN x-section splines
189  Spline * fXSecKpn_Elas; ///< K+N x-section splines
194  Spline * fFracPA_Tot; ///< N+A x-section splines
206  Spline * fFracKA_Tot; ///< K+A x-section splines
211  Spline * fXSecGamp_fs; ///< gamma A x-section splines
214  Spline * fXSecPp_Cmp; ///< NN cmp (compound nucleus) fate
219 
220 // TGraph2D * TPipA_Tot;
221  TGraph2D * TfracPipA_CEx;
222 // TGraph2D * TfracPipA_Elas;
223  TGraph2D * TfracPipA_Inelas;
224  TGraph2D * TfracPipA_Abs;
225  TGraph2D * TfracPipA_PiPro;
226 
242 
243  //-- Sinleton cleaner
244  struct Cleaner {
250  }
251  }
252  };
253  friend struct Cleaner;
254 };
255 
256 } // genie namespace
257 #endif //_INTRANUKE_HADRON_CROSS_SECTIONS_2015_H_
258 
const Spline * XSecPipp_Elas(void) const
const Spline * XSecNn_Tot(void) const
const Spline * FracPA_Inel(void) const
const BLI2DNonUnifGrid * hN2dXSecGamPi0P_Inelas(void) const
const Spline * FracKA_Tot(void) const
Spline * fXSecPipp_Tot
pi+p hN x-section splines
const Spline * XSecPi0n_CEx(void) const
const Spline * FracPA_Tot(void) const
const BLI2DNonUnifGrid * hN2dXSecPipN_Elas(void) const
BLI2DNonUnifGrid * fhN2dXSecPiN_Abs
const Spline * XSecPi0p_Reac(void) const
const Spline * XSecPi0p_Abs(void) const
const Spline * XSecPi0p_Tot(void) const
double Frac(int hpdgc, INukeFateHN_t fate, double ke, int targA=0, int targZ=0) const
const BLI2DNonUnifGrid * hN2dXSecKpP_Elas(void) const
const Spline * XSecPipp_Tot(void) const
const Spline * XSecPp_Elas(void) const
const Spline * XSecPipn_CEx(void) const
Spline * fXSecPp_Tot
p/nN x-section splines
A numeric analysis tool class for interpolating 1-D functions.
Definition: Spline.h:58
const Spline * XSecPi0p_Elas(void) const
BLI2DNonUnifGrid * fhN2dXSecGamPimP_Inelas
const Spline * XSecPipn_Reac(void) const
const Spline * XSecGamn_fs(void) const
const Spline * FracNA_Abs(void) const
BLI2DNonUnifGrid * fhN2dXSecPi0N_Elas
BLI2DNonUnifGrid * fhN2dXSecPipN_Elas
const Spline * XSecGamp_fs(void) const
const Spline * FracKA_CEx(void) const
const Spline * XSecPipp_Abs(void) const
BLI2DNonUnifGrid * fhN2dXSecGamPi0N_Inelas
const Spline * XSecPp_Reac(void) const
const Spline * FracPA_PiPro(void) const
const BLI2DNonUnifGrid * hN2dXSecGamPimP_Inelas(void) const
const Spline * XSecPipn_Tot(void) const
BLI2DNonUnifGrid * fhN2dXSecKpP_Elas
const BLI2DNonUnifGrid * hN2dXSecPP_Elas(void) const
const Spline * FracPA_Cmp(void) const
const Spline * FracNA_PiPro(void) const
const Spline * FracKA_Elas(void) const
const Spline * FracNA_Cmp(void) const
BLI2DNonUnifGrid * fhN2dXSecNP_Elas
const Spline * FracNA_CEx(void) const
BLI2DNonUnifGrid * fhN2dXSecKpN_CEx
const Spline * FracNA_Elas(void) const
double FracADep(int hpdgc, INukeFateHA_t fate, double ke, int targA) const
const Spline * FracNA_Inel(void) const
const BLI2DNonUnifGrid * hN2dXSecNP_Elas(void) const
const Spline * XSecPi0n_Elas(void) const
void ReadhNFile(string filename, double ke, int npoints, int &curr_point, double *costh_array, double *xsec_array, int cols)
enum genie::EINukeFateHN_t INukeFateHN_t
const Spline * XSecKpN_Abs(void) const
const Spline * XSecPipp_CEx(void) const
const BLI2DNonUnifGrid * hN2dXSecGamPipN_Inelas(void) const
Spline * fXSecGamp_fs
gamma A x-section splines
const Spline * XSecKpp_Elas(void) const
const Spline * XSecKpn_CEx(void) const
const Spline * XSecPn_Tot(void) const
const Spline * XSecPp_Tot(void) const
const BLI2DNonUnifGrid * hN2dXSecPiN_CEx(void) const
const Spline * XSecNn_Elas(void) const
Spline * fXSecPp_Cmp
NN cmp (compound nucleus) fate.
const BLI2DNonUnifGrid * hN2dXSecPimN_Elas(void) const
const Spline * XSecPi0n_Reac(void) const
double FracAIndep(int hpdgc, INukeFateHA_t fate, double ke) const
const Spline * XSecPipn_Elas(void) const
Spline * fFracPA_Tot
N+A x-section splines.
const Spline * XSecNn_Reac(void) const
const Spline * XSecPipp_Reac(void) const
Spline * fFracKA_Tot
K+A x-section splines.
BLI2DNonUnifGrid * fhN2dXSecKpN_Abs
Spline * fXSecPipn_Tot
pi+n hN x-section splines
BLI2DNonUnifGrid * fhN2dXSecPP_Elas
const Spline * XSecKpN_Tot(void) const
const BLI2DNonUnifGrid * hN2dXSecKpN_Elas(void) const
const Spline * FracKA_Abs(void) const
BLI2DNonUnifGrid * fhN2dXSecPiN_CEx
const Spline * FracNA_Tot(void) const
const BLI2DNonUnifGrid * hN2dXSecPi0N_Elas(void) const
static INukeHadroData2018 * fInstance
const Spline * FracPA_CEx(void) const
BLI2DNonUnifGrid * fhN2dXSecKpN_Elas
const Spline * XSecPi0n_Tot(void) const
const Spline * FracPA_Elas(void) const
static INukeHadroData2018 * Instance(void)
BLI2DNonUnifGrid * fhN2dXSecGamPi0P_Inelas
const Spline * XSecPi0p_CEx(void) const
const Spline * XSecPn_Reac(void) const
const Spline * FracPA_Abs(void) const
Spline * fXSecKpn_Elas
K+N x-section splines.
Spline * fXSecPi0n_Tot
pi0n hN x-section splines
Spline * fXSecPi0p_Tot
pi0p hN x-section splines
BLI2DNonUnifGrid * fhN2dXSecPimN_Elas
const Spline * XSecGamN_Tot(void) const
STDHEP-like event record entry that can fit a particle or a nucleus.
Definition: GHepParticle.h:39
const BLI2DNonUnifGrid * hN2dXSecPiN_Abs(void) const
const BLI2DNonUnifGrid * hN2dXSecGamPi0N_Inelas(void) const
enum genie::EINukeFateHA_t INukeFateHA_t
double IntBounce(const GHepParticle *p, int target, int s1, INukeFateHN_t fate)
double XSec(int hpdgc, int tgt, int nprod, INukeFateHN_t rxnType, double ke, double costh) const
const Spline * FracKA_Inel(void) const
BLI2DNonUnifGrid * fhN2dXSecGamPipN_Inelas
const Spline * XSecKpn_Elas(void) const
const Spline * XSecPn_Elas(void) const