Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PreCompoundTriton.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: G4PreCompoundTriton
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
44#include "G4SystemOfUnits.hh"
45#include "G4Triton.hh"
46
48 : G4PreCompoundIon(G4Triton::Triton(), &theTritonCoulombBarrier)
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-3)*(P-2)*(N-2)*(P-1)*(N-1)*P)/6.0;
65}
66
68{
69 return 243.0/G4double(A*A);
70}
71
73{
74 G4double rj = 0.0;
75 if(nCharged >= 1 && (nParticles-nCharged) >= 2) {
76 G4double denominator =
77 G4double(nParticles*(nParticles-1)*(nParticles-2));
78 rj = G4double(3*nCharged*(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 TRITON 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 >= 70)
116 {
117 C = 0.10;
118 }
119 else
120 {
121 C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
122 }
123
124 return 1.0 + C/3.0;
125}
126
127//
128//********************* OPT=1,2 : Chatterjee's cross section *****************
129//(fitting to cross section from Bechetti & Greenles OM potential)
130
132{
133 G4double Kc=K;
134
135 // JMQ xsec is set constat above limit of validity
136 if (K > 50*MeV) { Kc=50*MeV; }
137
138 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
139
140 G4double p0 = -11.04;
141 G4double p1 = 619.1;
142 G4double p2 = -2147.;
143 G4double landa0 = -0.0426;
144 G4double landa1 = -10.33;
145 G4double mm0 = 601.9;
146 G4double mu1 = 0.37;
147 G4double nu0 = 583.0;
148 G4double nu1 = -546.2;
149 G4double nu2 = 1.718;
150 G4double delta=1.2;
151
152 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
153 p = p0 + p1/Ec + p2/(Ec*Ec);
154 landa = landa0*ResidualA + landa1;
155
156 G4double resmu1 = g4pow->powZ(ResidualA,mu1);
157 mu = mm0*resmu1;
158 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
159 q = landa - nu/(Ec*Ec) - 2*p*Ec;
160 r = mu + 2*nu/Ec + p*(Ec*Ec);
161
162 ji=std::max(Kc,Ec);
163 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
164 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
165
166 if (xs <0.0) {xs=0.0;}
167
168 return xs;
169}
170
171// *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
173// ** t from o.m. of hafele, flynn et al
174{
175 G4double landa, mu, nu, p , signor(1.),sig;
176 G4double ec,ecsq,xnulam,etest(0.),a;
177 G4double b,ecut,cut,ecut2,geom,elab;
178
179 G4double flow = 1.e-18;
180 G4double spill= 1.e+18;
181
182 G4double p0 = -21.45;
183 G4double p1 = 484.7;
184 G4double p2 = -1608.;
185 G4double landa0 = 0.0186;
186 G4double landa1 = -8.90;
187 G4double mm0 = 686.3;
188 G4double mu1 = 0.325;
189 G4double nu0 = 368.9;
190 G4double nu1 = -522.2;
191 G4double nu2 = -4.998;
192
193 G4double ra=0.80;
194
195 //JMQ 13/02/09 increase of reduced radius to lower the barrier
196 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
197 ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
198 ecsq = ec * ec;
199 p = p0 + p1/ec + p2/ecsq;
200 landa = landa0*ResidualA + landa1;
201 a = g4pow->powZ(ResidualA,mu1);
202 mu = mm0 * a;
203 nu = a* (nu0+nu1*ec+nu2*ecsq);
204 xnulam = nu / landa;
205 if (xnulam > spill) { xnulam=0.; }
206 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
207
208 a = -2.*p*ec + landa - nu/ecsq;
209 b = p*ecsq + mu + 2.*nu/ec;
210 ecut = 0.;
211 cut = a*a - 4.*p*b;
212 if (cut > 0.) { ecut = std::sqrt(cut); }
213 ecut = (ecut-a) / (p+p);
214 ecut2 = ecut;
215 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
216 // ecut<0 means that there is no cut with energy axis, i.e. xs is set
217 // to 0 bellow minimum
218 // if (cut < 0.) ecut2 = ecut - 2.;
219 if (cut < 0.) { ecut2 = ecut; }
220 elab = K * FragmentA / G4double(ResidualA);
221 sig = 0.;
222
223 if (elab <= ec) { //start for E<Ec
224 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
225 } //end for E<Ec
226 else { //start for E>Ec
227 sig = (landa*elab+mu+nu/elab) * signor;
228 geom = 0.;
229 if (xnulam < flow || elab < etest) { return sig; }
230 geom = std::sqrt(theA*K);
231 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
232 geom = 31.416 * geom * geom;
233 sig = std::max(geom,sig);
234 } //end for E>Ec
235 return sig;
236}
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
G4double GetOpt0(G4double ekin)
virtual G4double GetAlpha()
virtual G4double CrossSection(G4double ekin)
G4double GetOpt34(G4double K)
virtual G4double GetRj(G4int NumberParticles, G4int NumberCharged)
virtual G4double FactorialFactor(G4int N, G4int P)
virtual G4double CoalescenceFactor(G4int A)
G4double GetOpt12(G4double K)
G4double ResidualA13() const
G4int GetRestZ() const
G4int GetRestA() const