GFlashSamplingShowerParameterisation Class Reference

#include <GFlashSamplingShowerParameterisation.hh>

Inheritance diagram for GFlashSamplingShowerParameterisation:

GVFlashShowerParameterisation

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)

Detailed Description

Definition at line 50 of file GFlashSamplingShowerParameterisation.hh.


Constructor & Destructor Documentation

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

Definition at line 48 of file GFlashSamplingShowerParameterisation.cc.

References ComputeZAX0EFFetc(), GFlashSamplingShowerTuning::ConstantResolution(), G4cout, G4endl, GFlashSamplingShowerTuning::NoiseResolution(), GVFlashHomoShowerTuning::ParAveA1(), GVFlashHomoShowerTuning::ParAveA2(), GVFlashHomoShowerTuning::ParAveA3(), GVFlashHomoShowerTuning::ParAveT1(), GVFlashHomoShowerTuning::ParRC1(), GVFlashHomoShowerTuning::ParRC2(), GVFlashHomoShowerTuning::ParRC3(), GVFlashHomoShowerTuning::ParRC4(), GVFlashHomoShowerTuning::ParRho1(), GVFlashHomoShowerTuning::ParRho2(), GVFlashHomoShowerTuning::ParRT1(), GVFlashHomoShowerTuning::ParRT2(), GVFlashHomoShowerTuning::ParRT3(), GVFlashHomoShowerTuning::ParRT4(), GVFlashHomoShowerTuning::ParRT5(), GVFlashHomoShowerTuning::ParRT6(), GFlashSamplingShowerTuning::ParsAveA1(), GFlashSamplingShowerTuning::ParsAveT1(), GFlashSamplingShowerTuning::ParsAveT2(), GVFlashHomoShowerTuning::ParSigLogA1(), GVFlashHomoShowerTuning::ParSigLogA2(), GVFlashHomoShowerTuning::ParSigLogT1(), GVFlashHomoShowerTuning::ParSigLogT2(), GVFlashHomoShowerTuning::ParSpotA1(), GVFlashHomoShowerTuning::ParSpotA2(), GVFlashHomoShowerTuning::ParSpotN1(), GVFlashHomoShowerTuning::ParSpotN2(), GVFlashHomoShowerTuning::ParSpotT1(), GVFlashHomoShowerTuning::ParSpotT2(), GFlashSamplingShowerTuning::ParsRC1(), GFlashSamplingShowerTuning::ParsRC2(), GFlashSamplingShowerTuning::ParsRT1(), GFlashSamplingShowerTuning::ParsRT2(), GFlashSamplingShowerTuning::ParsWC1(), GFlashSamplingShowerTuning::ParsWC2(), GVFlashHomoShowerTuning::ParWC1(), GVFlashHomoShowerTuning::ParWC2(), GVFlashHomoShowerTuning::ParWC3(), GVFlashHomoShowerTuning::ParWC4(), GVFlashHomoShowerTuning::ParWC5(), GVFlashHomoShowerTuning::ParWC6(), GFlashSamplingShowerTuning::SamplingResolution(), and SetMaterial().

00051   : GVFlashShowerParameterisation(),
00052     ParAveT2(0.), ParSigLogT1(0.), ParSigLogT2(0.),
00053     ParSigLogA1(0.), ParSigLogA2(0.), ParRho1(0.), ParRho2(0.), ParsAveA2(0.),
00054     AveLogAlphah(0.), AveLogTmaxh(0.), SigmaLogAlphah(0.), SigmaLogTmaxh(0.),
00055     Rhoh(0.), Alphah(0.), Tmaxh(0.), Betah(0.), AveLogAlpha(0.), AveLogTmax(0.),
00056     SigmaLogAlpha(0.), SigmaLogTmax(0.), Rho(0.), Alpha(0.), Tmax(0.), Beta(0.)
00057 {  
00058   if(!aPar) { thePar = new GFlashSamplingShowerTuning; owning = true; }
00059   else      { thePar = aPar; owning = false; }
00060 
00061   SetMaterial(aMat1,aMat2 );
00062   d1=dd1;
00063   d2=dd2;
00064 
00065   // Longitudinal Coefficients for a homogenious calo
00066 
00067   // shower max
00068   ParAveT1    = thePar->ParAveT1();   // ln (ln y -0.812)  
00069   ParAveA1    = thePar->ParAveA1();   // ln a (0.81 + (0.458 + 2.26/Z)ln y)
00070   ParAveA2    = thePar->ParAveA2();
00071   ParAveA3    = thePar->ParAveA3();
00072   // Sampling
00073   ParsAveT1   = thePar->ParsAveT1();  // T_sam = log(exp( log T_hom) + t1*Fs-1 + t2*(1-ehat));
00074   ParsAveT2   = thePar->ParsAveT2();
00075   ParsAveA1   = thePar->ParsAveA1();  
00076   // Variance of shower max sampling 
00077   ParsSigLogT1 = thePar->ParSigLogT1();    // Sigma T1 (-2.5 + 1.25 ln y)**-1 
00078   ParsSigLogT2 = thePar->ParSigLogT2();
00079   // variance of 'alpha'
00080   ParsSigLogA1 = thePar->ParSigLogA1();    // Sigma a (-0.82 + 0.79 ln y)**-1 
00081   ParsSigLogA2 = thePar->ParSigLogA2();  
00082   // correlation alpha%T
00083   ParsRho1     = thePar->ParRho1();   // Rho = 0.784 -0.023 ln y 
00084   ParsRho2     = thePar->ParRho2();
00085 
00086   // Radial Coefficients
00087   // r_C (tau)= z_1 +z_2 tau
00088   // r_t (tau)= k1 (std::exp (k3(tau -k2 ))+std::exp (k_4 (tau- k_2))))
00089   ParRC1 =   thePar->ParRC1();  // z_1 = 0.0251 + 0.00319 ln E
00090   ParRC2 =   thePar->ParRC2();
00091   ParRC3 =   thePar->ParRC3();  // z_2 = 0.1162 + - 0.000381 Z
00092   ParRC4 =   thePar->ParRC4();
00093 
00094   ParWC1 = thePar->ParWC1();
00095   ParWC2 = thePar->ParWC2();
00096   ParWC3 = thePar->ParWC3();
00097   ParWC4 = thePar->ParWC4();
00098   ParWC5 = thePar->ParWC5(); 
00099   ParWC6 = thePar->ParWC6();
00100   ParRT1 = thePar->ParRT1();
00101   ParRT2 = thePar->ParRT2();
00102   ParRT3 = thePar->ParRT3();
00103   ParRT4 = thePar->ParRT4(); 
00104   ParRT5 = thePar->ParRT5();
00105   ParRT6 = thePar->ParRT6();
00106 
00107   //additional sampling parameter
00108   ParsRC1= thePar->ParsRC1();
00109   ParsRC2= thePar->ParsRC2();
00110   ParsWC1= thePar->ParsWC1();
00111   ParsWC2=  thePar->ParsWC2(); 
00112   ParsRT1= thePar->ParsRT1();
00113   ParsRT2= thePar->ParsRT2();
00114 
00115   // Coeff for fluctuedted radial  profiles for a sampling media
00116   ParsSpotT1   = thePar->ParSpotT1();     // T_spot = T_hom =(0.698 + 0.00212)
00117   ParsSpotT2   = thePar->ParSpotT2();
00118   ParsSpotA1   = thePar->ParSpotA1();     // a_spot= a_hom (0.639 + 0.00334)
00119   ParsSpotA2   = thePar->ParSpotA2();    
00120   ParsSpotN1   = thePar->ParSpotN1();     // N_Spot 93 * ln(Z) E ** 0.876   
00121   ParsSpotN2   = thePar->ParSpotN2(); 
00122   SamplingResolution  = thePar->SamplingResolution();
00123   ConstantResolution  = thePar->ConstantResolution(); 
00124   NoiseResolution     = thePar->NoiseResolution();
00125 
00126   // Inits
00127   NSpot         = 0.00;
00128   AlphaNSpot    = 0.00;
00129   TNSpot        = 0.00;
00130   BetaNSpot     = 0.00;
00131   RadiusCore    = 0.00;
00132   WeightCore    = 0.00;
00133   RadiusTail    = 0.00;   
00134   ComputeZAX0EFFetc();
00135 
00136   G4cout << "/********************************************/ " << G4endl;
00137   G4cout << "  - GFlashSamplingShowerParameterisation::Constructor -  " << G4endl;
00138   G4cout << "/********************************************/ " << G4endl;  
00139 }

GFlashSamplingShowerParameterisation::~GFlashSamplingShowerParameterisation (  ) 

Definition at line 143 of file GFlashSamplingShowerParameterisation.cc.

00144 {
00145   if(owning) { delete thePar; }
00146 }


Member Function Documentation

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

Definition at line 294 of file GFlashSamplingShowerParameterisation.cc.

00295 {
00296   G4double DEneFluctuated = DEne;
00297   G4double Resolution     = std::pow(SamplingResolution,2);
00298 
00299   //       +pow(NoiseResolution,2)/  //@@@@@@@@ FIXME 
00300   //                         Energy*(1.*MeV)+
00301   //                         pow(ConstantResolution,2)*
00302   //                          Energy/(1.*MeV);
00303 
00304   if(Resolution >0.0 && DEne > 0.00)
00305   {
00306     G4float x1=DEne/Resolution;
00307     G4float x2 = CLHEP::RandGamma::shoot(x1, 1.0)*Resolution;     
00308     DEneFluctuated=x2;
00309   }
00310   return DEneFluctuated;
00311 }

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

Implements GVFlashShowerParameterisation.

Definition at line 383 of file GFlashSamplingShowerParameterisation.cc.

Referenced by GenerateRadius().

00384 {
00385   G4double z1 = ParRC1 + ParRC2* std::log(Energy/GeV);         //ok
00386   G4double z2 = ParRC3+ParRC4*Zeff;                            //ok
00387   RadiusCore  =  z1 + z2 * Tau;                                //ok 
00388   G4double p1 = ParWC1+ParWC2*Zeff;                            //ok
00389   G4double p2 = ParWC3+ParWC4*Zeff;                            //ok
00390   G4double p3 = ParWC5+ParWC6*std::log(Energy/GeV);            //ok
00391   WeightCore   =  p1 * std::exp( (p2-Tau)/p3-  std::exp( (p2-Tau) /p3) ); //ok
00392   
00393   G4double k1 = ParRT1+ParRT2*Zeff;                // ok
00394   G4double k2 = ParRT3;                            // ok
00395   G4double k3 = ParRT4;                            // ok
00396   G4double k4 = ParRT5+ParRT6* std::log(Energy/GeV);    // ok
00397   
00398   RadiusTail   = k1*(std::exp(k3*(Tau-k2))
00399                + std::exp(k4*(Tau-k2)) );            //ok
00400 
00401   // sampling calorimeter  
00402 
00403   RadiusCore   = RadiusCore + ParsRC1*(1-ehat) + ParsRC2/Fs*std::exp(-Tau); //ok
00404   WeightCore   = WeightCore + (1-ehat)
00405                             * (ParsWC1+ParsWC2/Fs * std::exp(-std::pow((Tau-1.),2))); //ok
00406   RadiusTail   = RadiusTail + (1-ehat)* ParsRT1+ ParsRT2/Fs *std::exp(-Tau);     //ok  
00407 }

G4double GFlashSamplingShowerParameterisation::ComputeTau ( G4double  LongitudinalPosition  )  [virtual]

Implements GVFlashShowerParameterisation.

Definition at line 372 of file GFlashSamplingShowerParameterisation.cc.

Referenced by GenerateRadius().

00373 {
00374   G4double tau = LongitudinalPosition / Tmax/ X0eff     //<t> = T* a /(a - 1) 
00375                  * (Alpha-1.00) /Alpha
00376                  * std::exp(AveLogAlpha)/(std::exp(AveLogAlpha)-1.);  //ok 
00377   return tau;
00378 }

void GFlashSamplingShowerParameterisation::ComputeZAX0EFFetc (  ) 

Definition at line 174 of file GFlashSamplingShowerParameterisation.cc.

References G4cout, and G4endl.

Referenced by GFlashSamplingShowerParameterisation().

00175 {
00176   G4cout << "/************ ComputeZAX0EFFetc ************/" << G4endl;
00177   G4cout << "  - GFlashSamplingShowerParameterisation::Material -  " << G4endl;
00178 
00179   G4double Es = 21*MeV; //constant
00180 
00181   // material and geometry parameters for a sampling calorimeter
00182   G4double denominator = (d1*density1 + d2*density2);
00183   G4double W1 = (d1*density1) / denominator;
00184   G4double W2  = (d2*density2)/denominator;
00185   Zeff   = ( W1*Z2 ) + (W2*Z1);    //X0*Es/Ec;
00186   Aeff   = ( W1*A1 ) + (W2*A2);
00187   X0eff  =(1/ (( W1 / X01) +( W2 / X02))); 
00188   Rhoeff = ( (d1 *density1 ) + (d2 * density2 ))/G4double (d2  + d1  );
00189   Rmeff =  1/  ((((W1*Ec1)/ X01)   +   ((W2* Ec2)/  X02) ) / Es ) ;
00190   Eceff =  X0eff *((W1*Ec1)/ X01 + (W2* Ec2)/  X02 );      
00191   Fs =  X0eff/G4double ((d1/mm )+(d2/mm) );
00192   ehat = (1. / (1+ 0.007*(Z1- Z2)));
00193 
00194   G4cout << "W1= "  << W1 << G4endl;
00195   G4cout << "W2= " << W2 << G4endl;
00196   G4cout << "effective quantities Zeff = "<<Zeff<< G4endl;
00197   G4cout << "effective quantities Aeff = "<<Aeff<< G4endl;
00198   G4cout << "effective quantities Rhoeff = "<<Rhoeff/g *cm3<<" g/cm3"  << G4endl;
00199   G4cout << "effective quantities X0eff = "<<X0eff/cm <<" cm" << G4endl;
00200 
00201   X0eff = X0eff * Rhoeff;
00202 
00203   G4cout << "effective quantities X0eff = "<<X0eff/g*cm2 <<" g/cm2" << G4endl;  
00204   X0eff = X0eff /Rhoeff;
00205   G4cout << "effective quantities RMeff = "<<Rmeff/cm<<"  cm" << G4endl; 
00206   Rmeff = Rmeff* Rhoeff;
00207   G4cout << "effective quantities RMeff = "<<Rmeff/g *cm2<<" g/cm2" << G4endl;  
00208   Rmeff = Rmeff/ Rhoeff;
00209   G4cout << "effective quantities Eceff = "<<Eceff/MeV<< " MeV"<< G4endl;  
00210   G4cout << "effective quantities Fs = "<<Fs<<G4endl;
00211   G4cout << "effective quantities ehat = "<<ehat<<G4endl;
00212   G4cout << "/********************************************/ " <<G4endl; 
00213 }

G4double GFlashSamplingShowerParameterisation::GenerateExponential ( G4double  Energy  )  [virtual]

Implements GVFlashShowerParameterisation.

Definition at line 412 of file GFlashSamplingShowerParameterisation.cc.

00413 {
00414   G4double ParExp1 =  9./7.*X0eff;
00415   G4double random  = -ParExp1*CLHEP::RandExponential::shoot() ;
00416   return random;
00417 }

void GFlashSamplingShowerParameterisation::GenerateLongitudinalProfile ( G4double  Energy  )  [virtual]

Implements GVFlashShowerParameterisation.

Definition at line 218 of file GFlashSamplingShowerParameterisation.cc.

References FatalException, and G4Exception().

00219 {
00220   if ((material1==0) || (material2 ==0))
00221   {
00222     G4Exception("GFlashSamplingShowerParameterisation::GenerateLongitudinalProfile()",
00223                 "InvalidSetup", FatalException, "No material initialized!");
00224   }  
00225   G4double y = Energy/Eceff;
00226   ComputeLongitudinalParameters(y);  
00227   GenerateEnergyProfile(y);
00228   GenerateNSpotProfile(y);
00229 }

G4double GFlashSamplingShowerParameterisation::GeneratePhi (  ) 

Reimplemented from GVFlashShowerParameterisation.

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

Implements GVFlashShowerParameterisation.

Definition at line 342 of file GFlashSamplingShowerParameterisation.cc.

References ComputeRadialParameters(), ComputeTau(), DBL_MAX, and G4UniformRand.

00343 {
00344   if(ispot < 1) 
00345   {
00346     // Determine lateral parameters in the middle of the step.
00347     // They depend on energy & position along step
00348     //
00349     G4double Tau = ComputeTau(LongitudinalPosition);
00350     ComputeRadialParameters(Energy,Tau);  
00351   }
00352   
00353   G4double Radius;
00354   G4double Random1 = G4UniformRand();
00355   G4double Random2 = G4UniformRand(); 
00356   if(Random1  <WeightCore) //WeightCore = p < w_i  
00357   {
00358     Radius = Rmeff * RadiusCore * std::sqrt( Random2/(1. - Random2) );
00359   }
00360   else
00361   {
00362     Radius = Rmeff * RadiusTail * std::sqrt( Random2/(1. - Random2) );
00363   }   
00364   Radius =  std::min(Radius,DBL_MAX);
00365   return Radius;
00366 }

G4double GFlashSamplingShowerParameterisation::GetAveR90 (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 74 of file GFlashSamplingShowerParameterisation.hh.

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

G4double GFlashSamplingShowerParameterisation::GetAveR99 (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 73 of file GFlashSamplingShowerParameterisation.hh.

00073 {return (3.5 * Rmeff);}

G4double GFlashSamplingShowerParameterisation::GetAveT90 (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 78 of file GFlashSamplingShowerParameterisation.hh.

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

G4double GFlashSamplingShowerParameterisation::GetAveT99 (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 77 of file GFlashSamplingShowerParameterisation.hh.

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

G4double GFlashSamplingShowerParameterisation::GetAveTmx (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 76 of file GFlashSamplingShowerParameterisation.hh.

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

G4double GFlashSamplingShowerParameterisation::GetEc (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 82 of file GFlashSamplingShowerParameterisation.hh.

00082 {return Eceff;} 

G4double GFlashSamplingShowerParameterisation::GetNspot (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 80 of file GFlashSamplingShowerParameterisation.hh.

00080 {return NSpot;}

G4double GFlashSamplingShowerParameterisation::GetRm (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 83 of file GFlashSamplingShowerParameterisation.hh.

00083 {return Rmeff;} 

G4double GFlashSamplingShowerParameterisation::GetX0 (  )  [inline, virtual]

Implements GVFlashShowerParameterisation.

Definition at line 81 of file GFlashSamplingShowerParameterisation.hh.

00081 {return X0eff;}  

G4double GFlashSamplingShowerParameterisation::IntegrateEneLongitudinal ( G4double  LongitudinalStep  )  [virtual]

Implements GVFlashShowerParameterisation.

Definition at line 316 of file GFlashSamplingShowerParameterisation.cc.

References GVFlashShowerParameterisation::gam().

00317 {
00318   G4double LongitudinalStepInX0 = LongitudinalStep / X0eff;
00319   G4float x1= Betah*LongitudinalStepInX0;
00320   G4float x2= Alphah;
00321   float x3 =  gam(x1,x2);
00322   G4double DEne=x3;
00323   return DEne;
00324 }

G4double GFlashSamplingShowerParameterisation::IntegrateNspLongitudinal ( G4double  LongitudinalStep  )  [virtual]

Implements GVFlashShowerParameterisation.

Definition at line 329 of file GFlashSamplingShowerParameterisation.cc.

References GVFlashShowerParameterisation::gam().

00330 {
00331   G4double LongitudinalStepInX0 = LongitudinalStep / X0eff; 
00332   G4float x1 = BetaNSpot*LongitudinalStepInX0;
00333   G4float x2 = AlphaNSpot;
00334   G4float x3 =  gam(x1,x2);
00335   G4double DNsp = x3;
00336   return DNsp;
00337 }

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

Definition at line 151 of file GFlashSamplingShowerParameterisation.cc.

References G4Material::GetDensity(), GVFlashShowerParameterisation::GetEffA(), GVFlashShowerParameterisation::GetEffZ(), and G4Material::GetRadlen().

Referenced by GFlashSamplingShowerParameterisation().

00152 {
00153   G4double Es = 21*MeV;
00154   material1= mat1;
00155   Z1 = GetEffZ(material1);
00156   A1 = GetEffA(material1);
00157   density1 = material1->GetDensity();
00158   X01  = material1->GetRadlen();   
00159   Ec1      = 2.66 * std::pow((X01 * Z1 / A1),1.1); 
00160   Rm1 = X01*Es/Ec1;
00161 
00162   material2= mat2;
00163   Z2 = GetEffZ(material2);
00164   A2 = GetEffA(material2);
00165   density2 = material2->GetDensity();
00166   X02  = material2->GetRadlen();   
00167   Ec2      = 2.66 * std::pow((X02 * Z2 / A2),1.1); 
00168   Rm2 = X02*Es/Ec2; 
00169   // PrintMaterial(); 
00170 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:54:02 2013 for Geant4 by  doxygen 1.4.7