Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4PromptPhotonEvaporation.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$
27 //
28 // -------------------------------------------------------------------
29 //
30 // GEANT4 class file
31 //
32 // CERN, Geneva, Switzerland
33 //
34 // File name: G4PromptPhotonEvaporation
35 //
36 // Author: Vladimir Ivantchenko
37 //
38 // Creation date: 20 December 2011
39 //
40 //Modifications:
41 //
42 //
43 // -------------------------------------------------------------------
44 //
45 
47 
48 #include "globals.hh"
49 #include "G4PhysicalConstants.hh"
50 #include "G4SystemOfUnits.hh"
51 #include "Randomize.hh"
52 #include "G4Gamma.hh"
53 #include "G4NuclearLevelManager.hh"
54 #include "G4NuclearLevelStore.hh"
55 
56 #include "G4LorentzVector.hh"
57 #include "G4VGammaTransition.hh"
58 #include "G4Fragment.hh"
59 #include "G4FragmentVector.hh"
62 #include "G4E1Probability.hh"
63 
65  :fVerbose(0), fICM(true), fRDM(false), fMaxHalfTime(DBL_MAX),
66  fEmissionProbability(0.0),levelManager(0),nucleus(0)
67 {
68  fNuclearLevelStore = G4NuclearLevelStore::GetInstance();
69  theA = theZ = 0;
70  fEnergyFermi = fExcEnergyMax = gammaE = 0.0;
71 }
72 
74 {
75 }
76 
77 G4double
79 {
80  fEmissionProbability = 0.0;
81  nucleus = theNucleus;
82  G4double ex = nucleus->GetExcitationEnergy();
83 
84  if(nucleus->GetZ_asInt() != theZ || nucleus->GetA_asInt() != theA) {
85  G4int Z = nucleus->GetZ_asInt();
86  G4int A = nucleus->GetA_asInt();
87  fExcEnergyMax = -1.0;
88  if(1 < A && ex > keV) {
89  fEnergyFermi = G4NucleiProperties::GetNuclearMass(A-1, Z)
90  + neutron_mass_c2 - nucleus->GetGroundStateMass();
91  fExcEnergyMax = fEnergyFermi + 15*MeV;
92  }
93  if(ex < fExcEnergyMax) {
94 
95  theZ = Z;
96  theA = A;
97  levelManager = fNuclearLevelStore->GetManager(Z,A);
98 
99  // continium transition
100  if(ex >= fEnergyFermi) {
101 
102  // discrete transition
103  } else {
104  }
105  }
106  }
107  return fEmissionProbability;
108 }
109 
110 G4Fragment*
112 {
113  //G4cout << "G4PromptPhotonEvaporation::EmittedFragment" << G4endl;
114 
115  G4Fragment* gamma = 0;
116  if(theNucleus->GetExcitationEnergy() <= keV) { return gamma; }
117  if(GetEmissionProbability(theNucleus) <= 0.0){ return gamma; }
118 
119  //G4cout << "G4PromptPhotonEvaporation::EmittedFragment" << G4endl;
120  /*
121  G4Fragment* gamma = _contDeexcitation->GenerateGamma();
122  if(gamma) {
123  if (_verbose > 0) {
124  G4cout << "G4PromptPhotonEvaporation::EmittedFragment continium deex: "
125  << gamma << G4endl;
126  G4cout << " Residual: " << nucleus << G4endl;
127  }
128  return gamma;
129  }
130  }
131 
132  // Do one photon emission by the discrete deexcitation
133  _discrDeexcitation->SetNucleus(_nucleus);
134  _discrDeexcitation->Initialize();
135 
136  if(_discrDeexcitation->CanDoTransition()) {
137  G4Fragment* gamma = _discrDeexcitation->GenerateGamma();
138  if(gamma) {
139  if (_verbose > 0) {
140  G4cout << "G4PromptPhotonEvaporation::EmittedFragment discrete deex: "
141  << gamma << G4endl;
142  G4cout << " Residual: " << nucleus << G4endl;
143  }
144  return gamma;
145  }
146  }
147 
148  if (_verbose > 0) {
149  G4cout << "G4PromptPhotonEvaporation unable emit gamma: "
150  << nucleus << G4endl;
151  }
152  */
153  return gamma;
154 }
155 
158 {
159  //G4cout << "G4PromptPhotonEvaporation::BreakUpFragment" << G4endl;
161  G4Fragment* gamma = 0;
162  do {
163  gamma = EmittedFragment(theNucleus);
164  if(gamma) { v->push_back(gamma); }
165  } while(gamma);
166 
167  return v;
168 }
169 
172 {
173  //G4cout << "G4PromptPhotonEvaporation::BreakUp" << G4endl;
174  G4Fragment* initialState = new G4Fragment(theNucleus);
175  G4FragmentVector* v = BreakUpFragment(initialState);
176  v->push_back(initialState);
177  return v;
178 }
179 
180