INukeHadroData2014.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 <costas.andreopoulos \at stfc.ac.uk>, 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-2017, GENIE Neutrino MC Generator Collaboration
32  For the full text of the license visit http://copyright.genie-mc.org
33  or see $GENIE/LICENSE
34 
35 */
36 //____________________________________________________________________________
37 
38 #ifndef _INTRANUKE_HADRON_CROSS_SECTIONS_2014_H_
39 #define _INTRANUKE_HADRON_CROSS_SECTIONS_2014_H_
40 
42 #include "GHEP/GHepParticle.h"
43 #include "Numerical/BLI2D.h"
44 
45 class TGraph2D;
46 
47 namespace genie {
48 
49 class Spline;
50 
52 {
53 public:
54  static INukeHadroData2014 * 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 * XSecKpp_Elas (void) const { return fXSecKpp_Elas; }
100  const Spline * XSecKpN_Abs (void) const { return fXSecKpN_Abs; }
101  const Spline * XSecKpN_Tot (void) const { return fXSecKpN_Tot; }
102  const Spline * XSecGamp_fs (void) const { return fXSecGamp_fs; }
103  const Spline * XSecGamn_fs (void) const { return fXSecGamn_fs; }
104  const Spline * XSecGamN_Tot (void) const { return fXSecGamN_Tot; }
105  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
106  // hA mode hadron x-section splines
107  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
108  const Spline * FracPA_Tot (void) const { return fFracPA_Tot; }
109  const Spline * FracPA_Elas (void) const { return fFracPA_Elas; }
110  const Spline * FracPA_Inel (void) const { return fFracPA_Inel; }
111  const Spline * FracPA_CEx (void) const { return fFracPA_CEx; }
112  const Spline * FracPA_Abs (void) const { return fFracPA_Abs; }
113  const Spline * FracPA_PiPro (void) const { return fFracPA_PiPro; }
114  const Spline * FracNA_Tot (void) const { return fFracNA_Tot; }
115  const Spline * FracNA_Elas (void) const { return fFracNA_Elas; }
116  const Spline * FracNA_Inel (void) const { return fFracNA_Inel; }
117  const Spline * FracNA_CEx (void) const { return fFracNA_CEx; }
118  const Spline * FracNA_Abs (void) const { return fFracNA_Abs; }
119  const Spline * FracNA_PiPro (void) const { return fFracNA_PiPro; }
120  const Spline * FracKA_Tot (void) const { return fFracKA_Tot; }
121  const Spline * FracKA_Elas (void) const { return fFracKA_Elas; }
122  const Spline * FracKA_Inel (void) const { return fFracKA_Inel; }
123  const Spline * FracKA_Abs (void) const { return fFracKA_Abs; }
124 
125 
126  const BLI2DNonUnifGrid * hN2dXSecPP_Elas (void) const { return fhN2dXSecPP_Elas; }
127  const BLI2DNonUnifGrid * hN2dXSecNP_Elas (void) const { return fhN2dXSecNP_Elas; }
128  const BLI2DNonUnifGrid * hN2dXSecPipN_Elas (void) const { return fhN2dXSecPipN_Elas; }
129  const BLI2DNonUnifGrid * hN2dXSecPi0N_Elas (void) const { return fhN2dXSecPi0N_Elas; }
130  const BLI2DNonUnifGrid * hN2dXSecPimN_Elas (void) const { return fhN2dXSecPimN_Elas; }
131  const BLI2DNonUnifGrid * hN2dXSecKpN_Elas (void) const { return fhN2dXSecKpN_Elas; }
132  const BLI2DNonUnifGrid * hN2dXSecKpP_Elas (void) const { return fhN2dXSecKpP_Elas; }
133  const BLI2DNonUnifGrid * hN2dXSecPiN_CEx (void) const { return fhN2dXSecPiN_CEx; }
134  const BLI2DNonUnifGrid * hN2dXSecPiN_Abs (void) const { return fhN2dXSecPiN_Abs; }
139 
140  static double fMinKinEnergy; ///<
141  static double fMaxKinEnergyHA; ///<
142  static double fMaxKinEnergyHN; ///<
143 
144 private:
148 
149  void LoadCrossSections(void);
150 
151  void ReadhNFile(
152  string filename, double ke, int npoints, int & curr_point,
153  /*double * ke_array,*/ double * costh_array, double * xsec_array, int cols);
154 
156 
157  Spline * fXSecPipn_Tot; ///< pi+n hN x-section splines
161  Spline * fXSecPipp_Tot; ///< pi+p hN x-section splines
166  Spline * fXSecPi0n_Tot; ///< pi0n hN x-section splines
170  Spline * fXSecPi0p_Tot; ///< pi0p hN x-section splines
175  Spline * fXSecPp_Tot; ///< p/nN x-section splines
184  Spline * fXSecKpn_Elas; ///< K+N x-section splines
188  Spline * fFracPA_Tot; ///< N+A x-section splines
200  Spline * fFracKA_Tot; ///< K+A x-section splines
204  Spline * fXSecGamp_fs; ///< gamma A x-section splines
207  Spline * fXSecPp_Cmp; //compound nucleus splines
210 
211  TGraph2D * TPipA_Tot;
212  TGraph2D * TfracPipA_CEx;
213  TGraph2D * TfracPipA_Elas;
214  TGraph2D * TfracPipA_Inelas;
215  TGraph2D * TfracPipA_Abs;
216  TGraph2D * TfracPipA_PiPro;
217 
231 
232  //-- Sinleton cleaner
233  struct Cleaner {
239  }
240  }
241  };
242  friend struct Cleaner;
243 };
244 
245 } // genie namespace
246 #endif //_INTRANUKE_HADRON_CROSS_SECTIONS_2014_H_
247 
enum genie::EINukeFateHA_t INukeFateHA_t
const Spline * XSecPi0p_Abs(void) const
const Spline * XSecPipn_Tot(void) const
BLI2DNonUnifGrid * fhN2dXSecPi0N_Elas
const Spline * FracKA_Abs(void) const
const BLI2DNonUnifGrid * hN2dXSecGamPipN_Inelas(void) const
BLI2DNonUnifGrid * fhN2dXSecKpN_Elas
const Spline * FracNA_Elas(void) const
const Spline * XSecGamn_fs(void) const
const Spline * FracPA_Tot(void) const
const Spline * FracPA_Elas(void) const
const Spline * FracKA_Tot(void) const
const BLI2DNonUnifGrid * hN2dXSecKpP_Elas(void) const
#include "Numerical/GSFunc.h"
Definition: AlgCmp.h:26
const Spline * XSecPn_Reac(void) const
double FracADep(int hpdgc, INukeFateHA_t fate, double ke, int targA) const
const Spline * FracPA_Inel(void) const
A numeric analysis tool class for interpolating 1-D functions.
Definition: Spline.h:47
const BLI2DNonUnifGrid * hN2dXSecPiN_Abs(void) const
const Spline * XSecPipp_Tot(void) const
const Spline * FracNA_Inel(void) const
const Spline * XSecNn_Tot(void) const
const Spline * XSecPipp_Abs(void) const
const BLI2DNonUnifGrid * hN2dXSecPi0N_Elas(void) const
Spline * fXSecPi0p_Tot
pi0p hN x-section splines
Spline * fXSecPipp_Tot
pi+p hN x-section splines
const BLI2DNonUnifGrid * hN2dXSecPimN_Elas(void) const
const Spline * XSecKpN_Abs(void) const
const Spline * FracPA_Abs(void) const
BLI2DNonUnifGrid * fhN2dXSecPiN_Abs
const Spline * XSecPp_Reac(void) const
static INukeHadroData2014 * fInstance
BLI2DNonUnifGrid * fhN2dXSecPimN_Elas
BLI2DNonUnifGrid * fhN2dXSecKpP_Elas
Spline * fXSecKpn_Elas
K+N x-section splines.
const Spline * XSecPp_Elas(void) const
const BLI2DNonUnifGrid * hN2dXSecPiN_CEx(void) const
const Spline * FracKA_Inel(void) const
const BLI2DNonUnifGrid * hN2dXSecNP_Elas(void) const
const Spline * XSecKpn_Elas(void) const
const Spline * XSecPi0n_Elas(void) const
const Spline * XSecPi0p_Elas(void) const
BLI2DNonUnifGrid * fhN2dXSecPiN_CEx
Spline * fXSecGamp_fs
gamma A x-section splines
BLI2DNonUnifGrid * fhN2dXSecNP_Elas
Spline * fXSecPp_Tot
p/nN x-section splines
const BLI2DNonUnifGrid * hN2dXSecGamPi0P_Inelas(void) const
const Spline * FracKA_Elas(void) const
const Spline * XSecPi0n_Tot(void) const
const Spline * XSecPipn_CEx(void) const
BLI2DNonUnifGrid * fhN2dXSecGamPimP_Inelas
const Spline * XSecPipp_CEx(void) const
const Spline * FracNA_Abs(void) const
const Spline * FracPA_CEx(void) const
double Frac(int hpdgc, INukeFateHN_t fate, double ke, int targA=0, int targZ=0) const
const Spline * XSecPi0n_Reac(void) const
const BLI2DNonUnifGrid * hN2dXSecPipN_Elas(void) const
Spline * fFracPA_Tot
N+A x-section splines.
const BLI2DNonUnifGrid * hN2dXSecGamPimP_Inelas(void) const
const Spline * FracNA_PiPro(void) const
const Spline * XSecPn_Elas(void) const
BLI2DNonUnifGrid * fhN2dXSecGamPipN_Inelas
Spline * fXSecPipn_Tot
pi+n hN x-section splines
enum genie::EINukeFateHN_t INukeFateHN_t
const BLI2DNonUnifGrid * hN2dXSecPP_Elas(void) const
double XSec(int hpdgc, int tgt, int nprod, INukeFateHN_t rxnType, double ke, double costh) const
const Spline * XSecPi0p_Reac(void) const
p
Definition: test.py:228
const BLI2DNonUnifGrid * hN2dXSecGamPi0N_Inelas(void) const
const Spline * XSecPi0p_Tot(void) const
Spline * fXSecPi0n_Tot
pi0n hN x-section splines
const Spline * XSecKpp_Elas(void) const
const Spline * XSecPn_Tot(void) const
const Spline * XSecGamp_fs(void) const
const Spline * FracNA_CEx(void) const
const Spline * XSecPi0p_CEx(void) const
const Spline * XSecPp_Tot(void) const
BLI2DNonUnifGrid * fhN2dXSecGamPi0N_Inelas
const Spline * XSecGamN_Tot(void) const
BLI2DNonUnifGrid * fhN2dXSecPP_Elas
const Spline * XSecPi0n_CEx(void) const
const Spline * XSecPipp_Elas(void) const
double FracAIndep(int hpdgc, INukeFateHA_t fate, double ke) const
const Spline * FracPA_PiPro(void) const
void ReadhNFile(string filename, double ke, int npoints, int &curr_point, double *costh_array, double *xsec_array, int cols)
const Spline * XSecNn_Reac(void) const
const Spline * XSecPipn_Reac(void) const
const Spline * XSecPipn_Elas(void) const
const BLI2DNonUnifGrid * hN2dXSecKpN_Elas(void) const
STDHEP-like event record entry that can fit a particle or a nucleus.
Definition: GHepParticle.h:40
BLI2DNonUnifGrid * fhN2dXSecPipN_Elas
const Spline * XSecPipp_Reac(void) const
const Spline * FracNA_Tot(void) const
BLI2DNonUnifGrid * fhN2dXSecGamPi0P_Inelas
static INukeHadroData2014 * Instance(void)
const Spline * XSecKpN_Tot(void) const
double IntBounce(const GHepParticle *p, int target, int s1, INukeFateHN_t fate)
Spline * fFracKA_Tot
K+A x-section splines.
const Spline * XSecNn_Elas(void) const