G4PreCompoundNeutron Class Reference

#include <G4PreCompoundNeutron.hh>

Inheritance diagram for G4PreCompoundNeutron:

G4PreCompoundNucleon G4PreCompoundFragment G4VPreCompoundFragment

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)

Detailed Description

Definition at line 42 of file G4PreCompoundNeutron.hh.


Constructor & Destructor Documentation

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]

Definition at line 60 of file G4PreCompoundNeutron.cc.

00061 {}


Member Function Documentation

G4double G4PreCompoundNeutron::CrossSection ( G4double  ekin  )  [protected, 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().

00101 {
00102   return 0.76+2.2/ResidualAthrd;
00103 }

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 }

G4double G4PreCompoundNeutron::GetOpt12 ( G4double  K  )  [protected]

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 }

G4double G4PreCompoundNeutron::GetOpt34 ( G4double  K  )  [protected]

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 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:58 2013 for Geant4 by  doxygen 1.4.7