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);
173 GFlashHomoShowerParameterisation::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);
187 void GFlashHomoShowerParameterisation::GenerateEnergyProfile(
G4double )
189 G4double Correlation1h = std::sqrt((1+Rhoh)/2);
190 G4double Correlation2h = std::sqrt((1-Rhoh)/2);
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;
204 void 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) );
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 ;
283 WeightCore = p1 * std::exp( (p2-Tau)/p3 - std::exp( (p2-Tau) /p3) );
290 RadiusTail = k1*(std::exp(k3*(Tau-k2)) +
291 std::exp(k4*(Tau-k2)) );
G4double GetEffZ(const G4Material *material)
virtual G4double ParSigLogA2()
ThreeVector shoot(const G4int Ap, const G4int Af)
virtual G4double ParSpotN2()
virtual G4double ParSpotT1()
virtual G4double ParRho1()
virtual G4double ParWC1()
~GFlashHomoShowerParameterisation()
virtual G4double ParAveA2()
G4double IntegrateEneLongitudinal(G4double LongitudinalStep)
G4double GetDensity() const
virtual G4double ParRho2()
virtual G4double ParRT3()
virtual G4double ParWC3()
static constexpr double g
virtual G4double ParSigLogT1()
virtual G4double ParRT6()
void ComputeRadialParameters(G4double y, G4double Tau)
virtual G4double ParRT5()
virtual G4double ParAveA1()
G4GLOB_DLL std::ostream G4cout
void GenerateLongitudinalProfile(G4double Energy)
virtual G4double ParRT1()
virtual G4double ParSigLogA1()
virtual G4double ParSigLogT2()
void PrintMaterial(const G4Material *mat)
virtual G4double ParRT2()
G4double GetRadlen() const
static constexpr double cm3
virtual G4double ParSpotA1()
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual G4double ParWC6()
G4double GenerateExponential(G4double Energy)
G4double IntegrateNspLongitudinal(G4double LongitudinalStep)
G4double ComputeTau(G4double LongitudinalPosition)
virtual G4double ParWC2()
virtual G4double ParSpotA2()
virtual G4double ParAveA3()
void SetMaterial(G4Material *mat)
G4double gam(G4double x, G4double a) const
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
static constexpr double GeV
virtual G4double ParWC4()
static constexpr double MeV
G4double GetEffA(const G4Material *material)
virtual G4double ParSpotN1()
virtual G4double ParRC2()
GFlashHomoShowerParameterisation(G4Material *aMat, GVFlashHomoShowerTuning *aPar=0)
virtual G4double ParAveT1()
virtual G4double ParRC4()
virtual G4double ParRC3()
virtual G4double ParSpotT2()
virtual G4double ParRT4()
G4double GenerateRadius(G4int ispot, G4double Energy, G4double LongitudinalPosition)
virtual G4double ParRC1()
virtual G4double ParWC5()