Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
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 // $Id: G4VAtomDeexcitation.hh 108386 2018-02-09 15:38:32Z gcosmo $
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 "G4EmParameters.hh"
54 #include "G4AtomicShell.hh"
56 #include "G4ProductionCutsTable.hh"
57 #include "G4Track.hh"
58 #include "G4Threading.hh"
59 #include <vector>
60 
62 class G4DynamicParticle;
64 
66 public:
67 
68  explicit G4VAtomDeexcitation(const G4String& modname = "Deexcitation");
69 
70  virtual ~G4VAtomDeexcitation();
71 
72  //========== initialization ==========
73 
74  // Overall initialisation before new run
76 
77  // Initialisation of deexcitation at the beginning of run
78  virtual void InitialiseForNewRun() = 0;
79 
80  // Initialisation for a concrete atom
81  // May be called at run time
82  virtual void InitialiseForExtraAtom(G4int Z) = 0;
83 
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 Auger cascade
98  inline void SetAugerCascade(G4bool);
99  inline G4bool IsAugerCascadeActive() const;
100 
101  // Activation of PIXE simulation
102  inline void SetPIXE(G4bool);
103  inline G4bool IsPIXEActive() const;
104 
105  // Deexcitation model name
106  inline const G4String& GetName() const;
107 
108  // Access to the list of atoms active for deexcitation
109  inline const std::vector<G4bool>& GetListOfActiveAtoms() const;
110 
111  // Verbosity level
112  inline void SetVerboseLevel(G4int);
113  inline G4int GetVerboseLevel() const;
114 
115  //========== Run time methods ==========
116 
117  // Check if deexcitation is active for a given geometry volume
118  inline G4bool CheckDeexcitationActiveRegion(G4int coupleIndex);
119  inline G4bool CheckAugerActiveRegion(G4int coupleIndex);
120 
121  // Get atomic shell by shell index, used by discrete processes
122  // (for example, photoelectric), when shell vacancy sampled by the model
123  virtual
125  G4AtomicShellEnumerator shell) = 0;
126 
127  // generation of deexcitation for given atom and shell vacancy
128  // and material cut couple, which defines cut values
129  void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
130  const G4AtomicShell*,
131  G4int Z, G4int coupleIndex);
132 
133  // generation of deexcitation for given atom and shell vacancy
134  virtual void GenerateParticles(std::vector<G4DynamicParticle*>* secVect,
135  const G4AtomicShell*,
136  G4int Z, G4double gammaCut, G4double eCut) = 0;
137 
138  // access or compute PIXE cross section
139  virtual G4double
141  G4int Z,
143  G4double kinE,
144  const G4Material* mat = nullptr) = 0;
145 
146  // access or compute PIXE cross section
147  virtual G4double
149  const G4ParticleDefinition*,
150  G4int Z,
152  G4double kinE,
153  const G4Material* mat = nullptr) = 0;
154 
155  // Sampling of PIXE for ionisation processes
156  void AlongStepDeexcitation(std::vector<G4Track*>& tracks,
157  const G4Step& step,
158  G4double& eLoss,
159  G4int coupleIndex);
160 
161 private:
162 
163  // copy constructor and hide assignment operator
166 
169 
173 
179 
184 
185  std::vector<G4bool> activeZ;
186  std::vector<G4bool> activeDeexcitationMedia;
187  std::vector<G4bool> activeAugerMedia;
188  std::vector<G4bool> activePIXEMedia;
189  std::vector<G4String> activeRegions;
190  std::vector<G4bool> deRegions;
191  std::vector<G4bool> AugerRegions;
192  std::vector<G4bool> PIXERegions;
193  std::vector<G4DynamicParticle*> vdyn;
194 
195  static G4int pixeIDg;
196  static G4int pixeIDe;
197 
198 #ifdef G4MULTITHREADED
199  static G4Mutex atomDeexcitationMutex;
200 #endif
201 };
202 
204 {
205  if(!isActiveLocked) { isActive = val; isActiveLocked = true; }
206 }
207 
209 {
210  return isActive;
211 }
212 
214 {
215  if(!isAugerLocked) { flagAuger = val; isAugerLocked = true; }
216 }
217 
219 {
220  return flagAuger;
221 }
222 
224 {
226 }
227 
229 {
230  return flagAugerCascade;
231 }
232 
234 {
235  if(!isPIXELocked) { flagPIXE = val; isPIXELocked = true; }
236 }
237 
239 {
240  return flagPIXE;
241 }
242 
244 {
245  return name;
246 }
247 
248 inline const std::vector<G4bool>&
250 {
251  return activeZ;
252 }
253 
255 {
256  verbose = val;
257 }
258 
260 {
261  return verbose;
262 }
263 
264 inline G4bool
266 {
267  return (activeDeexcitationMedia[coupleIndex]);
268 }
269 
270 inline G4bool
272 {
273  return (activeAugerMedia[coupleIndex]);
274 }
275 
276 #endif
277 
std::vector< G4bool > AugerRegions
G4EmParameters * theParameters
virtual const G4AtomicShell * GetAtomicShell(G4int Z, G4AtomicShellEnumerator shell)=0
G4int GetVerboseLevel() const
std::vector< G4bool > deRegions
G4ProductionCutsTable * theCoupleTable
void AlongStepDeexcitation(std::vector< G4Track * > &tracks, const G4Step &step, G4double &eLoss, G4int coupleIndex)
const G4String & GetName() const
std::vector< G4bool > activeZ
void SetDeexcitationActiveRegion(const G4String &rname, G4bool valDeexcitation, G4bool valAuger, G4bool valPIXE)
std::vector< G4String > activeRegions
virtual void InitialiseForExtraAtom(G4int Z)=0
const std::vector< G4bool > & GetListOfActiveAtoms() const
G4AtomicShellEnumerator
G4bool IsAugerActive() const
virtual G4double ComputeShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=nullptr)=0
Float_t Z
std::vector< G4bool > PIXERegions
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
G4bool CheckAugerActiveRegion(G4int coupleIndex)
void GenerateParticles(std::vector< G4DynamicParticle * > *secVect, const G4AtomicShell *, G4int Z, G4int coupleIndex)
std::vector< G4DynamicParticle * > vdyn
std::vector< G4bool > activePIXEMedia
std::vector< G4bool > activeAugerMedia
G4bool IsFluoActive() const
const G4ParticleDefinition * gamma
Definition: G4Step.hh:76
Float_t mat
G4bool IsAugerCascadeActive() const
G4VAtomDeexcitation(const G4String &modname="Deexcitation")
G4bool IsPIXEActive() const
int G4int
Definition: G4Types.hh:78
G4bool CheckDeexcitationActiveRegion(G4int coupleIndex)
std::vector< G4bool > activeDeexcitationMedia
virtual G4double GetShellIonisationCrossSectionPerAtom(const G4ParticleDefinition *, G4int Z, G4AtomicShellEnumerator shell, G4double kinE, const G4Material *mat=nullptr)=0
virtual void InitialiseForNewRun()=0
G4VAtomDeexcitation & operator=(const G4VAtomDeexcitation &right)=delete
std::mutex G4Mutex
Definition: G4Threading.hh:84