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()
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()