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
G4DeuteronEvaporationProbability.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
37
39#include "G4SystemOfUnits.hh"
40
42 G4EvaporationProbability(2,1,3,&theCoulombBarrier) // A,Z,Gamma (fixed JMQ)
43{
44 ResidualA = ResidualZ = theA = theZ = FragmentA = 0;
45 ResidualAthrd = FragmentAthrd = 0.0;
46}
47
49{}
50
51G4double G4DeuteronEvaporationProbability::CalcAlphaParam(const G4Fragment & fragment)
52{
53 return 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ());
54}
55
56G4double G4DeuteronEvaporationProbability::CalcBetaParam(const G4Fragment & )
57{
58 return 0.0;
59}
60
61G4double G4DeuteronEvaporationProbability::CCoeficient(G4int aZ)
62{
63 // Data comes from
64 // Dostrovsky, Fraenkel and Friedlander
65 // Physical Review, vol 116, num. 3 1959
66 //
67 // const G4int size = 5;
68 // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0};
69 // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10};
70 // C for deuteron is equal to C for protons divided by 2
71 G4double C = 0.0;
72
73 if (aZ >= 70) {
74 C = 0.10;
75 } else {
76 C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
77 }
78
79 return C/2.0;
80
81}
82
83
84///////////////////////////////////////////////////////////////////////////////////
85//J. M. Quesada (Dec 2007-June 2008): New inverse reaction cross sections
86//OPT=0 Dostrovski's parameterization
87//OPT=1,2 Chatterjee's paramaterization
88//OPT=3,4 Kalbach's parameterization
89//
91G4DeuteronEvaporationProbability::CrossSection(const G4Fragment & fragment, G4double K)
92{
93 theA=GetA();
94 theZ=GetZ();
95 ResidualA=fragment.GetA_asInt()-theA;
96 ResidualZ=fragment.GetZ_asInt()-theZ;
97
98 ResidualAthrd=fG4pow->Z13(ResidualA);
99 FragmentA=fragment.GetA_asInt();
100 FragmentAthrd=fG4pow->Z13(FragmentA);
101
102 if (OPTxs==0) {std::ostringstream errOs;
103 errOs << "We should'n be here (OPT =0) at evaporation cross section calculation (deuterons)!!"
104 <<G4endl;
105 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
106 return 0.;}
107 if( OPTxs==1 || OPTxs==2) return G4DeuteronEvaporationProbability::GetOpt12( K);
108 else if (OPTxs==3 || OPTxs==4) return G4DeuteronEvaporationProbability::GetOpt34( K);
109 else{
110 std::ostringstream errOs;
111 errOs << "BAD Deuteron CROSS SECTION OPTION AT EVAPORATION!!" <<G4endl;
112 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
113 return 0.;
114 }
115}
116
117//
118//********************* OPT=1,2 : Chatterjee's cross section ********************
119//(fitting to cross section from Bechetti & Greenles OM potential)
120
121G4double G4DeuteronEvaporationProbability::GetOpt12(G4double K)
122{
123 G4double Kc = K;
124
125 // JMQ xsec is set constat above limit of validity
126 if (K > 50*MeV) { Kc = 50*MeV; }
127
128 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
129
130 G4double p0 = -38.21;
131 G4double p1 = 922.6;
132 G4double p2 = -2804.;
133 G4double landa0 = -0.0323;
134 G4double landa1 = -5.48;
135 G4double mum0 = 336.1;
136 G4double mu1 = 0.48;
137 G4double nu0 = 524.3;
138 G4double nu1 = -371.8;
139 G4double nu2 = -5.924;
140 G4double delta=1.2;
141
142 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
143 p = p0 + p1/Ec + p2/(Ec*Ec);
144 landa = landa0*ResidualA + landa1;
145 G4double resmu1 = fG4pow->powZ(ResidualA,mu1);
146 mu = mum0*resmu1;
147 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
148 q = landa - nu/(Ec*Ec) - 2*p*Ec;
149 r = mu + 2*nu/Ec + p*(Ec*Ec);
150
151 ji=std::max(Kc,Ec);
152 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
153 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
154
155 if (xs <0.0) {xs=0.0;}
156
157 return xs;
158}
159
160// *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
161G4double G4DeuteronEvaporationProbability::GetOpt34(G4double K)
162// ** d from o.m. of perey and perey
163{
164
165 G4double landa, mu, nu, p ,signor(1.),sig;
166 G4double ec,ecsq,xnulam,etest(0.),a;
167 G4double b,ecut,cut,ecut2,geom,elab;
168
169 G4double flow = 1.e-18;
170 G4double spill= 1.e+18;
171
172 G4double p0 = 0.798;
173 G4double p1 = 420.3;
174 G4double p2 = -1651.;
175 G4double landa0 = 0.00619;
176 G4double landa1 = -7.54;
177 G4double mum0 = 583.5;
178 G4double mu1 = 0.337;
179 G4double nu0 = 421.8;
180 G4double nu1 = -474.5;
181 G4double nu2 = -3.592;
182
183 G4double ra=0.80;
184
185 //JMQ 13/02/09 increase of reduced radius to lower the barrier
186 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
187 ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
188 ecsq = ec * ec;
189 p = p0 + p1/ec + p2/ecsq;
190 landa = landa0*ResidualA + landa1;
191 a = fG4pow->powZ(ResidualA,mu1);
192 mu = mum0 * a;
193 nu = a* (nu0+nu1*ec+nu2*ecsq);
194 xnulam = nu / landa;
195 if (xnulam > spill) { xnulam=0.; }
196 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
197
198 a = -2.*p*ec + landa - nu/ecsq;
199 b = p*ecsq + mu + 2.*nu/ec;
200 ecut = 0.;
201 cut = a*a - 4.*p*b;
202 if (cut > 0.) { ecut = std::sqrt(cut); }
203 ecut = (ecut-a) / (p+p);
204 ecut2 = ecut;
205 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
206 //ecut<0 means that there is no cut with energy axis, i.e. xs is set
207 //to 0 bellow minimum
208 // if (cut < 0.) ecut2 = ecut - 2.;
209 if (cut < 0.) { ecut2 = ecut; }
210 elab = K * FragmentA / G4double(ResidualA);
211 sig = 0.;
212
213 if (elab <= ec) { //start for E<Ec
214 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
215 } //end for E<Ec
216 else { //start for E>Ec
217 sig = (landa*elab+mu+nu/elab) * signor;
218 geom = 0.;
219 if (xnulam < flow || elab < etest) { return sig; }
220 geom = std::sqrt(theA*K);
221 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
222 geom = 31.416 * geom * geom;
223 sig = std::max(geom,sig);
224 } //end for E>Ec
225 return sig;
226}
227
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