GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BBA03ELFormFactorsModel.cxx
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*
3  Copyright (c) 2003-2024, The GENIE Collaboration
4  For the full text of the license visit http://copyright.genie-mc.org
5 
6  Costas Andreopoulos <c.andreopoulos \at cern.ch>
7  University of Liverpool
8 */
9 //____________________________________________________________________________
10 
11 #include <TMath.h>
12 
17 
18 using namespace genie;
19 
20 //____________________________________________________________________________
22 ELFormFactorsModelI("genie::BBA03ELFormFactorsModel")
23 {
24 
25 }
26 //____________________________________________________________________________
28 ELFormFactorsModelI("genie::BBA03ELFormFactorsModel", config)
29 {
30 
31 }
32 //____________________________________________________________________________
34 {
35 
36 }
37 //____________________________________________________________________________
38 double BBA03ELFormFactorsModel::Gep(const Interaction * interaction) const
39 {
40  double gep = 0;
41  double q2 = interaction->Kine().q2();
42 
43  if( TMath::Abs(q2) > fQ2Max ) {
44  double gepmx = this->BBA03Fit(-fQ2Max, 1., fGep);
45  double gmpmx = this->BBA03Fit(-fQ2Max, fMuP, fGmp);
46  double gmp = this->BBA03Fit(q2, fMuP, fGmp);
47  gep = gmp * (gepmx/gmpmx);
48  } else {
49  gep = this->BBA03Fit(q2, 1., fGep);
50  }
51  return gep;
52 }
53 //____________________________________________________________________________
54 double BBA03ELFormFactorsModel::Gmp(const Interaction * interaction) const
55 {
56  double q2 = interaction->Kine().q2();
57  double gmp = this->BBA03Fit(q2, fMuP, fGmp);
58  return gmp;
59 }
60 //____________________________________________________________________________
61 double BBA03ELFormFactorsModel::Gen(const Interaction * interaction) const
62 {
63  double q2 = interaction->Kine().q2();
64 
65  const Target & tgt = interaction->InitState().Tgt();
66 
67  double M = tgt.HitNucMass(); // Mnucl
68  double M2 = TMath::Power(M,2); // Mnucl^2
69  double t = -q2/(4*M2); // q2<0
70  double a = fGenA; // Krutov et al. parameter a
71  double b = fGenB; // Krutov et al. parameter b
72  double mv2 = fMv2; // elastic vector mass^2
73  double GD = 1./TMath::Power(1-q2/mv2,2.); // dipole form factor
74 
75  double gen = -1. * fMuN * a * t * GD / (1 + b*t);
76  return gen;
77 }
78 //____________________________________________________________________________
79 double BBA03ELFormFactorsModel::Gmn(const Interaction * interaction) const
80 {
81  double q2 = interaction->Kine().q2();
82  double gmn = this->BBA03Fit(q2, fMuN, fGmn);
83  return gmn;
84 }
85 //____________________________________________________________________________
87 {
88  Algorithm::Configure(config);
89  this->LoadConfig();
90 }
91 //____________________________________________________________________________
92 void BBA03ELFormFactorsModel::Configure(string param_set)
93 {
94  Algorithm::Configure(param_set);
95  this->LoadConfig();
96 }
97 //____________________________________________________________________________
99 {
100  //-- load BBA03 model parameters
101 
102  // BBA2003 fit coefficients
103  GetParam( "BBA03-Gep-a2", fGep.a2 ) ;
104  GetParam( "BBA03-Gep-a4", fGep.a4 ) ;
105  GetParam( "BBA03-Gep-a6", fGep.a6 ) ;
106  GetParam( "BBA03-Gep-a8", fGep.a8 ) ;
107  GetParam( "BBA03-Gep-a10", fGep.a10 ) ;
108  GetParam( "BBA03-Gep-a12", fGep.a12 ) ;
109 
110  GetParam( "BBA03-Gmp-a2", fGmp.a2 ) ;
111  GetParam( "BBA03-Gmp-a4", fGmp.a4 ) ;
112  GetParam( "BBA03-Gmp-a6", fGmp.a6 ) ;
113  GetParam( "BBA03-Gmp-a8", fGmp.a8 ) ;
114  GetParam( "BBA03-Gmp-a10", fGmp.a10 ) ;
115  GetParam( "BBA03-Gmp-a12", fGmp.a12 ) ;
116 
117  GetParam( "BBA03-Gmn-a2", fGmn.a2 ) ;
118  GetParam( "BBA03-Gmn-a4", fGmn.a4 ) ;
119  GetParam( "BBA03-Gmn-a6", fGmn.a6 ) ;
120  GetParam( "BBA03-Gmn-a8", fGmn.a8 ) ;
121  GetParam( "BBA03-Gmn-a10", fGmn.a10 ) ;
122  GetParam( "BBA03-Gmn-a12", fGmn.a12 ) ;
123 
124  // Krutov parameters
125  GetParam( "BBA03-Gen-a", fGenA ) ;
126  GetParam( "BBA03-Gen-b", fGenB ) ;
127 
128  // Q2max
129  GetParam( "BBA03-Q2Max", fQ2Max ) ;
130 
131  // vector mass
132  GetParam( "EL-Mv",fMv ) ;
133  fMv2 = TMath::Power(fMv,2);
134 
135  // anomalous magnetic moments
136  GetParam( "AnomMagnMoment-P", fMuP ) ;
137  GetParam( "AnomMagnMoment-N", fMuN ) ;
138 }
139 //____________________________________________________________________________
141  double q2, double g0, const BBA2003Fit_t & fit) const
142 {
143 // The BBA2003 inverse polynomizal fit function for Gep,Gmp,Gmn
144 // Inputs:
145 // q2 : momentum transfer, <0
146 // g0 : G(q2=0) -> Gep=1, Gmp=mup, Gmn=mun (mu:magnetic moment)
147 // fit : BBA2003 fit parameters for either Gep,Gmp,Gmn
148 
149  double Q2 = -q2;
150  double Q4 = Q2 * Q2;
151  double Q6 = Q4 * Q2;
152  double Q8 = Q6 * Q2;
153  double Q10 = Q8 * Q2;
154  double Q12 = Q10 * Q2;
155 
156  double g = g0 / (1. + fit.a2*Q2 + fit.a4*Q4 + fit.a6*Q6 +
157  fit.a8*Q8 + fit.a10*Q10 + fit.a12*Q12);
158  return g;
159 }
160 //____________________________________________________________________________
double fMuP
Anomalous proton magnetic moment.
static constexpr double g
Definition: Units.h:144
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1077
double Gmp(const Interaction *interaction) const
Compute the elastic form factor G_{mp} for the input interaction.
double HitNucMass(void) const
Definition: Target.cxx:233
BBA2003Fit_t fGmn
BBA2003 fit coefficients for Gmn.
double fMv
Elactic vector mass.
std::mt19937 gen(rd())
double fQ2Max
Gep/Gmp assummed const for Q2 &gt; Q2Max.
BBA2003Fit_t fGep
BBA2003 fit coefficients for Gep.
double Gep(const Interaction *interaction) const
Compute the elastic form factor G_{ep} for the input interaction.
static constexpr double b
Definition: Units.h:78
Summary information for an interaction.
Definition: Interaction.h:56
double fMuN
Anomalous neutron magnetic moment.
double q2(bool selected=false) const
Definition: Kinematics.cxx:141
double Gen(const Interaction *interaction) const
Compute the elastic form factor G_{en} for the input interaction.
Pure abstract base class. Defines the ELFormFactorsModelI interface to be implemented by any algorith...
const double a
double fGenB
Krutov parameterization for Gen.
const Kinematics & Kine(void) const
Definition: Interaction.h:71
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
BBA2003Fit_t fGmp
BBA2003 fit coefficients for Gmp.
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:65
const InitialState & InitState(void) const
Definition: Interaction.h:69
void Configure(const Registry &config)
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
Definition: InitialState.h:66
double fGenA
Krutov parameterization for Gen.
double fMv2
Elactic vector mass.
double BBA03Fit(double q2, double g0, const BBA2003Fit_t &fp) const
double Gmn(const Interaction *interaction) const
Compute the elastic form factor G_{mn} for the input interaction.