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
G4VeLowEnergyLoss.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//
27// $Id$
28//
29// 3.4.2000 Veronique Lefebure:
30// Move utils/include/G4VEnergyLoss.hh to
31// lowenergy/include/G4VeLowEnergyLoss.hh
32//
33// ------------------------------------------------------------
34// GEANT 4 class header file
35//
36//
37// Class Description
38//
39// General service class for the energy loss classes
40//
41// It contains code needed to compute the range tables,
42// time tables, the inverse range tables and some auxiliary
43// tables.
44// The energy loss fluctuation code is here,too.
45//
46// All the EnergyLoss classes are inherited from G4VeLowEnergyLoss
47// class.
48//
49// -----------------------------------------------------------
50// created on 28 January 2000 by L. Urban
51// -----------------------------------------------------------
52//
53// Modifications:
54// 20/09/00 V.Ivanchenko update fluctuations
55// 23/11/01 V.Ivanchenko Move static member-functions from header to source
56// 22/01/03 V.Ivanchenko Cut per range
57//
58// Class description:
59// Abstract class for Low Energy Electromagnetic electron energy loss
60// Further documentation available from http://www.ge.infn.it/geant4/lowE
61
62// -----------------------------------------------------------
63
64#ifndef G4VeLowEnergyLoss_h
65#define G4VeLowEnergyLoss_h 1
66
67#include "globals.hh"
68#include "G4ios.hh"
69#include "Randomize.hh"
70#include "G4Poisson.hh"
71#include "G4Electron.hh"
73#include "G4PhysicsLogVector.hh"
76
78{
79 public:
80
82 G4ProcessType aType = fNotDefined );
84
85 virtual ~G4VeLowEnergyLoss();
86
88 G4double previousStepSize,
89 G4double currentMinimumStep,
90 G4double& currentSafety) = 0 ;
91
93 const G4Step& Step) = 0 ;
94
95 virtual G4double GetMeanFreePath(const G4Track& track,
96 G4double previousStepSize,
98
99 virtual G4VParticleChange* PostStepDoIt(const G4Track& track,
100 const G4Step& Step) = 0;
101
102
103
104 protected:// with description
105
106 // code for the energy loss fluctuation
107
109 const G4MaterialCutsCouple* couple,
110 G4double MeanLoss,
111 G4double step);
112
113
114 private:
115
116 // hide default constructor and assignment operator as private
118 G4VeLowEnergyLoss & operator=(const G4VeLowEnergyLoss &right);
119
120 protected:
121
122 // data members to speed up the fluctuation calculation
127
129
130 // static part of the class
131
132 public: // With description
133
134 static void SetRndmStep (G4bool value);
135 // use / do not use randomisation in energy loss steplimit
136 // ( default = no randomisation)
137
138 static void SetEnlossFluc (G4bool value);
139 // compute energy loss with/without fluctuation
140 // ( default : with fluctuation)
141
142 static void SetStepFunction (G4double c1, G4double c2);
143 // sets values for data members used to compute the step limit:
144 // dRoverRange : max. relative range change in one step,
145 // finalRange : if range <= finalRange --> last step for the particle.
146
147
148 protected: // With description
149
150 // Build range table starting from the DEDXtable
151 static G4PhysicsTable*
152 BuildRangeTable(G4PhysicsTable* theDEDXTable,
153 G4PhysicsTable* theRangeTable,
154 G4double Tmin,G4double Tmax,G4int nbin);
155
156 // Build time tables starting from the DEDXtable
157 static G4PhysicsTable*
158 BuildLabTimeTable(G4PhysicsTable* theDEDXTable,
159 G4PhysicsTable* theLabTimeTable,
160 G4double Tmin,G4double Tmax,G4int nbin);
161
162 static G4PhysicsTable*
164 G4PhysicsTable* ProperTimeTable,
165 G4double Tmin,G4double Tmax,G4int nbin);
166
167 // Build tables of coefficients needed for inverting the range table
168 static G4PhysicsTable*
170 G4PhysicsTable* theCoeffATable,
171 G4double Tmin,G4double Tmax,G4int nbin);
172 static G4PhysicsTable*
174 G4PhysicsTable* theCoeffBTable,
175 G4double Tmin,G4double Tmax,G4int nbin);
176 static G4PhysicsTable*
178 G4PhysicsTable* theCoeffCTable,
179 G4double Tmin,G4double Tmax,G4int nbin);
180
181 // Invert range table
182 static G4PhysicsTable*
184 G4PhysicsTable* theRangeCoeffATable,
185 G4PhysicsTable* theRangeCoeffBTable,
186 G4PhysicsTable* theRangeCoeffCTable,
187 G4PhysicsTable* theInverseRangeTable,
188 G4double Tmin,G4double Tmax,G4int nbin);
189
190 private:
191
192 static void BuildRangeVector(G4PhysicsTable* theDEDXTable,
193 G4double Tmin,G4double Tmax,G4int nbin,
194 G4int materialIndex,G4PhysicsLogVector* rangeVector);
195
196 static void BuildRangeVectorNew(const G4PhysicsTable*,G4int,
198
199 static G4double RangeIntLin(G4PhysicsVector* physicsVector
200 ,G4int nbin);
201
202 static G4double RangeIntLog(G4PhysicsVector* physicsVector
203 ,G4int nbin);
204
205 static void BuildLabTimeVector(G4PhysicsTable* theDEDXTable,
206 G4double Tmin,G4double Tmax,G4int nbin,
207 G4int materialIndex,G4PhysicsLogVector* rangeVector);
208
209 static void BuildProperTimeVector(G4PhysicsTable* theDEDXTable,
210 G4double Tmin,G4double Tmax,G4int nbin,
211 G4int materialIndex,G4PhysicsLogVector* rangeVector);
212
213 static G4double LabTimeIntLog(G4PhysicsVector* physicsVector
214 ,G4int nbin);
215
216 static G4double ProperTimeIntLog(G4PhysicsVector* physicsVector,
217 G4int nbin);
218
219 static void InvertRangeVector(G4PhysicsTable* theRangeTable,
220 G4PhysicsTable* theRangeCoeffATable,
221 G4PhysicsTable* theRangeCoeffBTable,
222 G4PhysicsTable* theRangeCoeffCTable,
223 G4double Tmin,G4double Tmax,G4int nbin,
224 G4int materialIndex,G4PhysicsLogVector* rangeVector);
225
226
227 // data members
228 protected:
229
230 // variables for the integration routines
232
233
234 static G4double dRoverRange; // dRoverRange is the maximum allowed
235 // deltarange/range in one Step
236 static G4double finalRange; // final step before stopping
237 static G4double c1lim,c2lim,c3lim ; // coeffs for computing steplimit
238
239 static G4bool rndmStepFlag; // control the randomization of the step
240 static G4bool EnlossFlucFlag; // control the energy loss fluctuation
241
242
243};
244
245#endif
246
247
248
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
G4ProcessType
@ fNotDefined
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
Definition: G4Step.hh:78
static G4double c2lim
static G4double tauhigh
static G4double ParticleMass
static G4PhysicsTable * BuildRangeTable(G4PhysicsTable *theDEDXTable, G4PhysicsTable *theRangeTable, G4double Tmin, G4double Tmax, G4int nbin)
static void SetEnlossFluc(G4bool value)
virtual G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)=0
const G4Material * lastMaterial
static G4PhysicsTable * BuildRangeCoeffATable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffATable, G4double Tmin, G4double Tmax, G4int nbin)
static G4double finalRange
static G4double taulow
static G4PhysicsTable * BuildRangeCoeffCTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffCTable, G4double Tmin, G4double Tmax, G4int nbin)
virtual G4double GetContinuousStepLimit(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &currentSafety)=0
static void SetRndmStep(G4bool value)
static G4PhysicsTable * BuildLabTimeTable(G4PhysicsTable *theDEDXTable, G4PhysicsTable *theLabTimeTable, G4double Tmin, G4double Tmax, G4int nbin)
static G4double c1lim
static G4double ltaulow
static G4bool rndmStepFlag
virtual ~G4VeLowEnergyLoss()
static G4PhysicsTable * BuildInverseRangeTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theRangeCoeffATable, G4PhysicsTable *theRangeCoeffBTable, G4PhysicsTable *theRangeCoeffCTable, G4PhysicsTable *theInverseRangeTable, G4double Tmin, G4double Tmax, G4int nbin)
static G4double dRoverRange
static G4PhysicsTable * BuildRangeCoeffBTable(G4PhysicsTable *theRangeTable, G4PhysicsTable *theCoeffBTable, G4double Tmin, G4double Tmax, G4int nbin)
virtual G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &Step)=0
static G4double c3lim
static G4double ltauhigh
static G4PhysicsTable * BuildProperTimeTable(G4PhysicsTable *theDEDXTable, G4PhysicsTable *ProperTimeTable, G4double Tmin, G4double Tmax, G4int nbin)
static void SetStepFunction(G4double c1, G4double c2)
G4double GetLossWithFluct(const G4DynamicParticle *aParticle, const G4MaterialCutsCouple *couple, G4double MeanLoss, G4double step)
static G4bool EnlossFlucFlag
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &Step)=0