Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions
G4PreCompoundProton Class Reference

#include <G4PreCompoundProton.hh>

Inheritance diagram for G4PreCompoundProton:
G4PreCompoundNucleon G4PreCompoundFragment G4VPreCompoundFragment

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)
 
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)
 
G4double GetOpt0 (G4double ekin)
 
- 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 ( )

Definition at line 52 of file G4PreCompoundProton.cc.

References G4VPreCompoundFragment::GetA(), G4VPreCompoundFragment::GetRestA(), G4VPreCompoundFragment::GetRestZ(), G4VPreCompoundFragment::GetZ(), and G4VPreCompoundFragment::ResidualA13().

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

Definition at line 64 of file G4PreCompoundProton.cc.

65 {}

Member Function Documentation

G4double G4PreCompoundProton::CrossSection ( G4double  ekin)
protectedvirtual

Implements G4PreCompoundNucleon.

Definition at line 83 of file G4PreCompoundProton.cc.

References G4endl, G4VPreCompoundFragment::g4pow, G4VPreCompoundFragment::GetA(), G4PreCompoundNucleon::GetOpt0(), GetOpt1(), GetOpt2(), GetOpt3(), G4VPreCompoundFragment::GetRestA(), G4VPreCompoundFragment::GetRestZ(), G4VPreCompoundFragment::GetZ(), G4VPreCompoundFragment::OPTxs, G4VPreCompoundFragment::ResidualA13(), and G4Pow::Z13().

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

Implements G4PreCompoundNucleon.

Definition at line 105 of file G4PreCompoundProton.cc.

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

Implements G4PreCompoundNucleon.

Definition at line 121 of file G4PreCompoundProton.cc.

References G4VPreCompoundFragment::GetCoulombBarrier().

122 {
123  return -GetCoulombBarrier();
124 }
G4double GetCoulombBarrier() const
G4double G4PreCompoundProton::GetOpt1 ( G4double  K)
protected

Definition at line 129 of file G4PreCompoundProton.cc.

References G4VPreCompoundFragment::g4pow, G4INCL::Math::max(), python.hepunit::MeV, and G4Pow::powZ().

Referenced by CrossSection().

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

Definition at line 171 of file G4PreCompoundProton.cc.

References G4cout, G4endl, G4Exp(), G4Log(), G4VPreCompoundFragment::g4pow, G4Pow::logZ(), python.hepunit::pi, G4VPreCompoundFragment::theCoulombBarrier, and G4VPreCompoundFragment::useSICB.

Referenced by CrossSection().

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

Definition at line 215 of file G4PreCompoundProton.cc.

References test::a, test::b, test::c, G4Exp(), G4VPreCompoundFragment::g4pow, G4INCL::Math::max(), G4INCL::Math::min(), and G4Pow::powZ().

Referenced by CrossSection().

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

Implements G4PreCompoundNucleon.

Definition at line 67 of file G4PreCompoundProton.cc.

68 {
69  G4double rj = 0.0;
70  if(nParticles > 0) {
71  rj = static_cast<G4double>(nCharged)/static_cast<G4double>(nParticles);
72  }
73  return rj;
74 }
double G4double
Definition: G4Types.hh:76

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