Geant4  10.02
G4PhotonEvaporationOLD.cc
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: G4PhotonEvaporationOLD.cc 91873 2015-08-07 17:50:24Z vnivanch $
27 //
28 // -------------------------------------------------------------------
29 // GEANT 4 class file
30 //
31 // CERN, Geneva, Switzerland
32 //
33 // File name: G4PhotonEvaporationOLD
34 //
35 // Author: Maria Grazia Pia (pia@genova.infn.it)
36 //
37 // Creation date: 23 October 1998
38 //
39 // Modifications:
40 //
41 // 8 March 2002, Fan Lei (flei@space.qinetiq.com)
42 //
43 // Implementation of Internal Convertion process in discrete deexcitation
44 // The following public methods have been added.
45 //
46 // void SetICM (G4bool);
47 // void CallFromRDM(G4bool);
48 // void SetMaxHalfLife(G4double) ;
49 // void SetEOccupancy( G4ElectronOccupancy eOccupancy) ;
50 // G4ElectronOccupancy GetEOccupancy () ;
51 //
52 // 11 May 2010, V.Ivanchenko add implementation of EmittedFragment and
53 // BreakUpFragment methods; cleanup logic
54 //
55 // 22 October 2015, V.Ivanchenko renamed to G4PhotonEvaporationOLD
56 //
57 // -------------------------------------------------------------------
58 //
59 
61 
62 #include "globals.hh"
63 #include "G4SystemOfUnits.hh"
64 #include "Randomize.hh"
65 #include "G4Gamma.hh"
66 #include "G4LorentzVector.hh"
67 #include "G4VGammaTransition.hh"
68 #include "G4Fragment.hh"
69 #include "G4FragmentVector.hh"
72 #include "G4E1Probability.hh"
73 #include "G4NuclearLevelStore.hh"
74 
75 static const G4double tolerance = 0.1*CLHEP::keV;
76 
78  : G4VEvaporationChannel(aName),
79  verbose(0), myOwnProbAlgorithm(true),
80  eOccupancy(0), vShellNumber(-1), gammaE(0.)
81 {
86 
87  p->SetICM(false);
88 
89  // Time limits
90  G4double timeLimit = DBL_MAX;
91  char* env = getenv("G4AddTimeLimitToPhotonEvaporation");
92  if(env) { timeLimit = 1.e-16*second; }
93 
94  // Time for short-cut simulation of photon evaporationOLD
95  p->SetTimeLimit(timeLimit);
96 
97  // Default time limit for isomere production
99  // SetMaxHalfLife(1.e-6*second);
100 
101  nucleus = 0;
102 }
103 
105 {
107  delete discrDeexcitation;
108  delete contDeexcitation;
109 }
110 
112 {
113  //G4cout << "G4PhotonEvaporationOLD::EmittedFragment" << G4endl;
114  vShellNumber = -1;
115  G4Fragment* gamma = 0;
116  if(contDeexcitation->CanDoTransition(aNucleus)) {
117  gamma = contDeexcitation->GenerateGamma(aNucleus);
118  if(gamma && verbose > 1) {
119  G4cout << "G4PhotonEvaporationOLD::EmittedFragment continium deex: "
120  << gamma << G4endl;
121  G4cout << " Residual: " << aNucleus << G4endl;
122  }
123  } else if(discrDeexcitation->CanDoTransition(aNucleus)) {
124 
125  // Do one photon emission by the discrete deexcitation
126  gamma = discrDeexcitation->GenerateGamma(aNucleus);
127  if(gamma) {
129  if (verbose > 1) {
130  G4cout << "G4PhotonEvaporationOLD::EmittedFragment discrete deex: "
131  << gamma << G4endl;
132  G4cout << " Residual: " << aNucleus << G4endl;
133  }
134  }
135  }
136  return gamma;
137 }
138 
140  G4Fragment* aNucleus)
141 {
142  //G4cout << "G4PhotonEvaporationOLD::BreakUpChain" << G4endl;
143  G4Fragment* gamma = 0;
144  // one continues emission is not excluded
145  if(contDeexcitation->CanDoTransition(aNucleus)) {
146  gamma = contDeexcitation->GenerateGamma(aNucleus);
147  if(gamma) {
148  if (verbose > 1) {
149  G4cout << "G4PhotonEvaporationOLD::EmittedFragment continium deex: "
150  << gamma << G4endl;
151  G4cout << " Residual: " << aNucleus << G4endl;
152  }
153  products->push_back(gamma);
154  }
155  }
156  // main emissions are discrete
157  discrDeexcitation->DoChain(products, aNucleus);
158  return false;
159 }
160 
162 {
163  //G4cout << "G4PhotonEvaporationOLD::BreakUpFragment" << G4endl;
164  G4FragmentVector* products = new G4FragmentVector();
165  BreakUpChain(products, aNucleus);
166  return products;
167 }
168 
170 {
171  //G4cout << "G4PhotonEvaporationOLD::BreakUp" << G4endl;
172  G4Fragment* aNucleus = new G4Fragment(theNucleus);
173  G4FragmentVector* products = new G4FragmentVector();
174  //discrDeexcitation->DoChain(products, aNucleus);
175  BreakUpChain(products, aNucleus);
176  products->push_back(aNucleus);
177  return products;
178 }
179 
181 {
182  //G4cout << "G4PhotonEvaporationOLD::BreakItUp" << G4endl;
183  G4Fragment* aNucleus = new G4Fragment(theNucleus);
184  G4FragmentVector* products = new G4FragmentVector();
185  BreakUpChain(products, aNucleus);
186  products->push_back(aNucleus);
187  return products;
188 }
189 
190 G4double
192 {
193  G4double prob = 0.0;
194  G4int Z = theNucleus->GetZ_asInt();
195  G4int A = theNucleus->GetA_asInt();
196  G4double eexc = theNucleus->GetExcitationEnergy();
197  if(0 < Z && Z < A && eexc > tolerance) {
198  prob = probAlgorithm->EmissionProbability(*theNucleus, eexc);
199  }
200  return prob;
201 }
202 
203 void
205 {
206  if(myOwnProbAlgorithm) { delete probAlgorithm; }
207  probAlgorithm = alg;
208  myOwnProbAlgorithm = false;
209 }
210 
212 {
213  verbose = verb;
216 }
217 
219 {
221 }
222 
224 {
225  static_cast<G4DiscreteGammaDeexcitation*>(discrDeexcitation)->SetHL(hl);
226 }
227 
229 {
231 }
232 
234 {
235  static_cast<G4DiscreteGammaDeexcitation*>(discrDeexcitation)->SetRDM(fromRDM);
236 }
237 
239 {
241 }
242 
243 
244 
245 
void SetEO(G4ElectronOccupancy eo)
virtual G4FragmentVector * BreakItUp(const G4Fragment &nucleus)
void SetVerboseLevel(G4int verbose)
virtual void RDMForced(G4bool)
void SetTimeLimit(G4double value)
int G4int
Definition: G4Types.hh:78
virtual G4bool CanDoTransition(G4Fragment *aNucleus)=0
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
G4int GetA_asInt() const
Definition: G4Fragment.hh:251
bool G4bool
Definition: G4Types.hh:79
G4PhotonEvaporationOLD(const G4String &aName="")
void SetVerboseLevel(G4int verbose)
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:63
static const double second
Definition: G4SIunits.hh:156
virtual G4FragmentVector * BreakUpFragment(G4Fragment *theNucleus)
void SetTimeLimit(G4double value)
G4Fragment * GenerateGamma(G4Fragment *nucleus)
virtual G4double GetEmissionProbability(G4Fragment *theNucleus)
G4VGammaDeexcitation * contDeexcitation
G4VGammaDeexcitation * discrDeexcitation
void SetEOccupancy(G4ElectronOccupancy eOccupancy)
static const G4double tolerance
G4int GetZ_asInt() const
Definition: G4Fragment.hh:256
#define G4endl
Definition: G4ios.hh:61
virtual void SetEmissionStrategy(G4VEmissionProbability *probAlgorithm)
static const double keV
Definition: G4SIunits.hh:213
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus)
virtual G4FragmentVector * BreakUp(const G4Fragment &nucleus)
double G4double
Definition: G4Types.hh:76
virtual G4double EmissionProbability(const G4Fragment &fragment, const G4double anEnergy)=0
#define DBL_MAX
Definition: templates.hh:83
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus)
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:268
void DoChain(G4FragmentVector *, G4Fragment *nucleus)
G4VEmissionProbability * probAlgorithm