ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4GEMProbability.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4GEMProbability.hh
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 {
55 public:
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 
77 private:
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
100 
102 
103  // Spin is fragment spin
105 
106  // Coulomb Barrier
108 
109 protected:
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 
129 inline void
131 {
132  theCoulombBarrierPtr = aCoulombBarrierStrategy;
133 }
134 
135 inline 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 
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 
178 inline 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 
194 {
195  return G4Exp(t) - 1.0;
196 }
197 
199 {
200  return (t - tx + 1.0)*G4Exp(tx) - t - 1.0;
201 }
202 
203 
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