Geant4  10.01
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: G4GEMProbability.hh 86986 2014-11-21 13:00:05Z gcosmo $
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 
44 #include <CLHEP/Units/SystemOfUnits.h>
45 
49 #include "G4VCoulombBarrier.hh"
50 #include "G4PairingCorrection.hh"
51 #include "G4Pow.hh"
52 
54 {
55 public:
56 
57  G4GEMProbability(G4int anA, G4int aZ, G4double aSpin);
58 
59  virtual ~G4GEMProbability();
60 
61  G4double EmissionProbability(const G4Fragment & fragment, G4double anEnergy);
62 
63  void Dump() const;
64 
65  inline G4int GetZ_asInt(void) const;
66 
67  inline G4int GetA_asInt(void) const;
68 
69  inline G4double GetZ(void) const;
70 
71  inline G4double GetA(void) const;
72 
73  inline G4double GetSpin(void) const;
74 
75  // inline G4double GetNormalization(void) const;
76 
77  inline void SetCoulomBarrier(const G4VCoulombBarrier * aCoulombBarrierStrategy);
78 
79  inline G4double GetCoulombBarrier(const G4Fragment& fragment) const;
80 
81  inline G4double CalcAlphaParam(const G4Fragment & ) const;
82 
83  inline G4double CalcBetaParam(const G4Fragment & ) const;
84 
85 private:
86 
87  G4double CalcProbability(const G4Fragment & fragment,
88  G4double MaximalKineticEnergy,
89  G4double V);
90 
91  inline G4double CCoeficient(G4int) const;
92 
93  inline G4double I0(G4double t);
94  inline G4double I1(G4double t, G4double tx);
95  inline G4double I2(G4double s0, G4double sx);
96  G4double I3(G4double s0, G4double sx);
97 
98  // Copy constructor
101  const G4GEMProbability & operator=(const G4GEMProbability &right);
102  G4bool operator==(const G4GEMProbability &right) const;
103  G4bool operator!=(const G4GEMProbability &right) const;
104 
105  // Data Members
108 
110 
113 
114  // Spin is fragment spin
116 
117  // Coulomb Barrier
119 
120 protected:
121 
123 
124  // Resonances Energy
125  std::vector<G4double> ExcitEnergies;
126 
127  // Resonances Spin
128  std::vector<G4double> ExcitSpins;
129 
130  // Resonances half lifetime
131  std::vector<G4double> ExcitLifetimes;
132 
133 };
134 
136 {
137  return theZ;
138 }
139 
141 {
142  return theA;
143 }
144 
145 inline G4double G4GEMProbability::GetZ(void) const
146 {
147  return theZ;
148 }
149 
150 inline G4double G4GEMProbability::GetA(void) const
151 {
152  return theA;
153 }
154 
156 {
157  return Spin;
158 }
159 /*
160 inline G4double G4GEMProbability::GetNormalization(void) const
161 {
162  return Normalization;
163 }
164 */
165 inline void
167 {
168  theCoulombBarrierPtr = aCoulombBarrierStrategy;
169 }
170 
171 inline G4double
173 {
174  G4double res = 0.0;
175  if (theCoulombBarrierPtr) {
176  G4int Acomp = fragment.GetA_asInt();
177  G4int Zcomp = fragment.GetZ_asInt();
178  res = theCoulombBarrierPtr->GetCoulombBarrier(Acomp-theA, Zcomp-theZ,
179  fragment.GetExcitationEnergy() -
180  fPairCorr->GetPairingCorrection(Acomp,Zcomp));
181  }
182  return res;
183 }
184 
186 {
187  //JMQ 190709 C's values from Furihata's paper
188  //(notes added on proof in Dostrovskii's paper)
189  //data = {{20, 0.}, {30, -0.06}, {40, -0.10}, {50, -0.10}};
190  G4double C = 0.0;
191  if (aZ >= 50){
192  C=-0.10/G4double(theA);
193  } else if (aZ > 20) {
194  C=(0.123482-0.00534691*aZ-0.0000610624*aZ*aZ+5.93719*1e-7*aZ*aZ*aZ+
195  1.95687*1e-8*aZ*aZ*aZ*aZ)/G4double(theA);
196  }
197  return C;
198 }
199 
200 
202 {
203  //JMQ 190709 values according to Furihata's paper (based on notes added
204  //on proof in Dostrovskii's paper)
205  G4double res;
206  if(GetZ_asInt() == 0) {
207  res = 0.76+1.93/fG4pow->Z13(fragment.GetA_asInt()-GetA_asInt());
208  } else {
209  res = 1.0 + CCoeficient(fragment.GetZ_asInt()-GetZ_asInt());
210  }
211  return res;
212 }
213 
214 inline G4double
216 {
217  //JMQ 190709 values according to Furihata's paper (based on notes added
218  //on proof in Dostrovskii's paper)
219  G4double res;
220  if(GetZ_asInt() == 0) {
221  res = (1.66/fG4pow->Z23(fragment.GetA_asInt()-GetA_asInt())-0.05)*CLHEP::MeV/
222  CalcAlphaParam(fragment);
223  } else {
224  res = -GetCoulombBarrier(fragment);
225  }
226  return res;
227 }
228 
230 {
231  return std::exp(t) - 1.0;
232 }
233 
235 {
236  return (t - tx + 1.0)*std::exp(tx) - t - 1.0;
237 }
238 
239 
241 {
242  G4double S = 1.0/std::sqrt(s0);
243  G4double Sx = 1.0/std::sqrt(sx);
244 
245  G4double p1 = S*S*S*( 1.0 + S*S*( 1.5 + 3.75*S*S) );
246  G4double p2 = Sx*Sx*Sx*( 1.0 + Sx*Sx*( 1.5 + 3.75*Sx*Sx) )*std::exp(sx-s0);
247 
248  return p1-p2;
249 }
250 
251 
252 #endif
G4double I3(G4double s0, G4double sx)
static const double MeV
Definition: G4SIunits.hh:193
G4double I1(G4double t, G4double tx)
Definition: G4Pow.hh:56
G4double EmissionProbability(const G4Fragment &fragment, G4double anEnergy)
void SetCoulomBarrier(const G4VCoulombBarrier *aCoulombBarrierStrategy)
G4double CalcAlphaParam(const G4Fragment &) const
G4PairingCorrection * fPairCorr
G4double GetCoulombBarrier(const G4Fragment &fragment) const
G4int GetZ_asInt(void) const
G4double CalcProbability(const G4Fragment &fragment, G4double MaximalKineticEnergy, G4double V)
void Dump() const
std::vector< G4double > ExcitLifetimes
int G4int
Definition: G4Types.hh:78
G4double I2(G4double s0, G4double sx)
G4int GetA_asInt(void) const
G4bool operator!=(const G4GEMProbability &right) const
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
std::vector< G4double > ExcitSpins
G4int GetA_asInt() const
Definition: G4Fragment.hh:243
G4double GetSpin(void) const
bool G4bool
Definition: G4Types.hh:79
G4double GetPairingCorrection(G4int A, G4int Z) const
const G4VCoulombBarrier * theCoulombBarrierPtr
G4double GetZ(void) const
G4VLevelDensityParameter * theEvapLDPptr
virtual ~G4GEMProbability()
G4double CalcBetaParam(const G4Fragment &) const
std::vector< G4double > ExcitEnergies
G4double GetA(void) const
G4int GetZ_asInt() const
Definition: G4Fragment.hh:248
G4double Z23(G4int Z) const
Definition: G4Pow.hh:151
virtual G4double GetCoulombBarrier(G4int ARes, G4int ZRes, G4double U) const =0
const G4GEMProbability & operator=(const G4GEMProbability &right)
G4double I0(G4double t)
double G4double
Definition: G4Types.hh:76
G4double CCoeficient(G4int) const
G4bool operator==(const G4GEMProbability &right) const
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:260