Geant4-11
G4VAtomDeexcitation.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//
27// -------------------------------------------------------------------
28//
29// GEANT4 Class header file
30//
31//
32// File name: G4VAtomDeexcitation
33//
34// Author: Alfonso Mantero & Vladimir Ivanchenko
35//
36// Creation date: 30.06.2009
37//
38// Modifications:
39// 15 Mar 2011 ALF stripped G4AtomicShellEnumerator to its own file
40//
41// Class Description:
42//
43// Abstract interface to energy loss models
44
45// -------------------------------------------------------------------
46//
47
48#ifndef G4VAtomDeexcitation_h
49#define G4VAtomDeexcitation_h 1
50
51#include "globals.hh"
52#include "G4EmParameters.hh"
53#include "G4AtomicShell.hh"
56#include "G4Track.hh"
57#include "G4Threading.hh"
58#include <vector>
59
63
65public:
66
67 explicit G4VAtomDeexcitation(const G4String& modname = "Deexcitation");
68
69 virtual ~G4VAtomDeexcitation();
70
71 //========== initialization ==========
72
73 // Overall initialisation before new run
75
76 // Initialisation of deexcitation at the beginning of run
77 virtual void InitialiseForNewRun() = 0;
78
79 // Initialisation for a concrete atom
80 // May be called at run time
81 virtual void InitialiseForExtraAtom(G4int Z) = 0;
82
83 void SetDeexcitationActiveRegion(const G4String& rname,
84 G4bool valDeexcitation,
85 G4bool valAuger,
86 G4bool valPIXE);
87
88 // Activation of deexcitation
89 inline void SetFluo(G4bool);
90 inline G4bool IsFluoActive() const;
91
92 // Activation of Auger electron production
93 inline void SetAuger(G4bool);
94 inline G4bool IsAugerActive() const;
95
96 // Activation of Auger cascade
97 inline void SetAugerCascade(G4bool);
98 inline G4bool IsAugerCascadeActive() const;
99
100 // Activation of PIXE simulation
101 inline void SetPIXE(G4bool);
102 inline G4bool IsPIXEActive() const;
103
104 // Deexcitation model name
105 inline const G4String& GetName() const;
106
107 // Access to the list of atoms active for deexcitation
108 inline const std::vector<G4bool>& GetListOfActiveAtoms() const;
109
110 // Verbosity level
111 inline void SetVerboseLevel(G4int);
112 inline G4int GetVerboseLevel() const;
113
114 //========== Run time methods ==========
115
116 // Check if deexcitation is active for a given geometry volume
117 inline G4bool CheckDeexcitationActiveRegion(G4int coupleIndex);
118 inline G4bool CheckAugerActiveRegion(G4int coupleIndex);
119
120 // Get atomic shell by shell index, used by discrete processes
121 // (for example, photoelectric), when shell vacancy sampled by the model
122 virtual
124 G4AtomicShellEnumerator shell) = 0;
125
126 // generation of deexcitation for given atom and shell vacancy
127 // and material cut couple, which defines cut values
128 void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
129 const G4AtomicShell*,
130 G4int Z, G4int coupleIndex);
131
132 // generation of deexcitation for given atom and shell vacancy
133 virtual void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
134 const G4AtomicShell*,
135 G4int Z, G4double gammaCut, G4double eCut) = 0;
136
137 // access or compute PIXE cross section
138 virtual G4double
140 G4int Z,
142 G4double kinE,
143 const G4Material* mat = nullptr) = 0;
144
145 // access or compute PIXE cross section
146 virtual G4double
148 const G4ParticleDefinition*,
149 G4int Z,
151 G4double kinE,
152 const G4Material* mat = nullptr) = 0;
153
154 // Sampling of PIXE for ionisation processes
155 void AlongStepDeexcitation(std::vector<G4Track*>& tracks,
156 const G4Step& step,
157 G4double& eLoss,
158 G4int coupleIndex);
159
160 // copy constructor and hide assignment operator
163
164private:
165
168
171
176
180
181 std::vector<G4bool> activeZ;
182 std::vector<G4bool> activeDeexcitationMedia;
183 std::vector<G4bool> activeAugerMedia;
184 std::vector<G4bool> activePIXEMedia;
185 std::vector<G4bool> deRegions;
186 std::vector<G4bool> AugerRegions;
187 std::vector<G4bool> PIXERegions;
188 std::vector<G4DynamicParticle*> vdyn;
189 std::vector<G4String> activeRegions;
190
192
193#ifdef G4MULTITHREADED
194 static G4Mutex atomDeexcitationMutex;
195#endif
196};
197
199{
200 if(!isActiveLocked) { isActive = val; isActiveLocked = true; }
201}
202
204{
205 return isActive;
206}
207
209{
210 if(!isAugerLocked) { flagAuger = val; isAugerLocked = true; }
211}
212
214{
215 return flagAuger;
216}
217
219{
220 SetAuger(val);
221}
222
224{
225 return flagAuger;
226}
227
229{
230 if(!isPIXELocked) { flagPIXE = val; isPIXELocked = true; }
231}
232
234{
235 return flagPIXE;
236}
237
239{
240 return name;
241}
242
243inline const std::vector<G4bool>&
245{
246 return activeZ;
247}
248
250{
251 verbose = val;
252}
253
255{
256 return verbose;
257}
258
259inline G4bool
261{
262 return (idx < nCouples) ? activeDeexcitationMedia[idx] : false;
263}
264
265inline G4bool
267{
268 return (idx < nCouples) ? activeAugerMedia[idx] : false;
269}
270
271#endif
272
G4AtomicShellEnumerator
std::mutex G4Mutex
Definition: G4Threading.hh:81
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
Definition: G4Step.hh:62
G4bool CheckDeexcitationActiveRegion(G4int coupleIndex)
const std::vector< G4bool > & GetListOfActiveAtoms() const
std::vector< G4String > activeRegions
G4VAtomDeexcitation(const G4String &modname="Deexcitation")
G4bool IsAugerActive() const
std::vector< G4bool > activeAugerMedia
std::vector< G4bool > AugerRegions
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
std::vector< G4bool > deRegions
virtual G4double ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=nullptr)=0
const G4String & GetName() const
G4bool CheckAugerActiveRegion(G4int coupleIndex)
std::vector< G4bool > PIXERegions
virtual void InitialiseForExtraAtom(G4int Z)=0
virtual void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4double gammaCut, G4double eCut)=0
std::vector< G4bool > activePIXEMedia
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
std::vector< G4bool > activeZ
G4VAtomDeexcitation & operator=(const G4VAtomDeexcitation &right)=delete
std::vector< G4DynamicParticle * > vdyn
G4VAtomDeexcitation(G4VAtomDeexcitation &)=delete
void AlongStepDeexcitation(std::vector< G4Track * > &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
G4bool IsAugerCascadeActive() const
virtual G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=nullptr)=0
void SetDeexcitationActiveRegion(const G4String &rname, G4bool valDeexcitation, G4bool valAuger, G4bool valPIXE)
const G4ParticleDefinition * gamma
virtual void InitialiseForNewRun()=0
std::vector< G4bool > activeDeexcitationMedia
const G4ProductionCutsTable * theCoupleTable