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

#include <G4PreCompoundProton.hh>

+ Inheritance diagram for G4PreCompoundProton:

Public Member Functions

 G4PreCompoundProton ()
 
virtual ~G4PreCompoundProton ()
 
- 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 GetOpt1 (G4double K)
 
G4double GetOpt2 (G4double K)
 
G4double GetOpt3 (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 G4PreCompoundProton.hh.

Constructor & Destructor Documentation

◆ G4PreCompoundProton()

G4PreCompoundProton::G4PreCompoundProton ( )

Definition at line 50 of file G4PreCompoundProton.cc.

51 : G4PreCompoundNucleon(G4Proton::Proton(), &theProtonCoulombBarrier)
52{
53 ResidualA = GetRestA();
54 ResidualZ = GetRestZ();
55 theA = GetA();
56 theZ = GetZ();
57 ResidualAthrd = ResidualA13();
58 FragmentAthrd = ResidualAthrd;
59 FragmentA = theA + ResidualA;
60}
static G4Proton * Proton()
Definition: G4Proton.cc:93
G4double ResidualA13() const
G4int GetRestZ() const
G4int GetRestA() const

◆ ~G4PreCompoundProton()

G4PreCompoundProton::~G4PreCompoundProton ( )
virtual

Definition at line 62 of file G4PreCompoundProton.cc.

63{}

Member Function Documentation

◆ CrossSection()

G4double G4PreCompoundProton::CrossSection ( G4double  ekin)
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 81 of file G4PreCompoundProton.cc.

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

◆ GetAlpha()

G4double G4PreCompoundProton::GetAlpha ( )
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 103 of file G4PreCompoundProton.cc.

104{
105 G4int aZ = ResidualZ;
106 G4double C = 0.0;
107 if (aZ >= 70)
108 {
109 C = 0.10;
110 }
111 else
112 {
113 C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
114 }
115 return 1.0 + C;
116}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66

◆ GetBeta()

G4double G4PreCompoundProton::GetBeta ( )
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 118 of file G4PreCompoundProton.cc.

119{
120 return -GetCoulombBarrier();
121}
G4double GetCoulombBarrier() const

◆ GetOpt1()

G4double G4PreCompoundProton::GetOpt1 ( G4double  K)
protected

Definition at line 126 of file G4PreCompoundProton.cc.

127{
128 G4double Kc=K;
129
130 // JMQ xsec is set constat above limit of validity
131 if (K > 50*MeV) { Kc = 50*MeV; }
132
133 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2,xs;
134 G4double p, p0, p1, p2,Ec,delta,q,r,ji;
135
136 p0 = 15.72;
137 p1 = 9.65;
138 p2 = -449.0;
139 landa0 = 0.00437;
140 landa1 = -16.58;
141 mm0 = 244.7;
142 mu1 = 0.503;
143 nu0 = 273.1;
144 nu1 = -182.4;
145 nu2 = -1.872;
146 delta=0.;
147
148 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
149 p = p0 + p1/Ec + p2/(Ec*Ec);
150 landa = landa0*ResidualA + landa1;
151
152 G4double resmu1 = g4pow->powZ(ResidualA,mu1);
153 mu = mm0*resmu1;
154 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
155 q = landa - nu/(Ec*Ec) - 2*p*Ec;
156 r = mu + 2*nu/Ec + p*(Ec*Ec);
157
158 ji=std::max(Kc,Ec);
159 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
160 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
161 if (xs <0.0) {xs=0.0;}
162
163 return xs;
164}
G4double powZ(G4int Z, G4double y)
Definition: G4Pow.hh:180

Referenced by CrossSection().

◆ GetOpt2()

G4double G4PreCompoundProton::GetOpt2 ( G4double  K)
protected

Definition at line 168 of file G4PreCompoundProton.cc.

169{
170
171 G4double eekin,ekin,ff1,ff2,ff3,r0,fac,fac1,fac2,b0,xine_th(0);
172
173 // This is redundant when the Coulomb barrier is overimposed to all
174 // cross sections
175 // It should be kept when Coulomb barrier only imposed at OPTxs=2
176
177 if(!useSICB && K<=theCoulombBarrier) { return 0.0; }
178
179 eekin=K;
180 G4int rnneu=ResidualA-ResidualZ;
181 ekin=eekin/1000;
182 r0=1.36*1.e-15;
183 fac=pi*r0*r0;
184 b0=2.247-0.915*(1.-1./ResidualAthrd);
185 fac1=b0*(1.-1./ResidualAthrd);
186 fac2=1.;
187 if(rnneu > 1.5) { fac2 = g4pow->logZ(rnneu); }
188 xine_th= 1.e+31*fac*fac2*(1.+ResidualAthrd-fac1);
189 xine_th=(1.-0.15*std::exp(-ekin))*xine_th/(1.00-0.0007*ResidualA);
190 ff1=0.70-0.0020*ResidualA;
191 ff2=1.00+1/G4double(ResidualA);
192 ff3=0.8+18/G4double(ResidualA)-0.002*ResidualA;
193 fac=1.-(1./(1.+std::exp(-8.*ff1*(std::log10(ekin)+1.37*ff2))));
194 xine_th=xine_th*(1.+ff3*fac);
195 ff1=1.-1/G4double(ResidualA)-0.001*ResidualA;
196 ff2=1.17-2.7/G4double(ResidualA)-0.0014*ResidualA;
197 fac=-8.*ff1*(std::log10(ekin)+2.0*ff2);
198 fac=1./(1.+std::exp(fac));
199 xine_th=xine_th*fac;
200 if (xine_th < 0.0){
201 std::ostringstream errOs;
202 G4cout<<"WARNING: negative Wellisch cross section "<<G4endl;
203 errOs << "RESIDUAL: A=" << ResidualA << " Z=" << ResidualZ <<G4endl;
204 errOs <<" xsec("<<ekin<<" MeV) ="<<xine_th <<G4endl;
205 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
206 }
207 return xine_th;
208}
G4DLLIMPORT std::ostream G4cout
G4double logZ(G4int Z)
Definition: G4Pow.hh:146
const G4double pi

Referenced by CrossSection().

◆ GetOpt3()

G4double G4PreCompoundProton::GetOpt3 ( G4double  K)
protected

Definition at line 211 of file G4PreCompoundProton.cc.

212{
213 // ** p from becchetti and greenlees (but modified with sub-barrier
214 // ** correction function and xp2 changed from -449)
215
216 G4double landa, landa0, landa1, mu, mm0, mu1,nu, nu0, nu1, nu2;
217 G4double p, p0, p1, p2;
218 p0 = 15.72;
219 p1 = 9.65;
220 p2 = -300.;
221 landa0 = 0.00437;
222 landa1 = -16.58;
223 mm0 = 244.7;
224 mu1 = 0.503;
225 nu0 = 273.1;
226 nu1 = -182.4;
227 nu2 = -1.872;
228
229 // parameters for proton cross section refinement
230 /*
231 G4double afit,bfit,a2,b2;
232 afit=-0.0785656;
233 bfit=5.10789;
234 a2= -0.00089076;
235 b2= 0.0231597;
236 */
237
238 G4double ec,ecsq,xnulam,etest(0.),ra(0.),a,w,c,signor(1.),signor2,sig;
239 G4double b,ecut,cut,ecut2,geom,elab;
240
241 G4double flow = 1.e-18;
242 G4double spill= 1.e+18;
243
244 if (ResidualA <= 60) { signor = 0.92; }
245 else if (ResidualA < 100) { signor = 0.8 + ResidualA*0.002; }
246
247 ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
248 ecsq = ec * ec;
249 p = p0 + p1/ec + p2/ecsq;
250 landa = landa0*ResidualA + landa1;
251 a = g4pow->powZ(ResidualA,mu1);
252 mu = mm0 * a;
253 nu = a* (nu0+nu1*ec+nu2*ecsq);
254
255 c =std::min(3.15,ec*0.5);
256 w = 0.7 * c / 3.15;
257
258 xnulam = nu / landa;
259 if (xnulam > spill) { xnulam=0.; }
260 if (xnulam >= flow) { etest =std::sqrt(xnulam) + 7.; }
261
262 a = -2.*p*ec + landa - nu/ecsq;
263 b = p*ecsq + mu + 2.*nu/ec;
264 ecut = 0.;
265 cut = a*a - 4.*p*b;
266 if (cut > 0.) { ecut = std::sqrt(cut); }
267 ecut = (ecut-a) / (p+p);
268 ecut2 = ecut;
269 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
270 // ecut<0 means that there is no cut with energy axis, i.e. xs is set
271 // to 0 bellow minimum
272 // if (cut < 0.) ecut2 = ecut - 2.;
273 if (cut < 0.) { ecut2 = ecut; }
274 elab = K * FragmentA /G4double(ResidualA);
275 sig = 0.;
276 if (elab <= ec) { //start for E<Ec
277 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
278
279 signor2 = (ec-elab-c) / w;
280 signor2 = 1. + std::exp(signor2);
281 sig = sig / signor2;
282 } //end for E<=Ec
283 else{ //start for E>Ec
284 sig = (landa*elab+mu+nu/elab) * signor;
285 geom = 0.;
286
287 if (xnulam < flow || elab < etest)
288 {
289 if (sig <0.0) {sig=0.0;}
290 return sig;
291 }
292 geom = std::sqrt(theA*K);
293 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
294 geom = 31.416 * geom * geom;
295 sig = std::max(geom,sig);
296
297 } //end for E>Ec
298 return sig;
299}

Referenced by CrossSection().

◆ GetRj()

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

Implements G4PreCompoundNucleon.

Definition at line 65 of file G4PreCompoundProton.cc.

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

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