Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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//
27//---------------------------------------------------------------------
28//
29// Geant4 header G4GEMProbability
30//
31//
32// Hadronic Process: Nuclear De-excitations
33// by V. Lara (Sept 2001)
34//
35// 18.05.2010 V.Ivanchenko trying to speedup the most slow method
36// by usage of G4Pow, integer Z and A; moved constructor,
37// destructor and virtual functions to source
38//
39
40#ifndef G4GEMProbability_h
41#define G4GEMProbability_h 1
42
44
48#include "G4VCoulombBarrier.hh"
49#include "G4NuclearLevelData.hh"
50#include "G4Pow.hh"
51#include "G4Exp.hh"
52
54{
55public:
56
57 G4GEMProbability(G4int anA, G4int aZ, G4double aSpin);
58
59 virtual ~G4GEMProbability();
60
61 // not used for evaporation
62 virtual G4double EmissionProbability(const G4Fragment& fragment,
63 G4double maxKineticEnergy);
64
65 void Dump() const;
66
67 inline G4double GetSpin(void) const;
68
69 inline void SetCoulomBarrier(const G4VCoulombBarrier * aCoulombBarrierStrategy);
70
71 inline G4double GetCoulombBarrier(const G4Fragment& fragment) const;
72
73 inline G4double CalcAlphaParam(const G4Fragment & ) const;
74
75 inline G4double CalcBetaParam(const G4Fragment & ) const;
76
77private:
78
79 G4double CalcProbability(const G4Fragment & fragment,
80 G4double MaximalKineticEnergy,
81 G4double V);
82
83 inline G4double CCoeficient(G4int) const;
84
85 inline G4double I0(G4double t);
86 inline G4double I1(G4double t, G4double tx);
87 inline G4double I2(G4double s0, G4double sx);
88 G4double I3(G4double s0, G4double sx);
89
90 // Copy constructor
93 const G4GEMProbability & operator=(const G4GEMProbability &right);
94 G4bool operator==(const G4GEMProbability &right) const;
95 G4bool operator!=(const G4GEMProbability &right) const;
96
97 // Data Members
98 G4Pow* fG4pow;
99 G4NuclearLevelData* fNucData;
100
101 G4VLevelDensityParameter * theEvapLDPptr;
102
103 // Spin is fragment spin
104 G4double Spin;
105
106 // Coulomb Barrier
107 const G4VCoulombBarrier * theCoulombBarrierPtr;
108
109protected:
110
112
113 // Resonances Energy
114 std::vector<G4double> ExcitEnergies;
115
116 // Resonances Spin
117 std::vector<G4double> ExcitSpins;
118
119 // Resonances half lifetime
120 std::vector<G4double> ExcitLifetimes;
121
122};
123
125{
126 return Spin;
127}
128
129inline void
131{
132 theCoulombBarrierPtr = aCoulombBarrierStrategy;
133}
134
135inline G4double
137{
138 G4double res = 0.0;
139 if (theCoulombBarrierPtr) {
140 G4int Acomp = fragment.GetA_asInt();
141 G4int Zcomp = fragment.GetZ_asInt();
142 res = theCoulombBarrierPtr->GetCoulombBarrier(Acomp-theA, Zcomp-theZ,
143 fragment.GetExcitationEnergy() -
144 fNucData->GetPairingCorrection(Zcomp,Acomp));
145 }
146 return res;
147}
148
149inline G4double G4GEMProbability::CCoeficient(G4int aZ) const
150{
151 //JMQ 190709 C's values from Furihata's paper
152 //(notes added on proof in Dostrovskii's paper)
153 //data = {{20, 0.}, {30, -0.06}, {40, -0.10}, {50, -0.10}};
154 G4double C = 0.0;
155 if (aZ >= 50){
156 C=-0.10/G4double(theA);
157 } else if (aZ > 20) {
158 C=(0.123482-0.00534691*aZ-0.0000610624*aZ*aZ+5.93719*1e-7*aZ*aZ*aZ+
159 1.95687*1e-8*aZ*aZ*aZ*aZ)/G4double(theA);
160 }
161 return C;
162}
163
164
166{
167 //JMQ 190709 values according to Furihata's paper (based on notes added
168 //on proof in Dostrovskii's paper)
169 G4double res;
170 if(theZ == 0) {
171 res = 0.76+1.93/fG4pow->Z13(fragment.GetA_asInt()-theA);
172 } else {
173 res = 1.0 + CCoeficient(fragment.GetZ_asInt()-theZ);
174 }
175 return res;
176}
177
178inline G4double
180{
181 //JMQ 190709 values according to Furihata's paper (based on notes added
182 //on proof in Dostrovskii's paper)
183 G4double res;
184 if(theZ == 0) {
185 res = (1.66/fG4pow->Z23(fragment.GetA_asInt()-theA)-0.05)*CLHEP::MeV/
186 CalcAlphaParam(fragment);
187 } else {
188 res = -GetCoulombBarrier(fragment);
189 }
190 return res;
191}
192
193inline G4double G4GEMProbability::I0(G4double t)
194{
195 return G4Exp(t) - 1.0;
196}
197
198inline G4double G4GEMProbability::I1(G4double t, G4double tx)
199{
200 return (t - tx + 1.0)*G4Exp(tx) - t - 1.0;
201}
202
203
204inline G4double G4GEMProbability::I2(G4double s0, G4double sx)
205{
206 G4double S = 1.0/std::sqrt(s0);
207 G4double Sx = 1.0/std::sqrt(sx);
208
209 G4double p1 = S*S*S*( 1.0 + S*S*( 1.5 + 3.75*S*S) );
210 G4double p2 = Sx*Sx*Sx*( 1.0 + Sx*Sx*( 1.5 + 3.75*Sx*Sx) )*G4Exp(sx-s0);
211
212 return p1-p2;
213}
214
215
216#endif
G4double S(G4double temp)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:312
G4int GetZ_asInt() const
Definition: G4Fragment.hh:289
G4int GetA_asInt() const
Definition: G4Fragment.hh:284
G4double GetCoulombBarrier(const G4Fragment &fragment) const
std::vector< G4double > ExcitSpins
std::vector< G4double > ExcitEnergies
virtual ~G4GEMProbability()
G4double CalcAlphaParam(const G4Fragment &) const
std::vector< G4double > ExcitLifetimes
G4double CalcBetaParam(const G4Fragment &) const
virtual G4double EmissionProbability(const G4Fragment &fragment, G4double maxKineticEnergy)
G4double GetSpin(void) const
void SetCoulomBarrier(const G4VCoulombBarrier *aCoulombBarrierStrategy)
G4PairingCorrection * GetPairingCorrection()
Definition: G4Pow.hh:49
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
G4double Z23(G4int Z) const
Definition: G4Pow.hh:125
virtual G4double GetCoulombBarrier(G4int ARes, G4int ZRes, G4double U=0.0) const =0