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
G4GEMProbability.hh
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 header G4GEMProbability
31//
32//
33// Hadronic Process: Nuclear De-excitations
34// by V. Lara (Sept 2001)
35//
36// 18.05.2010 V.Ivanchenko trying to speedup the most slow method
37// by usage of G4Pow, integer Z and A; moved constructor,
38// destructor and virtual functions to source
39//
40
41#ifndef G4GEMProbability_h
42#define G4GEMProbability_h 1
43
45
49#include "G4VCoulombBarrier.hh"
51#include "G4Pow.hh"
52
54{
55public:
56
57 G4GEMProbability(G4int anA, G4int aZ, G4double aSpin);
58
59 virtual ~G4GEMProbability();
60
61 G4double EmissionProbability(const G4Fragment & fragment, G4double anEnergy);
62
63 inline G4int GetZ_asInt(void) const;
64
65 inline G4int GetA_asInt(void) const;
66
67 inline G4double GetZ(void) const;
68
69 inline G4double GetA(void) const;
70
71 inline G4double GetSpin(void) const;
72
73 inline G4double GetNormalization(void) const;
74
75 inline void SetCoulomBarrier(const G4VCoulombBarrier * aCoulombBarrierStrategy);
76
77 inline G4double GetCoulombBarrier(const G4Fragment& fragment) const;
78
79 inline G4double CalcAlphaParam(const G4Fragment & ) const;
80
81 inline G4double CalcBetaParam(const G4Fragment & ) const;
82
83private:
84
85 G4double CalcProbability(const G4Fragment & fragment,
86 G4double MaximalKineticEnergy,
87 G4double V);
88
89 inline G4double CCoeficient(G4int) const;
90
91 inline G4double I0(G4double t);
92 inline G4double I1(G4double t, G4double tx);
93 inline G4double I2(G4double s0, G4double sx);
94 G4double I3(G4double s0, G4double sx);
95
96 // Copy constructor
99 const G4GEMProbability & operator=(const G4GEMProbability &right);
100 G4bool operator==(const G4GEMProbability &right) const;
101 G4bool operator!=(const G4GEMProbability &right) const;
102
103 // Data Members
104 G4Pow* fG4pow;
105 G4PairingCorrection* fPairCorr;
106
107 G4VLevelDensityParameter * theEvapLDPptr;
108
109 G4int theA;
110 G4int theZ;
111
112 // Spin is fragment spin
113 G4double Spin;
114
115 // Coulomb Barrier
116 const G4VCoulombBarrier * theCoulombBarrierPtr;
117
118 // Normalization
119 G4double Normalization;
120
121protected:
122
124
125 // Resonances Energy
126 std::vector<G4double> ExcitEnergies;
127
128 // Resonances Spin
129 std::vector<G4double> ExcitSpins;
130
131 // Resonances half lifetime
132 std::vector<G4double> ExcitLifetimes;
133
134};
135
137{
138 return theZ;
139}
140
142{
143 return theA;
144}
145
147{
148 return theZ;
149}
150
152{
153 return theA;
154}
155
157{
158 return Spin;
159}
160
162{
163 return Normalization;
164}
165
166inline void
168{
169 theCoulombBarrierPtr = aCoulombBarrierStrategy;
170}
171
172inline G4double
174{
175 G4double res = 0.0;
176 if (theCoulombBarrierPtr) {
177 G4int Acomp = fragment.GetA_asInt();
178 G4int Zcomp = fragment.GetZ_asInt();
179 res = theCoulombBarrierPtr->GetCoulombBarrier(Acomp-theA, Zcomp-theZ,
180 fragment.GetExcitationEnergy() -
181 fPairCorr->GetPairingCorrection(Acomp,Zcomp));
182 }
183 return res;
184}
185
186inline G4double G4GEMProbability::CCoeficient(G4int aZ) const
187{
188 //JMQ 190709 C's values from Furihata's paper
189 //(notes added on proof in Dostrovskii's paper)
190 //data = {{20, 0.}, {30, -0.06}, {40, -0.10}, {50, -0.10}};
191 G4double C = 0.0;
192 if (aZ >= 50){
193 C=-0.10/G4double(theA);
194 } else if (aZ > 20) {
195 C=(0.123482-0.00534691*aZ-0.0000610624*aZ*aZ+5.93719*1e-7*aZ*aZ*aZ+
196 1.95687*1e-8*aZ*aZ*aZ*aZ)/G4double(theA);
197 }
198 return C;
199}
200
201
203{
204 //JMQ 190709 values according to Furihata's paper (based on notes added
205 //on proof in Dostrovskii's paper)
206 G4double res;
207 if(GetZ_asInt() == 0) {
208 res = 0.76+1.93/fG4pow->Z13(fragment.GetA_asInt()-GetA_asInt());
209 } else {
210 res = 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ_asInt());
211 }
212 return res;
213}
214
215inline G4double
217{
218 //JMQ 190709 values according to Furihata's paper (based on notes added
219 //on proof in Dostrovskii's paper)
220 G4double res;
221 if(GetZ_asInt() == 0) {
222 res = (1.66/fG4pow->Z23(fragment.GetA_asInt()-GetA_asInt())-0.05)*CLHEP::MeV/
223 CalcAlphaParam(fragment);
224 } else {
225 res = -GetCoulombBarrier(fragment);
226 }
227 return res;
228}
229
230inline G4double G4GEMProbability::I0(G4double t)
231{
232 return std::exp(t) - 1.0;
233}
234
235inline G4double G4GEMProbability::I1(G4double t, G4double tx)
236{
237 return (t - tx + 1.0)*std::exp(tx) - t - 1.0;
238}
239
240
241inline G4double G4GEMProbability::I2(G4double s0, G4double sx)
242{
243 G4double S = 1.0/std::sqrt(s0);
244 G4double Sx = 1.0/std::sqrt(sx);
245
246 G4double p1 = S*S*S*( 1.0 + S*S*( 1.5 + 3.75*S*S) );
247 G4double p2 = Sx*Sx*Sx*( 1.0 + Sx*Sx*( 1.5 + 3.75*Sx*Sx) )*std::exp(sx-s0);
248
249 return p1-p2;
250}
251
252
253#endif
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:235
G4int GetZ_asInt() const
Definition: G4Fragment.hh:223
G4int GetA_asInt() const
Definition: G4Fragment.hh:218
G4double GetCoulombBarrier(const G4Fragment &fragment) const
std::vector< G4double > ExcitSpins
G4double GetNormalization(void) const
std::vector< G4double > ExcitEnergies
G4int GetA_asInt(void) const
virtual ~G4GEMProbability()
G4double GetA(void) const
G4double CalcAlphaParam(const G4Fragment &) const
std::vector< G4double > ExcitLifetimes
G4double GetZ(void) const
G4double CalcBetaParam(const G4Fragment &) const
G4int GetZ_asInt(void) const
G4double GetSpin(void) const
void SetCoulomBarrier(const G4VCoulombBarrier *aCoulombBarrierStrategy)
G4double EmissionProbability(const G4Fragment &fragment, G4double anEnergy)
G4double GetPairingCorrection(G4int A, G4int Z) const
Definition: G4Pow.hh:54
G4double Z23(G4int Z)
Definition: G4Pow.hh:134
G4double Z13(G4int Z)
Definition: G4Pow.hh:110
virtual G4double GetCoulombBarrier(G4int ARes, G4int ZRes, G4double U) const =0