FEDRA emulsion software from the OPERA Collaboration
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
EdbPhysics Class Reference

some physics More...

#include <EdbPhys.h>

Inheritance diagram for EdbPhysics:
Collaboration diagram for EdbPhysics:

Public Member Functions

 EdbPhysics ()
 
virtual ~EdbPhysics ()
 

Static Public Member Functions

static double DeAveragePb (float p, float mass, float dx)
 
static double DeAveragePbFast (float p, float mass, float dx)
 
static void DeAveragePbFastSet (float p, float mass)
 
static double DeLandauPb (float p, float mass, float dx)
 
static float kX0_Cell ()
 
static float kX0_Em ()
 
static float kX0_Pb ()
 
static double ThetaMCS (float p, float mass, float dx, float x0)
 
static double ThetaMS2 (float p, float mass, float dx, float X0)
 
static double ThetaPb2 (float p, float mass, float dx)
 

Detailed Description

some physics

//////////////////////////////////////////////////////////////////////// // EdbPhys // // Some physics utilities and constants // // ////////////////////////////////////////////////////////////////////////

Constructor & Destructor Documentation

◆ EdbPhysics()

EdbPhysics::EdbPhysics ( )
inline
19{}

◆ ~EdbPhysics()

virtual EdbPhysics::~EdbPhysics ( )
inlinevirtual
20{}

Member Function Documentation

◆ DeAveragePb()

double EdbPhysics::DeAveragePb ( float  p,
float  mass,
float  dx 
)
static
133{
134 using namespace Pb_CONST;
135 if (xmicrons == 0.) return 0.;
136 if (pf <= 0.) return 0.;
137 if (massf <= 0.) return 0.;
138 double p=(double)pf;
139 double mass=(double)massf;
140 double x=TMath::Abs((double)xmicrons/10000.);
141 double e=TMath::Sqrt(p*p+mass*mass);
142 double beta=p/e;
143 double gamma=e/mass;
144 double emax=(2.*me*beta*beta*gamma*gamma)/
145 (1.+2.*gamma*me/mass+(me/mass)*(me/mass));
146 double eta=gamma*beta;
147 double eta2=eta*eta;
148 double eta4=eta2*eta2;
149 double eta6=eta2*eta4;
150 double X=TMath::Log(gamma*gamma*beta*beta)/4.606;
151
152 double delta;
153 if (X < X0) delta = 0;
154 else if (X < X1) delta = 4.606*X+C+aa*TMath::Power((X1-X),mm);
155 else delta = 4.606*X+C;
156 double Ce=(0.42237/eta2+0.0304/eta4-0.00038/eta6)*1.E-6*I*I +
157 (3.85800/eta2-0.1668/eta4+0.00158/eta6)*1.E-9*I*I*I;
158
159 double de_aver=x*ro*(D*Z/(A*beta*beta))*
160 (TMath::Log(2.*me*beta*beta*gamma*gamma*emax/(I*I*1.E-18))-
161 2.*beta*beta-delta-2.*Ce/Z);
162
163 return de_aver;
164}
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
Double_t X
Definition: tlg2couples.C:76
Double_t Z
Definition: tlg2couples.C:104
Definition: EdbPhys.cxx:19
float mass
Definition: check_vertex.C:21
p
Definition: testBGReduction_AllMethods.C:8

◆ DeAveragePbFast()

double EdbPhysics::DeAveragePbFast ( float  p,
float  mass,
float  dx 
)
static
219{
220 using namespace Pb_CONST;
221 if (pf <= 0.) return 0.;
222 if (massf <= 0.) return 0.;
223 if (xmicrons <= 0.) return 0.;
224 double x=TMath::Abs((double)xmicrons/10000.);
225 double de_aver=x*eDe_aver_fact;
226 return de_aver;
227}
double eDe_aver_fact
Definition: EdbPhys.cxx:181

◆ DeAveragePbFastSet()

void EdbPhysics::DeAveragePbFastSet ( float  p,
float  mass 
)
static
187{
188 using namespace Pb_CONST;
189 if (pf <= 0.) return;
190 if (massf <= 0.) return;
191 eP=(double)pf;
192 eMass=(double)massf;
193 eE=TMath::Sqrt(eP*eP+eMass*eMass);
194 eBeta=eP/eE;
196 eEmax=(2.*me*eBeta*eBeta*eGamma*eGamma)/
197 (1.+2.*eGamma*me/eMass+(me/eMass)*(me/eMass));
203
204 if (eX < X0) eDelta = 0;
205 else if (eX < X1) eDelta = 4.606*eX+C+aa*TMath::Power((X1-eX),mm);
206 else eDelta = 4.606*eX+C;
207 eCe=(0.42237/eEta2+0.0304/eEta4-0.00038/eEta6)*1.E-6*I*I +
208 (3.85800/eEta2-0.1668/eEta4+0.00158/eEta6)*1.E-9*I*I*I;
209
210 eDe_aver_fact=ro*(D*Z/(A*eBeta*eBeta))*
211 (TMath::Log(2.*me*eBeta*eBeta*eGamma*eGamma*eEmax/(I*I*1.E-18))-
212 2.*eBeta*eBeta-eDelta-2.*eCe/Z);
213
214 return;
215}
double eEta2
Definition: EdbPhys.cxx:175
double eE
Definition: EdbPhys.cxx:170
double eBeta
Definition: EdbPhys.cxx:171
double eP
Definition: EdbPhys.cxx:168
double eEta
Definition: EdbPhys.cxx:174
double eEta6
Definition: EdbPhys.cxx:177
double eX
Definition: EdbPhys.cxx:178
double eEmax
Definition: EdbPhys.cxx:173
double eCe
Definition: EdbPhys.cxx:180
double eGamma
Definition: EdbPhys.cxx:172
double eEta4
Definition: EdbPhys.cxx:176
double eMass
Definition: EdbPhys.cxx:169
double eDelta
Definition: EdbPhys.cxx:179

◆ DeLandauPb()

double EdbPhysics::DeLandauPb ( float  p,
float  mass,
float  dx 
)
static
78{
79 using namespace Pb_CONST;
80 //if (!r)
81 //{
82 //r=new TRandom();
83 //}
84 if (xmicrons == 0.) return 0.;
85 if (pf <= 0.) return 0.;
86 if (massf <= 0.) return 0.;
87 double p=(double)pf;
88 double mass=(double)massf;
89 double x=TMath::Abs((double)xmicrons/10000.);
90 double e=TMath::Sqrt(p*p+mass*mass);
91 double beta=p/e;
92 double gamma=e/mass;
93 double emax=(2.*me*beta*beta*gamma*gamma)/
94 (1.+2.*gamma*me/mass+(me/mass)*(me/mass));
95 double eta=gamma*beta;
96 double eta2=eta*eta;
97 double eta4=eta2*eta2;
98 double eta6=eta2*eta4;
99 double X=TMath::Log(gamma*gamma*beta*beta)/4.606;
100
101 double dzeta=153.4*Z*ro*x/(beta*beta*A)/1000000.; // GeV
102 double k=dzeta/emax;
103 double delta;
104 if (X < X0) delta = 0;
105 else if (X < X1) delta = 4.606*X+C+aa*TMath::Power((X1-X),mm);
106 else delta = 4.606*X+C;
107 double Ce=(0.42237/eta2+0.0304/eta4-0.00038/eta6)*1.E-6*I*I +
108 (3.85800/eta2-0.1668/eta4+0.00158/eta6)*1.E-9*I*I*I;
109
110 double de_aver=x*ro*(D*Z/(A*beta*beta))*
111 (TMath::Log(2.*me*beta*beta*gamma*gamma*emax/(I*I*1.E-18))-
112 2.*beta*beta-delta-2.*Ce/Z);
113
114 double lambda_aver=-geu1-beta*beta-TMath::Log(k);
115 double lambda_max=0.60715+1.1934*lambda_aver+(0.67794+0.052382*lambda_aver)
116 *TMath::Exp(0.94753+0.74442*lambda_aver);
117 double lambda=0.;
118 double de;
119 for (int i=0;i<100000;i++)
120 {
121 lambda=gRandom->Landau(0.,1.);
122 if (lambda<lambda_max)
123 {
124 de = de_aver + dzeta*(lambda-geu1+beta*beta+TMath::Log(dzeta/emax));
125 return de;
126 }
127 }
128 return 0.;
129}

◆ kX0_Cell()

static float EdbPhysics::kX0_Cell ( )
inlinestatic
25{ return 5810.;}

◆ kX0_Em()

static float EdbPhysics::kX0_Em ( )
inlinestatic
24{ return 286000.;}

◆ kX0_Pb()

static float EdbPhysics::kX0_Pb ( )
inlinestatic
23{ return 5600.; }

◆ ThetaMCS()

double EdbPhysics::ThetaMCS ( float  p,
float  mass,
float  dx,
float  x0 
)
static
45 {
46 double radLen=dz/x0;
47 double beta=(m>0)?1./TMath::Sqrt(1+m*m/(p*p)):1;
48 return 0.0136/(beta*p)*TMath::Sqrt(radLen)*(1+0.038*TMath::Log(radLen));
49}
brick dz
Definition: RecDispMC.C:107

◆ ThetaMS2()

double EdbPhysics::ThetaMS2 ( float  p,
float  mass,
float  dx,
float  X0 
)
static

calculate the square of multiple scattering angle theta (in one projection) after the distance dx [microns] in the media with radiation length X0

52{
55
56 double p = pr;
57 if (p < 0.001) p = 0.001;
58 double k = 0.0136*0.0136; // [GeV]*[GeV]
59 double p2 = p*p;
60 double p4 = p2*p2;
61 double e2 = mass*mass+p2;
62 double dxx = TMath::Abs(dx/X0);
63 double fact = 1.+0.0383*TMath::Log(dxx);
64 if (fact < 0.01) fact = 0.01;
65 double teta2 = k*e2*dxx/p4*fact*fact;
66 if (teta2 <= 1.) return teta2;
67 else return 1.;
68}

◆ ThetaPb2()

double EdbPhysics::ThetaPb2 ( float  p,
float  mass,
float  dx 
)
static
72 { return ThetaMS2(p,mass,dx, kX0_Pb()); }
static float kX0_Pb()
Definition: EdbPhys.h:23
static double ThetaMS2(float p, float mass, float dx, float X0)
Definition: EdbPhys.cxx:51

The documentation for this class was generated from the following files: