#include <GFlashSamplingShowerParameterisation.hh>
Inheritance diagram for GFlashSamplingShowerParameterisation:
Public Member Functions | |
GFlashSamplingShowerParameterisation (G4Material *aMat1, G4Material *aMat2, G4double d1, G4double d2, GFlashSamplingShowerTuning *aPar=0) | |
~GFlashSamplingShowerParameterisation () | |
void | ComputeRadialParameters (G4double y, G4double Tau) |
void | GenerateLongitudinalProfile (G4double Energy) |
void | ComputeZAX0EFFetc () |
G4double | IntegrateEneLongitudinal (G4double LongitudinalStep) |
G4double | IntegrateNspLongitudinal (G4double LongitudinalStep) |
G4double | ComputeTau (G4double LongitudinalPosition) |
void | SetMaterial (G4Material *mat1, G4Material *mat2) |
G4double | GeneratePhi () |
G4double | GenerateRadius (G4int ispot, G4double Energy, G4double LongitudinalPosition) |
G4double | GenerateExponential (G4double Energy) |
G4double | GetAveR99 () |
G4double | GetAveR90 () |
G4double | GetAveTmx () |
G4double | GetAveT99 () |
G4double | GetAveT90 () |
G4double | GetNspot () |
G4double | GetX0 () |
G4double | GetEc () |
G4double | GetRm () |
G4double | ApplySampling (const G4double DEne, const G4double Energy) |
Definition at line 50 of file GFlashSamplingShowerParameterisation.hh.
GFlashSamplingShowerParameterisation::GFlashSamplingShowerParameterisation | ( | G4Material * | aMat1, | |
G4Material * | aMat2, | |||
G4double | d1, | |||
G4double | d2, | |||
GFlashSamplingShowerTuning * | aPar = 0 | |||
) |
Definition at line 48 of file GFlashSamplingShowerParameterisation.cc.
References ComputeZAX0EFFetc(), GFlashSamplingShowerTuning::ConstantResolution(), G4cout, G4endl, GFlashSamplingShowerTuning::NoiseResolution(), GVFlashHomoShowerTuning::ParAveA1(), GVFlashHomoShowerTuning::ParAveA2(), GVFlashHomoShowerTuning::ParAveA3(), GVFlashHomoShowerTuning::ParAveT1(), GVFlashHomoShowerTuning::ParRC1(), GVFlashHomoShowerTuning::ParRC2(), GVFlashHomoShowerTuning::ParRC3(), GVFlashHomoShowerTuning::ParRC4(), GVFlashHomoShowerTuning::ParRho1(), GVFlashHomoShowerTuning::ParRho2(), GVFlashHomoShowerTuning::ParRT1(), GVFlashHomoShowerTuning::ParRT2(), GVFlashHomoShowerTuning::ParRT3(), GVFlashHomoShowerTuning::ParRT4(), GVFlashHomoShowerTuning::ParRT5(), GVFlashHomoShowerTuning::ParRT6(), GFlashSamplingShowerTuning::ParsAveA1(), GFlashSamplingShowerTuning::ParsAveT1(), GFlashSamplingShowerTuning::ParsAveT2(), GVFlashHomoShowerTuning::ParSigLogA1(), GVFlashHomoShowerTuning::ParSigLogA2(), GVFlashHomoShowerTuning::ParSigLogT1(), GVFlashHomoShowerTuning::ParSigLogT2(), GVFlashHomoShowerTuning::ParSpotA1(), GVFlashHomoShowerTuning::ParSpotA2(), GVFlashHomoShowerTuning::ParSpotN1(), GVFlashHomoShowerTuning::ParSpotN2(), GVFlashHomoShowerTuning::ParSpotT1(), GVFlashHomoShowerTuning::ParSpotT2(), GFlashSamplingShowerTuning::ParsRC1(), GFlashSamplingShowerTuning::ParsRC2(), GFlashSamplingShowerTuning::ParsRT1(), GFlashSamplingShowerTuning::ParsRT2(), GFlashSamplingShowerTuning::ParsWC1(), GFlashSamplingShowerTuning::ParsWC2(), GVFlashHomoShowerTuning::ParWC1(), GVFlashHomoShowerTuning::ParWC2(), GVFlashHomoShowerTuning::ParWC3(), GVFlashHomoShowerTuning::ParWC4(), GVFlashHomoShowerTuning::ParWC5(), GVFlashHomoShowerTuning::ParWC6(), GFlashSamplingShowerTuning::SamplingResolution(), and SetMaterial().
00051 : GVFlashShowerParameterisation(), 00052 ParAveT2(0.), ParSigLogT1(0.), ParSigLogT2(0.), 00053 ParSigLogA1(0.), ParSigLogA2(0.), ParRho1(0.), ParRho2(0.), ParsAveA2(0.), 00054 AveLogAlphah(0.), AveLogTmaxh(0.), SigmaLogAlphah(0.), SigmaLogTmaxh(0.), 00055 Rhoh(0.), Alphah(0.), Tmaxh(0.), Betah(0.), AveLogAlpha(0.), AveLogTmax(0.), 00056 SigmaLogAlpha(0.), SigmaLogTmax(0.), Rho(0.), Alpha(0.), Tmax(0.), Beta(0.) 00057 { 00058 if(!aPar) { thePar = new GFlashSamplingShowerTuning; owning = true; } 00059 else { thePar = aPar; owning = false; } 00060 00061 SetMaterial(aMat1,aMat2 ); 00062 d1=dd1; 00063 d2=dd2; 00064 00065 // Longitudinal Coefficients for a homogenious calo 00066 00067 // shower max 00068 ParAveT1 = thePar->ParAveT1(); // ln (ln y -0.812) 00069 ParAveA1 = thePar->ParAveA1(); // ln a (0.81 + (0.458 + 2.26/Z)ln y) 00070 ParAveA2 = thePar->ParAveA2(); 00071 ParAveA3 = thePar->ParAveA3(); 00072 // Sampling 00073 ParsAveT1 = thePar->ParsAveT1(); // T_sam = log(exp( log T_hom) + t1*Fs-1 + t2*(1-ehat)); 00074 ParsAveT2 = thePar->ParsAveT2(); 00075 ParsAveA1 = thePar->ParsAveA1(); 00076 // Variance of shower max sampling 00077 ParsSigLogT1 = thePar->ParSigLogT1(); // Sigma T1 (-2.5 + 1.25 ln y)**-1 00078 ParsSigLogT2 = thePar->ParSigLogT2(); 00079 // variance of 'alpha' 00080 ParsSigLogA1 = thePar->ParSigLogA1(); // Sigma a (-0.82 + 0.79 ln y)**-1 00081 ParsSigLogA2 = thePar->ParSigLogA2(); 00082 // correlation alpha%T 00083 ParsRho1 = thePar->ParRho1(); // Rho = 0.784 -0.023 ln y 00084 ParsRho2 = thePar->ParRho2(); 00085 00086 // Radial Coefficients 00087 // r_C (tau)= z_1 +z_2 tau 00088 // r_t (tau)= k1 (std::exp (k3(tau -k2 ))+std::exp (k_4 (tau- k_2)))) 00089 ParRC1 = thePar->ParRC1(); // z_1 = 0.0251 + 0.00319 ln E 00090 ParRC2 = thePar->ParRC2(); 00091 ParRC3 = thePar->ParRC3(); // z_2 = 0.1162 + - 0.000381 Z 00092 ParRC4 = thePar->ParRC4(); 00093 00094 ParWC1 = thePar->ParWC1(); 00095 ParWC2 = thePar->ParWC2(); 00096 ParWC3 = thePar->ParWC3(); 00097 ParWC4 = thePar->ParWC4(); 00098 ParWC5 = thePar->ParWC5(); 00099 ParWC6 = thePar->ParWC6(); 00100 ParRT1 = thePar->ParRT1(); 00101 ParRT2 = thePar->ParRT2(); 00102 ParRT3 = thePar->ParRT3(); 00103 ParRT4 = thePar->ParRT4(); 00104 ParRT5 = thePar->ParRT5(); 00105 ParRT6 = thePar->ParRT6(); 00106 00107 //additional sampling parameter 00108 ParsRC1= thePar->ParsRC1(); 00109 ParsRC2= thePar->ParsRC2(); 00110 ParsWC1= thePar->ParsWC1(); 00111 ParsWC2= thePar->ParsWC2(); 00112 ParsRT1= thePar->ParsRT1(); 00113 ParsRT2= thePar->ParsRT2(); 00114 00115 // Coeff for fluctuedted radial profiles for a sampling media 00116 ParsSpotT1 = thePar->ParSpotT1(); // T_spot = T_hom =(0.698 + 0.00212) 00117 ParsSpotT2 = thePar->ParSpotT2(); 00118 ParsSpotA1 = thePar->ParSpotA1(); // a_spot= a_hom (0.639 + 0.00334) 00119 ParsSpotA2 = thePar->ParSpotA2(); 00120 ParsSpotN1 = thePar->ParSpotN1(); // N_Spot 93 * ln(Z) E ** 0.876 00121 ParsSpotN2 = thePar->ParSpotN2(); 00122 SamplingResolution = thePar->SamplingResolution(); 00123 ConstantResolution = thePar->ConstantResolution(); 00124 NoiseResolution = thePar->NoiseResolution(); 00125 00126 // Inits 00127 NSpot = 0.00; 00128 AlphaNSpot = 0.00; 00129 TNSpot = 0.00; 00130 BetaNSpot = 0.00; 00131 RadiusCore = 0.00; 00132 WeightCore = 0.00; 00133 RadiusTail = 0.00; 00134 ComputeZAX0EFFetc(); 00135 00136 G4cout << "/********************************************/ " << G4endl; 00137 G4cout << " - GFlashSamplingShowerParameterisation::Constructor - " << G4endl; 00138 G4cout << "/********************************************/ " << G4endl; 00139 }
GFlashSamplingShowerParameterisation::~GFlashSamplingShowerParameterisation | ( | ) |
G4double GFlashSamplingShowerParameterisation::ApplySampling | ( | const G4double | DEne, | |
const G4double | Energy | |||
) |
Definition at line 294 of file GFlashSamplingShowerParameterisation.cc.
00295 { 00296 G4double DEneFluctuated = DEne; 00297 G4double Resolution = std::pow(SamplingResolution,2); 00298 00299 // +pow(NoiseResolution,2)/ //@@@@@@@@ FIXME 00300 // Energy*(1.*MeV)+ 00301 // pow(ConstantResolution,2)* 00302 // Energy/(1.*MeV); 00303 00304 if(Resolution >0.0 && DEne > 0.00) 00305 { 00306 G4float x1=DEne/Resolution; 00307 G4float x2 = CLHEP::RandGamma::shoot(x1, 1.0)*Resolution; 00308 DEneFluctuated=x2; 00309 } 00310 return DEneFluctuated; 00311 }
void GFlashSamplingShowerParameterisation::ComputeRadialParameters | ( | G4double | y, | |
G4double | Tau | |||
) | [virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 383 of file GFlashSamplingShowerParameterisation.cc.
Referenced by GenerateRadius().
00384 { 00385 G4double z1 = ParRC1 + ParRC2* std::log(Energy/GeV); //ok 00386 G4double z2 = ParRC3+ParRC4*Zeff; //ok 00387 RadiusCore = z1 + z2 * Tau; //ok 00388 G4double p1 = ParWC1+ParWC2*Zeff; //ok 00389 G4double p2 = ParWC3+ParWC4*Zeff; //ok 00390 G4double p3 = ParWC5+ParWC6*std::log(Energy/GeV); //ok 00391 WeightCore = p1 * std::exp( (p2-Tau)/p3- std::exp( (p2-Tau) /p3) ); //ok 00392 00393 G4double k1 = ParRT1+ParRT2*Zeff; // ok 00394 G4double k2 = ParRT3; // ok 00395 G4double k3 = ParRT4; // ok 00396 G4double k4 = ParRT5+ParRT6* std::log(Energy/GeV); // ok 00397 00398 RadiusTail = k1*(std::exp(k3*(Tau-k2)) 00399 + std::exp(k4*(Tau-k2)) ); //ok 00400 00401 // sampling calorimeter 00402 00403 RadiusCore = RadiusCore + ParsRC1*(1-ehat) + ParsRC2/Fs*std::exp(-Tau); //ok 00404 WeightCore = WeightCore + (1-ehat) 00405 * (ParsWC1+ParsWC2/Fs * std::exp(-std::pow((Tau-1.),2))); //ok 00406 RadiusTail = RadiusTail + (1-ehat)* ParsRT1+ ParsRT2/Fs *std::exp(-Tau); //ok 00407 }
G4double GFlashSamplingShowerParameterisation::ComputeTau | ( | G4double | LongitudinalPosition | ) | [virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 372 of file GFlashSamplingShowerParameterisation.cc.
Referenced by GenerateRadius().
00373 { 00374 G4double tau = LongitudinalPosition / Tmax/ X0eff //<t> = T* a /(a - 1) 00375 * (Alpha-1.00) /Alpha 00376 * std::exp(AveLogAlpha)/(std::exp(AveLogAlpha)-1.); //ok 00377 return tau; 00378 }
void GFlashSamplingShowerParameterisation::ComputeZAX0EFFetc | ( | ) |
Definition at line 174 of file GFlashSamplingShowerParameterisation.cc.
References G4cout, and G4endl.
Referenced by GFlashSamplingShowerParameterisation().
00175 { 00176 G4cout << "/************ ComputeZAX0EFFetc ************/" << G4endl; 00177 G4cout << " - GFlashSamplingShowerParameterisation::Material - " << G4endl; 00178 00179 G4double Es = 21*MeV; //constant 00180 00181 // material and geometry parameters for a sampling calorimeter 00182 G4double denominator = (d1*density1 + d2*density2); 00183 G4double W1 = (d1*density1) / denominator; 00184 G4double W2 = (d2*density2)/denominator; 00185 Zeff = ( W1*Z2 ) + (W2*Z1); //X0*Es/Ec; 00186 Aeff = ( W1*A1 ) + (W2*A2); 00187 X0eff =(1/ (( W1 / X01) +( W2 / X02))); 00188 Rhoeff = ( (d1 *density1 ) + (d2 * density2 ))/G4double (d2 + d1 ); 00189 Rmeff = 1/ ((((W1*Ec1)/ X01) + ((W2* Ec2)/ X02) ) / Es ) ; 00190 Eceff = X0eff *((W1*Ec1)/ X01 + (W2* Ec2)/ X02 ); 00191 Fs = X0eff/G4double ((d1/mm )+(d2/mm) ); 00192 ehat = (1. / (1+ 0.007*(Z1- Z2))); 00193 00194 G4cout << "W1= " << W1 << G4endl; 00195 G4cout << "W2= " << W2 << G4endl; 00196 G4cout << "effective quantities Zeff = "<<Zeff<< G4endl; 00197 G4cout << "effective quantities Aeff = "<<Aeff<< G4endl; 00198 G4cout << "effective quantities Rhoeff = "<<Rhoeff/g *cm3<<" g/cm3" << G4endl; 00199 G4cout << "effective quantities X0eff = "<<X0eff/cm <<" cm" << G4endl; 00200 00201 X0eff = X0eff * Rhoeff; 00202 00203 G4cout << "effective quantities X0eff = "<<X0eff/g*cm2 <<" g/cm2" << G4endl; 00204 X0eff = X0eff /Rhoeff; 00205 G4cout << "effective quantities RMeff = "<<Rmeff/cm<<" cm" << G4endl; 00206 Rmeff = Rmeff* Rhoeff; 00207 G4cout << "effective quantities RMeff = "<<Rmeff/g *cm2<<" g/cm2" << G4endl; 00208 Rmeff = Rmeff/ Rhoeff; 00209 G4cout << "effective quantities Eceff = "<<Eceff/MeV<< " MeV"<< G4endl; 00210 G4cout << "effective quantities Fs = "<<Fs<<G4endl; 00211 G4cout << "effective quantities ehat = "<<ehat<<G4endl; 00212 G4cout << "/********************************************/ " <<G4endl; 00213 }
Implements GVFlashShowerParameterisation.
Definition at line 412 of file GFlashSamplingShowerParameterisation.cc.
00413 { 00414 G4double ParExp1 = 9./7.*X0eff; 00415 G4double random = -ParExp1*CLHEP::RandExponential::shoot() ; 00416 return random; 00417 }
void GFlashSamplingShowerParameterisation::GenerateLongitudinalProfile | ( | G4double | Energy | ) | [virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 218 of file GFlashSamplingShowerParameterisation.cc.
References FatalException, and G4Exception().
00219 { 00220 if ((material1==0) || (material2 ==0)) 00221 { 00222 G4Exception("GFlashSamplingShowerParameterisation::GenerateLongitudinalProfile()", 00223 "InvalidSetup", FatalException, "No material initialized!"); 00224 } 00225 G4double y = Energy/Eceff; 00226 ComputeLongitudinalParameters(y); 00227 GenerateEnergyProfile(y); 00228 GenerateNSpotProfile(y); 00229 }
G4double GFlashSamplingShowerParameterisation::GeneratePhi | ( | ) |
Reimplemented from GVFlashShowerParameterisation.
G4double GFlashSamplingShowerParameterisation::GenerateRadius | ( | G4int | ispot, | |
G4double | Energy, | |||
G4double | LongitudinalPosition | |||
) | [virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 342 of file GFlashSamplingShowerParameterisation.cc.
References ComputeRadialParameters(), ComputeTau(), DBL_MAX, and G4UniformRand.
00343 { 00344 if(ispot < 1) 00345 { 00346 // Determine lateral parameters in the middle of the step. 00347 // They depend on energy & position along step 00348 // 00349 G4double Tau = ComputeTau(LongitudinalPosition); 00350 ComputeRadialParameters(Energy,Tau); 00351 } 00352 00353 G4double Radius; 00354 G4double Random1 = G4UniformRand(); 00355 G4double Random2 = G4UniformRand(); 00356 if(Random1 <WeightCore) //WeightCore = p < w_i 00357 { 00358 Radius = Rmeff * RadiusCore * std::sqrt( Random2/(1. - Random2) ); 00359 } 00360 else 00361 { 00362 Radius = Rmeff * RadiusTail * std::sqrt( Random2/(1. - Random2) ); 00363 } 00364 Radius = std::min(Radius,DBL_MAX); 00365 return Radius; 00366 }
G4double GFlashSamplingShowerParameterisation::GetAveR90 | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 74 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetAveR99 | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 73 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetAveT90 | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 78 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetAveT99 | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 77 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetAveTmx | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 76 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetEc | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 82 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetNspot | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 80 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetRm | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 83 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::GetX0 | ( | ) | [inline, virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 81 of file GFlashSamplingShowerParameterisation.hh.
G4double GFlashSamplingShowerParameterisation::IntegrateEneLongitudinal | ( | G4double | LongitudinalStep | ) | [virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 316 of file GFlashSamplingShowerParameterisation.cc.
References GVFlashShowerParameterisation::gam().
00317 { 00318 G4double LongitudinalStepInX0 = LongitudinalStep / X0eff; 00319 G4float x1= Betah*LongitudinalStepInX0; 00320 G4float x2= Alphah; 00321 float x3 = gam(x1,x2); 00322 G4double DEne=x3; 00323 return DEne; 00324 }
G4double GFlashSamplingShowerParameterisation::IntegrateNspLongitudinal | ( | G4double | LongitudinalStep | ) | [virtual] |
Implements GVFlashShowerParameterisation.
Definition at line 329 of file GFlashSamplingShowerParameterisation.cc.
References GVFlashShowerParameterisation::gam().
00330 { 00331 G4double LongitudinalStepInX0 = LongitudinalStep / X0eff; 00332 G4float x1 = BetaNSpot*LongitudinalStepInX0; 00333 G4float x2 = AlphaNSpot; 00334 G4float x3 = gam(x1,x2); 00335 G4double DNsp = x3; 00336 return DNsp; 00337 }
void GFlashSamplingShowerParameterisation::SetMaterial | ( | G4Material * | mat1, | |
G4Material * | mat2 | |||
) |
Definition at line 151 of file GFlashSamplingShowerParameterisation.cc.
References G4Material::GetDensity(), GVFlashShowerParameterisation::GetEffA(), GVFlashShowerParameterisation::GetEffZ(), and G4Material::GetRadlen().
Referenced by GFlashSamplingShowerParameterisation().
00152 { 00153 G4double Es = 21*MeV; 00154 material1= mat1; 00155 Z1 = GetEffZ(material1); 00156 A1 = GetEffA(material1); 00157 density1 = material1->GetDensity(); 00158 X01 = material1->GetRadlen(); 00159 Ec1 = 2.66 * std::pow((X01 * Z1 / A1),1.1); 00160 Rm1 = X01*Es/Ec1; 00161 00162 material2= mat2; 00163 Z2 = GetEffZ(material2); 00164 A2 = GetEffA(material2); 00165 density2 = material2->GetDensity(); 00166 X02 = material2->GetRadlen(); 00167 Ec2 = 2.66 * std::pow((X02 * Z2 / A2),1.1); 00168 Rm2 = X02*Es/Ec2; 00169 // PrintMaterial(); 00170 }