Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PreCompoundNeutron Class Reference

#include <G4PreCompoundNeutron.hh>

+ Inheritance diagram for G4PreCompoundNeutron:

Public Member Functions

 G4PreCompoundNeutron ()
 
virtual ~G4PreCompoundNeutron ()
 
- Public Member Functions inherited from G4PreCompoundNucleon
 G4PreCompoundNucleon (const G4ParticleDefinition *, G4VCoulombBarrier *aCoulombBarrier)
 
virtual ~G4PreCompoundNucleon ()
 
- Public Member Functions inherited from G4PreCompoundFragment
 G4PreCompoundFragment (const G4ParticleDefinition *, G4VCoulombBarrier *aCoulombBarrier)
 
virtual ~G4PreCompoundFragment ()
 
G4double CalcEmissionProbability (const G4Fragment &aFragment)
 
G4double GetKineticEnergy (const G4Fragment &aFragment)
 
- Public Member Functions inherited from G4VPreCompoundFragment
 G4VPreCompoundFragment (const G4ParticleDefinition *, G4VCoulombBarrier *aCoulombBarrier)
 
virtual ~G4VPreCompoundFragment ()
 
void Initialize (const G4Fragment &aFragment)
 
virtual G4double CalcEmissionProbability (const G4Fragment &aFragment)=0
 
virtual G4double GetKineticEnergy (const G4Fragment &aFragment)=0
 
G4ReactionProductGetReactionProduct () const
 
G4int GetA () const
 
G4int GetZ () const
 
G4int GetRestA () const
 
G4int GetRestZ () const
 
G4double ResidualA13 () const
 
G4double GetCoulombBarrier () const
 
G4double GetBindingEnergy () const
 
G4double GetMaximalKineticEnergy () const
 
G4double GetEnergyThreshold () const
 
G4double GetEmissionProbability () const
 
G4double GetNuclearMass () const
 
G4double GetRestNuclearMass () const
 
G4double GetReducedMass () const
 
const G4LorentzVectorGetMomentum () const
 
void SetMomentum (const G4LorentzVector &value)
 
const G4String GetName () const
 
void SetOPTxs (G4int)
 
void UseSICB (G4bool)
 

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)
 
- Protected Member Functions inherited from G4PreCompoundNucleon
virtual G4double ProbabilityDistributionFunction (G4double eKin, const G4Fragment &aFragment)
 
virtual G4double CrossSection (G4double ekin)=0
 
virtual G4double GetRj (G4int NumberParticles, G4int NumberCharged)=0
 
virtual G4double GetAlpha ()=0
 
virtual G4double GetBeta ()=0
 
G4double GetOpt0 (G4double ekin)
 
virtual G4double ProbabilityDistributionFunction (G4double K, const G4Fragment &aFragment)=0
 
- Protected Member Functions inherited from G4VPreCompoundFragment
G4bool IsItPossible (const G4Fragment &aFragment) const
 

Additional Inherited Members

- Protected Attributes inherited from G4VPreCompoundFragment
G4PreCompoundParameterstheParameters
 
G4Powg4pow
 
G4double theEmissionProbability
 
G4double theCoulombBarrier
 
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 42 of file G4PreCompoundNeutron.hh.

Constructor & Destructor Documentation

◆ G4PreCompoundNeutron()

G4PreCompoundNeutron::G4PreCompoundNeutron ( )

Definition at line 48 of file G4PreCompoundNeutron.cc.

49 : G4PreCompoundNucleon(G4Neutron::Neutron(), &theNeutronCoulombBarrier)
50{
51 ResidualA = GetRestA();
52 ResidualZ = GetRestZ();
53 theA = GetA();
54 theZ = GetZ();
55 ResidualAthrd = ResidualA13();
56 FragmentAthrd = ResidualAthrd;
57 FragmentA = theA + ResidualA;
58}
static G4Neutron * Neutron()
Definition: G4Neutron.cc:104
G4double ResidualA13() const
G4int GetRestZ() const
G4int GetRestA() const

◆ ~G4PreCompoundNeutron()

G4PreCompoundNeutron::~G4PreCompoundNeutron ( )
virtual

Definition at line 60 of file G4PreCompoundNeutron.cc.

61{}

Member Function Documentation

◆ CrossSection()

G4double G4PreCompoundNeutron::CrossSection ( G4double  ekin)
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 79 of file G4PreCompoundNeutron.cc.

80{
81 ResidualA = GetRestA();
82 ResidualZ = GetRestZ();
83 theA = GetA();
84 theZ = GetZ();
85 ResidualAthrd = ResidualA13();
86 FragmentA = theA + ResidualA;
87 FragmentAthrd = g4pow->Z13(FragmentA);
88
89 if (OPTxs==0) { return GetOpt0( K); }
90 else if( OPTxs==1 || OPTxs==2) { return GetOpt12( K); }
91 else if (OPTxs==3 || OPTxs==4) { return GetOpt34( K); }
92 else{
93 std::ostringstream errOs;
94 errOs << "BAD NEUTRON CROSS SECTION OPTION !!" <<G4endl;
95 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
96 return 0.;
97 }
98}
#define G4endl
Definition: G4ios.hh:52
G4double Z13(G4int Z)
Definition: G4Pow.hh:110
G4double GetOpt12(G4double K)
G4double GetOpt34(G4double K)
G4double GetOpt0(G4double ekin)

◆ GetAlpha()

G4double G4PreCompoundNeutron::GetAlpha ( )
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 100 of file G4PreCompoundNeutron.cc.

101{
102 return 0.76+2.2/ResidualAthrd;
103}

Referenced by GetBeta().

◆ GetBeta()

G4double G4PreCompoundNeutron::GetBeta ( )
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 105 of file G4PreCompoundNeutron.cc.

106{
107 // return (2.12/std::pow(GetRestA(),2.0/3.0)-0.05)*MeV/GetAlpha();
108 return (2.12/(ResidualAthrd*ResidualAthrd)-0.05)*MeV/GetAlpha();
109}
virtual G4double GetAlpha()

◆ GetOpt12()

G4double G4PreCompoundNeutron::GetOpt12 ( G4double  K)
protected

Definition at line 114 of file G4PreCompoundNeutron.cc.

115{
116 G4double Kc=K;
117
118 // Pramana (Bechetti & Greenles) for neutrons is chosen
119
120 // JMQ xsec is set constat above limit of validity
121 if (K > 50*MeV) { Kc = 50*MeV; }
122
123 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2,xs;
124
125 landa0 = 18.57;
126 landa1 = -22.93;
127 mm0 = 381.7;
128 mu1 = 24.31;
129 nu0 = 0.172;
130 nu1 = -15.39;
131 nu2 = 804.8;
132 landa = landa0/ResidualAthrd + landa1;
133 mu = mm0*ResidualAthrd + mu1*ResidualAthrd*ResidualAthrd;
134 nu = nu0*ResidualAthrd*ResidualA + nu1*ResidualAthrd*ResidualAthrd + nu2 ;
135 xs=landa*Kc + mu + nu/Kc;
136 if (xs <= 0.0 ){
137 std::ostringstream errOs;
138 G4cout<<"WARNING: NEGATIVE OPT=1 neutron cross section "<<G4endl;
139 errOs << "RESIDUAL: Ar=" << ResidualA << " Zr=" << ResidualZ <<G4endl;
140 errOs <<" xsec("<<Kc<<" MeV) ="<<xs <<G4endl;
141 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
142 }
143 return xs;
144}
double G4double
Definition: G4Types.hh:64
G4DLLIMPORT std::ostream G4cout

Referenced by CrossSection().

◆ GetOpt34()

G4double G4PreCompoundNeutron::GetOpt34 ( G4double  K)
protected

Definition at line 147 of file G4PreCompoundNeutron.cc.

148{
149 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2;
150 G4double p, p0;
151 G4double flow,ec,ecsq,xnulam,etest(0.),ra(0.),a,signor(1.),sig;
152 G4double b,ecut,cut,ecut2,geom,elab;
153
154 flow = 1.e-18;
155
156 // PRECO xs for neutrons is choosen
157 p0 = -312.;
158 landa0 = 12.10;
159 landa1= -11.27;
160 mm0 = 234.1;
161 mu1 = 38.26;
162 nu0 = 1.55;
163 nu1 = -106.1;
164 nu2 = 1280.8;
165
166 if (ResidualA < 40) { signor =0.7 + ResidualA*0.0075; }
167 if (ResidualA > 210) { signor = 1. + (ResidualA-210)/250.; }
168 landa = landa0/ResidualAthrd + landa1;
169 mu = mm0*ResidualAthrd + mu1*ResidualAthrd*ResidualAthrd;
170 nu = nu0*ResidualAthrd*ResidualA + nu1*ResidualAthrd*ResidualAthrd + nu2;
171
172 // JMQ very low energy behaviour corrected (problem for A (apprx.)>60)
173 if (nu < 0.) { nu=-nu; }
174
175 ec = 0.5;
176 ecsq = 0.25;
177 p = p0;
178 xnulam = 1.;
179 etest = 32.;
180 // ** etest is the energy above which the rxn cross section is
181 // ** compared with the geometrical limit and the max taken.
182 // ** xnulam here is a dummy value to be used later.
183
184 a = -2.*p*ec + landa - nu/ecsq;
185 b = p*ecsq + mu + 2.*nu/ec;
186 ecut = 0.;
187 cut = a*a - 4.*p*b;
188 if (cut > 0.) { ecut = std::sqrt(cut); }
189 ecut = (ecut-a) / (p+p);
190 ecut2 = ecut;
191 if (cut < 0.) { ecut2 = ecut - 2.; }
192 elab = K * FragmentA / G4double(ResidualA);
193 sig = 0.;
194 if (elab <= ec) { //start for E<Ec
195 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
196 } //end for E<Ec
197 else { //start for E>Ec
198 sig = (landa*elab+mu+nu/elab) * signor;
199 geom = 0.;
200 if (xnulam < flow || elab < etest) { return sig; }
201 geom = std::sqrt(theA*K);
202 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
203 geom = 31.416 * geom * geom;
204 sig = std::max(geom,sig);
205
206 }
207 return sig;
208}

Referenced by CrossSection().

◆ GetRj()

G4double G4PreCompoundNeutron::GetRj ( G4int  NumberParticles,
G4int  NumberCharged 
)
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 63 of file G4PreCompoundNeutron.cc.

64{
65 G4double rj = 0.0;
66 if(nParticles > 0) {
67 rj = static_cast<G4double>(nParticles - nCharged)/
68 static_cast<G4double>(nParticles);
69 }
70 return rj;
71}

The documentation for this class was generated from the following files: