#include <G4PreCompoundNeutron.hh>
Inheritance diagram for G4PreCompoundNeutron:
Public Member Functions | |
G4PreCompoundNeutron () | |
virtual | ~G4PreCompoundNeutron () |
Protected Member Functions | |
virtual G4double | GetRj (G4int NumberParticles, G4int NumberCharged) |
virtual G4double | CrossSection (G4double ekin) |
virtual G4double | GetAlpha () |
virtual G4double | GetBeta () |
G4double | GetOpt12 (G4double K) |
G4double | GetOpt34 (G4double K) |
Definition at line 42 of file G4PreCompoundNeutron.hh.
G4PreCompoundNeutron::G4PreCompoundNeutron | ( | ) |
Definition at line 48 of file G4PreCompoundNeutron.cc.
References G4VPreCompoundFragment::GetA(), G4VPreCompoundFragment::GetRestA(), G4VPreCompoundFragment::GetRestZ(), G4VPreCompoundFragment::GetZ(), and G4VPreCompoundFragment::ResidualA13().
00049 : G4PreCompoundNucleon(G4Neutron::Neutron(), &theNeutronCoulombBarrier) 00050 { 00051 ResidualA = GetRestA(); 00052 ResidualZ = GetRestZ(); 00053 theA = GetA(); 00054 theZ = GetZ(); 00055 ResidualAthrd = ResidualA13(); 00056 FragmentAthrd = ResidualAthrd; 00057 FragmentA = theA + ResidualA; 00058 }
G4PreCompoundNeutron::~G4PreCompoundNeutron | ( | ) | [virtual] |
Implements G4PreCompoundNucleon.
Definition at line 79 of file G4PreCompoundNeutron.cc.
References G4endl, G4VPreCompoundFragment::g4pow, G4VPreCompoundFragment::GetA(), G4PreCompoundNucleon::GetOpt0(), GetOpt12(), GetOpt34(), G4VPreCompoundFragment::GetRestA(), G4VPreCompoundFragment::GetRestZ(), G4VPreCompoundFragment::GetZ(), G4VPreCompoundFragment::OPTxs, G4VPreCompoundFragment::ResidualA13(), and G4Pow::Z13().
00080 { 00081 ResidualA = GetRestA(); 00082 ResidualZ = GetRestZ(); 00083 theA = GetA(); 00084 theZ = GetZ(); 00085 ResidualAthrd = ResidualA13(); 00086 FragmentA = theA + ResidualA; 00087 FragmentAthrd = g4pow->Z13(FragmentA); 00088 00089 if (OPTxs==0) { return GetOpt0( K); } 00090 else if( OPTxs==1 || OPTxs==2) { return GetOpt12( K); } 00091 else if (OPTxs==3 || OPTxs==4) { return GetOpt34( K); } 00092 else{ 00093 std::ostringstream errOs; 00094 errOs << "BAD NEUTRON CROSS SECTION OPTION !!" <<G4endl; 00095 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 00096 return 0.; 00097 } 00098 }
G4double G4PreCompoundNeutron::GetAlpha | ( | ) | [protected, virtual] |
Implements G4PreCompoundNucleon.
Definition at line 100 of file G4PreCompoundNeutron.cc.
Referenced by GetBeta().
G4double G4PreCompoundNeutron::GetBeta | ( | ) | [protected, virtual] |
Implements G4PreCompoundNucleon.
Definition at line 105 of file G4PreCompoundNeutron.cc.
References GetAlpha().
00106 { 00107 // return (2.12/std::pow(GetRestA(),2.0/3.0)-0.05)*MeV/GetAlpha(); 00108 return (2.12/(ResidualAthrd*ResidualAthrd)-0.05)*MeV/GetAlpha(); 00109 }
Definition at line 114 of file G4PreCompoundNeutron.cc.
References G4cout, and G4endl.
Referenced by CrossSection().
00115 { 00116 G4double Kc=K; 00117 00118 // Pramana (Bechetti & Greenles) for neutrons is chosen 00119 00120 // JMQ xsec is set constat above limit of validity 00121 if (K > 50*MeV) { Kc = 50*MeV; } 00122 00123 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2,xs; 00124 00125 landa0 = 18.57; 00126 landa1 = -22.93; 00127 mm0 = 381.7; 00128 mu1 = 24.31; 00129 nu0 = 0.172; 00130 nu1 = -15.39; 00131 nu2 = 804.8; 00132 landa = landa0/ResidualAthrd + landa1; 00133 mu = mm0*ResidualAthrd + mu1*ResidualAthrd*ResidualAthrd; 00134 nu = nu0*ResidualAthrd*ResidualA + nu1*ResidualAthrd*ResidualAthrd + nu2 ; 00135 xs=landa*Kc + mu + nu/Kc; 00136 if (xs <= 0.0 ){ 00137 std::ostringstream errOs; 00138 G4cout<<"WARNING: NEGATIVE OPT=1 neutron cross section "<<G4endl; 00139 errOs << "RESIDUAL: Ar=" << ResidualA << " Zr=" << ResidualZ <<G4endl; 00140 errOs <<" xsec("<<Kc<<" MeV) ="<<xs <<G4endl; 00141 throw G4HadronicException(__FILE__, __LINE__, errOs.str()); 00142 } 00143 return xs; 00144 }
Definition at line 147 of file G4PreCompoundNeutron.cc.
Referenced by CrossSection().
00148 { 00149 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2; 00150 G4double p, p0; 00151 G4double flow,ec,ecsq,xnulam,etest(0.),ra(0.),a,signor(1.),sig; 00152 G4double b,ecut,cut,ecut2,geom,elab; 00153 00154 flow = 1.e-18; 00155 00156 // PRECO xs for neutrons is choosen 00157 p0 = -312.; 00158 landa0 = 12.10; 00159 landa1= -11.27; 00160 mm0 = 234.1; 00161 mu1 = 38.26; 00162 nu0 = 1.55; 00163 nu1 = -106.1; 00164 nu2 = 1280.8; 00165 00166 if (ResidualA < 40) { signor =0.7 + ResidualA*0.0075; } 00167 if (ResidualA > 210) { signor = 1. + (ResidualA-210)/250.; } 00168 landa = landa0/ResidualAthrd + landa1; 00169 mu = mm0*ResidualAthrd + mu1*ResidualAthrd*ResidualAthrd; 00170 nu = nu0*ResidualAthrd*ResidualA + nu1*ResidualAthrd*ResidualAthrd + nu2; 00171 00172 // JMQ very low energy behaviour corrected (problem for A (apprx.)>60) 00173 if (nu < 0.) { nu=-nu; } 00174 00175 ec = 0.5; 00176 ecsq = 0.25; 00177 p = p0; 00178 xnulam = 1.; 00179 etest = 32.; 00180 // ** etest is the energy above which the rxn cross section is 00181 // ** compared with the geometrical limit and the max taken. 00182 // ** xnulam here is a dummy value to be used later. 00183 00184 a = -2.*p*ec + landa - nu/ecsq; 00185 b = p*ecsq + mu + 2.*nu/ec; 00186 ecut = 0.; 00187 cut = a*a - 4.*p*b; 00188 if (cut > 0.) { ecut = std::sqrt(cut); } 00189 ecut = (ecut-a) / (p+p); 00190 ecut2 = ecut; 00191 if (cut < 0.) { ecut2 = ecut - 2.; } 00192 elab = K * FragmentA / G4double(ResidualA); 00193 sig = 0.; 00194 if (elab <= ec) { //start for E<Ec 00195 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; } 00196 } //end for E<Ec 00197 else { //start for E>Ec 00198 sig = (landa*elab+mu+nu/elab) * signor; 00199 geom = 0.; 00200 if (xnulam < flow || elab < etest) { return sig; } 00201 geom = std::sqrt(theA*K); 00202 geom = 1.23*ResidualAthrd + ra + 4.573/geom; 00203 geom = 31.416 * geom * geom; 00204 sig = std::max(geom,sig); 00205 00206 } 00207 return sig; 00208 }
G4double G4PreCompoundNeutron::GetRj | ( | G4int | NumberParticles, | |
G4int | NumberCharged | |||
) | [protected, virtual] |
Implements G4PreCompoundNucleon.
Definition at line 63 of file G4PreCompoundNeutron.cc.
00064 { 00065 G4double rj = 0.0; 00066 if(nParticles > 0) { 00067 rj = static_cast<G4double>(nParticles - nCharged)/ 00068 static_cast<G4double>(nParticles); 00069 } 00070 return rj; 00071 }