Changeset 962 for trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc
- Timestamp:
- Apr 6, 2009, 12:30:29 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc
r819 r962 24 24 // ******************************************************************** 25 25 // 26 // 27 // $Id: G4AlphaEvaporationProbability.cc,v 1.4 2006/06/29 20:10:19 gunter Exp $ 28 // GEANT4 tag $Name: geant4-09-01-patch-02 $ 26 //J.M. Quesada (August2008). Based on: 29 27 // 30 28 // Hadronic Process: Nuclear De-excitations 31 // by V. Lara (Nov 1999) 32 // 33 29 // by V. Lara (Oct 1998) 30 // 31 // Modif (03 September 2008) by J. M. Quesada for external choice of inverse 32 // cross section option 34 33 35 34 #include "G4AlphaEvaporationProbability.hh" 36 35 37 36 G4AlphaEvaporationProbability::G4AlphaEvaporationProbability() : 38 G4EvaporationProbability(4,2,4) // A,Z,Gamma 39 { 40 // const G4int NumExcitedStates = 31+1; 41 std::vector<G4double>::size_type NumExcitedStatesEnergy = 31+1; 42 std::vector<G4int>::size_type NumExcitedStatesSpin = 31+1; 43 ExcitEnergies.reserve(NumExcitedStatesEnergy); 44 ExcitSpins.reserve(NumExcitedStatesSpin); 45 ExcitEnergies.insert(ExcitEnergies.begin(),NumExcitedStatesEnergy,0.0); 46 ExcitSpins.insert(ExcitSpins.begin(),NumExcitedStatesSpin,0); 47 // for (G4int i = 0; i < NumExcitedStates; i++) { 48 // ExcitEnergies(i) = 0.0; 49 // ExcitSpins(i) = 0; 50 // } 51 52 ExcitEnergies[18] = 7.98*MeV; 53 ExcitEnergies[20] = 6.90*MeV; 54 ExcitEnergies[25] = 5.83*MeV; 55 ExcitEnergies[26] = 8.57*MeV; 56 ExcitEnergies[31] = 5.33*MeV; 57 58 ExcitSpins[18] = 4; 59 ExcitSpins[20] = 6; 60 ExcitSpins[25] = 7; 61 ExcitSpins[26] = 4; 62 ExcitSpins[31] = 13; 63 64 SetExcitationEnergiesPtr(&ExcitEnergies); 65 SetExcitationSpinsPtr(&ExcitSpins); 37 G4EvaporationProbability(4,2,1,&theCoulombBarrier) // A,Z,Gamma,&theCoumlombBarrier 38 { 39 66 40 } 67 41 … … 93 67 } 94 68 95 G4double G4AlphaEvaporationProbability::CCoeficient(const G4double aZ) const 69 70 G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 71 { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));} 72 73 G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &) 74 { return 0.0; } 75 76 G4double G4AlphaEvaporationProbability::CCoeficient(const G4double aZ) 96 77 { 97 78 // Data comes from … … 116 97 return C; 117 98 } 99 100 /////////////////////////////////////////////////////////////////////////////////// 101 //J. M. Quesada (Dec 2007-June 2008): New inverse reaction cross sections 102 //OPT=0 Dostrovski's parameterization 103 //OPT=1,2 Chatterjee's paramaterization 104 //OPT=3,4 Kalbach's parameterization 105 // 106 G4double G4AlphaEvaporationProbability::CrossSection(const G4Fragment & fragment, 107 const G4double K) 108 { 109 theA=GetA(); 110 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 118 119 if (OPTxs==0) {std::ostringstream errOs; 120 errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (Alpha's)!!" 121 <<G4endl; 122 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 123 return 0.;} 124 125 if( OPTxs==1 || OPTxs==2) return G4AlphaEvaporationProbability::GetOpt12( K); 126 else if (OPTxs==3 || OPTxs==4) return G4AlphaEvaporationProbability::GetOpt34( K); 127 else{ 128 std::ostringstream errOs; 129 errOs << "BAD Alpha CROSS SECTION OPTION AT EVAPORATION!!" <<G4endl; 130 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 131 return 0.; 132 } 133 } 134 135 136 // 137 //********************* OPT=1,2 : Chatterjee's cross section ************************ 138 //(fitting to cross section from Bechetti & Greenles OM potential) 139 140 G4double G4AlphaEvaporationProbability::GetOpt12(const G4double K) 141 { 142 // c ** alpha from huizenga and igo 143 G4double Kc=K; 144 145 // JMQ xsec is set constat above limit of validity 146 if (K>50) Kc=50; 147 148 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs; 149 150 G4double p0 = 10.95; 151 G4double p1 = -85.2; 152 G4double p2 = 1146.; 153 G4double landa0 = 0.0643; 154 G4double landa1 = -13.96; 155 G4double mu0 = 781.2; 156 G4double mu1 = 0.29; 157 G4double nu0 = -304.7; 158 G4double nu1 = -470.0; 159 G4double nu2 = -8.580; 160 G4double delta=1.2; 161 162 163 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta); 164 p = p0 + p1/Ec + p2/(Ec*Ec); 165 landa = landa0*ResidualA + landa1; 166 mu = mu0*std::pow(ResidualA,mu1); 167 nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 168 q = landa - nu/(Ec*Ec) - 2*p*Ec; 169 r = mu + 2*nu/Ec + p*(Ec*Ec); 170 171 ji=std::max(Kc,Ec); 172 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;} 173 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;} 174 175 if (xs <0.0) {xs=0.0;} 176 177 return xs; 178 179 } 180 181 // *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)************* 182 G4double G4AlphaEvaporationProbability::GetOpt34(const G4double K) 183 // c ** alpha from huizenga and igo 184 { 185 186 G4double landa, mu, nu, p , signor(1.),sig; 187 G4double ec,ecsq,xnulam,etest(0.),a; 188 G4double b,ecut,cut,ecut2,geom,elab; 189 190 191 G4double flow = 1.e-18; 192 G4double spill= 1.e+18; 193 194 G4double p0 = 10.95; 195 G4double p1 = -85.2; 196 G4double p2 = 1146.; 197 G4double landa0 = 0.0643; 198 G4double landa1 = -13.96; 199 G4double mu0 = 781.2; 200 G4double mu1 = 0.29; 201 G4double nu0 = -304.7; 202 G4double nu1 = -470.0; 203 G4double nu2 = -8.580; 204 205 G4double ra=1.20; 206 207 //JMQ 13/02/09 increase of reduced radius to lower the barrier 208 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra); 209 ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra); 210 ecsq = ec * ec; 211 p = p0 + p1/ec + p2/ecsq; 212 landa = landa0*ResidualA + landa1; 213 a = std::pow(ResidualA,mu1); 214 mu = mu0 * a; 215 nu = a* (nu0+nu1*ec+nu2*ecsq); 216 xnulam = nu / landa; 217 if (xnulam > spill) xnulam=0.; 218 if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam); 219 220 a = -2.*p*ec + landa - nu/ecsq; 221 b = p*ecsq + mu + 2.*nu/ec; 222 ecut = 0.; 223 cut = a*a - 4.*p*b; 224 if (cut > 0.) ecut = std::sqrt(cut); 225 ecut = (ecut-a) / (p+p); 226 ecut2 = ecut; 227 if (cut < 0.) ecut2 = ecut - 2.; 228 elab = K * FragmentA / ResidualA; 229 sig = 0.; 230 231 if (elab <= ec) { //start for E<Ec 232 if (elab > ecut2) sig = (p*elab*elab+a*elab+b) * signor; 233 } //end for E<Ec 234 else { //start for E>Ec 235 sig = (landa*elab+mu+nu/elab) * signor; 236 geom = 0.; 237 if (xnulam < flow || elab < etest) return sig; 238 geom = std::sqrt(theA*K); 239 geom = 1.23*ResidualAthrd + ra + 4.573/geom; 240 geom = 31.416 * geom * geom; 241 sig = std::max(geom,sig); 242 } //end for E>Ec 243 return sig; 244 245 } 246 247 // ************************** end of cross sections *******************************
Note: See TracChangeset
for help on using the changeset viewer.