Geant4  10.00.p01
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: G4PromptPhotonEvaporation.cc 67983 2013-03-13 10:42:03Z gcosmo $
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 {
69  theA = theZ = 0;
71 }
72 
74 {
75 }
76 
77 G4double
79 {
81  nucleus = theNucleus;
83 
84  if(nucleus->GetZ_asInt() != theZ || nucleus->GetA_asInt() != theA) {
85  G4int Z = nucleus->GetZ_asInt();
87  fExcEnergyMax = -1.0;
88  if(1 < A && ex > keV) {
90  + neutron_mass_c2 - nucleus->GetGroundStateMass();
92  }
93  if(ex < fExcEnergyMax) {
94 
95  theZ = Z;
96  theA = 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 
static const double MeV
Definition: G4SIunits.hh:193
static G4double GetNuclearMass(const G4double A, const G4double Z)
virtual G4FragmentVector * BreakUp(const G4Fragment &theNucleus)
static G4NuclearLevelStore * GetInstance()
G4NuclearLevelStore * fNuclearLevelStore
int G4int
Definition: G4Types.hh:78
G4int GetA_asInt() const
Definition: G4Fragment.hh:238
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:65
G4double GetGroundStateMass() const
Definition: G4Fragment.hh:260
static const G4double A[nN]
G4NuclearLevelManager * GetManager(G4int Z, G4int A)
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus)
G4int GetZ_asInt() const
Definition: G4Fragment.hh:243
virtual G4FragmentVector * BreakUpFragment(G4Fragment *theNucleus)
static const double keV
Definition: G4SIunits.hh:195
double G4double
Definition: G4Types.hh:76
virtual G4double GetEmissionProbability(G4Fragment *theNucleus)
#define DBL_MAX
Definition: templates.hh:83
G4NuclearLevelManager * levelManager
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:255