29 class SachsFormFactors {
33 virtual ~SachsFormFactors() =
default;
38 virtual double GEp(
double Q2 ) = 0;
43 virtual double GEn(
double Q2 ) = 0;
48 virtual double GMp(
double Q2 ) = 0;
53 virtual double GMn(
double Q2 ) = 0;
59 virtual double tau(
double Q2 );
70 virtual double GEp(
double Q2 )
override final;
71 inline virtual double GEn(
double )
override final {
return 0.; }
72 virtual double GMp(
double Q2 )
override final;
73 virtual double GMn(
double Q2 )
override final;
78 {
return 1.0 / std::pow( 1.0 + Q2 /
Mv_ /
Mv_, 2 ); }
87 class BBBA05SachsFormFactors :
public SachsFormFactors {
91 BBBA05SachsFormFactors() {}
92 virtual ~BBBA05SachsFormFactors() =
default;
94 virtual double GEp(
double Q2 )
override final;
95 virtual double GEn(
double Q2 )
override final;
96 virtual double GMp(
double Q2 )
override final;
97 virtual double GMn(
double Q2 )
override final;
110 double bbba05_G(
double tau,
const std::vector< double >& a_coeffs,
111 const std::vector< double >& b_coeffs );
114 class AxialFormFactors {
117 AxialFormFactors() {}
118 virtual ~AxialFormFactors() =
default;
121 virtual double FA(
double Q2 ) = 0;
124 virtual double FP(
double Q2 ) = 0;
127 class DipoleAxialFormFactors :
public AxialFormFactors {
132 DipoleAxialFormFactors(
double gA,
double Ma ) :
gA_( gA ),
Ma_( Ma ) {}
133 virtual ~DipoleAxialFormFactors() =
default;
135 inline double FA(
double Q2 )
override final
136 {
return -
gA_ / std::pow( 1.0 + Q2 /
Ma_ /
Ma_, 2 ); }
138 double FP(
double Q2 )
override final;
150 class NucleonFormFactors {
153 NucleonFormFactors(
const JSON& config );
158 inline double F1(
double Q2 )
const
159 {
return this->
F1p( Q2 ) - this->
F1n( Q2 ); }
164 inline double F2(
double Q2 )
const
165 {
return this->
F2p( Q2 ) - this->
F2n( Q2 ); }
170 double F1p(
double Q2 )
const;
175 double F1n(
double Q2 )
const;
180 double F2p(
double Q2 )
const;
185 double F2n(
double Q2 )
const;
190 inline double FA(
double Q2 )
const {
return axial_ff_->FA( Q2 ); }
195 inline double FP(
double Q2 )
const {
return axial_ff_->FP( Q2 ); }
199 {
return sachs_ff_.get(); }
203 {
return axial_ff_.get(); }
207 std::shared_ptr< SachsFormFactors > sachs_ff_;
208 std::shared_ptr< AxialFormFactors > axial_ff_;
212 class TrivialSachsFormFactors :
public SachsFormFactors {
216 TrivialSachsFormFactors() {}
217 virtual ~TrivialSachsFormFactors() =
default;
219 virtual double GEp(
double Q2 )
override final;
220 virtual double GEn(
double Q2 )
override final;
221 virtual double GMp(
double Q2 )
override final;
222 virtual double GMn(
double Q2 )
override final;
225 inline virtual double tau(
double )
override final {
return 0.; }
229 class TrivialAxialFormFactors :
public AxialFormFactors {
233 TrivialAxialFormFactors() {}
234 virtual ~TrivialAxialFormFactors() =
default;
236 double FA(
double Q2 )
override final;
237 double FP(
double Q2 )
override final;