source: trunk/source/processes/electromagnetic/utils/include/G4ElectronIonPair.hh@ 1196

Last change on this file since 1196 was 1196, checked in by garnier, 16 years ago

update CVS release candidate geant4.9.3.01

  • Property svn:executable set to *
File size: 5.5 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: G4ElectronIonPair.hh,v 1.2 2008/10/17 14:46:16 vnivanch Exp $
27// GEANT4 tag $Name: geant4-09-03-cand-01 $
28//
29//
30#ifndef G4ElectronIonPair_h
31#define G4ElectronIonPair_h 1
32
33// -------------------------------------------------------------
34//
35// GEANT4 Class header file
36//
37//
38// File name: G4ElectronIonPair
39//
40// Author: Vladimir Ivanchenko
41//
42// Creation date: 08.07.2008
43//
44// Modifications:
45//
46//
47// Class Description:
48// Compution on number of electon-ion or electorn-hole pairs
49// at the step of a particle and sampling ionisation points
50// in space
51//
52// Based on ICRU Report 31, 1979
53// "Average Energy Required to Produce an Ion Pair"
54//
55// -------------------------------------------------------------
56
57//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
58//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
59
60#include "globals.hh"
61#include "G4Step.hh"
62#include "G4ParticleDefinition.hh"
63#include "G4ThreeVector.hh"
64#include "G4TrackVector.hh"
65#include "G4VProcess.hh"
66#include <vector>
67
68//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
69
70class G4Material;
71
72class G4ElectronIonPair
73{
74public:
75
76 G4ElectronIonPair();
77
78 virtual ~G4ElectronIonPair();
79
80 // compute mean number of ionisation points at a step
81 G4double MeanNumberOfIonsAlongStep(const G4ParticleDefinition*,
82 const G4Material*,
83 G4double edepTotal,
84 G4double edepNIEL = 0.0);
85
86 inline G4double MeanNumberOfIonsAlongStep(const G4Step*);
87
88 // returns pointer to the new vector of positions of
89 // ionisation points in the World coordinate system
90 std::vector<G4ThreeVector>*
91 SampleIonsAlongStep(const G4ThreeVector& prePosition,
92 const G4ThreeVector& postPosition,
93 G4double numberOfIonisations);
94
95 std::vector<G4ThreeVector>* SampleIonsAlongStep(const G4Step*);
96
97 // compute number of holes in the atom after PostStep interaction
98 G4int ResidualeChargePostStep(const G4ParticleDefinition*,
99 const G4TrackVector* secondary = 0,
100 G4int processSubType = -1);
101
102 inline G4int ResidualeChargePostStep(const G4Step*);
103
104 // find mean energies per ionisation
105 G4double FindG4MeanEnergyPerIonPair(const G4Material*);
106
107 // dump mean energies per ionisation used in run time
108 void DumpMeanEnergyPerIonPair();
109
110 // dump G4 list
111 void DumpG4MeanEnergyPerIonPair();
112
113 inline void SetVerbose(G4int);
114
115private:
116
117 // hide assignment operator
118 G4ElectronIonPair & operator=(const G4ElectronIonPair &right);
119 G4ElectronIonPair(const G4ElectronIonPair&);
120
121 G4double FindMeanEnergyPerIonPair(const G4Material*);
122
123 void Initialise();
124
125 const G4ParticleDefinition* gamma;
126
127 // cash
128 const G4Material* curMaterial;
129 G4double curMeanEnergy;
130
131 G4int verbose;
132 G4int nMaterials;
133
134 // list of G4 NIST materials with mean energy per ion defined
135 std::vector<G4double> g4MatData;
136 std::vector<G4String> g4MatNames;
137
138};
139
140inline G4double
141G4ElectronIonPair::MeanNumberOfIonsAlongStep(const G4Step* step)
142{
143 return MeanNumberOfIonsAlongStep(step->GetTrack()->GetDefinition(),
144 step->GetPreStepPoint()->GetMaterial(),
145 step->GetTotalEnergyDeposit(),
146 step->GetNonIonizingEnergyDeposit());
147}
148
149inline std::vector<G4ThreeVector>*
150G4ElectronIonPair::SampleIonsAlongStep(const G4Step* step)
151{
152 return SampleIonsAlongStep(step->GetPreStepPoint()->GetPosition(),
153 step->GetPostStepPoint()->GetPosition(),
154 MeanNumberOfIonsAlongStep(step));
155}
156
157inline
158G4int G4ElectronIonPair::ResidualeChargePostStep(const G4Step* step)
159{
160 G4int subtype = -1;
161 const G4VProcess* proc = step->GetPostStepPoint()->GetProcessDefinedStep();
162 if(proc) subtype = proc->GetProcessSubType();
163 return ResidualeChargePostStep(step->GetTrack()->GetDefinition(),
164 step->GetSecondary(),
165 subtype);
166}
167
168inline void G4ElectronIonPair::SetVerbose(G4int val)
169{
170 verbose = val;
171}
172
173#endif
174
Note: See TracBrowser for help on using the repository browser.