GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GiBUURESFormFactor.h
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*!
3 
4 \class genie::GiBUURESFormFactor
5 
6 \brief Singleton to load and serve data tables provided by the GiBUU group
7 
8 \ref http://gibuu.physik.uni-giessen.de/GiBUU
9  Specific references for each piece of data included in given below.
10 
11 \author Costas Andreopoulos <c.andreopoulos \at cern.ch>
12  University of Liverpool
13 
14 \created May 30, 2009
15 
16 \cpright Copyright (c) 2003-2024, The GENIE Collaboration
17  For the full text of the license visit http://copyright.genie-mc.org
18 */
19 //____________________________________________________________________________
20 
21 #ifndef _GIBUU_RES_FORM_FACTOR_H_
22 #define _GIBUU_RES_FORM_FACTOR_H_
23 
26 
27 namespace genie {
28 
29 class Spline;
30 
32 {
33 public:
34 
35  class FormFactors;
36 
37  // access GiBUURESFormFactor singleton instance
38  static GiBUURESFormFactor * Instance (void);
39 
40  // access form factor data
41  const FormFactors & FF(void) const;
42 
43  //
44  // Resonance form factors.
45  // Details given in Phys. Rev. C 79, 034601 (2009).
46  //
47  class FormFactors {
48 
49  public:
50 
51  FormFactors();
52  ~FormFactors();
53 
54  // the following is non-zero for I=1/2 (N) resonances
55  double C3V (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
56  double C4V (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
57  double C5V (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
58  double C6V (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
59  double C3A (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
60  double C4A (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
61  double C5A (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
62  double C6A (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
63 
64  // the following is non-zero for I=3/2 (Delta) resonances
65  double F1V (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
66  double F2V (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
67  double FA (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
68  double FP (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const;
69 
70  double Q2min (void) const { return fMinQ2; }
71  double Q2max (void) const { return fMaxQ2; }
72 
73  private:
74 
75  static double fMinQ2; ///< min Q2 for which resonance f/f data are given
76  static double fMaxQ2; ///< max Q2 for which resonance f/f data are given
77 
78  // The first array index is the resonance id.
79  // Tina provided GiBUU form factor data for 13 resonances given below along with
80  // the corresponding GENIE resonance ids
81  // GENIE Resonance_t as integer
82  // P33(1232) -> kP33_1232 0
83  // S11(1535) -> kS11_1535 1
84  // D13(1520) -> kD13_1520 2
85  // S11(1650) -> kS11_1650 3
86  // D15(1675) -> kD15_1675 5
87  // S31(1620) -> kS31_1620 6
88  // D33(1700) -> kD33_1700 7
89  // P11(1440) -> kP11_1440 8
90  // P13(1720) -> kP13_1720 10
91  // F15(1680) -> kF15_1680 11
92  // P31(1910) -> kP31_1910 12
93  // F35(1905) -> kF35_1905 14
94  // F37(1950) -> kF37_1950 15
95  // The remaining 3 array indices are:
96  // 0 1 2 0 1 0 1 2 3 4 5 6 7 8 9 10 11
97  // [CC,NC,EM][n,p][F1V,F2V,FA,FP,C3V,C4V,C5V,C6V,C3A,C4A,C5A,C6A]
98  // |-------------| for I=1/2 resonances
99  // |-------------------------------| for I=3/2 resonances
100 
101  static const int kNRes = 18;
102  static const int kNCurr = 3;
103  static const int kNHitNuc = 2;
104  static const int kNFFRes = 12;
105 
106  //! actual form factor data = f(Q2)
108 
109  //! func to retrieve interpolated form factor values
110  double FFRes (double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it, int ffid) const;
111 
112  //! load all form factor data tables
113  void LoadTables(void);
114 
115  friend class GiBUURESFormFactor;
116 
117  }; // FormFactors nested class
118 
119 private:
121  GiBUURESFormFactor(const GiBUURESFormFactor & gibuu_data);
123 
124  // load all data tables
125  void LoadTables(void);
126 
127  // singleton 'self'
129 
130  // form factor data
132 
133  // singleton cleaner
134  struct Cleaner {
140  }
141  }
142  };
143  friend struct Cleaner;
144 
145 }; // GiBUURESFormFactor class
146 
147 } // genie namespace
148 
149 #endif // _GIBUU_RES_FORM_FACTOR_H_
double F2V(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
double C3A(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
Singleton to load and serve data tables provided by the GiBUU group.
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1077
A numeric analysis tool class for interpolating 1-D functions.
Definition: Spline.h:58
static double fMinQ2
min Q2 for which resonance f/f data are given
Spline * fFFRes[kNRes][kNCurr][kNHitNuc][kNFFRes]
actual form factor data = f(Q2)
static GiBUURESFormFactor * Instance(void)
double C6V(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
enum genie::EResonance Resonance_t
double C4V(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
const FormFactors & FF(void) const
double C5V(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
double FA(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
double C6A(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
double FFRes(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it, int ffid) const
func to retrieve interpolated form factor values
static double fMaxQ2
max Q2 for which resonance f/f data are given
double F1V(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
double C3V(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
double C5A(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
static GiBUURESFormFactor * fInstance
double C4A(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
double FP(double Q2, Resonance_t res, int nucleon_pdg, InteractionType_t it) const
enum genie::EInteractionType InteractionType_t
void LoadTables(void)
load all form factor data tables