CGEM BOSS 6.6.5.h
BESIII Offline Software System
Loading...
Searching...
No Matches
RkFitMaterial.cxx
Go to the documentation of this file.
1//-----------------------------------------------------------------------
2// File from KalFit module
3//
4// Filename : RkFitMaterial.cc
5//------------------------------------------------------------------------
6// Description :
7// Material is a class which describes the properties of a given material,
8// for instance atomic number, atomic weight and so on.
9//------------------------------------------------------------------------
10// Modif :
11//------------------------------------------------------------------------
12#include <math.h>
13#include <iostream>
15
16using namespace std;
17
18RkFitMaterial::RkFitMaterial(double z, double a, double i,
19 double rho, double x0)
20 : x0_(x0), z_(z) // rho is the density, z is the atomic number, a is the weight
21 // i is mean excitation potention, x0 is the radiation length
22{
23 rza_ = rho * z / a;
24 isq_ = i * i * 1e-18;
25}
26
28 : rza_(mat.rza_), isq_(mat.isq_),
29 x0_(mat.x0_), z_(mat.z_)
30{
31
32}
33
34// calculate dE
35double RkFitMaterial::dE(double mass, double path,
36 double p) const
37{
38 if (!(p>0))
39 return 0;
40
41 //cout<<"this material:x0 "<< x0_ << " Z " << z_ << endl
42 // <<" rho*Z/A "<< rza_ << " I^2 "<< isq_ << endl;
43
44 const double Me = 0.000510999;
45 double psq = p * p;
46 double bsq = psq / (psq + mass * mass);
47 double esq = psq / (mass * mass);
48
49 double s = Me / mass;
50 double w = (4 * Me * esq
51 / (1 + 2 * s * sqrt(1 + esq)
52 + s * s));
53 // Density correction :
54 double cc, x0;
55 cc = 1+2*log(sqrt(isq_)/(28.8E-09*sqrt(rza_)));
56 if (cc < 5.215)
57 x0 = 0.2;
58 else
59 x0 = 0.326*cc-1.5;
60 double x1(3), xa(cc/4.606), aa;
61 aa = 4.606*(xa-x0)/((x1-x0)*(x1-x0)*(x1-x0));
62 double delta(0);
63 double x(log10(sqrt(esq)));
64 if (x > x0){
65 delta = 4.606*x-cc;
66 if (x < x1) delta=delta+aa*(x1-x)*(x1-x)*(x1-x);
67 }
68 // Shell correction :
69 float f1, f2, f3, f4, f5, ce;
70 f1 = 1/esq;
71 f2 = f1*f1;
72 f3 = f1*f2;
73 f4 = (f1*0.42237+f2*0.0304-f3*0.00038)*1E12;
74 f5 = (f1*3.858-f2*0.1668+f3*0.00158)*1E18;
75 ce = f4*isq_+f5*isq_*sqrt(isq_);
76 return (0.0001535 * rza_ / bsq
77 * (log(Me * esq * w / isq_)
78 - 2 * bsq-delta-2.0*ce/z_)) * path;
79}
80
81
82// calculate Multiple Scattering angle
83double RkFitMaterial::mcs_angle(double mass, double path,
84 double p) const
85{
86 //cout<<"this material:x0 "<< x0_ << " Z " << z_ << endl
87 // <<" rho*Z/A "<< rza_ << " I^2 "<< isq_ << endl;
88 double t = path / x0_;
89 double psq = p*p;
90 return 0.0136 * sqrt(t * (mass*mass + psq)) / psq
91 * (1 + 0.038 * log(t));
92}
93
94// calculate the RMS of straggling for the energy loss (del_E) :
95double RkFitMaterial::del_E(double mass, double path,
96 double p) const
97{
98 double sigma0_2 = 0.1569*rza_*path;
99
100 if (sigma0_2<0) return 0;
101
102 double psq = p * p;
103 double bsq = psq / (psq + mass * mass);
104
105 // Correction for relativistic particles :
106 double sigma_2 = sigma0_2*(1-0.5*bsq)/(1-bsq);
107
108 if (sigma_2<0) return 0;
109
110 // Return sigma in GeV !!
111 return sqrt(sigma_2)*0.001;
112
113}
double mass
TFile * f1
Double_t x[10]
XmlRpcServer s
double dE(double mass, double path, double p) const
Calculate energy loss.
RkFitMaterial()
Constructor.
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.
int t()
Definition t.c:1