Changeset 1347 for trunk/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.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/G4He3EvaporationProbability.cc
r1315 r1347 24 24 // ******************************************************************** 25 25 // 26 //J.M. Quesada (August2008). Based on: 26 // $Id: G4He3EvaporationProbability.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 "G4He3EvaporationProbability.hh" … … 36 40 G4He3EvaporationProbability::G4He3EvaporationProbability() : 37 41 G4EvaporationProbability(3,2,2,&theCoulombBarrier) // A,Z,Gamma,&theCoulombBarrier 38 { 39 40 } 41 42 G4He3EvaporationProbability::G4He3EvaporationProbability(const G4He3EvaporationProbability &) : G4EvaporationProbability() 43 { 44 throw G4HadronicException(__FILE__, __LINE__, "G4He3EvaporationProbability::copy_constructor meant to not be accessable"); 45 } 46 47 48 49 50 const G4He3EvaporationProbability & G4He3EvaporationProbability:: 51 operator=(const G4He3EvaporationProbability &) 52 { 53 throw G4HadronicException(__FILE__, __LINE__, "G4He3EvaporationProbability::operator= meant to not be accessable"); 54 return *this; 55 } 56 57 58 G4bool G4He3EvaporationProbability::operator==(const G4He3EvaporationProbability &) const 59 { 60 return false; 61 } 62 63 G4bool G4He3EvaporationProbability::operator!=(const G4He3EvaporationProbability &) const 64 { 65 return true; 66 } 67 68 G4double G4He3EvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 69 { return 1.0 + CCoeficient(static_cast<G4double>(fragment.GetZ()-GetZ()));} 42 {} 43 44 G4He3EvaporationProbability::~G4He3EvaporationProbability() 45 {} 46 47 G4double G4He3EvaporationProbability::CalcAlphaParam(const G4Fragment & fragment) 48 { return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());} 70 49 71 50 G4double G4He3EvaporationProbability::CalcBetaParam(const G4Fragment & ) 72 51 { return 0.0; } 73 52 74 53 75 G4double G4He3EvaporationProbability::CCoeficient( const G4doubleaZ)76 { 77 78 79 80 81 82 83 84 85 54 G4double G4He3EvaporationProbability::CCoeficient(G4int aZ) 55 { 56 // Data comes from 57 // Dostrovsky, Fraenkel and Friedlander 58 // Physical Review, vol 116, num. 3 1959 59 // 60 // const G4int size = 5; 61 // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; 62 // G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06}; 63 // C for He3 is equal to C for alpha times 4/3 64 G4double C = 0.0; 86 65 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*(4.0/3.0); 66 if (aZ <= 30) 67 { 68 C = 0.10; 69 } 70 else if (aZ <= 50) 71 { 72 C = 0.1 - (aZ - 30)*0.001; 73 } 74 else if (aZ < 70) 75 { 76 C = 0.08 - (aZ - 50)*0.001; 77 } 78 else 79 { 80 C = 0.06; 81 } 82 return C*(4.0/3.0); 98 83 } 99 84 … … 104 89 //OPT=3,4 Kalbach's parameterization 105 90 // 106 G4double G4He3EvaporationProbability::CrossSection(const G4Fragment & fragment, const G4double K) 107 { 108 theA=GetA(); 109 theZ=GetZ(); 110 ResidualA=fragment.GetA()-theA; 111 ResidualZ=fragment.GetZ()-theZ; 112 113 ResidualAthrd=std::pow(ResidualA,0.33333); 114 FragmentA=fragment.GetA(); 115 FragmentAthrd=std::pow(FragmentA,0.33333); 116 117 118 if (OPTxs==0) {std::ostringstream errOs; 119 errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (He3's)!!" 120 <<G4endl; 121 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 122 return 0.;} 123 if( OPTxs==1 || OPTxs==2) return G4He3EvaporationProbability::GetOpt12( K); 124 else if (OPTxs==3 || OPTxs==4) return G4He3EvaporationProbability::GetOpt34( K); 125 else{ 126 std::ostringstream errOs; 127 errOs << "BAD He3's CROSS SECTION OPTION AT EVAPORATION!!" <<G4endl; 128 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 129 return 0.; 130 } 131 } 132 // 133 //********************* OPT=1,2 : Chatterjee's cross section ************************ 91 G4double 92 G4He3EvaporationProbability::CrossSection(const G4Fragment & fragment, G4double K) 93 { 94 95 theA=GetA(); 96 theZ=GetZ(); 97 ResidualA=fragment.GetA_asInt()-theA; 98 ResidualZ=fragment.GetZ_asInt()-theZ; 99 100 ResidualAthrd=fG4pow->Z13(ResidualA); 101 FragmentA=fragment.GetA_asInt(); 102 FragmentAthrd=fG4pow->Z13(FragmentA); 103 104 if (OPTxs==0) {std::ostringstream errOs; 105 errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (He3's)!!" 106 <<G4endl; 107 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 108 return 0.;} 109 if( OPTxs==1 || OPTxs==2) return G4He3EvaporationProbability::GetOpt12( K); 110 else if (OPTxs==3 || OPTxs==4) return G4He3EvaporationProbability::GetOpt34( K); 111 else{ 112 std::ostringstream errOs; 113 errOs << "BAD He3's CROSS SECTION OPTION AT EVAPORATION!!" <<G4endl; 114 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 115 return 0.; 116 } 117 } 118 119 //********************* OPT=1,2 : Chatterjee's cross section ***************** 134 120 //(fitting to cross section from Bechetti & Greenles OM potential) 135 121 136 122 G4double G4He3EvaporationProbability::GetOpt12(const G4double K) 137 123 { 138 139 G4double Kc=K; 140 141 // JMQ xsec is set constat above limit of validity 142 if (K>50) Kc=50; 143 144 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs; 145 146 G4double p0 = -3.06; 147 G4double p1 = 278.5; 148 G4double p2 = -1389.; 149 G4double landa0 = -0.00535; 150 G4double landa1 = -11.16; 151 G4double mu0 = 555.5; 152 G4double mu1 = 0.40; 153 G4double nu0 = 687.4; 154 G4double nu1 = -476.3; 155 G4double nu2 = 0.509; 156 G4double delta=1.2; 157 158 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta); 159 p = p0 + p1/Ec + p2/(Ec*Ec); 160 landa = landa0*ResidualA + landa1; 161 mu = mu0*std::pow(ResidualA,mu1); 162 nu = std::pow(ResidualA,mu1)*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 163 q = landa - nu/(Ec*Ec) - 2*p*Ec; 164 r = mu + 2*nu/Ec + p*(Ec*Ec); 165 166 ji=std::max(Kc,Ec); 167 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;} 168 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;} 169 170 if (xs <0.0) {xs=0.0;} 124 G4double Kc = K; 125 126 // JMQ xsec is set constat above limit of validity 127 if (K > 50*MeV) { Kc = 50*MeV; } 128 129 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs; 130 131 G4double p0 = -3.06; 132 G4double p1 = 278.5; 133 G4double p2 = -1389.; 134 G4double landa0 = -0.00535; 135 G4double landa1 = -11.16; 136 G4double mu0 = 555.5; 137 G4double mu1 = 0.40; 138 G4double nu0 = 687.4; 139 G4double nu1 = -476.3; 140 G4double nu2 = 0.509; 141 G4double delta=1.2; 142 143 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta); 144 p = p0 + p1/Ec + p2/(Ec*Ec); 145 landa = landa0*ResidualA + landa1; 146 147 G4double resmu1 = fG4pow->powZ(ResidualA,mu1); 148 mu = mu0*resmu1; 149 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec)); 150 q = landa - nu/(Ec*Ec) - 2*p*Ec; 151 r = mu + 2*nu/Ec + p*(Ec*Ec); 152 153 ji=std::max(Kc,Ec); 154 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;} 155 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;} 156 157 if (xs <0.0) {xs=0.0;} 171 158 172 159 return xs; 173 160 174 161 } … … 178 165 //c ** 3he from o.m. of gibson et al 179 166 { 180 181 167 G4double landa, mu, nu, p , signor(1.),sig; 182 168 G4double ec,ecsq,xnulam,etest(0.),a; 183 169 G4double b,ecut,cut,ecut2,geom,elab; 184 185 170 186 171 G4double flow = 1.e-18; 187 172 G4double spill= 1.e+18; 188 189 173 190 174 G4double p0 = -2.88; … … 200 184 201 185 G4double ra=0.80; 202 186 203 187 //JMQ 13/02/09 increase of reduced radius to lower the barrier 204 188 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra); … … 207 191 p = p0 + p1/ec + p2/ecsq; 208 192 landa = landa0*ResidualA + landa1; 209 a = std::pow(ResidualA,mu1);193 a = fG4pow->powZ(ResidualA,mu1); 210 194 mu = mu0 * a; 211 195 nu = a* (nu0+nu1*ec+nu2*ecsq); 212 196 xnulam = nu / landa; 213 if (xnulam > spill) xnulam=0.;214 if (xnulam >= flow) etest = 1.2 *std::sqrt(xnulam);197 if (xnulam > spill) { xnulam=0.; } 198 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); } 215 199 216 200 a = -2.*p*ec + landa - nu/ecsq; … … 221 205 ecut = (ecut-a) / (p+p); 222 206 ecut2 = ecut; 223 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut) 224 //ecut<0 means that there is no cut with energy axis, i.e. xs is set to 0 bellow minimum 225 // if (cut < 0.) ecut2 = ecut - 2.; 226 if (cut < 0.) ecut2 = ecut; 227 elab = K * FragmentA / ResidualA; 207 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut) 208 // ecut<0 means that there is no cut with energy axis, i.e. xs is set 209 // to 0 bellow minimum 210 // if (cut < 0.) ecut2 = ecut - 2.; 211 if (cut < 0.) { ecut2 = ecut; } 212 elab = K * FragmentA /G4double(ResidualA); 228 213 sig = 0.; 229 214 230 215 if (elab <= ec) { //start for E<Ec 231 if (elab > ecut2) sig = (p*elab*elab+a*elab+b) * signor;216 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; } 232 217 } //end for E<Ec 233 218 else { //start for E>Ec 234 219 sig = (landa*elab+mu+nu/elab) * signor; 235 220 geom = 0.; 236 if (xnulam < flow || elab < etest) return sig;221 if (xnulam < flow || elab < etest) { return sig; } 237 222 geom = std::sqrt(theA*K); 238 223 geom = 1.23*ResidualAthrd + ra + 4.573/geom; … … 243 228 244 229 } 245 246 // ************************** end of cross sections *******************************247
Note: See TracChangeset
for help on using the changeset viewer.