52 ConstantResolution(0.), NoiseResolution(0.), SamplingResolution(0.),
53 AveLogAlphah(0.), AveLogTmaxh(0.), SigmaLogAlphah(0.), SigmaLogTmaxh(0.),
54 Rhoh(0.), Alphah(0.), Tmaxh(0.), Betah(0.)
58 else { thePar = aPar; owning =
false; }
100 ParWC3 = thePar->
ParWC3();
101 ParWC4 = thePar->
ParWC4();
102 ParWC5 = thePar->
ParWC5();
103 ParWC6 = thePar->
ParWC6();
105 ParRT1 = thePar->
ParRT1();
106 ParRT2 = thePar->
ParRT2();
107 ParRT3 = thePar->
ParRT3();
108 ParRT4 = thePar->
ParRT4();
109 ParRT5 = thePar->
ParRT5();
110 ParRT6 = thePar->
ParRT6();
134 G4cout <<
"/********************************************/ " <<
G4endl;
135 G4cout <<
" - GFlashHomoShowerParameterisation::Constructor - " <<
G4endl;
136 G4cout <<
"/********************************************/ " <<
G4endl;
146 Ec = 2.66 * std::pow((
X0 *
Z /
A),1.1);
154 if(owning) {
delete thePar; }
162 G4Exception(
"GFlashHomoShowerParameterisation::GenerateLongitudinalProfile()",
167 ComputeLongitudinalParameters(y);
168 GenerateEnergyProfile(y);
169 GenerateNSpotProfile(y);
173GFlashHomoShowerParameterisation::ComputeLongitudinalParameters(
G4double y)
175 AveLogTmaxh = std::log(ParAveT1 + std::log(y));
177 AveLogAlphah = std::log(ParAveA1 + (ParAveA2+ParAveA3/
Z)*std::log(y));
180 SigmaLogTmaxh = 1.00/( ParSigLogT1 + ParSigLogT2*std::log(y)) ;
182 SigmaLogAlphah = 1.00/( ParSigLogA1 + ParSigLogA2*std::log(y));
184 Rhoh = ParRho1+ParRho2*std::log(y);
187void GFlashHomoShowerParameterisation::GenerateEnergyProfile(
G4double )
189 G4double Correlation1h = std::sqrt((1+Rhoh)/2);
190 G4double Correlation2h = std::sqrt((1-Rhoh)/2);
192 G4double Random1 = G4RandGauss::shoot();
193 G4double Random2 = G4RandGauss::shoot();
197 Tmaxh = std::exp( AveLogTmaxh + SigmaLogTmaxh *
198 (Correlation1h*Random1 + Correlation2h*Random2) );
199 Alphah = std::exp( AveLogAlphah + SigmaLogAlphah *
200 (Correlation1h*Random1 - Correlation2h*Random2) );
201 Betah = (Alphah-1.00)/Tmaxh;
204void GFlashHomoShowerParameterisation::GenerateNSpotProfile(
const G4double y)
206 TNSpot = Tmaxh * (ParSpotT1+ParSpotT2*
Z);
207 AlphaNSpot = Alphah * (ParSpotA1+ParSpotA2*
Z);
208 BetaNSpot = (AlphaNSpot-1.00)/TNSpot;
209 NSpot = ParSpotN1 * std::log(
Z)*std::pow((y*
Ec)/GeV,ParSpotN2 );
215 G4double LongitudinalStepInX0 = LongitudinalStep /
X0;
216 G4float x1= Betah*LongitudinalStepInX0;
218 float x3 =
gam(x1,x2);
226 G4double LongitudinalStepInX0 = LongitudinalStep /
X0;
227 G4float x1 = BetaNSpot*LongitudinalStepInX0;
251 if(Random1 <WeightCore)
253 Radius =
Rm * RadiusCore * std::sqrt( Random2/(1. - Random2) );
257 Radius =
Rm * RadiusTail * std::sqrt( Random2/(1. - Random2) );
259 Radius = std::min(Radius,
DBL_MAX);
266 G4double tau = LongitudinalPosition / Tmaxh /
X0
267 * (Alphah-1.00) /Alphah *
268 std::exp(AveLogAlphah)/(std::exp(AveLogAlphah)-1.);
275 G4double z1 = ParRC1 + ParRC2* std::log(Energy/GeV) ;
277 RadiusCore = z1 + z2 * Tau ;
281 G4double p3 = ParWC5+ParWC6*std::log(Energy/GeV);
283 WeightCore = p1 * std::exp( (p2-Tau)/p3 - std::exp( (p2-Tau) /p3) );
288 G4double k4 = ParRT5+ParRT6* std::log(Energy/GeV);
290 RadiusTail = k1*(std::exp(k3*(Tau-k2)) +
291 std::exp(k4*(Tau-k2)) );
G4DLLIMPORT std::ostream G4cout
G4double GetDensity() const
G4double GetRadlen() const
void GenerateLongitudinalProfile(G4double Energy)
G4double GenerateExponential(G4double Energy)
void SetMaterial(G4Material *mat)
G4double ComputeTau(G4double LongitudinalPosition)
~GFlashHomoShowerParameterisation()
G4double IntegrateEneLongitudinal(G4double LongitudinalStep)
GFlashHomoShowerParameterisation(G4Material *aMat, GVFlashHomoShowerTuning *aPar=0)
G4double GenerateRadius(G4int ispot, G4double Energy, G4double LongitudinalPosition)
G4double IntegrateNspLongitudinal(G4double LongitudinalStep)
void ComputeRadialParameters(G4double y, G4double Tau)
virtual G4double ParSigLogT1()
virtual G4double ParRT1()
virtual G4double ParRT4()
virtual G4double ParAveA1()
virtual G4double ParSigLogA2()
virtual G4double ParRC2()
virtual G4double ParWC1()
virtual G4double ParRC4()
virtual G4double ParAveT1()
virtual G4double ParSpotN2()
virtual G4double ParWC4()
virtual G4double ParRho2()
virtual G4double ParWC6()
virtual G4double ParWC3()
virtual G4double ParSpotA1()
virtual G4double ParSpotA2()
virtual G4double ParSpotT2()
virtual G4double ParRT2()
virtual G4double ParRT6()
virtual G4double ParRC3()
virtual G4double ParAveA3()
virtual G4double ParSpotT1()
virtual G4double ParSigLogT2()
virtual G4double ParWC2()
virtual G4double ParSigLogA1()
virtual G4double ParRT5()
virtual G4double ParAveA2()
virtual G4double ParSpotN1()
virtual G4double ParWC5()
virtual G4double ParRC1()
virtual G4double ParRho1()
virtual G4double ParRT3()
G4double GetEffZ(const G4Material *material)
G4double GetEffA(const G4Material *material)
G4double gam(G4double x, G4double a) const
void PrintMaterial(const G4Material *mat)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)