Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 // $Id$
27 //
28 // -------------------------------------------------------------------
29 //
30 // GEANT4 Class header file
31 //
32 //
33 // File name: G4VAtomDeexcitation
34 //
35 // Author: Alfonso Mantero & Vladimir Ivanchenko
36 //
37 // Creation date: 30.06.2009
38 //
39 // Modifications:
40 // 15 Mar 2011 ALF stripped G4AtomicShellEnumerator to its own file
41 //
42 // Class Description:
43 //
44 // Abstract interface to energy loss models
45 
46 // -------------------------------------------------------------------
47 //
48 
49 #ifndef G4VAtomDeexcitation_h
50 #define G4VAtomDeexcitation_h 1
51 
52 #include "globals.hh"
53 #include "G4AtomicShell.hh"
55 #include "G4ProductionCutsTable.hh"
56 #include "G4Track.hh"
57 #include <vector>
58 
60 class G4DynamicParticle;
62 
64 public:
65 
66  G4VAtomDeexcitation(const G4String& modname = "Deexcitation",
67  const G4String& pixename = "");
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  // Activation of deexcitation per detector region
84  void SetDeexcitationActiveRegion(const G4String& rname,
85  G4bool valDeexcitation,
86  G4bool valAuger,
87  G4bool valPIXE);
88 
89  // Activation of deexcitation
90  inline void SetFluo(G4bool);
91  inline G4bool IsFluoActive() const;
92 
93  // Activation of Auger electron production
94  inline void SetAuger(G4bool);
95  inline G4bool IsAugerActive() const;
96 
97  // Activation of PIXE simulation
98  inline void SetPIXE(G4bool);
99  // inline void SetPIXEActive(G4bool);
100  inline G4bool IsPIXEActive() const;
101 
102  // Deexcitation model name
103  inline const G4String& GetName() const;
104 
105  // PIXE model name
106  inline void SetPIXECrossSectionModel(const G4String&);
107  inline const G4String& PIXECrossSectionModel() const;
108 
109  // PIXE model name for e+e-
110  inline void SetPIXEElectronCrossSectionModel(const G4String&);
111  inline const G4String& PIXEElectronCrossSectionModel() const;
112 
113  // Access to the list of atoms active for deexcitation
114  inline const std::vector<G4bool>& GetListOfActiveAtoms() const;
115 
116  // Verbosity level
117  inline void SetVerboseLevel(G4int);
118  inline G4int GetVerboseLevel() const;
119 
120  //========== Run time methods ==========
121 
122  // Check if deexcitation is active for a given geometry volume
123  inline G4bool CheckDeexcitationActiveRegion(G4int coupleIndex);
124  inline G4bool CheckAugerActiveRegion(G4int coupleIndex);
125 
126  // Get atomic shell by shell index, used by discrete processes
127  // (for example, photoelectric), when shell vacancy sampled by the model
128  virtual
130  G4AtomicShellEnumerator shell) = 0;
131 
132  // generation of deexcitation for given atom and shell vacancy
133  inline void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
134  const G4AtomicShell*,
135  G4int Z,
136  G4int coupleIndex);
137 
138  // generation of deexcitation for given atom and shell vacancy
139  virtual void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
140  const G4AtomicShell*,
141  G4int Z,
142  G4double gammaCut,
143  G4double eCut) = 0;
144 
145  // access or compute PIXE cross section
146  virtual G4double
148  G4int Z,
150  G4double kinE,
151  const G4Material* mat = 0) = 0;
152 
153  // access or compute PIXE cross section
154  virtual G4double
156  G4int Z,
158  G4double kinE,
159  const G4Material* mat = 0) = 0;
160 
161  // Sampling of PIXE for ionisation processes
162  void AlongStepDeexcitation(std::vector<G4Track*>& tracks,
163  const G4Step& step,
164  G4double& eLoss,
165  G4int coupleIndex);
166 
167 private:
168 
169  // copy constructor and hide assignment operator
171  G4VAtomDeexcitation & operator=(const G4VAtomDeexcitation &right);
172 
173  G4ProductionCutsTable* theCoupleTable;
174  G4double lowestKinEnergy;
175  G4int verbose;
176  G4String name;
177  G4String namePIXE;
178  G4String nameElectronPIXE;
179  G4bool isActive;
180  G4bool flagAuger;
181  G4bool flagPIXE;
182  std::vector<G4bool> activeZ;
183  std::vector<G4bool> activeDeexcitationMedia;
184  std::vector<G4bool> activeAugerMedia;
185  std::vector<G4bool> activePIXEMedia;
186  std::vector<G4String> activeRegions;
187  std::vector<G4bool> deRegions;
188  std::vector<G4bool> AugerRegions;
189  std::vector<G4bool> PIXERegions;
190  std::vector<G4DynamicParticle*> vdyn;
191 };
192 
194 {
195  isActive = val;
196 }
197 
199 {
200  return isActive;
201 }
202 
204 {
205  flagAuger = val;
206  if(val) { isActive = true; }
207 }
208 
210 {
211  return flagAuger;
212 }
213 
215 {
216  flagPIXE = val;
217  if(val) { isActive = true; }
218 }
219 
221 {
222  return flagPIXE;
223 }
224 
226 {
227  return name;
228 }
229 
230 inline
232 {
233  namePIXE = n;
234 }
235 
236 inline void
238 {
239  nameElectronPIXE = n;
240 }
241 
242 inline
244 {
245  return namePIXE;
246 }
247 
248 inline
250 {
251  return nameElectronPIXE;
252 }
253 
254 inline const std::vector<G4bool>&
256 {
257  return activeZ;
258 }
259 
261 {
262  verbose = val;
263 }
264 
266 {
267  return verbose;
268 }
269 
270 inline G4bool
272 {
273  return (isActive || activeDeexcitationMedia[coupleIndex]);
274 }
275 
276 inline G4bool
278 {
279 
280  return (flagAuger || activeAugerMedia[coupleIndex]);
281 }
282 
283 inline void
284 G4VAtomDeexcitation::GenerateParticles(std::vector<G4DynamicParticle*>* v,
285  const G4AtomicShell* as,
286  G4int Z,
287  G4int idx)
288 {
289  G4double gCut = DBL_MAX;
290  if (theCoupleTable) {
291  gCut = (*(theCoupleTable->GetEnergyCutsVector(0)))[idx];
292  }
293  if(gCut < as->BindingEnergy()) {
294  G4double eCut = DBL_MAX;
295  if(CheckAugerActiveRegion(idx)) {
296  if (theCoupleTable) {
297  eCut = (*(theCoupleTable->GetEnergyCutsVector(1)))[idx];
298  }
299  }
300  GenerateParticles(v, as, Z, gCut, eCut);
301  }
302 }
303 
304 #endif
305