#include <KokoulinPetrukhinModel.h>
Inheritance diagram for KokoulinPetrukhinModel:

Public Member Functions | |
| KokoulinPetrukhinModel () | |
| KokoulinPetrukhinModel (const Material &material) | |
| ~KokoulinPetrukhinModel () | |
| double | dE_dx (double E) const |
| ValidityRange_t | ValidityRange (void) const |
Private Member Functions | |
| double | bpair (double E) const |
| double | V_min (double E) const |
| double | V_max (double E) const |
| double | P_max (double v, double E) const |
| double | d2s_dvdp (double v, double p, double E) const |
| double | FIe (double v, double p, double E) const |
| double | FIm (double v, double p, double E) const |
| double | Le (double v, double p, double E) const |
| double | Lm (double v, double p, double E) const |
| double | Ye (double v, double p) const |
| double | Ym (double v, double p) const |
Definition at line 22 of file KokoulinPetrukhinModel.h.
| KokoulinPetrukhinModel::KokoulinPetrukhinModel | ( | ) |
Definition at line 26 of file KokoulinPetrukhinModel.cxx.
00026 : 00027 ProcessModel() 00028 { 00029 00030 } //_________________________________________________________________________________________
| KokoulinPetrukhinModel::KokoulinPetrukhinModel | ( | const Material & | material | ) |
Definition at line 32 of file KokoulinPetrukhinModel.cxx.
00032 : 00033 ProcessModel(material, Process::ePairProduction) 00034 { 00035 00036 } //_________________________________________________________________________________________
| KokoulinPetrukhinModel::~KokoulinPetrukhinModel | ( | ) |
| double KokoulinPetrukhinModel::bpair | ( | double | E | ) | const [private] |
Definition at line 61 of file KokoulinPetrukhinModel.cxx.
References Material::A(), d2s_dvdp(), ProcessModel::fMaterial, Integrator::Instance(), MuELoss::Na, P_max(), Integrator::Simpson(), V_max(), and V_min().
Referenced by dE_dx().
00062 { 00063 // Purpose: get the b factor for e+e- pair production from muons ( -dE/dx = b*E ) 00064 // Input : E, muon energy in MeV 00065 // Output : b factor in cm^2 / gr 00066 00067 const int kNV = 300; 00068 const int kNP = 300; 00069 00070 assert(E>=0); 00071 00072 Integrator * integrator = Integrator::Instance(); 00073 00074 double Vmin = V_min(E); 00075 double Vmax = V_max(E); 00076 double dV = (Vmax-Vmin)/kNV; 00077 00078 double * vds_dv = new double[kNV]; 00079 00080 for(int iv = 0; iv < kNV; iv++) { 00081 00082 double v = Vmin + (iv+1) * dV; 00083 00084 double Pmin = 0; 00085 double Pmax = P_max(v, E); 00086 00087 if(Pmax < 0) return 0; // put this here for now so as not to hit an assert() below... 00088 // Eventually I need to solve Pmax(E) > 0 for E, and combine it 00089 // with the E limit from Vmax in the validity range of the model 00090 00091 double dP = (Pmax-Pmin)/kNP; 00092 00093 double * d2s = new double[kNP]; 00094 00095 for(int ip = 0; ip < kNP; ip++) d2s[ip] = d2s_dvdp(v, (Pmin + (ip+1) * dP) ,E); 00096 00097 vds_dv[iv] = v * integrator->Simpson(d2s, kNP, dP); 00098 00099 delete [] d2s; 00100 00101 } // v 00102 00103 double integral = integrator->Simpson(vds_dv, kNV, dV); 00104 00105 delete [] vds_dv; 00106 00107 // factor 10 is for dimensions: 00108 // 10 : v*ds/dv(integral) in 10^22 cm2 -- N->N*10^(-23) -> b in 0.1 cm2/gr 00109 00110 return 10* ( 2*MuELoss::Na / fMaterial.A() ) * integral; 00111 }
| double KokoulinPetrukhinModel::d2s_dvdp | ( | double | v, | |
| double | p, | |||
| double | E | |||
| ) | const [private] |
Definition at line 113 of file KokoulinPetrukhinModel.cxx.
References MuELoss::a_4, FIe(), FIm(), ProcessModel::fMaterial, MuELoss::Le, MuELoss::Me_Mm_2, MuELoss::pi, Mphysical::pi, and Material::Z().
Referenced by bpair().
00114 { 00115 // Calculate the differential cross section d^2s/dpdv (in 10^22 cm^2) for e+e- pair production 00116 // by muons based on the Kokoulin,Petrukhin parameterization 00117 // Input : v, the fraction of the energy transfered to the e+e- pair 00118 // p, the asymmetry parameter of the e+e- pair p = (E(+) - E(-)) / (E(+) + E(-)) 00119 // E, muon energy in MeV 00120 // 00121 assert(v>=0); 00122 assert(p>=0); 00123 assert(E>=0); 00124 00125 double a4 = MuELoss::a_4; 00126 double pi = MuELoss::pi; 00127 double ZLe2 = pow(fMaterial.Z()*MuELoss::Le,2.); 00128 double me_mm_2 = MuELoss::Me_Mm_2; 00129 double fie = FIe(v,p,E); 00130 double fim = FIm(v,p,E); 00131 00132 return a4 * (2./(3.*pi)) * ZLe2 * ( (1.-v)/v ) * ( fie + fim * me_mm_2 ); 00133 }
| double KokoulinPetrukhinModel::dE_dx | ( | double | E | ) | const [virtual] |
Implements ProcessModel.
Definition at line 53 of file KokoulinPetrukhinModel.cxx.
References bpair().
00054 { 00055 // Calculates the muon -dE/dx in ( MeV cm^2 / gr ) due to e+e- pair production 00056 // Input : E, muon energy in MeV 00057 00058 return bpair(E) * E; 00059 }
| double KokoulinPetrukhinModel::FIe | ( | double | v, | |
| double | p, | |||
| double | E | |||
| ) | const [private] |
Definition at line 135 of file KokoulinPetrukhinModel.cxx.
References Le(), and MuELoss::Mm_Me.
Referenced by d2s_dvdp().
00136 { 00137 // Approximate the FIe factor (dimensionless) from pair production cross section 00138 // Input : v, the fraction of the energy transfered to the e+e- pair 00139 // p, the asymmetry parameter of the e+e- pair p = (E(+) - E(-)) / (E(+) + E(-)) 00140 // E, muon energy in MeV 00141 // 00142 double b = v*v / (2*(1-v)); 00143 double p2 = p*p; 00144 double xi = (1.-p2) * pow( 0.5 *v *MuELoss::Mm_Me , 2.) / (1-v); 00145 double A = ( (2.+p2) * (1.+b) + xi*(3.+p2) ) * log(1.+1./xi); 00146 double B = (1.-p2-b) / (1.+xi); 00147 double C = 3. + p2; 00148 00149 return (A+B-C)*Le(v,p,E); 00150 }
| double KokoulinPetrukhinModel::FIm | ( | double | v, | |
| double | p, | |||
| double | E | |||
| ) | const [private] |
Definition at line 152 of file KokoulinPetrukhinModel.cxx.
References Lm(), and MuELoss::Mm_Me.
Referenced by d2s_dvdp().
00153 { 00154 // Approximates the factor FIm factor (dimensionless) from pair production cross section 00155 // Input : v, the fraction of the energy transfered to the e+e- pair 00156 // p, the asymmetry parameter of the e+e- pair p = (E(+) - E(-)) / (E(+) + E(-)) 00157 // E, muon energy in MeV 00158 // 00159 double b = v*v / (2*(1-v)); 00160 double p2 = p*p; 00161 double xi = (1.-p2) * pow( 0.5 *v *MuELoss::Mm_Me , 2.) / (1-v); 00162 double A = ( (1.+p2)*(1.+3.*b/2.) - (1.+2.*b)*(1.-p2)/xi ) * log(1.+xi); 00163 double B = xi * (1. - p2 - b) / (1.+xi); 00164 double C = (1.+2.*b) * (1.-p2); 00165 00166 return (A+B+C)*Lm(v,p,E); 00167 }
| double KokoulinPetrukhinModel::Le | ( | double | v, | |
| double | p, | |||
| double | E | |||
| ) | const [private] |
Definition at line 169 of file KokoulinPetrukhinModel.cxx.
References ProcessModel::fMaterial, MuELoss::Me, MuELoss::Me_Mm, MuELoss::Mm_Me, MuELoss::R, MuELoss::sqrt_e, Ye(), and Material::Z().
Referenced by FIe().
00170 { 00171 // Approximates the Le factor (dimensionless) appearing in the factor FIe at pair production xsec 00172 // Input : v, the fraction of the energy transfered to the e+e- pair 00173 // p, the asymmetry parameter of the e+e- pair p = (E(+) - E(-)) / (E(+) + E(-)) 00174 // E, muon energy in MeV 00175 // 00176 double p2 = p*p; 00177 double xi = (1.-p2) * pow( 0.5 *v *MuELoss::Mm_Me , 2.) / (1-v); 00178 double Y = Ye(v,p); 00179 double Z_13 = pow(fMaterial.Z(),-1./3.); 00180 double Z13 = pow(fMaterial.Z(), 1./3.); 00181 double MeR = MuELoss::Me * MuELoss::R; 00182 double x_Y = (1+xi)*(1+Y); 00183 00184 double A = MuELoss::R * Z_13 * sqrt( x_Y ); 00185 double B = 1. + (2. * MeR * MuELoss::sqrt_e * Z_13 * x_Y) / ( E*v*(1-p2) ); 00186 double C = 1.5 * MuELoss::Me_Mm * Z13; 00187 double D = 1 + C*C*x_Y; 00188 00189 return log(A/B) - 0.5 * log(D); 00190 }
| double KokoulinPetrukhinModel::Lm | ( | double | v, | |
| double | p, | |||
| double | E | |||
| ) | const [private] |
Definition at line 192 of file KokoulinPetrukhinModel.cxx.
References ProcessModel::fMaterial, MuELoss::Me, MuELoss::Mm_Me, MuELoss::R, MuELoss::sqrt_e, Ym(), and Material::Z().
Referenced by FIm().
00193 { 00194 // Approximates the Lm factor (dimensioness) appearing in the factor FIm at pair production xsec 00195 // Input : v, the fraction of the energy transfered to the e+e- pair 00196 // p, the asymmetry parameter of the e+e- pair p = (E(+) - E(-)) / (E(+) + E(-)) 00197 // E, muon energy in MeV 00198 00199 double p2 = p*p; 00200 double xi = (1.-p2) * pow( 0.5 *v *MuELoss::Mm_Me , 2.) / (1-v); 00201 double Y = Ym(v,p); 00202 double Z_13 = pow(fMaterial.Z(),-1/3.); 00203 double Z_23 = pow(fMaterial.Z(),-2/3.); 00204 double MeR = MuELoss::Me * MuELoss::R; 00205 double A = (2./3.) * MuELoss::Mm_Me * MuELoss::R * Z_23; 00206 double B = 1. + ( 2. * MeR * MuELoss::sqrt_e * Z_13 * (1+xi) * (1+Y) ) / ( E*v*(1-p2) ); 00207 00208 return log(A/B); 00209 }
| double KokoulinPetrukhinModel::P_max | ( | double | v, | |
| double | E | |||
| ) | const [private] |
Definition at line 251 of file KokoulinPetrukhinModel.cxx.
References MuELoss::Me, and MuELoss::Mm_2.
Referenced by bpair().
00252 { 00253 return (1. - 6.*MuELoss::Mm_2 / (E*E*(1.-v)) ) * sqrt(1.-4.*MuELoss::Me/(E*v)); 00254 }
| double KokoulinPetrukhinModel::V_max | ( | double | E | ) | const [private] |
Definition at line 244 of file KokoulinPetrukhinModel.cxx.
References ProcessModel::fMaterial, MuELoss::Mm, MuELoss::sqrt_e, and Material::Z().
Referenced by bpair().
00245 { 00246 // Maximum value of parameter v = E(+)+(E-)/E 00247 00248 return 1.- 3.* MuELoss::sqrt_e * MuELoss::Mm * pow(fMaterial.Z(), 1./3.) / (4.*E); 00249 }
| double KokoulinPetrukhinModel::V_min | ( | double | E | ) | const [private] |
Definition at line 237 of file KokoulinPetrukhinModel.cxx.
References MuELoss::Me.
Referenced by bpair().
00238 { 00239 // Minimum value of parameter v = E(+)+(E-)/E 00240 00241 return 4.*MuELoss::Me/E; 00242 }
| ValidityRange_t KokoulinPetrukhinModel::ValidityRange | ( | void | ) | const [virtual] |
Implements ProcessModel.
Definition at line 43 of file KokoulinPetrukhinModel.cxx.
References MuELoss::e, ValidityRange::Emax, ValidityRange::Emin, ProcessModel::fMaterial, MuELoss::Mm, and Material::Z().
00044 { 00045 ValidityRange_t validity_range; 00046 00047 validity_range.Emin = 0.75*sqrt(MuELoss::e)*(MuELoss::Mm)*pow(fMaterial.Z(), 1./3.); 00048 validity_range.Emax = 10000000.; // MeV 00049 00050 return validity_range; 00051 }
| double KokoulinPetrukhinModel::Ye | ( | double | v, | |
| double | p | |||
| ) | const [private] |
Definition at line 211 of file KokoulinPetrukhinModel.cxx.
References MuELoss::Mm_Me.
Referenced by Le().
00212 { 00213 // Approximates the Ye factor (dimensionless) in the factor Le at pair production xsec 00214 // Input : v, the fraction of the energy transfered to the e+e- pair 00215 // p, the asymmetry parameter of the e+e- pair p = (E(+) - E(-)) / (E(+) + E(-)) 00216 // 00217 double b = v*v / (2*(1-v)); 00218 double p2 = p*p; 00219 double xi = (1.-p2) * pow( 0.5 *v *MuELoss::Mm_Me , 2.) / (1-v); 00220 00221 return ( 5. - p2 + 4*b*(1+p2) ) / ( 2.*(1.+3.*b)*log(3.+1./xi) - p2 - 2.*b*(2.-p2) ); 00222 }
| double KokoulinPetrukhinModel::Ym | ( | double | v, | |
| double | p | |||
| ) | const [private] |
Definition at line 224 of file KokoulinPetrukhinModel.cxx.
References MuELoss::Mm_Me.
Referenced by Lm().
00225 { 00226 // Approximates the Ym factor (dimensionless) in the factor Lm at pair production xsec 00227 // Input : v, the fraction of the energy transfered to the e+e- pair 00228 // p, the asymmetry parameter of the e+e- pair p = (E(+) - E(-)) / (E(+) + E(-)) 00229 // 00230 double b = v*v / (2*(1-v)); 00231 double p2 = p*p; 00232 double xi = (1.-p2) * pow( 0.5 *v *MuELoss::Mm_Me , 2.) / (1-v); 00233 00234 return ( 4. + p2 + 3.*b*(1.+p2) ) / ( (1.+p2)*(1.5+2.*b)*log(3.+xi) + 1. - 1.5*p2 ); 00235 }
1.4.7