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