source: trunk/source/processes/electromagnetic/utils/include/G4VAtomDeexcitation.hh@ 1346

Last change on this file since 1346 was 1340, checked in by garnier, 15 years ago

update ti head

  • Property svn:executable set to *
File size: 7.2 KB
Line 
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: G4VAtomDeexcitation.hh,v 1.5 2010/10/14 16:27:35 vnivanch Exp $
27// GEANT4 tag $Name: emutils-V09-03-23 $
28//
29// -------------------------------------------------------------------
30//
31// GEANT4 Class header file
32//
33//
34// File name: G4VAtomDeexcitation
35//
36// Author: Alfonso Mantero & Vladimir Ivanchenko
37//
38// Creation date: 30.06.2009
39//
40// Modifications:
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"
54#include "G4ProductionCutsTable.hh"
55#include "G4Track.hh"
56#include <vector>
57
58class G4ParticleDefinition;
59class G4DynamicParticle;
60class G4MaterialCutsCouple;
61class G4VParticleChange;
62
63enum G4AtomicShellEnumerator
64{
65 fKShell = 0,
66 fL1Shell,
67 fL2Shell,
68 fL3Shell,
69 fM1Shell,
70 fM2Shell,
71 fM3Shell,
72 fM4Shell,
73 fM5Shell
74};
75
76class G4VAtomDeexcitation {
77public:
78
79 G4VAtomDeexcitation(const G4String& modname = "Deexcitation",
80 const G4String& pixename = "");
81
82 virtual ~G4VAtomDeexcitation();
83
84 //========== initialization ==========
85
86 // Overall initialisation before new run
87 void InitialiseAtomicDeexcitation();
88
89 // Initialisation of deexcitation at the beginning of run
90 virtual void InitialiseForNewRun() = 0;
91
92 // Initialisation for a concrete atom
93 // May be called at run time
94 virtual void InitialiseForExtraAtom(G4int Z) = 0;
95
96 // Activation of deexcitation per detector region
97 void SetDeexcitationActiveRegion(const G4String& rname = "");
98
99 // Activation of Auger electron production
100 inline void SetAugerActive(G4bool);
101 inline G4bool IsAugerActive() const;
102
103 // Activation of PIXE simulation
104 inline void SetPIXEActive(G4bool);
105 inline G4bool IsPIXEActive() const;
106
107 // Deexcitation model name
108 inline const G4String& GetName() const;
109
110 // PIXE model name
111 inline void SetPIXECrossSectionModel(const G4String&);
112 inline const G4String& PIXECrossSectionModel() const;
113
114 // Access to the list of atoms active for deexcitation
115 inline const std::vector<G4bool>& GetListOfActiveAtoms() const;
116
117 // Verbosity level
118 inline void SetVerboseLevel(G4int);
119 inline G4int GetVerboseLevel() const;
120
121 //========== Run time methods ==========
122
123 // Check if deexcitation is active for a given geometry volume
124 inline G4bool CheckDeexcitationActiveRegion(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
129 const G4AtomicShell* GetAtomicShell(G4int Z,
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
147 GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition*,
148 G4int Z,
149 G4AtomicShellEnumerator shell,
150 G4double kinE) = 0;
151
152 // access or compute PIXE cross section
153 virtual G4double
154 ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition*,
155 G4int Z,
156 G4AtomicShellEnumerator shell,
157 G4double kinE) = 0;
158
159 // Sampling of PIXE for ionisation processes
160 void AlongStepDeexcitation(G4VParticleChange* pParticleChange,
161 const G4Step& step,
162 G4double& eLoss,
163 G4int coupleIndex);
164
165private:
166
167 // copy constructor and hide assignment operator
168 G4VAtomDeexcitation(G4VAtomDeexcitation &);
169 G4VAtomDeexcitation & operator=(const G4VAtomDeexcitation &right);
170
171 G4ProductionCutsTable* theCoupleTable;
172 G4int verbose;
173 G4String name;
174 G4String namePIXE;
175 G4bool flagAuger;
176 G4bool flagPIXE;
177 std::vector<G4bool> activeZ;
178 std::vector<G4bool> activeDeexcitationMedia;
179 std::vector<G4String> activeRegions;
180 std::vector<G4DynamicParticle*> vdyn;
181 std::vector<G4Track*> secVect;
182};
183
184inline void G4VAtomDeexcitation::SetAugerActive(G4bool val)
185{
186 flagAuger = val;
187}
188
189inline G4bool G4VAtomDeexcitation::IsAugerActive() const
190{
191 return flagAuger;
192}
193
194inline void G4VAtomDeexcitation::SetPIXEActive(G4bool val)
195{
196 flagPIXE = val;
197}
198
199inline G4bool G4VAtomDeexcitation::IsPIXEActive() const
200{
201 return flagPIXE;
202}
203
204inline const G4String& G4VAtomDeexcitation::GetName() const
205{
206 return name;
207}
208
209inline
210void G4VAtomDeexcitation::SetPIXECrossSectionModel(const G4String& n)
211{
212 namePIXE = n;
213}
214
215inline
216const G4String& G4VAtomDeexcitation::PIXECrossSectionModel() const
217{
218 return namePIXE;
219}
220
221inline const std::vector<G4bool>&
222G4VAtomDeexcitation::GetListOfActiveAtoms() const
223{
224 return activeZ;
225}
226
227inline void G4VAtomDeexcitation::SetVerboseLevel(G4int val)
228{
229 verbose = val;
230}
231
232inline G4int G4VAtomDeexcitation::GetVerboseLevel() const
233{
234 return verbose;
235}
236
237inline G4bool
238G4VAtomDeexcitation::CheckDeexcitationActiveRegion(G4int coupleIndex)
239{
240 return activeDeexcitationMedia[coupleIndex];
241}
242
243inline void
244G4VAtomDeexcitation::GenerateParticles(std::vector<G4DynamicParticle*>* v,
245 const G4AtomicShell* as,
246 G4int Z,
247 G4int idx)
248{
249 G4double gCut = (*theCoupleTable->GetEnergyCutsVector(idx))[0];
250 if(gCut < as->BindingEnergy()) {
251 GenerateParticles(v, as, Z, gCut,
252 (*theCoupleTable->GetEnergyCutsVector(idx))[1]);
253 }
254}
255
256#endif
257
Note: See TracBrowser for help on using the repository browser.