Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PreCompoundDeuteron.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: G4PreCompoundDeuteron
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 "G4Deuteron.hh"
46
48 : G4PreCompoundIon(G4Deuteron::Deuteron(), &theDeuteronCoulombBarrier)
49{
50 theA = GetA();
51 theZ = GetZ();
52 ResidualA = ResidualZ = 0;
53 ResidualAthrd = FragmentAthrd = 0.0;
54 FragmentA = theA;
55}
56
58{}
59
61{
62 return G4double((N-1)*(N-2)*(P-1)*P)/2.0;
63}
64
66{
67 return 16.0/G4double(A);
68}
69
71{
72 G4double rj = 0.0;
73 if(nCharged >=1 && (nParticles-nCharged) >=1) {
74 G4double denominator = G4double(nParticles*(nParticles-1));
75 rj = 2*nCharged*(nParticles-nCharged)/denominator;
76 }
77 return rj;
78}
79
80////////////////////////////////////////////////////////////////////////////////
81//J. M. Quesada (Dec 2007-June 2008): New inverse reaction cross sections
82//OPT=0 Dostrovski's parameterization
83//OPT=1,2 Chatterjee's paramaterization
84//OPT=3,4 Kalbach's parameterization
85//
87{
88 ResidualA = GetRestA();
89 ResidualZ = GetRestZ();
90 theA = GetA();
91 theZ = GetZ();
92 ResidualAthrd = ResidualA13();
93 FragmentA = theA + ResidualA;
94 FragmentAthrd = g4pow->Z13(FragmentA);
95
96 if (OPTxs==0) { return GetOpt0( K); }
97 else if( OPTxs==1 || OPTxs==2) { return GetOpt12( K); }
98 else if (OPTxs==3 || OPTxs==4) { return GetOpt34( K); }
99 else{
100 std::ostringstream errOs;
101 errOs << "BAD DEUTERON CROSS SECTION OPTION !!" <<G4endl;
102 throw G4HadronicException(__FILE__, __LINE__, errOs.str());
103 return 0.;
104 }
105}
106
108{
109 G4double C = 0.0;
110 G4int aZ = theZ + ResidualZ;
111 if (aZ >= 70)
112 {
113 C = 0.10;
114 }
115 else
116 {
117 C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ + 0.98375;
118 }
119 return 1.0 + C/2.0;
120}
121//
122//********************* OPT=1,2 : Chatterjee's cross section ********************
123//(fitting to cross section from Bechetti & Greenles OM potential)
124
126{
127 G4double Kc = K;
128
129 // JMQ xsec is set constat above limit of validity
130 if (K > 50*MeV) { Kc = 50*MeV; }
131
132 G4double landa ,mu ,nu ,p , Ec,q,r,ji,xs;
133
134 G4double p0 = -38.21;
135 G4double p1 = 922.6;
136 G4double p2 = -2804.;
137 G4double landa0 = -0.0323;
138 G4double landa1 = -5.48;
139 G4double mm0 = 336.1;
140 G4double mu1 = 0.48;
141 G4double nu0 = 524.3;
142 G4double nu1 = -371.8;
143 G4double nu2 = -5.924;
144 G4double delta=1.2;
145
146 Ec = 1.44*theZ*ResidualZ/(1.5*ResidualAthrd+delta);
147 p = p0 + p1/Ec + p2/(Ec*Ec);
148 landa = landa0*ResidualA + landa1;
149 G4double resmu1 = g4pow->powZ(ResidualA,mu1);
150 mu = mm0*resmu1;
151 nu = resmu1*(nu0 + nu1*Ec + nu2*(Ec*Ec));
152 q = landa - nu/(Ec*Ec) - 2*p*Ec;
153 r = mu + 2*nu/Ec + p*(Ec*Ec);
154
155 ji=std::max(Kc,Ec);
156 if(Kc < Ec) { xs = p*Kc*Kc + q*Kc + r;}
157 else {xs = p*(Kc - ji)*(Kc - ji) + landa*Kc + mu + nu*(2 - Kc/ji)/ji ;}
158
159 if (xs <0.0) {xs=0.0;}
160
161 return xs;
162}
163
164// *********** OPT=3,4 : Kalbach's cross sections (from PRECO code)*************
166// ** d from o.m. of perey and perey
167{
168
169 G4double landa, mu, nu, p ,signor(1.),sig;
170 G4double ec,ecsq,xnulam,etest(0.),a;
171 G4double b,ecut,cut,ecut2,geom,elab;
172
173 G4double flow = 1.e-18;
174 G4double spill= 1.e+18;
175
176 G4double p0 = 0.798;
177 G4double p1 = 420.3;
178 G4double p2 = -1651.;
179 G4double landa0 = 0.00619;
180 G4double landa1 = -7.54;
181 G4double mm0 = 583.5;
182 G4double mu1 = 0.337;
183 G4double nu0 = 421.8;
184 G4double nu1 = -474.5;
185 G4double nu2 = -3.592;
186
187 G4double ra=0.80;
188
189 //JMQ 13/02/09 increase of reduced radius to lower the barrier
190 // ec = 1.44 * theZ * ResidualZ / (1.5*ResidualAthrd+ra);
191 ec = 1.44 * theZ * ResidualZ / (1.7*ResidualAthrd+ra);
192 ecsq = ec * ec;
193 p = p0 + p1/ec + p2/ecsq;
194 landa = landa0*ResidualA + landa1;
195 a = g4pow->powZ(ResidualA,mu1);
196 mu = mm0 * a;
197 nu = a* (nu0+nu1*ec+nu2*ecsq);
198 xnulam = nu / landa;
199 if (xnulam > spill) { xnulam=0.; }
200 if (xnulam >= flow) { etest = 1.2 *std::sqrt(xnulam); }
201
202 a = -2.*p*ec + landa - nu/ecsq;
203 b = p*ecsq + mu + 2.*nu/ec;
204 ecut = 0.;
205 cut = a*a - 4.*p*b;
206 if (cut > 0.) { ecut = std::sqrt(cut); }
207 ecut = (ecut-a) / (p+p);
208 ecut2 = ecut;
209 //JMQ 290310 for avoiding unphysical increase below minimum (at ecut)
210 //ecut<0 means that there is no cut with energy axis, i.e. xs is set
211 //to 0 bellow minimum
212 // if (cut < 0.) ecut2 = ecut - 2.;
213 if (cut < 0.) { ecut2 = ecut; }
214 elab = K * FragmentA / G4double(ResidualA);
215 sig = 0.;
216
217 if (elab <= ec) { //start for E<Ec
218 if (elab > ecut2) { sig = (p*elab*elab+a*elab+b) * signor; }
219 } //end for E<Ec
220 else { //start for E>Ec
221 sig = (landa*elab+mu+nu/elab) * signor;
222 geom = 0.;
223 if (xnulam < flow || elab < etest) { return sig; }
224 geom = std::sqrt(theA*K);
225 geom = 1.23*ResidualAthrd + ra + 4.573/geom;
226 geom = 31.416 * geom * geom;
227 sig = std::max(geom,sig);
228 } //end for E>Ec
229 return sig;
230}
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)
virtual G4double CoalescenceFactor(G4int A)
G4double GetOpt34(G4double K)
virtual G4double GetRj(G4int NumberParticles, G4int NumberCharged)
virtual G4double FactorialFactor(G4int N, G4int P)
G4double GetOpt12(G4double K)
G4double GetOpt0(G4double ekin)
G4double ResidualA13() const
G4int GetRestZ() const
G4int GetRestA() const