12 #include <Math/IntegratorMultiDim.h>
17 using namespace genie;
18 using namespace genie::mueloss;
19 using namespace genie::constants;
22 KokoulinPetrukhinModel::KokoulinPetrukhinModel() :
23 MuELossI(
"genie::mueloss::KokoulinPetrukhinModel")
29 MuELossI(
"genie::mueloss::KokoulinPetrukhinModel", config)
64 ROOT::Math::IBaseFunctionMultiDim * integrand =
66 ROOT::Math::IntegrationMultiDim::Type ig_type =
71 int nmaxeval = 500000;
73 ROOT::Math::IntegratorMultiDim ig(*integrand, ig_type, abstol, reltol, nmaxeval);
75 double min[2] = { Vmin, Pmin };
76 double max[2] = { Vmax, Pmax };
80 double bpair = (2*
kNA/
A) * ig.Integral(min, max);
85 double de_dx = bpair*E;
94 ROOT::Math::IBaseFunctionMultiDim()
117 if (! (v >0))
return 0;
119 if (! (fE>0))
return 0;
121 double pmax_v = (1. - 6.*
kMuonMass2 / (fE*fE*(1.-v)) ) *
123 if(p>pmax_v)
return 0;
125 double v2 = TMath::Power(v,2.);
126 double p2 = TMath::Power(p,2.);
128 double a4 = TMath::Power(
kAem,4.);
130 double ZLe2 = TMath::Power(fZ*
kLe,2.);
131 double Zm13 = TMath::Power(fZ,-1./3.);
132 double Zm23 = TMath::Power(fZ,-2./3.);
133 double Z13 = TMath::Power(fZ,1./3.);
138 double memu2 = me2/mmu2;
139 double memu = me/mmu;
140 double mume = mmu/me;
142 double b = 0.5*v2/(1.-v);
143 double xi = (1.-p2) * TMath::Power(0.5*v*mume, 2.) / (1.-v);
148 double FImA = ( (1.+p2)*(1.+3.*b/2.) - (1.+2.*
b)*(1.-p2)/xi ) * TMath::Log(1.+xi);
149 double FImB = xi*(1.-p2-
b) / (1.+xi);
150 double FImC = (1.+2.*
b) * (1.-p2);
151 double Ym = (4. + p2 + 3.*b*(1.+p2)) /
152 ((1.+p2)*(1.5+2.*b)*TMath::Log(3.+xi) + 1. - 1.5*p2);
153 double LmA = (2./3.) * mume * R * Zm23;
154 double LmB = 1. + (2.*me*R *
kSqrtNapierConst * Zm13 * (1+xi) * (1+Ym)) / (fE*v*(1-p2) );
155 double Lm = TMath::Log(LmA/LmB);
156 double FIm = (FImA+FImB+FImC)*Lm;
161 double FIeA = ( (2.+p2) * (1.+b) + xi*(3.+p2) ) * log(1.+1./xi);
162 double FIeB = (1.-p2-
b) / (1.+xi);
163 double FIeC = 3. + p2;
164 double Ye = (5. - p2 + 4*b*(1+p2)) /
165 (2.*(1.+3.*
b)*TMath::Log(3.+1./xi) - p2 - 2.*b*(2.-p2));
166 double x_Y = (1+xi)*(1+Ye);
167 double LeA = R*Zm13*TMath::Sqrt(x_Y);
169 double LeC = 1.5 * memu * Z13;
170 double LeD = 1 + TMath::Power(LeC,2.)*x_Y;
171 double Le = TMath::Log(LeA/LeB) - 0.5*TMath::Log(LeD);
172 double FIe = (FIeA+FIeB-FIeC)*Le;
174 double d2s_dvdp = a4 * (2./(3.*pi)) * ZLe2 * ((1.-v)/v) * (FIe + FIm*memu2);
176 double vd2s_dvdp = v*d2s_dvdp;
180 ROOT::Math::IBaseFunctionMultiDim *
KokoulinPetrukhinIntegrand(double E, double Z)
static constexpr double g
ROOT::Math::IntegrationMultiDim::Type IntegrationNDimTypeFromString(string type)
static const double kSqrtNapierConst
static double Z(MuELMaterial_t material)
static const double kElectronMass
static double Threshold(MuELProcess_t p)
static constexpr double b
static const double kElectronMass2
double dE_dx(double E, MuELMaterial_t material) const
Implement the MuELossI interface.
static constexpr double A
static const double kMuonMass2
double DoEval(const double *xin) const
virtual ~KokoulinPetrukhinModel()
~KokoulinPetrukhinIntegrand()
static const double kMuonMass
ROOT::Math::IBaseFunctionMultiDim * Clone(void) const
unsigned int NDim(void) const
static double A(MuELMaterial_t material)
MuELProcess_t Process(void) const
enum genie::mueloss::EMuELMaterial MuELMaterial_t