Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PreCompoundAlpha.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// -------------------------------------------------------------------
29//
30// GEANT4 Class file
31//
32//
33// File name: G4PreCompoundAlpha
34//
35// Author: V.Lara
36//
37// Modified:
38// 21.08.2008 J. M. Quesada add choice of options
39// 20.08.2010 V.Ivanchenko added G4Pow and G4PreCompoundParameters pointers
40// use int Z and A and cleanup
41//
42
43#include "G4PreCompoundAlpha.hh"
44#include "G4SystemOfUnits.hh"
45#include "G4Alpha.hh"
46
48 : G4PreCompoundIon(G4Alpha::Alpha(), &theAlphaCoulombBarrier)
49{
50 ResidualA = GetRestA();
51 ResidualZ = GetRestZ();
52 theA = GetA();
53 theZ = GetZ();
54 ResidualAthrd = ResidualA13();
55 FragmentAthrd = ResidualAthrd;
56 FragmentA = theA + ResidualA;
57}
58
60{}
61
63{
64 return G4double((N-4)*(P-3)*(N-3)*(P-2)*(N-2)*(P-1)*(N-1)*P)/12.0;
65}
66
68{
69 return 4096.0/G4double(A*A*A);
70}
71
73{
74 G4double rj = 0.0;
75 if(nCharged >=2 && (nParticles-nCharged) >=2 ) {
76 G4double denominator =
77 G4double(nParticles*(nParticles-1)*(nParticles-2)*(nParticles-3));
78 rj = 6.0*nCharged*(nCharged-1)*(nParticles-nCharged)*(nParticles-nCharged-1)
79 /denominator;
80 }
81 return rj;
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//
91{
92 ResidualA = GetRestA();
93 ResidualZ = GetRestZ();
94 theA = GetA();
95 theZ = GetZ();
96 ResidualAthrd = ResidualA13();
97 FragmentA = theA + ResidualA;
98 FragmentAthrd = g4pow->Z13(FragmentA);
99
100 if (OPTxs==0) { return GetOpt0( K); }
101 else if( OPTxs==1 || OPTxs==2) { return GetOpt12( K); }
102 else if (OPTxs==3 || OPTxs==4) { return GetOpt34( K); }
103 else{
104 std::ostringstream errOs;
105 errOs << "BAD Alpha CROSS SECTION OPTION !!" <<G4endl;
106 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
107 return 0.;
108 }
109}
110
112{
113 G4double C = 0.0;
114 G4int aZ = theZ + ResidualZ;
115 if (aZ <= 30)
116 {
117 C = 0.10;
118 }
119 else if (aZ <= 50)
120 {
121 C = 0.1 - (aZ-30)*0.001;
122 }
123 else if (aZ < 70)
124 {
125 C = 0.08 - (aZ-50)*0.001;
126 }
127 else
128 {
129 C = 0.06;
130 }
131 return 1.0+C;
132}
133
134//
135//********************* OPT=1,2 : Chatterjee's cross section ********************
136//(fitting to cross section from Bechetti & Greenles OM potential)
137
139{
140 G4double Kc=K;
141
142 // JMQ xsec is set constant above limit of validity
143 if (K > 50*MeV) { Kc = 50*MeV; }
144
145 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
146
147 G4double p0 = 10.95;
148 G4double p1 = -85.2;
149 G4double p2 = 1146.;
150 G4double landa0 = 0.0643;
151 G4double landa1 = -13.96;
152 G4double mm0 = 781.2;
153 G4double mu1 = 0.29;
154 G4double nu0 = -304.7;
155 G4double nu1 = -470.0;
156 G4double nu2 = -8.580;
157 G4double delta=1.2;
158
159 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
160 p = p0 + p1/Ec + p2/(Ec*Ec);
161 landa = landa0*ResidualA + landa1;
162 G4double resmu1 = g4pow->powZ(ResidualA,mu1);
163 mu = mm0*resmu1;
164 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
165 q = landa - nu/(Ec*Ec) - 2*p*Ec;
166 r = mu + 2*nu/Ec + p*(Ec*Ec);
167
168 ji=std::max(Kc,Ec);
169 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
170 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
171
172 if (xs <0.0) {xs=0.0;}
173
174 return xs;
175}
176
177// *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
179// c ** alpha from huizenga and igo
180{
181 G4double landa, mu, nu, p , signor(1.),sig;
182 G4double ec,ecsq,xnulam,etest(0.),a;
183 G4double b,ecut,cut,ecut2,geom,elab;
184
185 G4double flow = 1.e-18;
186 G4double spill= 1.e+18;
187
188 G4double p0 = 10.95;
189 G4double p1 = -85.2;
190 G4double p2 = 1146.;
191 G4double landa0 = 0.0643;
192 G4double landa1 = -13.96;
193 G4double mm0 = 781.2;
194 G4double mu1 = 0.29;
195 G4double nu0 = -304.7;
196 G4double nu1 = -470.0;
197 G4double nu2 = -8.580;
198
199 G4double ra=1.20;
200
201 //JMQ 13/02/09 increase of reduced radius to lower the barrier
202 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
203 ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
204 ecsq = ec * ec;
205 p = p0 + p1/ec + p2/ecsq;
206 landa = landa0*ResidualA + landa1;
207 a = g4pow->powZ(ResidualA,mu1);
208 mu = mm0 * a;
209 nu = a* (nu0+nu1*ec+nu2*ecsq);
210 xnulam = nu / landa;
211 if (xnulam > spill) { xnulam=0.; }
212 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
213
214 a = -2.*p*ec + landa - nu/ecsq;
215 b = p*ecsq + mu + 2.*nu/ec;
216 ecut = 0.;
217 cut = a*a - 4.*p*b;
218 if (cut > 0.) { ecut = std::sqrt(cut); }
219 ecut = (ecut-a) / (p+p);
220 ecut2 = ecut;
221 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
222 // ecut<0 means that there is no cut with energy axis, i.e. xs is set
223 // to 0 bellow minimum
224 // if (cut < 0.) ecut2 = ecut - 2.;
225 if (cut < 0.) { ecut2 = ecut; }
226 elab = K * FragmentA / G4double(ResidualA);
227 sig = 0.;
228
229 if (elab <= ec) { //start for E<Ec
230 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
231 } //end for E<Ec
232 else { //start for E>Ec
233 sig = (landa*elab+mu+nu/elab) * signor;
234 geom = 0.;
235 if (xnulam < flow || elab < etest) { return sig; }
236 geom = std::sqrt(theA*K);
237 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
238 geom = 31.416 * geom * geom;
239 sig = std::max(geom,sig);
240 } //end for E>Ec
241 return sig;
242}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4double Z13(G4int Z)
Definition: G4Pow.hh:110
G4double powZ(G4int Z, G4double y)
Definition: G4Pow.hh:180
virtual G4double CrossSection(G4double ekin)
G4double GetOpt12(G4double K)
virtual G4double FactorialFactor(G4int N, G4int P)
G4double GetOpt34(G4double K)
virtual G4double CoalescenceFactor(G4int A)
virtual G4double GetRj(G4int NumberParticles, G4int NumberCharged)
virtual G4double GetAlpha()
G4double GetOpt0(G4double ekin)
G4double ResidualA13() const
G4int GetRestZ() const
G4int GetRestA() const