Changeset 1347 for trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc
- Timestamp:
- Dec 22, 2010, 3:52:27 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc
r1315 r1347 24 24 // ******************************************************************** 25 25 // 26 //J.M. Quesada (August2008). Based on: 26 // $Id: G4AlphaEvaporationProbability.cc,v 1.18 2010/11/17 11:06:03 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-04-ref-00 $ 28 // 29 // J.M. Quesada (August2008). Based on: 27 30 // 28 31 // Hadronic Process: Nuclear De-excitations 29 32 // by V. Lara (Oct 1998) 30 33 // 31 // Modif (03 September 2008) by J. M. Quesada for external choice of inverse 32 // cross section option 34 // Modified: 35 // 03-09-2008 J.M. Quesada for external choice of inverse cross section option 36 // 17-11-2010 V.Ivanchenko integer Z and A 33 37 34 38 #include "G4AlphaEvaporationProbability.hh" … … 36 40 G4AlphaEvaporationProbability::G4AlphaEvaporationProbability() : 37 41 G4EvaporationProbability(4,2,1,&theCoulombBarrier) // A,Z,Gamma,&theCoumlombBarrier 38 { 42 {} 43 44 G4AlphaEvaporationProbability::~G4AlphaEvaporationProbability() 45 {} 46 47 G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 48 { return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());} 39 49 40 } 41 42 43 G4AlphaEvaporationProbability::G4AlphaEvaporationProbability(const G4AlphaEvaporationProbability &): G4EvaporationProbability() 44 { 45 throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationProbability::copy_constructor meant to not be accessable"); 46 } 47 48 49 50 51 const G4AlphaEvaporationProbability & G4AlphaEvaporationProbability:: 52 operator=(const G4AlphaEvaporationProbability &) 53 { 54 throw G4HadronicException(__FILE__, __LINE__, "G4AlphaEvaporationProbability::operator= meant to not be accessable"); 55 return *this; 56 } 57 58 59 G4bool G4AlphaEvaporationProbability::operator==(const G4AlphaEvaporationProbability &) const 60 { 61 return false; 62 } 63 64 G4bool G4AlphaEvaporationProbability::operator!=(const G4AlphaEvaporationProbability &) const 65 { 66 return true; 67 } 68 69 70 G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 71 { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));} 50 G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &) 51 { return 0.0; } 52 53 G4double G4AlphaEvaporationProbability::CCoeficient(G4int aZ) 54 { 55 // Data comes from 56 // Dostrovsky, Fraenkel and Friedlander 57 // Physical Review, vol 116, num. 3 1959 58 // 59 // const G4int size = 5; 60 // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; 61 // G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06}; 62 G4double C = 0.0; 72 63 73 G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &) 74 { return 0.0; } 75 76 G4double G4AlphaEvaporationProbability::CCoeficient(const G4double aZ) 77 { 78 // Data comes from 79 // Dostrovsky, Fraenkel and Friedlander 80 // Physical Review, vol 116, num. 3 1959 81 // 82 // const G4int size = 5; 83 // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; 84 // G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06}; 85 G4double C = 0.0; 86 87 88 if (aZ <= 30) { 89 C = 0.10; 90 } else if (aZ <= 50) { 91 C = 0.1 + -((aZ-50.)/20.)*0.02; 92 } else if (aZ < 70) { 93 C = 0.08 + -((aZ-70.)/20.)*0.02; 94 } else { 95 C = 0.06; 96 } 97 return C; 64 if (aZ <= 30) 65 { 66 C = 0.10; 67 } 68 else if (aZ <= 50) 69 { 70 C = 0.1 - (aZ-30)*0.001; 71 } 72 else if (aZ < 70) 73 { 74 C = 0.08 - (aZ-50)*0.001; 75 } 76 else 77 { 78 C = 0.06; 79 } 80 return C; 98 81 } 99 82 … … 104 87 //OPT=3,4 Kalbach's parameterization 105 88 // 106 G4double G4AlphaEvaporationProbability::CrossSection(const G4Fragment & fragment,107 constG4double K)89 G4double 90 G4AlphaEvaporationProbability::CrossSection(const G4Fragment & fragment, G4double K) 108 91 { 109 92 theA=GetA(); 110 93 theZ=GetZ(); 111 ResidualA=fragment.GetA()-theA; 112 ResidualZ=fragment.GetZ()-theZ; 113 114 ResidualAthrd=std::pow(ResidualA,0.33333); 115 FragmentA=fragment.GetA(); 116 FragmentAthrd=std::pow(FragmentA,0.33333); 117 94 ResidualA=fragment.GetA_asInt()-theA; 95 ResidualZ=fragment.GetZ_asInt()-theZ; 96 97 ResidualAthrd=fG4pow->Z13(ResidualA); 98 FragmentA=fragment.GetA_asInt(); 99 FragmentAthrd=fG4pow->Z13(FragmentA); 118 100 119 101 if (OPTxs==0) {std::ostringstream errOs; … … 133 115 } 134 116 135 136 // 137 //********************* OPT=1,2 : Chatterjee's cross section ************************ 117 // 118 //********************* OPT=1,2 : Chatterjee's cross section ******************** 138 119 //(fitting to cross section from Bechetti & Greenles OM potential) 139 120 140 G4double G4AlphaEvaporationProbability::GetOpt12(const G4double K) 141 { 142 // c ** alpha from huizenga and igo 121 G4double G4AlphaEvaporationProbability::GetOpt12(G4double K) 122 { 143 123 G4double Kc=K; 144 145 // JMQ xsec is set consta t above limit of validity146 if (K >50) Kc=50;147 124 125 // JMQ xsec is set constant above limit of validity 126 if (K > 50*MeV) { Kc = 50*MeV; } 127 148 128 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs; 149 129 150 130 G4double p0 = 10.95; 151 131 G4double p1 = -85.2; … … 160 140 G4double delta=1.2; 161 141 162 163 142 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta); 164 143 p = p0 + p1/Ec + p2/(Ec*Ec); 165 144 landa = landa0*ResidualA + landa1; 166 mu = mu0*std::pow(ResidualA,mu1); 167 nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 145 G4double resmu1 = fG4pow->powZ(ResidualA,mu1); 146 mu = mu0*resmu1; 147 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 168 148 q = landa - nu/(Ec*Ec) - 2*p*Ec; 169 149 r = mu + 2*nu/Ec + p*(Ec*Ec); 170 150 171 151 ji=std::max(Kc,Ec); 172 152 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;} 173 153 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;} 174 154 175 155 if (xs <0.0) {xs=0.0;} 176 156 177 157 return xs; 178 179 158 } 180 159 181 160 // *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)************* 182 G4double G4AlphaEvaporationProbability::GetOpt34( constG4double K)161 G4double G4AlphaEvaporationProbability::GetOpt34(G4double K) 183 162 // c ** alpha from huizenga and igo 184 163 { 185 186 164 G4double landa, mu, nu, p , signor(1.),sig; 187 165 G4double ec,ecsq,xnulam,etest(0.),a; 188 166 G4double b,ecut,cut,ecut2,geom,elab; 189 167 190 191 168 G4double flow = 1.e-18; 192 169 G4double spill= 1.e+18; 193 170 194 G4double 171 G4double p0 = 10.95; 195 172 G4double p1 = -85.2; 196 173 G4double p2 = 1146.; … … 204 181 205 182 G4double ra=1.20; 206 183 207 184 //JMQ 13/02/09 increase of reduced radius to lower the barrier 208 185 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra); … … 211 188 p = p0 + p1/ec + p2/ecsq; 212 189 landa = landa0*ResidualA + landa1; 213 a = std::pow(ResidualA,mu1);190 a = fG4pow->powZ(ResidualA,mu1); 214 191 mu = mu0 * a; 215 192 nu = a* (nu0+nu1*ec+nu2*ecsq); 216 193 xnulam = nu / landa; 217 if (xnulam > spill) xnulam=0.;218 if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);219 194 if (xnulam > spill) { xnulam=0.; } 195 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); } 196 220 197 a = -2.*p*ec + landa - nu/ecsq; 221 198 b = p*ecsq + mu + 2.*nu/ec; 222 199 ecut = 0.; 223 200 cut = a*a - 4.*p*b; 224 if (cut > 0.) ecut = std::sqrt(cut);201 if (cut > 0.) { ecut = std::sqrt(cut); } 225 202 ecut = (ecut-a) / (p+p); 226 203 ecut2 = ecut; 227 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut) 228 //ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum 229 // if (cut < 0.) ecut2 = ecut - 2.; 230 if (cut < 0.) ecut2 = ecut; 231 elab = K * FragmentA / ResidualA; 204 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut) 205 // ecut<0 means that there is no cut with energy axis, i.e. xs is set 206 // to 0 bellow minimum 207 // if (cut < 0.) ecut2 = ecut - 2.; 208 if (cut < 0.) { ecut2 = ecut; } 209 elab = K * FragmentA / G4double(ResidualA); 232 210 sig = 0.; 233 211 234 212 if (elab <= ec) { //start for E<Ec 235 if (elab > ecut2) sig = (p*elab*elab+a*elab+b) * signor;213 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; } 236 214 } //end for E<Ec 237 215 else { //start for E>Ec 238 216 sig = (landa*elab+mu+nu/elab) * signor; 239 217 geom = 0.; 240 if (xnulam < flow || elab < etest) return sig;218 if (xnulam < flow || elab < etest) { return sig; } 241 219 geom = std::sqrt(theA*K); 242 220 geom = 1.23*ResidualAthrd + ra + 4.573/geom; … … 245 223 } //end for E>Ec 246 224 return sig; 247 248 } 249 250 // ************************** end of cross sections ******************************* 225 } 226
Note: See TracChangeset
for help on using the changeset viewer.