Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4ElectronIonPair.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#ifndef G4ElectronIonPair_h
30#define G4ElectronIonPair_h 1
31
32// -------------------------------------------------------------
33//
34// GEANT4 Class header file
35//
36//
37// File name: G4ElectronIonPair
38//
39// Author: Vladimir Ivanchenko
40//
41// Creation date: 08.07.2008
42//
43// Modifications:
44//
45//
46// Class Description:
47// Compution on number of electon-ion or electorn-hole pairs
48// at the step of a particle and sampling ionisation points
49// in space
50//
51// Based on ICRU Report 31, 1979
52// "Average Energy Required to Produce an Ion Pair"
53//
54// 06.04.2010 V. Grichine, substitute Gauss by Gamma for ionisation
55// distribution at fixed energy deposition
56//
57// -------------------------------------------------------------
58
59//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
60//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
61
62#include "globals.hh"
63#include "G4Step.hh"
65#include "G4ThreeVector.hh"
66#include "G4VProcess.hh"
67#include <vector>
68
69//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
70
71class G4Material;
72
74{
75public:
76
78
79 virtual ~G4ElectronIonPair();
80
81 // compute mean number of ionisation points at a step
83 const G4Material*,
84 G4double edepTotal,
85 G4double edepNIEL = 0.0);
86
88
90
91 // returns pointer to the new vector of positions of
92 // ionisation points in the World coordinate system
93 std::vector<G4ThreeVector>* SampleIonsAlongStep(const G4Step*);
94
95 // compute number of holes in the atom after PostStep interaction
97 const G4TrackVector* secondary = 0,
98 G4int processSubType = -1);
99
100 inline G4int ResidualeChargePostStep(const G4Step*);
101
102 // find mean energies per ionisation
104
105 // dump mean energies per ionisation used in run time
107
108 // dump G4 list
110
111 inline void SetVerbose(G4int);
112
113private:
114
115 void Initialise();
116
117 G4double FindMeanEnergyPerIonPair(const G4Material*);
118
119 // hide assignment operator
120 G4ElectronIonPair & operator=(const G4ElectronIonPair &right);
122
123 // cash
124 const G4Material* curMaterial;
125 G4double curMeanEnergy;
126
127 G4double invFanoFactor;
128
129 G4int verbose;
130 G4int nMaterials;
131
132 // list of G4 NIST materials with mean energy per ion defined
133 std::vector<G4double> g4MatData;
134 std::vector<G4String> g4MatNames;
135};
136
137inline G4double
139{
141 step->GetPreStepPoint()->GetMaterial(),
142 step->GetTotalEnergyDeposit(),
144}
145
146inline
148{
149 // use gamma distribution with mean value n=meanion and
150 // dispersion D=meanion/invFanoFactor
151 G4double meanion = MeanNumberOfIonsAlongStep(step);
152 return G4lrint(CLHEP::RandGamma::shoot(meanion*invFanoFactor,invFanoFactor));
153}
154
155inline
157{
158 G4int subtype = -1;
159 const G4VProcess* proc = step->GetPostStepPoint()->GetProcessDefinedStep();
160 if(proc) { subtype = proc->GetProcessSubType(); }
162 step->GetSecondary(),
163 subtype);
164}
165
167{
168 verbose = val;
169}
170
171#endif
172
std::vector< G4Track * > G4TrackVector
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
static double shoot()
G4int SampleNumberOfIonsAlongStep(const G4Step *)
virtual ~G4ElectronIonPair()
G4int ResidualeChargePostStep(const G4ParticleDefinition *, const G4TrackVector *secondary=0, G4int processSubType=-1)
G4double FindG4MeanEnergyPerIonPair(const G4Material *)
G4double MeanNumberOfIonsAlongStep(const G4ParticleDefinition *, const G4Material *, G4double edepTotal, G4double edepNIEL=0.0)
std::vector< G4ThreeVector > * SampleIonsAlongStep(const G4Step *)
const G4VProcess * GetProcessDefinedStep() const
G4Material * GetMaterial() const
Definition: G4Step.hh:78
G4Track * GetTrack() const
const G4TrackVector * GetSecondary() const
G4StepPoint * GetPreStepPoint() const
G4double GetNonIonizingEnergyDeposit() const
G4double GetTotalEnergyDeposit() const
G4StepPoint * GetPostStepPoint() const
const G4ParticleDefinition * GetParticleDefinition() const
G4int GetProcessSubType() const
Definition: G4VProcess.hh:397
int G4lrint(double ad)
Definition: templates.hh:163