KokoulinPetrukhinModel Class Reference

#include <KokoulinPetrukhinModel.h>

Inheritance diagram for KokoulinPetrukhinModel:

ProcessModel List of all members.

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

Detailed Description

________________________________________________________________________________________
Id
KokoulinPetrukhinModel.cxx,v 1.2 2004/01/05 16:11:13 costas Exp

Definition at line 22 of file KokoulinPetrukhinModel.h.


Constructor & Destructor Documentation

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 (  ) 

Definition at line 38 of file KokoulinPetrukhinModel.cxx.

00039 {
00040 
00041 }


Member Function Documentation

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 }


The documentation for this class was generated from the following files:
Generated on Thu Apr 10 23:02:49 2014 for loon by  doxygen 1.4.7