Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

BezrukovBugaevModel.cxx

Go to the documentation of this file.
00001 
00017 #include <cassert>
00018 
00019 #include "BezrukovBugaevModel.h"
00020 #include "Integrator.h"
00021 #include "Constants.h"
00022 
00023 ClassImp(BezrukovBugaevModel)
00024 
00025 //_________________________________________________________________________________________
00026 BezrukovBugaevModel::BezrukovBugaevModel() :
00027 ProcessModel()
00028 {
00029 
00030 }
00031 //_________________________________________________________________________________________
00032 BezrukovBugaevModel::BezrukovBugaevModel(const Material & material) :
00033 ProcessModel(material, Process::eNuclearInteraction)
00034 {
00035 
00036 }
00037 //_________________________________________________________________________________________
00038 BezrukovBugaevModel::~BezrukovBugaevModel()
00039 {
00040 
00041 }
00042 //_________________________________________________________________________________________
00043 ValidityRange_t BezrukovBugaevModel::ValidityRange(void) const
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 }
00052 //_________________________________________________________________________________________
00053 double BezrukovBugaevModel::dE_dx(double E) const
00054 {
00055 // Calculate the muon -dE/dx due to muon nuclear interaction in MeV / (gr / cm^2 )
00056 // Input  : E, muon energy in MeV
00057 
00058   return bnuc(E) * E;
00059 }
00060 //_________________________________________________________________________________________
00061 double BezrukovBugaevModel::bnuc(double E) const
00062 {
00063 // Calculate the b factor for muon nuclear interaction ( -dE/dx = b*E ) in cm^2 / gr
00064 // Input  : E, muon energy in MeV
00065 
00066   const int kNV = 600;
00067 
00068   double Vmin = 0;
00069   double Vmax = V_max(E);
00070   double dV   = (Vmax - Vmin) / kNV;
00071 
00072   Integrator * integrator = Integrator::Instance();
00073 
00074   double * vds = new double[kNV];
00075 
00076   for(int iv = 0; iv < kNV; iv++)  vds[iv] = (Vmin+(iv+1)*dV) * ds_dv(Vmin+(iv+1)*dV, E);
00077 
00078   double integral = integrator->Simpson(vds, kNV, dV);
00079 
00080   delete [] vds;
00081 
00082   // 1e-7 a dimensional factor:
00083   // v*ds/dv (in microbarns) --> v*ds/dv*10^-30 cm^2, N -> N*10^23
00084 
00085   return 1e-7*(MuELoss::Na/fMaterial.A())*integral;
00086 }
00087 //_________________________________________________________________________________________
00088 double BezrukovBugaevModel::V_max(double E) const
00089 {
00090 // Calculate the maximum fraction of energy carried to the photon.
00091 // Input  : E, muon energy in MeV
00092 //
00093   return ( 1 - (3/4.)*sqrt(MuELoss::e)*(MuELoss::Mm/E)* pow(fMaterial.Z(),1/3.) );
00094 }
00095 //_________________________________________________________________________________________
00096 double BezrukovBugaevModel::ds_dv(double v, double E) const
00097 {
00098 // Calculate the differential cross section ds/dv (in microbarn) for muon nuclear
00099 // interaction based on the Bezrukov, Bugaev formula.
00100 // Input  : E, muon energy in MeV
00101 //          v, fraction of energy transferred to the photon
00102 //
00103   assert(E >= 0);
00104   assert(v >  0);
00105 
00106   double sig = PhotonuclXSec(v,E);
00107   double g   = 3.*G(v,E)/4.;
00108   double v2  = v*v;
00109   double t   = MuELoss::Mm_2 *v2/(1-v);
00110   double k   = 1. - 2./v + 2./v2;
00111 
00112   assert(t >  0);
00113 
00114   double m1_2_t = MuELoss::m1_2 / t;
00115   double m2_2_t = MuELoss::m2_2 / t;
00116   double mm_2_t = MuELoss::Mm_2 / t;
00117   double d      = MuELoss::m1_2 / ( t + MuELoss::m1_2 );
00118 
00119   double A = MuELoss::a * fMaterial.A() * sig * v / (2 * MuELoss::pi);
00120 
00121   double B = g          * ( k*log(1.+m1_2_t) - k*d - 2.*mm_2_t );
00122   double C = 0.25       * ( k*log(1.+m2_2_t) - 2.*mm_2_t );
00123   double D = 0.5*mm_2_t * ( g*d + 0.25*m2_2_t*log(1.+1./m2_2_t) );
00124 
00125   return A*(B+C+D); // microbarns
00126 }
00127 //___________________________________________________________________________________________
00128 double BezrukovBugaevModel::G(double v, double E) const
00129 {
00130 // Calculate the factor G (dimensionless) appearing in the differential photonuclear
00131 // interaction xsec
00132 // Input  : E, muon energy in MeV
00133 //          v, fraction of energy transferred to the photon
00134 //
00135   assert(E >= 0);
00136   assert(v >  0);
00137   double A13 = pow(fMaterial.A(),1/3.);
00138   double x   = 0.00282 * A13 * PhotonuclXSec(v,E);  // factor 0.00282 has units of ub^-1
00139   double x2  = x*x;
00140   double x3  = x2*x;
00141 
00142   return 3. * ( x2/2. - 1. + (1.+x)*exp(-x) ) / x3;
00143 }
00144 //___________________________________________________________________________________________
00145 double BezrukovBugaevModel::PhotonuclXSec(double v, double E) const
00146 {
00147 // Calculate the cross section (in microbarns) for photonuclear interaction
00148 // Input  : E, muon energy in MeV
00149 //          v, fraction of energy transferred to the photon
00150 //
00151   assert(E >= 0);
00152   assert(v >  0);
00153 
00154   double Ep   = v*E; // photon energy
00155   double loge = log(0.0213*1e-3*Ep); // factor 0.0213 has units of GeV^-1
00156   
00157   return 114.3 + 1.647 * loge*loge;
00158 }
00159 //___________________________________________________________________________________________
00160 
00161 

Generated on Thu Nov 1 11:49:34 2007 for loon by  doxygen 1.3.9.1