BBA03ELFormFactorsModel.cxx
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*
3  Copyright (c) 2003-2019, The GENIE Collaboration
4  For the full text of the license visit http://copyright.genie-mc.org
5  or see $GENIE/LICENSE
6 
7  Author: Costas Andreopoulos <costas.andreopoulos \at stfc.ac.uk>
8  University of Liverpool & STFC Rutherford Appleton Lab
9 
10  For the class documentation see the corresponding header file.
11 
12  Important revisions after version 2.0.0 :
13  @ Sep 19, 2009 - CA
14  Moved into the ElFF package from its previous location
15 
16 */
17 //____________________________________________________________________________
18 
19 #include <TMath.h>
20 
25 
26 using namespace genie;
27 
28 //____________________________________________________________________________
30 ELFormFactorsModelI("genie::BBA03ELFormFactorsModel")
31 {
32 
33 }
34 //____________________________________________________________________________
36 ELFormFactorsModelI("genie::BBA03ELFormFactorsModel", config)
37 {
38 
39 }
40 //____________________________________________________________________________
42 {
43 
44 }
45 //____________________________________________________________________________
46 double BBA03ELFormFactorsModel::Gep(const Interaction * interaction) const
47 {
48  double gep = 0;
49  double q2 = interaction->Kine().q2();
50 
51  if( TMath::Abs(q2) > fQ2Max ) {
52  double gepmx = this->BBA03Fit(-fQ2Max, 1., fGep);
53  double gmpmx = this->BBA03Fit(-fQ2Max, fMuP, fGmp);
54  double gmp = this->BBA03Fit(q2, fMuP, fGmp);
55  gep = gmp * (gepmx/gmpmx);
56  } else {
57  gep = this->BBA03Fit(q2, 1., fGep);
58  }
59  return gep;
60 }
61 //____________________________________________________________________________
62 double BBA03ELFormFactorsModel::Gmp(const Interaction * interaction) const
63 {
64  double q2 = interaction->Kine().q2();
65  double gmp = this->BBA03Fit(q2, fMuP, fGmp);
66  return gmp;
67 }
68 //____________________________________________________________________________
69 double BBA03ELFormFactorsModel::Gen(const Interaction * interaction) const
70 {
71  double q2 = interaction->Kine().q2();
72 
73  const Target & tgt = interaction->InitState().Tgt();
74 
75  double M = tgt.HitNucMass(); // Mnucl
76  double M2 = TMath::Power(M,2); // Mnucl^2
77  double t = -q2/(4*M2); // q2<0
78  double a = fGenA; // Krutov et al. parameter a
79  double b = fGenB; // Krutov et al. parameter b
80  double mv2 = fMv2; // elastic vector mass^2
81  double GD = 1./TMath::Power(1-q2/mv2,2.); // dipole form factor
82 
83  double gen = -1. * fMuN * a * t * GD / (1 + b*t);
84  return gen;
85 }
86 //____________________________________________________________________________
87 double BBA03ELFormFactorsModel::Gmn(const Interaction * interaction) const
88 {
89  double q2 = interaction->Kine().q2();
90  double gmn = this->BBA03Fit(q2, fMuN, fGmn);
91  return gmn;
92 }
93 //____________________________________________________________________________
95 {
96  Algorithm::Configure(config);
97  this->LoadConfig();
98 }
99 //____________________________________________________________________________
101 {
102  Algorithm::Configure(param_set);
103  this->LoadConfig();
104 }
105 //____________________________________________________________________________
107 {
108  //-- load BBA03 model parameters
109 
110  // BBA2003 fit coefficients
111  GetParam( "BBA03-Gep-a2", fGep.a2 ) ;
112  GetParam( "BBA03-Gep-a4", fGep.a4 ) ;
113  GetParam( "BBA03-Gep-a6", fGep.a6 ) ;
114  GetParam( "BBA03-Gep-a8", fGep.a8 ) ;
115  GetParam( "BBA03-Gep-a10", fGep.a10 ) ;
116  GetParam( "BBA03-Gep-a12", fGep.a12 ) ;
117 
118  GetParam( "BBA03-Gmp-a2", fGmp.a2 ) ;
119  GetParam( "BBA03-Gmp-a4", fGmp.a4 ) ;
120  GetParam( "BBA03-Gmp-a6", fGmp.a6 ) ;
121  GetParam( "BBA03-Gmp-a8", fGmp.a8 ) ;
122  GetParam( "BBA03-Gmp-a10", fGmp.a10 ) ;
123  GetParam( "BBA03-Gmp-a12", fGmp.a12 ) ;
124 
125  GetParam( "BBA03-Gmn-a2", fGmn.a2 ) ;
126  GetParam( "BBA03-Gmn-a4", fGmn.a4 ) ;
127  GetParam( "BBA03-Gmn-a6", fGmn.a6 ) ;
128  GetParam( "BBA03-Gmn-a8", fGmn.a8 ) ;
129  GetParam( "BBA03-Gmn-a10", fGmn.a10 ) ;
130  GetParam( "BBA03-Gmn-a12", fGmn.a12 ) ;
131 
132  // Krutov parameters
133  GetParam( "BBA03-Gen-a", fGenA ) ;
134  GetParam( "BBA03-Gen-b", fGenB ) ;
135 
136  // Q2max
137  GetParam( "BBA03-Q2Max", fQ2Max ) ;
138 
139  // vector mass
140  GetParam( "EL-Mv",fMv ) ;
141  fMv2 = TMath::Power(fMv,2);
142 
143  // anomalous magnetic moments
144  GetParam( "AnomMagnMoment-P", fMuP ) ;
145  GetParam( "AnomMagnMoment-N", fMuN ) ;
146 }
147 //____________________________________________________________________________
149  double q2, double g0, const BBA2003Fit_t & fit) const
150 {
151 // The BBA2003 inverse polynomizal fit function for Gep,Gmp,Gmn
152 // Inputs:
153 // q2 : momentum transfer, <0
154 // g0 : G(q2=0) -> Gep=1, Gmp=mup, Gmn=mun (mu:magnetic moment)
155 // fit : BBA2003 fit parameters for either Gep,Gmp,Gmn
156 
157  double Q2 = -q2;
158  double Q4 = Q2 * Q2;
159  double Q6 = Q4 * Q2;
160  double Q8 = Q6 * Q2;
161  double Q10 = Q8 * Q2;
162  double Q12 = Q10 * Q2;
163 
164  double g = g0 / (1. + fit.a2*Q2 + fit.a4*Q4 + fit.a6*Q6 +
165  fit.a8*Q8 + fit.a10*Q10 + fit.a12*Q12);
166  return g;
167 }
168 //____________________________________________________________________________
169 
double fMuP
Anomalous proton magnetic moment.
THE MAIN GENIE PROJECT NAMESPACE
Definition: GeneratorBase.h:8
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:991
double Gmp(const Interaction *interaction) const
Compute the elastic form factor G_{mp} for the input interaction.
double HitNucMass(void) const
Definition: Target.cxx:250
BBA2003Fit_t fGmn
BBA2003 fit coefficients for Gmn.
double fMv
Elactic vector mass.
Definition: config.py:1
double fQ2Max
Gep/Gmp assummed const for Q2 > 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.
Double_t q2[12][num]
Definition: f2_nu.C:137
Summary information for an interaction.
Definition: Interaction.h:56
double fMuN
Anomalous neutron magnetic moment.
double q2(bool selected=false) const
Definition: Kinematics.cxx:151
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:41
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:70
BBA2003Fit_t fGmp
BBA2003 fit coefficients for Gmp.
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:66
const hit & b
Definition: hits.cxx:21
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:67
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.