FEDRA emulsion software from the OPERA Collaboration
EdbPhysics Class Reference

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

Constructor & Destructor Documentation

◆ EdbPhysics()

EdbPhysics::EdbPhysics ( )
inline
18 {}

◆ ~EdbPhysics()

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

Member Function Documentation

◆ DeAveragePb()

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

◆ DeAveragePbFast()

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

◆ DeAveragePbFastSet()

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

◆ DeLandauPb()

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

◆ kX0_Cell()

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

◆ kX0_Em()

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

◆ kX0_Pb()

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

◆ ThetaMCS()

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

◆ ThetaMS2()

double EdbPhysics::ThetaMS2 ( float  p,
float  mass,
float  dx,
float  X0 
)
static
51 {
52  // calculate the square of multiple scattering angle theta (in one projection)
53  // after the distance dx [microns] in the media with radiation length X0
54 
55  double p = pr;
56  if (p < 0.001) p = 0.001;
57  double k = 0.0136*0.0136; // [GeV]*[GeV]
58  double p2 = p*p;
59  double p4 = p2*p2;
60  double e2 = mass*mass+p2;
61  double dxx = TMath::Abs(dx/X0);
62  double fact = 1.+0.0383*TMath::Log(dxx);
63  if (fact < 0.01) fact = 0.01;
64  double teta2 = k*e2*dxx/p4*fact*fact;
65  if (teta2 <= 1.) return teta2;
66  else return 1.;
67 }

◆ ThetaPb2()

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

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