ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VAtomDeexcitation.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VAtomDeexcitation.hh
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"
55 #include "G4ProductionCutsTable.hh"
56 #include "G4Track.hh"
57 #include "G4Threading.hh"
58 #include <vector>
59 
61 class G4DynamicParticle;
63 
65 public:
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 private:
161 
162  // copy constructor and hide assignment operator
165 
168 
172 
178 
183 
184  std::vector<G4bool> activeZ;
185  std::vector<G4bool> activeDeexcitationMedia;
186  std::vector<G4bool> activeAugerMedia;
187  std::vector<G4bool> activePIXEMedia;
188  std::vector<G4String> activeRegions;
189  std::vector<G4bool> deRegions;
190  std::vector<G4bool> AugerRegions;
191  std::vector<G4bool> PIXERegions;
192  std::vector<G4DynamicParticle*> vdyn;
193 
194  static G4int pixeIDg;
195  static G4int pixeIDe;
196 
197 #ifdef G4MULTITHREADED
198  static G4Mutex atomDeexcitationMutex;
199 #endif
200 };
201 
203 {
204  if(!isActiveLocked) { isActive = val; isActiveLocked = true; }
205 }
206 
208 {
209  return isActive;
210 }
211 
213 {
214  if(!isAugerLocked) { flagAuger = val; isAugerLocked = true; }
215 }
216 
218 {
219  return flagAuger;
220 }
221 
223 {
225 }
226 
228 {
229  return flagAugerCascade;
230 }
231 
233 {
234  if(!isPIXELocked) { flagPIXE = val; isPIXELocked = true; }
235 }
236 
238 {
239  return flagPIXE;
240 }
241 
243 {
244  return name;
245 }
246 
247 inline const std::vector<G4bool>&
249 {
250  return activeZ;
251 }
252 
254 {
255  verbose = val;
256 }
257 
259 {
260  return verbose;
261 }
262 
263 inline G4bool
265 {
266  return (activeDeexcitationMedia[coupleIndex]);
267 }
268 
269 inline G4bool
271 {
272  return (activeAugerMedia[coupleIndex]);
273 }
274 
275 #endif
276