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

Last change on this file since 1340 was 1340, checked in by garnier, 14 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.