Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups 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 // $Id: G4GEMProbability.hh 67983 2013-03-13 10:42:03Z 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 
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  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 
83 private:
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 
121 protected:
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 
146 inline G4double G4GEMProbability::GetZ(void) const
147 {
148  return theZ;
149 }
150 
151 inline G4double G4GEMProbability::GetA(void) const
152 {
153  return theA;
154 }
155 
157 {
158  return Spin;
159 }
160 
162 {
163  return Normalization;
164 }
165 
166 inline void
168 {
169  theCoulombBarrierPtr = aCoulombBarrierStrategy;
170 }
171 
172 inline 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 
186 inline 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 
215 inline 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 
230 inline G4double G4GEMProbability::I0(G4double t)
231 {
232  return std::exp(t) - 1.0;
233 }
234 
235 inline G4double G4GEMProbability::I1(G4double t, G4double tx)
236 {
237  return (t - tx + 1.0)*std::exp(tx) - t - 1.0;
238 }
239 
240 
241 inline 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
Definition: G4Pow.hh:56
G4double EmissionProbability(const G4Fragment &fragment, G4double anEnergy)
void SetCoulomBarrier(const G4VCoulombBarrier *aCoulombBarrierStrategy)
G4double CalcAlphaParam(const G4Fragment &) const
G4double GetCoulombBarrier(const G4Fragment &fragment) const
G4int GetZ_asInt(void) const
std::vector< G4double > ExcitLifetimes
int G4int
Definition: G4Types.hh:78
G4int GetA_asInt(void) const
G4double Z13(G4int Z) const
Definition: G4Pow.hh:129
std::vector< G4double > ExcitSpins
G4int GetA_asInt() const
Definition: G4Fragment.hh:238
G4double GetSpin(void) const
G4double GetNormalization(void) const
bool G4bool
Definition: G4Types.hh:79
G4double GetPairingCorrection(G4int A, G4int Z) const
G4double GetZ(void) const
virtual ~G4GEMProbability()
G4double CalcBetaParam(const G4Fragment &) const
std::vector< G4double > ExcitEnergies
G4double GetA(void) const
G4int GetZ_asInt() const
Definition: G4Fragment.hh:243
G4double Z23(G4int Z) const
Definition: G4Pow.hh:153
virtual G4double GetCoulombBarrier(G4int ARes, G4int ZRes, G4double U) const =0
double G4double
Definition: G4Types.hh:76
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:255