#include <RkFitMaterial.h>
Public Member Functions | |
RkFitMaterial () | |
Constructor. | |
RkFitMaterial (double z, double a, double i, double rho, double x0) | |
RkFitMaterial (const RkFitMaterial &mat) | |
double | dE (double mass, double path, double p) const |
Calculate energy loss. | |
double | mcs_angle (double mass, double path, double p) const |
Calculate Multiple Scattering angle. | |
double | del_E (double mass, double path, double p) const |
Calculate the straggling of energy loss. | |
double | X0 (void) const |
Extractor. | |
Private Attributes | |
double | rza_ |
double | isq_ |
double | x0_ |
double | z_ |
Definition at line 6 of file RkFitMaterial.h.
RkFitMaterial::RkFitMaterial | ( | ) | [inline] |
RkFitMaterial::RkFitMaterial | ( | double | z, | |
double | a, | |||
double | i, | |||
double | rho, | |||
double | x0 | |||
) |
RkFitMaterial::RkFitMaterial | ( | const RkFitMaterial & | mat | ) |
double RkFitMaterial::dE | ( | double | mass, | |
double | path, | |||
double | p | |||
) | const |
Calculate energy loss.
Definition at line 35 of file RkFitMaterial.cxx.
References f1, f2, isq_, rza_, s, w, x, and z_.
Referenced by TRunge::eloss().
00037 { 00038 if (!(p>0)) 00039 return 0; 00040 00041 //cout<<"this material:x0 "<< x0_ << " Z " << z_ << endl 00042 // <<" rho*Z/A "<< rza_ << " I^2 "<< isq_ << endl; 00043 00044 const double Me = 0.000510999; 00045 double psq = p * p; 00046 double bsq = psq / (psq + mass * mass); 00047 double esq = psq / (mass * mass); 00048 00049 double s = Me / mass; 00050 double w = (4 * Me * esq 00051 / (1 + 2 * s * sqrt(1 + esq) 00052 + s * s)); 00053 // Density correction : 00054 double cc, x0; 00055 cc = 1+2*log(sqrt(isq_)/(28.8E-09*sqrt(rza_))); 00056 if (cc < 5.215) 00057 x0 = 0.2; 00058 else 00059 x0 = 0.326*cc-1.5; 00060 double x1(3), xa(cc/4.606), aa; 00061 aa = 4.606*(xa-x0)/((x1-x0)*(x1-x0)*(x1-x0)); 00062 double delta(0); 00063 double x(log10(sqrt(esq))); 00064 if (x > x0){ 00065 delta = 4.606*x-cc; 00066 if (x < x1) delta=delta+aa*(x1-x)*(x1-x)*(x1-x); 00067 } 00068 // Shell correction : 00069 float f1, f2, f3, f4, f5, ce; 00070 f1 = 1/esq; 00071 f2 = f1*f1; 00072 f3 = f1*f2; 00073 f4 = (f1*0.42237+f2*0.0304-f3*0.00038)*1E12; 00074 f5 = (f1*3.858-f2*0.1668+f3*0.00158)*1E18; 00075 ce = f4*isq_+f5*isq_*sqrt(isq_); 00076 return (0.0001535 * rza_ / bsq 00077 * (log(Me * esq * w / isq_) 00078 - 2 * bsq-delta-2.0*ce/z_)) * path; 00079 }
double RkFitMaterial::del_E | ( | double | mass, | |
double | path, | |||
double | p | |||
) | const |
Calculate the straggling of energy loss.
Definition at line 95 of file RkFitMaterial.cxx.
References rza_.
00097 { 00098 double sigma0_2 = 0.1569*rza_*path; 00099 00100 if (sigma0_2<0) return 0; 00101 00102 double psq = p * p; 00103 double bsq = psq / (psq + mass * mass); 00104 00105 // Correction for relativistic particles : 00106 double sigma_2 = sigma0_2*(1-0.5*bsq)/(1-bsq); 00107 00108 if (sigma_2<0) return 0; 00109 00110 // Return sigma in GeV !! 00111 return sqrt(sigma_2)*0.001; 00112 00113 }
double RkFitMaterial::mcs_angle | ( | double | mass, | |
double | path, | |||
double | p | |||
) | const |
Calculate Multiple Scattering angle.
Definition at line 83 of file RkFitMaterial.cxx.
00085 { 00086 //cout<<"this material:x0 "<< x0_ << " Z " << z_ << endl 00087 // <<" rho*Z/A "<< rza_ << " I^2 "<< isq_ << endl; 00088 double t = path / x0_; 00089 double psq = p*p; 00090 return 0.0136 * sqrt(t * (mass*mass + psq)) / psq 00091 * (1 + 0.038 * log(t)); 00092 }
double RkFitMaterial::X0 | ( | void | ) | const [inline] |
double RkFitMaterial::isq_ [private] |
double RkFitMaterial::rza_ [private] |
double RkFitMaterial::x0_ [private] |
double RkFitMaterial::z_ [private] |