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 #include "G4E1SingleProbability1.hh"
00032 #include "G4ConstantLevelDensityParameter.hh"
00033 #include "Randomize.hh"
00034 #include "G4Pow.hh"
00035 #include "G4PhysicalConstants.hh"
00036 #include "G4SystemOfUnits.hh"
00037
00038
00039
00040
00041 G4E1SingleProbability1::G4E1SingleProbability1()
00042 {}
00043
00044 G4E1SingleProbability1::~G4E1SingleProbability1()
00045 {}
00046
00047
00048
00049
00050 G4double G4E1SingleProbability1::EmissionProbDensity(const G4Fragment& frag,
00051 G4double exciteE)
00052 {
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 G4double theProb = 0.0;
00063
00064 G4int Afrag = frag.GetA_asInt();
00065 G4int Zfrag = frag.GetZ_asInt();
00066 G4double Uexcite = frag.GetExcitationEnergy();
00067
00068 if( (Uexcite-exciteE) < 0.0 || exciteE < 0 || Uexcite <= 0) return theProb;
00069
00070
00071
00072
00073
00074 G4ConstantLevelDensityParameter a;
00075 G4double aLevelDensityParam = a.LevelDensityParameter(Afrag,Zfrag,Uexcite);
00076
00077 G4double levelDensBef = std::exp(2.0*std::sqrt(aLevelDensityParam*Uexcite));
00078 G4double levelDensAft = std::exp(2.0*std::sqrt(aLevelDensityParam*(Uexcite-exciteE)));
00079
00080
00081
00082
00083
00084
00085 G4double sigma0 = 2.5 * Afrag * millibarn;
00086
00087 G4double Egdp = (40.3 / G4Pow::GetInstance()->powZ(Afrag,0.2) )*MeV;
00088 G4double GammaR = 0.30 * Egdp;
00089
00090 const G4double normC = 1.0 / ((pi * hbarc)*(pi * hbarc));
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 G4double numerator = sigma0 * exciteE*exciteE * GammaR*GammaR;
00105 G4double denominator = (exciteE*exciteE - Egdp*Egdp)*
00106 (exciteE*exciteE - Egdp*Egdp) + GammaR*GammaR*exciteE*exciteE;
00107
00108 G4double sigmaAbs = numerator/denominator;
00109
00110 theProb = normC * sigmaAbs * exciteE*exciteE *
00111 levelDensAft/levelDensBef;
00112
00113
00114
00115
00116
00117 return theProb;
00118
00119 }
00120
00121 G4double G4E1SingleProbability1::EmissionProbability(const G4Fragment& frag,
00122 G4double exciteE)
00123 {
00124
00125
00126
00127
00128
00129
00130 G4double theProb = 0.0;
00131
00132 G4double ScaleFactor = 1.0;
00133
00134 const G4double Uexcite = frag.GetExcitationEnergy();
00135 G4double Uafter = Uexcite - exciteE;
00136
00137 G4double normC = 3.0;
00138
00139 const G4double upperLim = Uexcite;
00140 const G4double lowerLim = Uafter;
00141 const G4int numIters = 25;
00142
00143
00144
00145
00146 G4double integ = normC *
00147 EmissionIntegration(frag,exciteE,lowerLim,upperLim,numIters);
00148
00149 if(integ > 0.0) theProb = integ;
00150
00151 return theProb * ScaleFactor;
00152
00153 }
00154
00155 G4double G4E1SingleProbability1::EmissionIntegration(const G4Fragment& frag,
00156 G4double ,
00157 G4double lowLim, G4double upLim,
00158 G4int numIters)
00159
00160 {
00161
00162
00163
00164 G4double x;
00165 const G4double root3 = 1.0/std::sqrt(3.0);
00166
00167 G4double Step = (upLim-lowLim)/(2.0*numIters);
00168 G4double Delta = Step*root3;
00169
00170 G4double mean = 0.0;
00171
00172 G4double theInt = 0.0;
00173
00174 for(G4int i = 0; i < numIters; i++) {
00175
00176 x = (2*i + 1)/Step;
00177 G4double E1ProbDensityA = EmissionProbDensity(frag,x+Delta);
00178 G4double E1ProbDensityB = EmissionProbDensity(frag,x-Delta);
00179
00180 mean += E1ProbDensityA + E1ProbDensityB;
00181
00182 }
00183
00184 if(mean*Step > 0.0) theInt = mean*Step;
00185
00186 return theInt;
00187
00188 }
00189
00190
00191