Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
GFlashSamplingShowerParameterisation Class Reference

#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)
 
- Public Member Functions inherited from GVFlashShowerParameterisation
 GVFlashShowerParameterisation ()
 
virtual ~GVFlashShowerParameterisation ()
 
virtual void ComputeRadialParameters (G4double y, G4double Tau)=0
 
virtual void GenerateLongitudinalProfile (G4double Energy)=0
 
virtual G4double IntegrateEneLongitudinal (G4double LongitudinalStep)=0
 
virtual G4double IntegrateNspLongitudinal (G4double LongitudinalStep)=0
 
virtual G4double ComputeTau (G4double LongitudinalPosition)=0
 
virtual G4double GenerateRadius (G4int ispot, G4double Energy, G4double LongitudinalPosition)=0
 
virtual void ComputeLongitudinalParameters (G4double y)=0
 
virtual void GenerateEnergyProfile (G4double y)=0
 
virtual void GenerateNSpotProfile (G4double y)=0
 
virtual G4double GenerateExponential (G4double Energy)=0
 
virtual G4double GetAveR99 ()=0
 
virtual G4double GetAveR90 ()=0
 
virtual G4double GetAveTmx ()=0
 
virtual G4double GetAveT99 ()=0
 
virtual G4double GetAveT90 ()=0
 
virtual G4double GetNspot ()=0
 
virtual G4double GetX0 ()=0
 
virtual G4double GetEc ()=0
 
virtual G4double GetRm ()=0
 
G4double GeneratePhi ()
 
G4double GetEffZ (const G4Material *material)
 
G4double GetEffA (const G4Material *material)
 
G4double gam (G4double x, G4double a) const
 
void PrintMaterial (const G4Material *mat)
 

Additional Inherited Members

- Protected Attributes inherited from GVFlashShowerParameterisation
GVFlashHomoShowerTuningthePar
 
G4double density
 
G4double A
 
G4double Z
 
G4double X0
 
G4double Ec
 
G4double Rm
 
G4double NSpot
 

Detailed Description

Definition at line 49 of file GFlashSamplingShowerParameterisation.hh.

Constructor & Destructor Documentation

◆ GFlashSamplingShowerParameterisation()

GFlashSamplingShowerParameterisation::GFlashSamplingShowerParameterisation ( G4Material aMat1,
G4Material aMat2,
G4double  d1,
G4double  d2,
GFlashSamplingShowerTuning aPar = 0 
)

Definition at line 46 of file GFlashSamplingShowerParameterisation.cc.

51 ParAveT2(0.), ParSigLogT1(0.), ParSigLogT2(0.),
52 ParSigLogA1(0.), ParSigLogA2(0.), ParRho1(0.), ParRho2(0.), ParsAveA2(0.),
53 AveLogAlphah(0.), AveLogTmaxh(0.), SigmaLogAlphah(0.), SigmaLogTmaxh(0.),
54 Rhoh(0.), Alphah(0.), Tmaxh(0.), Betah(0.), AveLogAlpha(0.), AveLogTmax(0.),
55 SigmaLogAlpha(0.), SigmaLogTmax(0.), Rho(0.), Alpha(0.), Tmax(0.), Beta(0.)
56{
57 if(!aPar) {
58 thePar = new GFlashSamplingShowerTuning;
59 } else {
60 thePar = aPar;
61 }
62
63 SetMaterial(aMat1,aMat2 );
64 d1=dd1;
65 d2=dd2;
66
67 // Longitudinal Coefficients for a homogenious calo
68
69 // shower max
70 ParAveT1 = thePar->ParAveT1(); // ln (ln y -0.812)
71 ParAveA1 = thePar->ParAveA1(); // ln a (0.81 + (0.458 + 2.26/Z)ln y)
72 ParAveA2 = thePar->ParAveA2();
73 ParAveA3 = thePar->ParAveA3();
74 // Sampling
75 ParsAveT1 = thePar->ParsAveT1(); // T_sam = log(exp( log T_hom) + t1*Fs-1 + t2*(1-ehat));
76 ParsAveT2 = thePar->ParsAveT2();
77 ParsAveA1 = thePar->ParsAveA1();
78 // Variance of shower max sampling
79 ParsSigLogT1 = thePar->ParSigLogT1(); // Sigma T1 (-2.5 + 1.25 ln y)**-1
80 ParsSigLogT2 = thePar->ParSigLogT2();
81 // variance of 'alpha'
82 ParsSigLogA1 = thePar->ParSigLogA1(); // Sigma a (-0.82 + 0.79 ln y)**-1
83 ParsSigLogA2 = thePar->ParSigLogA2();
84 // correlation alpha%T
85 ParsRho1 = thePar->ParRho1(); // Rho = 0.784 -0.023 ln y
86 ParsRho2 = thePar->ParRho2();
87
88 // Radial Coefficients
89 // r_C (tau)= z_1 +z_2 tau
90 // r_t (tau)= k1 (std::exp (k3(tau -k2 ))+std::exp (k_4 (tau- k_2))))
91 ParRC1 = thePar->ParRC1(); // z_1 = 0.0251 + 0.00319 ln E
92 ParRC2 = thePar->ParRC2();
93 ParRC3 = thePar->ParRC3(); // z_2 = 0.1162 + - 0.000381 Z
94 ParRC4 = thePar->ParRC4();
95
96 ParWC1 = thePar->ParWC1();
97 ParWC2 = thePar->ParWC2();
98 ParWC3 = thePar->ParWC3();
99 ParWC4 = thePar->ParWC4();
100 ParWC5 = thePar->ParWC5();
101 ParWC6 = thePar->ParWC6();
102 ParRT1 = thePar->ParRT1();
103 ParRT2 = thePar->ParRT2();
104 ParRT3 = thePar->ParRT3();
105 ParRT4 = thePar->ParRT4();
106 ParRT5 = thePar->ParRT5();
107 ParRT6 = thePar->ParRT6();
108
109 //additional sampling parameter
110 ParsRC1= thePar->ParsRC1();
111 ParsRC2= thePar->ParsRC2();
112 ParsWC1= thePar->ParsWC1();
113 ParsWC2= thePar->ParsWC2();
114 ParsRT1= thePar->ParsRT1();
115 ParsRT2= thePar->ParsRT2();
116
117 // Coeff for fluctuedted radial profiles for a sampling media
118 ParsSpotT1 = thePar->ParSpotT1(); // T_spot = T_hom =(0.698 + 0.00212)
119 ParsSpotT2 = thePar->ParSpotT2();
120 ParsSpotA1 = thePar->ParSpotA1(); // a_spot= a_hom (0.639 + 0.00334)
121 ParsSpotA2 = thePar->ParSpotA2();
122 ParsSpotN1 = thePar->ParSpotN1(); // N_Spot 93 * ln(Z) E ** 0.876
123 ParsSpotN2 = thePar->ParSpotN2();
124 SamplingResolution = thePar->SamplingResolution();
125 ConstantResolution = thePar->ConstantResolution();
126 NoiseResolution = thePar->NoiseResolution();
127
128 // Inits
129 NSpot = 0.00;
130 AlphaNSpot = 0.00;
131 TNSpot = 0.00;
132 BetaNSpot = 0.00;
133 RadiusCore = 0.00;
134 WeightCore = 0.00;
135 RadiusTail = 0.00;
137
138 G4cout << "/********************************************/ " << G4endl;
139 G4cout << " - GFlashSamplingShowerParameterisation::Constructor - " << G4endl;
140 G4cout << "/********************************************/ " << G4endl;
141}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
void SetMaterial(G4Material *mat1, G4Material *mat2)

◆ ~GFlashSamplingShowerParameterisation()

GFlashSamplingShowerParameterisation::~GFlashSamplingShowerParameterisation ( )

Definition at line 145 of file GFlashSamplingShowerParameterisation.cc.

146{
147 delete thePar;
148}

Member Function Documentation

◆ ApplySampling()

G4double GFlashSamplingShowerParameterisation::ApplySampling ( const G4double  DEne,
const G4double  Energy 
)

Definition at line 296 of file GFlashSamplingShowerParameterisation.cc.

298{
299 G4double DEneFluctuated = DEne;
300 G4double Resolution = std::pow(SamplingResolution,2);
301
302 // +pow(NoiseResolution,2)/ //@@@@@@@@ FIXME
303 // Energy*(1.*MeV)+
304 // pow(ConstantResolution,2)*
305 // Energy/(1.*MeV);
306
307 if(Resolution >0.0 && DEne > 0.00)
308 {
309 G4float x1=DEne/Resolution;
310 G4float x2 = G4RandGamma::shoot(x1, 1.0)*Resolution;
311 DEneFluctuated=x2;
312 }
313 return DEneFluctuated;
314}
float G4float
Definition: G4Types.hh:84
double G4double
Definition: G4Types.hh:83

◆ ComputeRadialParameters()

void GFlashSamplingShowerParameterisation::ComputeRadialParameters ( G4double  y,
G4double  Tau 
)
virtual

Implements GVFlashShowerParameterisation.

Definition at line 385 of file GFlashSamplingShowerParameterisation.cc.

387{
388 G4double z1 = ParRC1 + ParRC2* std::log(Energy/GeV); //ok
389 G4double z2 = ParRC3+ParRC4*Zeff; //ok
390 RadiusCore = z1 + z2 * Tau; //ok
391 G4double p1 = ParWC1+ParWC2*Zeff; //ok
392 G4double p2 = ParWC3+ParWC4*Zeff; //ok
393 G4double p3 = ParWC5+ParWC6*std::log(Energy/GeV); //ok
394 WeightCore = p1 * std::exp( (p2-Tau)/p3- std::exp( (p2-Tau) /p3) ); //ok
395
396 G4double k1 = ParRT1+ParRT2*Zeff; // ok
397 G4double k2 = ParRT3; // ok
398 G4double k3 = ParRT4; // ok
399 G4double k4 = ParRT5+ParRT6* std::log(Energy/GeV); // ok
400
401 RadiusTail = k1*(std::exp(k3*(Tau-k2))
402 + std::exp(k4*(Tau-k2)) ); //ok
403
404 // sampling calorimeter
405
406 RadiusCore = RadiusCore + ParsRC1*(1-ehat) + ParsRC2/Fs*std::exp(-Tau); //ok
407 WeightCore = WeightCore + (1-ehat)
408 * (ParsWC1+ParsWC2/Fs * std::exp(-std::pow((Tau-1.),2))); //ok
409 RadiusTail = RadiusTail + (1-ehat)* ParsRT1+ ParsRT2/Fs *std::exp(-Tau); //ok
410}

Referenced by GenerateRadius().

◆ ComputeTau()

G4double GFlashSamplingShowerParameterisation::ComputeTau ( G4double  LongitudinalPosition)
virtual

Implements GVFlashShowerParameterisation.

Definition at line 374 of file GFlashSamplingShowerParameterisation.cc.

376{
377 G4double tau = LongitudinalPosition / Tmax/ X0eff //<t> = T* a /(a - 1)
378 * (Alpha-1.00) /Alpha
379 * std::exp(AveLogAlpha)/(std::exp(AveLogAlpha)-1.); //ok
380 return tau;
381}

Referenced by GenerateRadius().

◆ ComputeZAX0EFFetc()

void GFlashSamplingShowerParameterisation::ComputeZAX0EFFetc ( )

Definition at line 176 of file GFlashSamplingShowerParameterisation.cc.

177{
178 G4cout << "/************ ComputeZAX0EFFetc ************/" << G4endl;
179 G4cout << " - GFlashSamplingShowerParameterisation::Material - " << G4endl;
180
181 G4double Es = 21*MeV; //constant
182
183 // material and geometry parameters for a sampling calorimeter
184 G4double denominator = (d1*density1 + d2*density2);
185 G4double W1 = (d1*density1) / denominator;
186 G4double W2 = (d2*density2) / denominator;
187 Zeff = ( W1*Z1 ) + ( W2*Z2 ); //X0*Es/Ec;
188 Aeff = ( W1*A1 ) + ( W2*A2 );
189 Rhoeff = ( (d1 *density1 ) + (d2 * density2 ))/G4double (d2 + d1 );
190 X0eff = (W1 * Rhoeff) / (X01 * density1) + (W2 * Rhoeff) / (X02 * density2 );
191 X0eff = 1./ X0eff;
192 Rmeff = 1/ ((((W1*Ec1)/ X01) + ((W2* Ec2)/ X02) ) / Es ) ;
193 Eceff = X0eff *((W1*Ec1)/ X01 + (W2* Ec2)/ X02 );
194 Fs = X0eff/G4double ((d1/mm )+(d2/mm) );
195 ehat = (1. / (1+ 0.007*(Z1- Z2)));
196
197 G4cout << "W1= " << W1 << G4endl;
198 G4cout << "W2= " << W2 << G4endl;
199 G4cout << "effective quantities Zeff = "<<Zeff<< G4endl;
200 G4cout << "effective quantities Aeff = "<<Aeff<< G4endl;
201 G4cout << "effective quantities Rhoeff = "<<Rhoeff/g *cm3<<" g/cm3" << G4endl;
202 G4cout << "effective quantities X0eff = "<<X0eff/cm <<" cm" << G4endl;
203
204 X0eff = X0eff * Rhoeff;
205
206 G4cout << "effective quantities X0eff = "<<X0eff/g*cm2 <<" g/cm2" << G4endl;
207 X0eff = X0eff /Rhoeff;
208 G4cout << "effective quantities RMeff = "<<Rmeff/cm<<" cm" << G4endl;
209 Rmeff = Rmeff* Rhoeff;
210 G4cout << "effective quantities RMeff = "<<Rmeff/g *cm2<<" g/cm2" << G4endl;
211 Rmeff = Rmeff/ Rhoeff;
212 G4cout << "effective quantities Eceff = "<<Eceff/MeV<< " MeV"<< G4endl;
213 G4cout << "effective quantities Fs = "<<Fs<<G4endl;
214 G4cout << "effective quantities ehat = "<<ehat<<G4endl;
215 G4cout << "/********************************************/ " <<G4endl;
216}

Referenced by GFlashSamplingShowerParameterisation().

◆ GenerateExponential()

G4double GFlashSamplingShowerParameterisation::GenerateExponential ( G4double  Energy)
virtual

Implements GVFlashShowerParameterisation.

Definition at line 414 of file GFlashSamplingShowerParameterisation.cc.

416{
417 G4double ParExp1 = 9./7.*X0eff;
418 G4double random = -ParExp1*G4RandExponential::shoot() ;
419 return random;
420}

◆ GenerateLongitudinalProfile()

void GFlashSamplingShowerParameterisation::GenerateLongitudinalProfile ( G4double  Energy)
virtual

Implements GVFlashShowerParameterisation.

Definition at line 220 of file GFlashSamplingShowerParameterisation.cc.

222{
223 if ((material1==0) || (material2 ==0))
224 {
225 G4Exception("GFlashSamplingShowerParameterisation::GenerateLongitudinalProfile()",
226 "InvalidSetup", FatalException, "No material initialized!");
227 }
228 G4double y = Energy/Eceff;
229 ComputeLongitudinalParameters(y);
230 GenerateEnergyProfile(y);
231 GenerateNSpotProfile(y);
232}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35

◆ GeneratePhi()

G4double GFlashSamplingShowerParameterisation::GeneratePhi ( )

◆ GenerateRadius()

G4double GFlashSamplingShowerParameterisation::GenerateRadius ( G4int  ispot,
G4double  Energy,
G4double  LongitudinalPosition 
)
virtual

Implements GVFlashShowerParameterisation.

Definition at line 344 of file GFlashSamplingShowerParameterisation.cc.

346{
347 if(ispot < 1)
348 {
349 // Determine lateral parameters in the middle of the step.
350 // They depend on energy & position along step
351 //
352 G4double Tau = ComputeTau(LongitudinalPosition);
353 ComputeRadialParameters(Energy,Tau);
354 }
355
356 G4double Radius;
357 G4double Random1 = G4UniformRand();
358 G4double Random2 = G4UniformRand();
359 if(Random1 <WeightCore) //WeightCore = p < w_i
360 {
361 Radius = Rmeff * RadiusCore * std::sqrt( Random2/(1. - Random2) );
362 }
363 else
364 {
365 Radius = Rmeff * RadiusTail * std::sqrt( Random2/(1. - Random2) );
366 }
367 Radius = std::min(Radius,DBL_MAX);
368 return Radius;
369}
#define G4UniformRand()
Definition: Randomize.hh:52
G4double ComputeTau(G4double LongitudinalPosition)
#define DBL_MAX
Definition: templates.hh:62

◆ GetAveR90()

G4double GFlashSamplingShowerParameterisation::GetAveR90 ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 73 of file GFlashSamplingShowerParameterisation.hh.

73{return (1.5 * Rmeff);} //ok

◆ GetAveR99()

G4double GFlashSamplingShowerParameterisation::GetAveR99 ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 72 of file GFlashSamplingShowerParameterisation.hh.

72{return (3.5 * Rmeff);}

◆ GetAveT90()

G4double GFlashSamplingShowerParameterisation::GetAveT90 ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 77 of file GFlashSamplingShowerParameterisation.hh.

77{return (2.5* X0eff* std::exp( AveLogTmax));}

◆ GetAveT99()

G4double GFlashSamplingShowerParameterisation::GetAveT99 ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 76 of file GFlashSamplingShowerParameterisation.hh.

76{return (X0eff*AveLogTmax/(AveLogAlpha-1.00));}

◆ GetAveTmx()

G4double GFlashSamplingShowerParameterisation::GetAveTmx ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 75 of file GFlashSamplingShowerParameterisation.hh.

75{return (X0eff*std::exp(AveLogTmax));}

◆ GetEc()

G4double GFlashSamplingShowerParameterisation::GetEc ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 81 of file GFlashSamplingShowerParameterisation.hh.

81{return Eceff;}

◆ GetNspot()

G4double GFlashSamplingShowerParameterisation::GetNspot ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 79 of file GFlashSamplingShowerParameterisation.hh.

79{return NSpot;}

◆ GetRm()

G4double GFlashSamplingShowerParameterisation::GetRm ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 82 of file GFlashSamplingShowerParameterisation.hh.

82{return Rmeff;}

◆ GetX0()

G4double GFlashSamplingShowerParameterisation::GetX0 ( )
inlinevirtual

Implements GVFlashShowerParameterisation.

Definition at line 80 of file GFlashSamplingShowerParameterisation.hh.

80{return X0eff;}

◆ IntegrateEneLongitudinal()

G4double GFlashSamplingShowerParameterisation::IntegrateEneLongitudinal ( G4double  LongitudinalStep)
virtual

Implements GVFlashShowerParameterisation.

Definition at line 318 of file GFlashSamplingShowerParameterisation.cc.

320{
321 G4double LongitudinalStepInX0 = LongitudinalStep / X0eff;
322 G4float x1= Betah*LongitudinalStepInX0;
323 G4float x2= Alphah;
324 float x3 = gam(x1,x2);
325 G4double DEne=x3;
326 return DEne;
327}
G4double gam(G4double x, G4double a) const

◆ IntegrateNspLongitudinal()

G4double GFlashSamplingShowerParameterisation::IntegrateNspLongitudinal ( G4double  LongitudinalStep)
virtual

Implements GVFlashShowerParameterisation.

Definition at line 331 of file GFlashSamplingShowerParameterisation.cc.

333{
334 G4double LongitudinalStepInX0 = LongitudinalStep / X0eff;
335 G4float x1 = BetaNSpot*LongitudinalStepInX0;
336 G4float x2 = AlphaNSpot;
337 G4float x3 = gam(x1,x2);
338 G4double DNsp = x3;
339 return DNsp;
340}

◆ SetMaterial()

void GFlashSamplingShowerParameterisation::SetMaterial ( G4Material mat1,
G4Material mat2 
)

Definition at line 152 of file GFlashSamplingShowerParameterisation.cc.

154{
155 G4double Es = 21*MeV;
156 material1= mat1;
157 Z1 = GetEffZ(material1);
158 A1 = GetEffA(material1);
159 density1 = material1->GetDensity();
160 X01 = material1->GetRadlen();
161 Ec1 = 2.66 * std::pow((X01 * Z1 / A1),1.1);
162 Rm1 = X01*Es/Ec1;
163
164 material2= mat2;
165 Z2 = GetEffZ(material2);
166 A2 = GetEffA(material2);
167 density2 = material2->GetDensity();
168 X02 = material2->GetRadlen();
169 Ec2 = 2.66 * std::pow((X02 * Z2 / A2),1.1);
170 Rm2 = X02*Es/Ec2;
171 // PrintMaterial();
172}
G4double GetDensity() const
Definition: G4Material.hh:178
G4double GetRadlen() const
Definition: G4Material.hh:218
G4double GetEffZ(const G4Material *material)
G4double GetEffA(const G4Material *material)

Referenced by GFlashSamplingShowerParameterisation().


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