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