Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4hRDEnergyLoss.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//
28// ------------------------------------------------------------
29// GEANT 4 class header file
30//
31// History: first implementation, based on object model of
32// 2nd December 1995, G.Cosmo
33// ---------- G4hEnergyLoss physics process -----------
34// by Laszlo Urban, 30 May 1997
35//
36// ************************************************************
37// It is the first implementation of the NEW UNIFIED ENERGY LOSS PROCESS.
38// It calculates the continuous energy loss for charged hadrons.
39// Processes giving contribution to the continuous loss :
40// ionisation (= cont.ion.loss + delta ray production)
41// can be added more easily ..........
42// This class creates static proton/antiproton dE/dx and range tables ,
43// which tables can be used by other processes.
44// The energy loss for other charged hadrons is calculated from the p/pbar
45// tables with scaled kinetic energy.
46//
47// 7/10/98 L.Urban some bugs fixed + some cleanup
48// 22/10/98 L.Urban cleanup
49// 02/02/99 L.Urban several bugs fixed
50// 31/03/00 V.Ivanchenko rename to lowenergy as G4hLowEnergyLoss.hh
51// 09/08/00 V.Ivanchenko remove GetContinuousStepLimit and IsApplicable
52// 23/11/01 V.Ivanchenko Move static member-functions from header to source
53// 22/01/03 V.Ivanchenko Cuts per region
54// 18/04/03 V.Ivanchenko Make dRoverRange protected
55//
56// 31 Jul 2008 MGP Short term supply of energy loss of hadrons through clone of
57// former G4hLowEnergyLoss (with some initial cleaning)
58// To be replaced by reworked class to deal with condensed/discrete
59// issues properly
60//
61// --------------------------------------------------------------
62
63// Class description:
64// Short term supply of energy loss of hadrons through clone of former G4hLowEnergyLoss
65// (with some initial cleaning)
66// To be replaced by reworked class to deal with condensed/discrete issues properly
67
68// --------------------------------------------------------------
69
70
71#ifndef G4HRDENERGYLOSS_HH
72#define G4HRDENERGYLOSS_HH 1
73
74#include "G4ios.hh"
75#include "globals.hh"
76#include "Randomize.hh"
78#include "G4Material.hh"
79#include "G4Element.hh"
80#include "G4Proton.hh"
81#include "G4AntiProton.hh"
82#include "G4Electron.hh"
83#include "G4VParticleChange.hh"
84#include "G4Track.hh"
85#include "G4Step.hh"
86#include "G4PhysicsLogVector.hh"
88
89class G4EnergyLossMessenger;
90
92
93{
94public:
95
97
99
101 const G4Track& track,
102 G4double previousStepSize,
104 ) = 0 ;
105
107 const G4Step& Step) = 0 ;
108
109 // ---- MGP ---- All this static stuff is expected to disappear in a future
110 // development cycle
111
112 // get the number of processes contributing to the cont.energy loss
114
115 // set the number of processes contributing to the cont.energy loss
116 static void SetNumberOfProcesses(G4int number);
117
118 // Increment the number of processes contributing to the cont.energy loss
119 static void PlusNumberOfProcesses();
120
121 // decrement the number of processes contributing to the cont.energy loss
122 static void MinusNumberOfProcesses();
123
124 static void SetdRoverRange(G4double value);
125 static void SetRndmStep (G4bool value);
126 static void SetEnlossFluc (G4bool value);
127 static void SetStepFunction (G4double c1, G4double c2);
128
129protected:
130
132
133 // G4Material *lastMaterial ;
137
138 static void BuildDEDXTable(const G4ParticleDefinition& aParticleType);
139
140protected:
141
146
147 //inverse of the range tables
150
151 //lab and proper time tables
154
157
158 // processes inherited from G4hRDEnergyLoss
159 // register themselves in the static array Recorder
164
165 // particle mass
167
168 // cut in range
171
173
176 static G4ThreadLocal G4int TotBin; // number of bins in table,
177 // calculated in BuildPhysicsTable
178
179 static G4ThreadLocal G4double RTable,LOGRTable; // LOGRTable=std::log(HighestKineticEnergy
180 // /LowestKineticEnergy)/TotBin
181 // RTable = std::exp(LOGRTable)
182
184
186
188
189 static G4ThreadLocal G4double dRoverRange ; // maximum allowed deltarange/range
190 // in one step
191 static G4ThreadLocal G4double finalRange ; // last step before stop
192 static G4ThreadLocal G4double c1lim,c2lim,c3lim ; // coeffs for computing steplimit
193
196
197
198private:
199
200 // hide assignment operator
201
203 G4hRDEnergyLoss & operator=(const G4hRDEnergyLoss &right);
204
205 // variables for the integration routines
206 static G4ThreadLocal G4double Mass,taulow,tauhigh,ltaulow,ltauhigh;
207
208 // ====================================================================
209 // static part of the class
210
211 static void BuildRangeTable(const G4ParticleDefinition& aParticleType);
212
213 static void BuildInverseRangeTable(const G4ParticleDefinition& aParticleType);
214
215 static void BuildTimeTables(const G4ParticleDefinition& aParticleType);
216
217 static void BuildLabTimeVector(G4int materialIndex,
218 G4PhysicsLogVector* rangeVector);
219
220 static void BuildProperTimeVector(G4int materialIndex,
221 G4PhysicsLogVector* rangeVector);
222
223 static void InvertRangeVector(G4int materialIndex,
224 G4PhysicsLogVector* rangeVector);
225
226 static void BuildRangeVector(G4int materialIndex,
227 G4PhysicsLogVector* rangeVector);
228
229 static G4double LabTimeIntLog(G4PhysicsVector* physicsVector, G4int nbin);
230
231 static G4double ProperTimeIntLog(G4PhysicsVector* physicsVector, G4int nbin);
232
233 static G4double RangeIntLin(G4PhysicsVector* physicsVector, G4int nbin);
234
235 static G4double RangeIntLog(G4PhysicsVector* physicsVector, G4int nbin);
236
237 static void BuildRangeCoeffATable( const G4ParticleDefinition& aParticleType);
238 static void BuildRangeCoeffBTable( const G4ParticleDefinition& aParticleType);
239 static void BuildRangeCoeffCTable(const G4ParticleDefinition& aParticleType);
240
241 // ====================================================================
242
243 static G4ThreadLocal G4PhysicsTable* theDEDXTable;
244
245 static G4ThreadLocal G4PhysicsTable* theRangeTable;
246 static G4ThreadLocal G4PhysicsTable* theInverseRangeTable;
247
248 static G4ThreadLocal G4PhysicsTable* theLabTimeTable;
249 static G4ThreadLocal G4PhysicsTable* theProperTimeTable;
250
251 static G4ThreadLocal G4PhysicsTable** RecorderOfProcess;
252 static G4ThreadLocal G4int CounterOfProcess;
253
254 static G4ThreadLocal G4PhysicsTable* thepRangeCoeffATable;
255 static G4ThreadLocal G4PhysicsTable* thepRangeCoeffBTable;
256 static G4ThreadLocal G4PhysicsTable* thepRangeCoeffCTable;
257 static G4ThreadLocal G4PhysicsTable* thepbarRangeCoeffATable;
258 static G4ThreadLocal G4PhysicsTable* thepbarRangeCoeffBTable;
259 static G4ThreadLocal G4PhysicsTable* thepbarRangeCoeffCTable;
260
261 static G4ThreadLocal G4PhysicsTable* theRangeCoeffATable;
262 static G4ThreadLocal G4PhysicsTable* theRangeCoeffBTable;
263 static G4ThreadLocal G4PhysicsTable* theRangeCoeffCTable;
264 static G4ThreadLocal G4int NumberOfProcesses ;
265
266};
267
268#endif
G4double condition(const G4ErrorSymMatrix &m)
G4ForceCondition
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
Definition: G4Step.hh:62
static G4ThreadLocal G4PhysicsTable * theDEDXpTable
static G4ThreadLocal G4PhysicsTable * theInverseRangepTable
static void SetStepFunction(G4double c1, G4double c2)
const G4double MaxExcitationNumber
static G4ThreadLocal G4double Charge
virtual G4VParticleChange * PostStepDoIt(const G4Track &track, const G4Step &Step)=0
static G4ThreadLocal G4double finalRange
static G4ThreadLocal G4double c3lim
static G4ThreadLocal G4PhysicsTable * theDEDXpbarTable
G4double MinKineticEnergy
static G4ThreadLocal G4PhysicsTable ** RecorderOfpProcess
static G4ThreadLocal G4double dRoverRange
static G4ThreadLocal G4int TotBin
static G4ThreadLocal G4PhysicsTable * theProperTimepTable
static G4ThreadLocal G4double c1lim
const long nmaxDirectFluct
G4PhysicsTable * theLossTable
static G4ThreadLocal G4PhysicsTable * theLabTimepTable
const long nmaxCont1
static G4ThreadLocal G4double c2lim
static G4ThreadLocal G4PhysicsTable * theRangepTable
static G4ThreadLocal G4PhysicsTable * theLabTimepbarTable
static void SetdRoverRange(G4double value)
static G4ThreadLocal G4PhysicsTable * theInverseRangepbarTable
static void PlusNumberOfProcesses()
static G4ThreadLocal G4int CounterOfpProcess
static G4ThreadLocal G4double ParticleMass
static G4ThreadLocal G4double HighestKineticEnergy
static void SetRndmStep(G4bool value)
static G4ThreadLocal G4double LOGRTable
static G4ThreadLocal G4int CounterOfpbarProcess
static G4ThreadLocal G4PhysicsTable * theProperTimepbarTable
static G4ThreadLocal G4double pbartableElectronCutInRange
static G4ThreadLocal G4PhysicsTable ** RecorderOfpbarProcess
static G4ThreadLocal G4double LowestKineticEnergy
static G4ThreadLocal G4double ptableElectronCutInRange
static G4ThreadLocal G4PhysicsTable * theRangepbarTable
virtual G4double GetMeanFreePath(const G4Track &track, G4double previousStepSize, enum G4ForceCondition *condition)=0
static G4ThreadLocal G4bool rndmStepFlag
static void MinusNumberOfProcesses()
static G4ThreadLocal G4bool EnlossFlucFlag
G4bool CutsWhereModified()
static void SetNumberOfProcesses(G4int number)
static void SetEnlossFluc(G4bool value)
static G4int GetNumberOfProcesses()
const G4double probLimFluct
static G4ThreadLocal G4double RTable
const long nmaxCont2
static void BuildDEDXTable(const G4ParticleDefinition &aParticleType)
#define G4ThreadLocal
Definition: tls.hh:77