Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4AlphaEvaporationProbability.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id$
27//
28// J.M. Quesada (August2008). Based on:
29//
30// Hadronic Process: Nuclear De-excitations
31// by V. Lara (Oct 1998)
32//
33// Modified:
34// 03-09-2008 J.M. Quesada for external choice of inverse cross section option
35// 17-11-2010 V.Ivanchenko integer Z and A
36
38#include "G4SystemOfUnits.hh"
39
41 G4EvaporationProbability(4,2,1,&theCoulombBarrier) // A,Z,Gamma,&theCoumlombBarrier
42{
43 ResidualA = ResidualZ = theA = theZ = FragmentA = 0;
44 ResidualAthrd = FragmentAthrd = 0.0;
45}
46
48{}
49
50G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment)
51 { return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());}
52
53G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &)
54 { return 0.0; }
55
56G4double G4AlphaEvaporationProbability::CCoeficient(G4int aZ)
57{
58 // Data comes from
59 // Dostrovsky, Fraenkel and Friedlander
60 // Physical Review, vol 116, num. 3 1959
61 //
62 // const G4int size = 5;
63 // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
64 // G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06};
65 G4double C = 0.0;
66
67 if (aZ <= 30)
68 {
69 C = 0.10;
70 }
71 else if (aZ <= 50)
72 {
73 C = 0.1 - (aZ-30)*0.001;
74 }
75 else if (aZ < 70)
76 {
77 C = 0.08 - (aZ-50)*0.001;
78 }
79 else
80 {
81 C = 0.06;
82 }
83 return C;
84}
85
86///////////////////////////////////////////////////////////////////////////////////
87//J. M. Quesada (Dec 2007-June 2008): New inverse reaction cross sections
88//OPT=0 Dostrovski's parameterization
89//OPT=1,2 Chatterjee's paramaterization
90//OPT=3,4 Kalbach's parameterization
91//
93G4AlphaEvaporationProbability::CrossSection(const G4Fragment & fragment, G4double K)
94{
95 theA=GetA();
96 theZ=GetZ();
97 ResidualA=fragment.GetA_asInt()-theA;
98 ResidualZ=fragment.GetZ_asInt()-theZ;
99
100 ResidualAthrd=fG4pow->Z13(ResidualA);
101 FragmentA=fragment.GetA_asInt();
102 FragmentAthrd=fG4pow->Z13(FragmentA);
103
104 if (OPTxs==0) {std::ostringstream errOs;
105 errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (Alpha's)!!"
106 <<G4endl;
107 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
108 return 0.;}
109
110 if( OPTxs==1 || OPTxs==2) return G4AlphaEvaporationProbability::GetOpt12( K);
111 else if (OPTxs==3 || OPTxs==4) return G4AlphaEvaporationProbability::GetOpt34( K);
112 else{
113 std::ostringstream errOs;
114 errOs << "BAD Alpha CROSS SECTION OPTION AT EVAPORATION!!" <<G4endl;
115 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
116 return 0.;
117 }
118}
119
120//
121//********************* OPT=1,2 : Chatterjee's cross section ********************
122//(fitting to cross section from Bechetti & Greenles OM potential)
123
124G4double G4AlphaEvaporationProbability::GetOpt12(G4double K)
125{
126 G4double Kc=K;
127
128 // JMQ xsec is set constant above limit of validity
129 if (K > 50*MeV) { Kc = 50*MeV; }
130
131 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
132
133 G4double p0 = 10.95;
134 G4double p1 = -85.2;
135 G4double p2 = 1146.;
136 G4double landa0 = 0.0643;
137 G4double landa1 = -13.96;
138 G4double mum0 = 781.2;
139 G4double mu1 = 0.29;
140 G4double nu0 = -304.7;
141 G4double nu1 = -470.0;
142 G4double nu2 = -8.580;
143 G4double delta=1.2;
144
145 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
146 p = p0 + p1/Ec + p2/(Ec*Ec);
147 landa = landa0*ResidualA + landa1;
148 G4double resmu1 = fG4pow->powZ(ResidualA,mu1);
149 mu = mum0*resmu1;
150 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
151 q = landa - nu/(Ec*Ec) - 2*p*Ec;
152 r = mu + 2*nu/Ec + p*(Ec*Ec);
153
154 ji=std::max(Kc,Ec);
155 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
156 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
157
158 if (xs <0.0) {xs=0.0;}
159
160 return xs;
161}
162
163// *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
164G4double G4AlphaEvaporationProbability::GetOpt34(G4double K)
165// c ** alpha from huizenga and igo
166{
167 G4double landa, mu, nu, p , signor(1.),sig;
168 G4double ec,ecsq,xnulam,etest(0.),a;
169 G4double b,ecut,cut,ecut2,geom,elab;
170
171 G4double flow = 1.e-18;
172 G4double spill= 1.e+18;
173
174 G4double p0 = 10.95;
175 G4double p1 = -85.2;
176 G4double p2 = 1146.;
177 G4double landa0 = 0.0643;
178 G4double landa1 = -13.96;
179 G4double mum0 = 781.2;
180 G4double mu1 = 0.29;
181 G4double nu0 = -304.7;
182 G4double nu1 = -470.0;
183 G4double nu2 = -8.580;
184
185 G4double ra=1.20;
186
187 //JMQ 13/02/09 increase of reduced radius to lower the barrier
188 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
189 ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
190 ecsq = ec * ec;
191 p = p0 + p1/ec + p2/ecsq;
192 landa = landa0*ResidualA + landa1;
193 a = fG4pow->powZ(ResidualA,mu1);
194 mu = mum0 * a;
195 nu = a* (nu0+nu1*ec+nu2*ecsq);
196 xnulam = nu / landa;
197 if (xnulam > spill) { xnulam=0.; }
198 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
199
200 a = -2.*p*ec + landa - nu/ecsq;
201 b = p*ecsq + mu + 2.*nu/ec;
202 ecut = 0.;
203 cut = a*a - 4.*p*b;
204 if (cut > 0.) { ecut = std::sqrt(cut); }
205 ecut = (ecut-a) / (p+p);
206 ecut2 = ecut;
207 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
208 // ecut<0 means that there is no cut with energy axis, i.e. xs is set
209 // to 0 bellow minimum
210 // if (cut < 0.) ecut2 = ecut - 2.;
211 if (cut < 0.) { ecut2 = ecut; }
212 elab = K * FragmentA / G4double(ResidualA);
213 sig = 0.;
214
215 if (elab <= ec) { //start for E<Ec
216 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
217 } //end for E<Ec
218 else { //start for E>Ec
219 sig = (landa*elab+mu+nu/elab) * signor;
220 geom = 0.;
221 if (xnulam < flow || elab < etest) { return sig; }
222 geom = std::sqrt(theA*K);
223 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
224 geom = 31.416 * geom * geom;
225 sig = std::max(geom,sig);
226 } //end for E>Ec
227 return sig;
228}
229
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4int GetZ_asInt() const
Definition: G4Fragment.hh:223
G4int GetA_asInt() const
Definition: G4Fragment.hh:218
G4double Z13(G4int Z)
Definition: G4Pow.hh:110
G4double powZ(G4int Z, G4double y)
Definition: G4Pow.hh:180