Returns energy loss, optional calculation of energy loss straggeling.
Can be called with any pdg, but only calculates energy loss and straggeling for electrons and positrons (otherwise returns 0). Uses a gaussian approximation (Bethe-Heitler formula with Migdal corrections). For positrons the energy loss is weighed with a correction factor.
45 static const double C[101]={ 0.0,-0.960613E-01, 0.631029E-01,-0.142819E-01, 0.150437E-02,-0.733286E-04, 0.131404E-05, 0.859343E-01,-0.529023E-01, 0.131899E-01,-0.159201E-02, 0.926958E-04,-0.208439E-05,-0.684096E+01, 0.370364E+01,-0.786752E+00, 0.822670E-01,-0.424710E-02, 0.867980E-04,-0.200856E+01, 0.129573E+01,-0.306533E+00, 0.343682E-01,-0.185931E-02, 0.392432E-04, 0.127538E+01,-0.515705E+00, 0.820644E-01,-0.641997E-02, 0.245913E-03,-0.365789E-05, 0.115792E+00,-0.463143E-01, 0.725442E-02,-0.556266E-03, 0.208049E-04,-0.300895E-06,-0.271082E-01, 0.173949E-01,-0.452531E-02, 0.569405E-03,-0.344856E-04, 0.803964E-06, 0.419855E-02,-0.277188E-02, 0.737658E-03,-0.939463E-04, 0.569748E-05,-0.131737E-06,-0.318752E-03, 0.215144E-03,-0.579787E-04, 0.737972E-05,-0.441485E-06, 0.994726E-08, 0.938233E-05,-0.651642E-05, 0.177303E-05,-0.224680E-06, 0.132080E-07,-0.288593E-09,-0.245667E-03, 0.833406E-04,-0.129217E-04, 0.915099E-06,-0.247179E-07, 0.147696E-03,-0.498793E-04, 0.402375E-05, 0.989281E-07,-0.133378E-07,-0.737702E-02, 0.333057E-02,-0.553141E-03, 0.402464E-04,-0.107977E-05,-0.641533E-02, 0.290113E-02,-0.477641E-03, 0.342008E-04,-0.900582E-06, 0.574303E-05, 0.908521E-04,-0.256900E-04, 0.239921E-05,-0.741271E-07,-0.341260E-04, 0.971711E-05,-0.172031E-06,-0.119455E-06, 0.704166E-08, 0.341740E-05,-0.775867E-06,-0.653231E-07, 0.225605E-07,-0.114860E-08,-0.119391E-06, 0.194885E-07, 0.588959E-08,-0.127589E-08, 0.608247E-10};
46 static const double xi=2.51, beta=0.99, vl=0.00004;
48 #if defined(BETHE) // no MIGDAL corrections
49 static const double C[101]={ 0.0, 0.834459E-02, 0.443979E-02,-0.101420E-02, 0.963240E-04,-0.409769E-05, 0.642589E-07, 0.464473E-02,-0.290378E-02, 0.547457E-03,-0.426949E-04, 0.137760E-05,-0.131050E-07,-0.547866E-02, 0.156218E-02,-0.167352E-03, 0.101026E-04,-0.427518E-06, 0.949555E-08,-0.406862E-02, 0.208317E-02,-0.374766E-03, 0.317610E-04,-0.130533E-05, 0.211051E-07, 0.158941E-02,-0.385362E-03, 0.315564E-04,-0.734968E-06,-0.230387E-07, 0.971174E-09, 0.467219E-03,-0.154047E-03, 0.202400E-04,-0.132438E-05, 0.431474E-07,-0.559750E-09,-0.220958E-02, 0.100698E-02,-0.596464E-04,-0.124653E-04, 0.142999E-05,-0.394378E-07, 0.477447E-03,-0.184952E-03,-0.152614E-04, 0.848418E-05,-0.736136E-06, 0.190192E-07,-0.552930E-04, 0.209858E-04, 0.290001E-05,-0.133254E-05, 0.116971E-06,-0.309716E-08, 0.212117E-05,-0.103884E-05,-0.110912E-06, 0.655143E-07,-0.613013E-08, 0.169207E-09, 0.301125E-04,-0.461920E-04, 0.871485E-05,-0.622331E-06, 0.151800E-07,-0.478023E-04, 0.247530E-04,-0.381763E-05, 0.232819E-06,-0.494487E-08,-0.336230E-04, 0.223822E-04,-0.384583E-05, 0.252867E-06,-0.572599E-08, 0.105335E-04,-0.567074E-06,-0.216564E-06, 0.237268E-07,-0.658131E-09, 0.282025E-05,-0.671965E-06, 0.565858E-07,-0.193843E-08, 0.211839E-10, 0.157544E-04,-0.304104E-05,-0.624410E-06, 0.120124E-06,-0.457445E-08,-0.188222E-05,-0.407118E-06, 0.375106E-06,-0.466881E-07, 0.158312E-08, 0.945037E-07, 0.564718E-07,-0.319231E-07, 0.371926E-08,-0.123111E-09};
50 static const double xi=2.10, beta=1.00, vl=0.001;
60 double THIGH=100., CHIGH=50.;
68 if(BCUT>=mom) BCUT=mom;
74 if(BCUT>=THIGH) kc=CHIGH;
86 double Y=log(kc/(E*vl));
92 for (
unsigned int I=1;
I<=2; ++
I) {
94 for (
unsigned int J=1; J<=6; ++J) {
102 for (
unsigned int I=3;
I<=6; ++
I) {
104 for (
unsigned int J=1; J<=6; ++J) {
106 if(Y<=0.) S=S+C[K]*XX*YY;
107 else S=S+C[K+24]*XX*YY;
116 for (
unsigned int I=1;
I<=2; ++
I) {
118 for (
unsigned int J=1; J<=5; ++J) {
126 for (
unsigned int I=3;
I<=5; ++
I) {
128 for (
unsigned int J=1; J<=5; ++J) {
130 if(Y<=0.) SS=SS+C[K]*XX*YY;
131 else SS=SS+C[K+15]*XX*YY;
141 #if !defined(CERNLIB_BETHE)
142 CORR=1./(1.+0.805485E-10*matDensity*matZ*E*E/(matA*kc*
kc));
145 double FAC=matZ*(matZ+xi)*E*E * pow((kc*CORR/T),beta) / (E+me);
146 if(FAC<=0.)
return 0.;
154 S=(1.-0.5*RAT+2.*RAT*RAT/9.);
156 S=S/(1.-0.5*RAT+2.*RAT*RAT/9.);
160 S=BCUT*(1.-0.5*RAT+2.*RAT*RAT/9.);
162 S=S/(kc*(1.-0.5*RAT+2.*RAT*RAT/9.));
164 dedxBrems=dedxBrems*
S;
167 dedxBrems = 0.60221367*matDensity*dedxBrems/matA;
172 throw GFException(
"genf::GFEnergyLossBrems::energyLoss(): negative dE/dx", __LINE__, __FILE__).
setFatal();
177 static const double AA=7522100., A1=0.415, A3=0.0021, A5=0.00054;
181 double X=log(AA*mom/matZ*matZ);
185 double W=A1*X+A3*pow(X,3.)+A5*pow(X,5.);
186 ETA=0.5+atan(W)/M_PI;
193 if(ETA<0.0001) factor=1.E-10;
194 else if (ETA>0.9999) factor=1.;
198 if(E0<1.E-8) factor=1.;
199 else factor = ETA * ( 1.-pow(1.-E0, 1./ETA) ) / E0;
203 double DE = step * factor*dedxBrems;
204 double momLoss = sqrt(mom*mom+2.*sqrt(mom*mom+mass*mass)*DE+DE*DE) - mom;
209 throw GFException(
"genf::GFEnergyLossBrems::energyLoss(): no noise matrix!", __LINE__, __FILE__).
setFatal();
211 double LX = 1.442695*step/radiationLength;
212 double S2B = mom*mom * ( 1./pow(3.,LX) - 1./pow(4.,LX) );
213 double DEDXB = pow(fabs(S2B),0.5);
215 double sigma2E = DEDXB*DEDXB;
218 (*noise)[6][6] += (mom*mom+mass*
mass)/pow(mom,6.)*sigma2E;
see a below echo or echo I(indirect symbol).'echo" If the symbol is local (non-external)
see a below echo S(symbol in a section other than those above)
then echo echo For and will not be changed by echo further linking echo echo B echo The symbol is in the uninitialized data multiple common symbols may appear with the echo same name If the symbol is defined the common echo symbols are treated as undefined references For more echo details on common see the discussion of warn common echo in *Note Linker see the discussion of warn common echo in *Note Linker such as a global int variable echo as opposed to a large global array echo echo I echo The symbol is an indirect reference to another symbol This echo is a GNU extension to the a out object file format which is echo rarely used echo echo N echo The symbol is a debugging symbol echo echo R echo The symbol is in a read only data section echo echo S echo The symbol is in an uninitialized data section for small echo objects echo echo T echo The symbol is in the the normal defined echo symbol is used with no error When a weak undefined symbol echo is linked and the symbol is not the value of the echo weak symbol becomes zero with no error echo echo W echo The symbol is a weak symbol that has not been specifically echo tagged as a weak object symbol When a weak defined symbol echo is linked with a normal defined the normal defined echo symbol is used with no error When a weak undefined symbol echo is linked and the symbol is not the value of the echo weak symbol becomes zero with no error echo echo echo The symbol is a stabs symbol in an a out object file In echo this the next values printed are the stabs other echo the stabs desc and the stab type Stabs symbols are echo used to hold debugging information For more echo see *Note or object file format specific echo echo For Mac OS X
double getParticleMass(const int &pdg)
Returns particle mass (in GeV)
constexpr double kc
Speed of light in vacuum in LArSoft units [cm/ns].
void getParticleParameters(const int &pdg, double &charge, double &mass)
Gets particle charge and mass (in GeV)
Exception class for error handling in GENFIT (provides storage for diagnostic information) ...
GFException & setFatal(bool b=true)
set fatal flag. if this is true, the fit stops for this current track repr.