Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ExcitationHandler.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// Hadronic Process: Nuclear De-excitations
27// by V. Lara (May 1998)
28//
29// Modifications:
30// 30 June 1998 by V. Lara:
31// -Using G4ParticleTable and therefore G4IonTable
32// it can return all kind of fragments produced in
33// deexcitation
34// -It uses default algorithms for:
35// Evaporation: G4StatEvaporation
36// MultiFragmentation: G4DummyMF (a dummy one)
37// Fermi Breakup model: G4StatFermiBreakUp
38//
39// 03 September 2008 by J. M. Quesada for external choice of inverse
40// cross section option
41// 06 September 2008 JMQ Also external choices have been added for
42// superimposed Coulomb barrier (if useSICBis set true, by default is false)
43// 23 January 2012 by V.Ivanchenko remove obsolete data members; added access
44// methods to deexcitation components
45//
46
47#ifndef G4ExcitationHandler_h
48#define G4ExcitationHandler_h 1
49
50#include "globals.hh"
51#include "G4Fragment.hh"
53#include "G4IonTable.hh"
55#include "G4NistManager.hh"
56
58class G4VFermiBreakUp;
59class G4VEvaporation;
61class G4ParticleTable;
62
64{
65public:
66
67 explicit G4ExcitationHandler();
69
70 G4ReactionProductVector* BreakItUp(const G4Fragment &theInitialState);
71
72 // short model description used for automatic web documentation
73 void ModelDescription(std::ostream& outFile) const;
74
75 void Initialise();
76
77 // user defined sub-models
78 // deletion is responsibility of this handler if isLocal=true
79 void SetEvaporation(G4VEvaporation* ptr, G4bool isLocal=false);
84
85 //======== Obsolete methods to be removed =====
86
87 // parameters of sub-models
88 inline void SetMaxZForFermiBreakUp(G4int aZ);
89 inline void SetMaxAForFermiBreakUp(G4int anA);
90 inline void SetMaxAandZForFermiBreakUp(G4int anA,G4int aZ);
91 inline void SetMinEForMultiFrag(G4double anE);
92
93 // access methods
98
99 // for inverse cross section choice
100 inline void SetOPTxs(G4int opt);
101 // for superimposed Coulomb Barrir for inverse cross sections
102 inline void UseSICB();
103
104 //==============================================
105
106private:
107
108 void SetParameters();
109
110 inline void SortSecondaryFragment(G4Fragment*);
111
113 const G4ExcitationHandler & operator
114 =(const G4ExcitationHandler &right);
115 G4bool operator==(const G4ExcitationHandler &right) const;
116 G4bool operator!=(const G4ExcitationHandler &right) const;
117
118 G4VEvaporation* theEvaporation;
119 G4VMultiFragmentation* theMultiFragmentation;
120 G4VFermiBreakUp* theFermiModel;
121 G4VEvaporationChannel* thePhotonEvaporation;
122 G4ParticleTable* thePartTable;
123 G4IonTable* theTableOfIons;
124 G4NistManager* nist;
125
126 const G4ParticleDefinition* theElectron;
127 const G4ParticleDefinition* theNeutron;
128 const G4ParticleDefinition* theProton;
129 const G4ParticleDefinition* theDeuteron;
130 const G4ParticleDefinition* theTriton;
131 const G4ParticleDefinition* theHe3;
132 const G4ParticleDefinition* theAlpha;
133 const G4ParticleDefinition* theLambda;
134
135 G4int icID;
136
137 G4int maxZForFermiBreakUp;
138 G4int maxAForFermiBreakUp;
139
140 G4int fVerbose;
141 G4int fWarnings;
142
143 G4double minEForMultiFrag;
144 G4double minExcitation;
145 G4double maxExcitation;
146 G4double fLambdaMass;
147
148 G4bool isInitialised;
149 G4bool isEvapLocal;
150 G4bool isActive;
151
152 // list of fragments to store final result
153 std::vector<G4Fragment*> theResults;
154
155 // list of fragments to store intermediate result
156 std::vector<G4Fragment*> results;
157
158 // list of fragments to apply Evaporation or Fermi Break-Up
159 std::vector<G4Fragment*> theEvapList;
160};
161
163{
164 maxZForFermiBreakUp = aZ;
165}
166
168{
169 maxAForFermiBreakUp = anA;
170}
171
173{
176}
177
179{
180 minEForMultiFrag = anE;
181}
182
184{}
185
187{}
188
189inline void G4ExcitationHandler::SortSecondaryFragment(G4Fragment* frag)
190{
191 G4int A = frag->GetA_asInt();
192
193 // gamma, e-, p, n
194 if(A <= 1 || frag->IsLongLived()) {
195 theResults.push_back(frag);
196 } else if(frag->GetExcitationEnergy() < minExcitation) {
197 // cold fragments
198 G4int Z = frag->GetZ_asInt();
199
200 // is stable or d, t, He3, He4
201 if(nist->GetIsotopeAbundance(Z, A) > 0.0 || (A == 3 && (Z == 1 || Z == 2)) ) {
202 theResults.push_back(frag); // stable fragment
203 } else {
204 theEvapList.push_back(frag);
205 }
206 // hot fragments are unstable
207 } else {
208 theEvapList.push_back(frag);
209 }
210}
211
212#endif
std::vector< G4ReactionProduct * > G4ReactionProductVector
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
void SetMaxAandZForFermiBreakUp(G4int anA, G4int aZ)
G4VEvaporationChannel * GetPhotonEvaporation()
G4VEvaporation * GetEvaporation()
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
void SetFermiModel(G4VFermiBreakUp *ptr)
void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
void ModelDescription(std::ostream &outFile) const
void SetMaxZForFermiBreakUp(G4int aZ)
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
void SetMaxAForFermiBreakUp(G4int anA)
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
G4VMultiFragmentation * GetMultiFragmentation()
void SetMinEForMultiFrag(G4double anE)
G4VFermiBreakUp * GetFermiModel()
void SetDeexChannelsType(G4DeexChannelType val)
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:312
G4int GetZ_asInt() const
Definition: G4Fragment.hh:289
G4int GetA_asInt() const
Definition: G4Fragment.hh:284
G4double GetIsotopeAbundance(G4int Z, G4int N) const