52     ParAveT2(0.), ParSigLogT1(0.), ParSigLogT2(0.),
 
   53     ParSigLogA1(0.), ParSigLogA2(0.), ParRho1(0.), ParRho2(0.), ParsAveA2(0.),
 
   54     AveLogAlphah(0.), AveLogTmaxh(0.), SigmaLogAlphah(0.), SigmaLogTmaxh(0.),
 
   55     Rhoh(0.), Alphah(0.), Tmaxh(0.), Betah(0.), AveLogAlpha(0.), AveLogTmax(0.),
 
   56     SigmaLogAlpha(0.), SigmaLogTmax(0.), Rho(0.), 
Alpha(0.), Tmax(0.), Beta(0.)
 
   59   else      { thePar = aPar; owning = 
false; }
 
  100   ParRT1 = thePar->
ParRT1();
 
  101   ParRT2 = thePar->
ParRT2();
 
  102   ParRT3 = thePar->
ParRT3();
 
  103   ParRT4 = thePar->
ParRT4(); 
 
  104   ParRT5 = thePar->
ParRT5();
 
  105   ParRT6 = thePar->
ParRT6();
 
  136   G4cout << 
"/********************************************/ " << 
G4endl;
 
  137   G4cout << 
"  - GFlashSamplingShowerParameterisation::Constructor -  " << 
G4endl;
 
  138   G4cout << 
"/********************************************/ " << 
G4endl;  
 
  145   if(owning) { 
delete thePar; }
 
  159   Ec1      = 2.66 * std::pow((X01 * Z1 / A1),1.1); 
 
  167   Ec2      = 2.66 * std::pow((X02 * Z2 / A2),1.1); 
 
  176   G4cout << 
"/************ ComputeZAX0EFFetc ************/" << 
G4endl;
 
  177   G4cout << 
"  - GFlashSamplingShowerParameterisation::Material -  " << 
G4endl;
 
  182   G4double denominator = (d1*density1 + d2*density2);
 
  183   G4double W1  = (d1*density1) / denominator;
 
  184   G4double W2  = (d2*density2) / denominator;
 
  185   Zeff   = ( W1*Z1 ) + ( W2*Z2 );    
 
  186   Aeff   = ( W1*A1 ) + ( W2*A2 );
 
  187   X0eff  = ( 1./ ( ( W1 / X01) +( W2 / X02) ) ); 
 
  188   Rhoeff = ( (d1 *density1 ) + (d2 * density2 ))/
G4double (d2  + d1  );
 
  189   Rmeff =  1/  ((((W1*Ec1)/ X01)   +   ((W2* Ec2)/  X02) ) / Es ) ;
 
  190   Eceff =  X0eff *((W1*Ec1)/ X01 + (W2* Ec2)/  X02 );      
 
  192   ehat = (1. / (1+ 0.007*(Z1- Z2)));
 
  196   G4cout << 
"effective quantities Zeff = "<<Zeff<< 
G4endl;
 
  197   G4cout << 
"effective quantities Aeff = "<<Aeff<< 
G4endl;
 
  198   G4cout << 
"effective quantities Rhoeff = "<<Rhoeff/
g *
cm3<<
" g/cm3"  << 
G4endl;
 
  199   G4cout << 
"effective quantities X0eff = "<<X0eff/
cm <<
" cm" << 
G4endl;
 
  201   X0eff = X0eff * Rhoeff;
 
  203   G4cout << 
"effective quantities X0eff = "<<X0eff/
g*
cm2 <<
" g/cm2" << 
G4endl;  
 
  204   X0eff = X0eff /Rhoeff;
 
  205   G4cout << 
"effective quantities RMeff = "<<Rmeff/
cm<<
"  cm" << 
G4endl; 
 
  206   Rmeff = Rmeff* Rhoeff;
 
  207   G4cout << 
"effective quantities RMeff = "<<Rmeff/
g *
cm2<<
" g/cm2" << 
G4endl;  
 
  208   Rmeff = Rmeff/ Rhoeff;
 
  209   G4cout << 
"effective quantities Eceff = "<<Eceff/
MeV<< 
" MeV"<< 
G4endl;  
 
  212   G4cout << 
"/********************************************/ " <<
G4endl; 
 
  220   if ((material1==0) || (material2 ==0))
 
  222     G4Exception(
"GFlashSamplingShowerParameterisation::GenerateLongitudinalProfile()",
 
  226   ComputeLongitudinalParameters(y);  
 
  227   GenerateEnergyProfile(y);
 
  228   GenerateNSpotProfile(y);
 
  234 GFlashSamplingShowerParameterisation::ComputeLongitudinalParameters(
G4double y)
 
  236   AveLogTmaxh  = std::log(
std::max(ParAveT1 +std::log(y),0.1));  
 
  237   AveLogAlphah = std::log(
std::max(ParAveA1 + (ParAveA2+ParAveA3/Zeff)*std::log(y),.1)); 
 
  239   SigmaLogTmaxh  = 
std::min(0.5,1.00/( ParSigLogT1 + ParSigLogT2*std::log(y)) );  
 
  240   SigmaLogAlphah = 
std::min(0.5,1.00/( ParSigLogA1 + ParSigLogA2*std::log(y)));  
 
  241   Rhoh           = ParRho1+ParRho2*std::log(y);
 
  243   AveLogTmax  = 
std::max(0.1,std::log(std::exp(AveLogTmaxh)
 
  244               + ParsAveT1/Fs + ParsAveT2*(1-ehat)));  
 
  245   AveLogAlpha = 
std::max(0.1,std::log(std::exp(AveLogAlphah)
 
  248   SigmaLogTmax  = 
std::min(0.5,1.00/( ParsSigLogT1
 
  249                 + ParsSigLogT2*std::log(y)) );  
 
  250   SigmaLogAlpha = 
std::min(0.5,1.00/( ParsSigLogA1
 
  251                 + ParsSigLogA2*std::log(y))); 
 
  252   Rho           = ParsRho1+ParsRho2*std::log(y); 
 
  257 void GFlashSamplingShowerParameterisation::GenerateEnergyProfile(
G4double )
 
  259   G4double Correlation1 = std::sqrt((1+Rho)/2);
 
  260   G4double Correlation2 = std::sqrt((1-Rho)/2);
 
  261   G4double Correlation1h = std::sqrt((1+Rhoh)/2);
 
  262   G4double Correlation2h = std::sqrt((1-Rhoh)/2);
 
  266   Tmax  = 
std::max(1.,std::exp( AveLogTmax  + SigmaLogTmax  *
 
  267   (Correlation1*Random1 + Correlation2*Random2) ));
 
  268   Alpha = 
std::max(1.1,std::exp( AveLogAlpha + SigmaLogAlpha *
 
  269   (Correlation1*Random1 - Correlation2*Random2) ));
 
  270   Beta  = (Alpha-1.00)/Tmax;
 
  272   Tmaxh  = std::exp( AveLogTmaxh  + SigmaLogTmaxh  *
 
  273   (Correlation1h*Random1 + Correlation2h*Random2) );  
 
  274   Alphah = std::exp( AveLogAlphah + SigmaLogAlphah *
 
  275   (Correlation1h*Random1 - Correlation2h*Random2) );
 
  276   Betah  = (Alphah-1.00)/Tmaxh;
 
  281 void GFlashSamplingShowerParameterisation::GenerateNSpotProfile(
const G4double y)
 
  283   TNSpot     = Tmaxh *  (ParsSpotT1+ParsSpotT2*Zeff); 
 
  284   TNSpot     = 
std::max(0.5,Tmaxh * (ParsSpotT1+ParsSpotT2*Zeff));
 
  285   AlphaNSpot = Alphah * (ParsSpotA1+ParsSpotA2*Zeff);     
 
  286   BetaNSpot  = (AlphaNSpot-1.00)/TNSpot;           
 
  287   NSpot      = ParsSpotN1 /SamplingResolution * std::pow(y*Eceff/
GeV,ParsSpotN2 );
 
  297   G4double Resolution     = std::pow(SamplingResolution,2);
 
  304   if(Resolution >0.0 && DEne > 0.00)
 
  310   return DEneFluctuated;
 
  318   G4double LongitudinalStepInX0 = LongitudinalStep / X0eff;
 
  319   G4float x1= Betah*LongitudinalStepInX0;
 
  321   float x3 =  
gam(x1,x2);
 
  331   G4double LongitudinalStepInX0 = LongitudinalStep / X0eff; 
 
  332   G4float x1 = BetaNSpot*LongitudinalStepInX0;
 
  356   if(Random1  <WeightCore) 
 
  358     Radius = Rmeff * RadiusCore * std::sqrt( Random2/(1. - Random2) );
 
  362     Radius = Rmeff * RadiusTail * std::sqrt( Random2/(1. - Random2) );
 
  374   G4double tau = LongitudinalPosition / Tmax/ X0eff     
 
  375                  * (Alpha-1.00) /Alpha
 
  376                  * std::exp(AveLogAlpha)/(std::exp(AveLogAlpha)-1.);  
 
  385   G4double z1 = ParRC1 + ParRC2* std::log(Energy/
GeV);         
 
  387   RadiusCore  =  z1 + z2 * Tau;                                
 
  391   WeightCore   =  p1 * std::exp( (p2-Tau)/p3-  std::exp( (p2-Tau) /p3) ); 
 
  398   RadiusTail   = k1*(std::exp(k3*(Tau-k2))
 
  399                + std::exp(k4*(Tau-k2)) );            
 
  403   RadiusCore   = RadiusCore + ParsRC1*(1-ehat) + ParsRC2/Fs*std::exp(-Tau); 
 
  404   WeightCore   = WeightCore + (1-ehat)
 
  405                             * (ParsWC1+ParsWC2/Fs * std::exp(-std::pow((Tau-1.),2))); 
 
  406   RadiusTail   = RadiusTail + (1-ehat)* ParsRT1+ ParsRT2/Fs *std::exp(-Tau);     
 
G4double GetEffZ(const G4Material *material)
 
virtual G4double ParSigLogA2()
 
ThreeVector shoot(const G4int Ap, const G4int Af)
 
virtual G4double ParSpotN2()
 
virtual G4double ParSpotT1()
 
static constexpr double mm
 
GFlashSamplingShowerParameterisation(G4Material *aMat1, G4Material *aMat2, G4double d1, G4double d2, GFlashSamplingShowerTuning *aPar=0)
 
virtual G4double ParRho1()
 
virtual G4double ParWC1()
 
static constexpr double cm2
 
~GFlashSamplingShowerParameterisation()
 
virtual G4double ParAveA2()
 
G4double GetDensity() const 
 
virtual G4double ParRho2()
 
G4double IntegrateEneLongitudinal(G4double LongitudinalStep)
 
virtual G4double ParRT3()
 
virtual G4double ParWC3()
 
G4double GenerateRadius(G4int ispot, G4double Energy, G4double LongitudinalPosition)
 
static constexpr double g
 
virtual G4double ParSigLogT1()
 
virtual G4double ParRT6()
 
virtual G4double ParRT5()
 
G4double ComputeTau(G4double LongitudinalPosition)
 
virtual G4double ParAveA1()
 
G4GLOB_DLL std::ostream G4cout
 
virtual G4double ParRT1()
 
virtual G4double ParSigLogA1()
 
static constexpr double cm
 
virtual G4double ParSigLogT2()
 
G4double SamplingResolution()
 
G4double GenerateExponential(G4double Energy)
 
G4double NoiseResolution()
 
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 ApplySampling(const G4double DEne, const G4double Energy)
 
virtual G4double ParWC2()
 
virtual G4double ParSpotA2()
 
virtual G4double ParAveA3()
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
G4double ConstantResolution()
 
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
 
void SetMaterial(G4Material *mat1, G4Material *mat2)
 
virtual G4double ParWC4()
 
static constexpr double MeV
 
G4double GetEffA(const G4Material *material)
 
virtual G4double ParSpotN1()
 
virtual G4double ParRC2()
 
virtual G4double ParAveT1()
 
virtual G4double ParRC4()
 
virtual G4double ParRC3()
 
virtual G4double ParSpotT2()
 
virtual G4double ParRT4()
 
void GenerateLongitudinalProfile(G4double Energy)
 
virtual G4double ParRC1()
 
G4double IntegrateNspLongitudinal(G4double LongitudinalStep)
 
virtual G4double ParWC5()
 
void ComputeRadialParameters(G4double y, G4double Tau)