00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef GFlashSamplingShowerParameterisation_h
00042 #define GFlashSamplingShowerParameterisation_h 1
00043
00044 #include "globals.hh"
00045 #include "GFlashSamplingShowerTuning.hh"
00046 #include "GVFlashShowerParameterisation.hh"
00047
00048 class G4Material;
00049
00050 class GFlashSamplingShowerParameterisation
00051 : public GVFlashShowerParameterisation
00052 {
00053 public:
00054
00055 GFlashSamplingShowerParameterisation(G4Material* aMat1, G4Material* aMat2,
00056 G4double d1, G4double d2,
00057 GFlashSamplingShowerTuning * aPar = 0);
00058 ~GFlashSamplingShowerParameterisation();
00059
00060 void ComputeRadialParameters(G4double y, G4double Tau);
00061 void GenerateLongitudinalProfile(G4double Energy);
00062 void ComputeZAX0EFFetc();
00063
00064 G4double IntegrateEneLongitudinal(G4double LongitudinalStep);
00065 G4double IntegrateNspLongitudinal(G4double LongitudinalStep);
00066 G4double ComputeTau(G4double LongitudinalPosition);
00067 void SetMaterial(G4Material *mat1, G4Material *mat2);
00068 G4double GeneratePhi();
00069 G4double GenerateRadius(G4int ispot, G4double Energy,
00070 G4double LongitudinalPosition);
00071 G4double GenerateExponential(G4double Energy);
00072
00073 inline G4double GetAveR99() {return (3.5 * Rmeff);}
00074 inline G4double GetAveR90() {return (1.5 * Rmeff);}
00075
00076 inline G4double GetAveTmx() {return (X0eff*std::exp(AveLogTmax));}
00077 inline G4double GetAveT99() {return (X0eff*AveLogTmax/(AveLogAlpha-1.00));}
00078 inline G4double GetAveT90() {return (2.5* X0eff* std::exp( AveLogTmax));}
00079
00080 inline G4double GetNspot() {return NSpot;}
00081 inline G4double GetX0() {return X0eff;}
00082 inline G4double GetEc() {return Eceff;}
00083 inline G4double GetRm() {return Rmeff;}
00084
00085 G4double ApplySampling(const G4double DEne, const G4double Energy);
00086
00087 private:
00088
00089
00090
00091 G4Material *material1, *material2 ;
00092 G4double density1, A1, Z1, X01, Ec1, Rm1, d1;
00093 G4double density2, A2, Z2, X02, Ec2, Rm2, d2;
00094 G4double Aeff, Rhoeff, X0eff, Eceff, Rmeff, Fs, ehat, Zeff;
00095
00096
00097
00098 G4double ConstantResolution;
00099 G4double NoiseResolution;
00100 G4double SamplingResolution;
00101
00102
00103
00104 GFlashSamplingShowerTuning * thePar;
00105 G4bool owning;
00106
00107
00108
00109
00110 G4double ParAveT1, ParAveT2;
00111 G4double ParAveA1,ParAveA2, ParAveA3;
00112 G4double ParSigLogT1,ParSigLogT2;
00113 G4double ParSigLogA1,ParSigLogA2;
00114 G4double ParRho1,ParRho2;
00115
00116
00117
00118
00119 G4double ParsAveT1, ParsAveT2;
00120 G4double ParsAveA1,ParsAveA2;
00121 G4double ParsSigLogT1,ParsSigLogT2;
00122 G4double ParsSigLogA1,ParsSigLogA2;
00123 G4double ParsRho1,ParsRho2;
00124 void ComputeLongitudinalParameters(G4double y);
00125 void GenerateEnergyProfile(G4double y);
00126 void GenerateNSpotProfile(G4double y);
00127
00128
00129
00130 G4double ParRC1,ParRC2,ParRC3,ParRC4;
00131 G4double ParWC1,ParWC2,ParWC3;
00132 G4double ParWC4,ParWC5,ParWC6;
00133 G4double ParRT1,ParRT2,ParRT3,ParRT4;
00134 G4double ParRT5,ParRT6;
00135
00136
00137
00138 G4double ParsRC1,ParsRC2;
00139 G4double ParsWC1,ParsWC2;
00140 G4double ParsRT1,ParsRT2;
00141
00142
00143
00144 G4double ParsSpotT1,ParsSpotT2,ParsSpotA1, ParsSpotA2;
00145 G4double ParsSpotN1,ParsSpotN2;
00146
00147
00148
00149
00150
00151 G4double AveLogAlphah,AveLogTmaxh;
00152 G4double SigmaLogAlphah,SigmaLogTmaxh;
00153 G4double Rhoh;
00154 G4double Alphah,Tmaxh,Betah;
00155
00156
00157
00158
00159
00160 G4double AveLogAlpha,AveLogTmax;
00161 G4double SigmaLogAlpha,SigmaLogTmax;
00162 G4double Rho;
00163 G4double Alpha,Tmax,Beta;
00164
00165
00166
00167 G4double NSpot,AlphaNSpot,TNSpot,BetaNSpot;
00168
00169
00170
00171 G4double RadiusCore, WeightCore,RadiusTail;
00172 };
00173
00174 #endif