Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4LossTableManager.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// -------------------------------------------------------------------
30//
31// GEANT4 Class header file
32//
33//
34// File name: G4LossTableManager
35//
36// Author: Vladimir Ivanchenko on base of G4LossTables class
37// and Maria Grazia Pia ideas
38//
39// Creation date: 03.01.2002
40//
41// Modifications:
42//
43// 20-01-03 Migrade to cut per region (V.Ivanchenko)
44// 17-02-03 Fix problem of store/restore tables for ions (V.Ivanchenko)
45// 10-03-03 Add Ion registration (V.Ivanchenko)
46// 25-03-03 Add deregistration (V.Ivanchenko)
47// 26-03-03 Add GetDEDXDispersion (V.Ivanchenko)
48// 02-04-03 Change messenger (V.Ivanchenko)
49// 23-07-03 Add exchange with G4EnergyLossTables (V.Ivanchenko)
50// 05-10-03 Add G4VEmProcesses registration (V.Ivanchenko)
51// 17-10-03 Add SetParameters method (V.Ivanchenko)
52// 12-11-03 G4EnergyLossSTD -> G4EnergyLossProcess (V.Ivanchenko)
53// 14-01-04 Activate precise range calculation (V.Ivanchenko)
54// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
55// 10-01-06 PreciseRange -> CSDARange (V.Ivantchenko)
56// 20-01-06 Introduce GetSubDEDX method (VI)
57// 26-01-06 Rename GetRange -> GetRangeFromRestricteDEDX (V.Ivanchenko)
58// 10-05-06 Add methods SetMscStepLimitation, FacRange and MscFlag (VI)
59// 22-05-06 Add methods Set/Get bremsTh (VI)
60// 12-02-07 Add SetSkin, SetLinearLossLimit (V.Ivanchenko)
61// 18-06-07 Move definition of msc parameters to G4EmProcessOptions (V.Ivanchenko)
62// 12-04-10 Added PreparePhsyicsTables and BuildPhysicsTables entries (V.Ivanchenko)
63//
64// Class Description:
65//
66// A utility static class, responsable for the energy loss tables
67// for each particle
68//
69// Energy loss processes have to register their tables with this
70// class. The responsibility of creating and deleting the tables
71// remains with the energy loss classes.
72
73// -------------------------------------------------------------------
74//
75
76#ifndef G4LossTableManager_h
77#define G4LossTableManager_h 1
78
79#include <map>
80#include <vector>
81#include "globals.hh"
83#include "G4EnergyLossTables.hh"
84
85class G4PhysicsTable;
90class G4VEmProcess;
91class G4EmCorrections;
92class G4EmSaturation;
97class G4Region;
98
100{
101
102public:
103
105
107
108 //-------------------------------------------------
109 // called from destructor
110 //-------------------------------------------------
111
112 void Clear();
113
114 //-------------------------------------------------
115 // initialisation before a new run
116 //-------------------------------------------------
117
118 void PreparePhysicsTable(const G4ParticleDefinition* aParticle,
120
121 void PreparePhysicsTable(const G4ParticleDefinition* aParticle,
122 G4VEmProcess* p);
123
124 void PreparePhysicsTable(const G4ParticleDefinition* aParticle,
126
127 void BuildPhysicsTable(const G4ParticleDefinition* aParticle);
128
129 void BuildPhysicsTable(const G4ParticleDefinition* aParticle,
131
132 //-------------------------------------------------
133 // Run time access to DEDX, range, energy for a given particle,
134 // energy, and G4MaterialCutsCouple
135 //-------------------------------------------------
136
138 const G4ParticleDefinition *aParticle,
139 G4double kineticEnergy,
140 const G4MaterialCutsCouple *couple);
141
143 const G4ParticleDefinition *aParticle,
144 G4double kineticEnergy,
145 const G4MaterialCutsCouple *couple);
146
148 const G4ParticleDefinition *aParticle,
149 G4double kineticEnergy,
150 const G4MaterialCutsCouple *couple);
151
153 const G4ParticleDefinition *aParticle,
154 G4double kineticEnergy,
155 const G4MaterialCutsCouple *couple);
156
158 const G4ParticleDefinition *aParticle,
159 G4double kineticEnergy,
160 const G4MaterialCutsCouple *couple);
161
163 const G4ParticleDefinition *aParticle,
164 G4double range,
165 const G4MaterialCutsCouple *couple);
166
168 const G4MaterialCutsCouple *couple,
169 const G4DynamicParticle* dp,
170 G4double& length);
171
172 //-------------------------------------------------
173 // Methods to be called only at initialisation
174 //-------------------------------------------------
175
177
179
181
183
184 void Register(G4VEmProcess* p);
185
186 void DeRegister(G4VEmProcess* p);
187
188 void Register(G4VEmModel* p);
189
190 void DeRegister(G4VEmModel* p);
191
193
195
196 void RegisterIon(const G4ParticleDefinition* aParticle,
198
199 void RegisterExtraParticle(const G4ParticleDefinition* aParticle,
201
202 void SetLossFluctuations(G4bool val);
203
204 void SetSubCutoff(G4bool val, const G4Region* r=0);
205
206 void SetIntegral(G4bool val);
207
208 void SetRandomStep(G4bool val);
209
210 void SetMinSubRange(G4double val);
211
212 void SetMinEnergy(G4double val);
213
214 void SetMaxEnergy(G4double val);
215
217
219
220 void SetDEDXBinning(G4int val);
221
223
224 void SetLambdaBinning(G4int val);
225
227
228 void SetStepFunction(G4double v1, G4double v2);
229
230 void SetBuildCSDARange(G4bool val);
231
232 void SetLPMFlag(G4bool val);
233
234 void SetSplineFlag(G4bool val);
235
237
239
241
242 void SetVerbose(G4int val);
243
244 //-------------------------------------------------
245 // Access methods
246 //-------------------------------------------------
247
249
250 G4bool BuildCSDARange() const;
251
252 G4bool LPMFlag() const;
253
254 G4bool SplineFlag() const;
255
257
259
260 G4double MinKinEnergy() const;
261
262 G4double MaxKinEnergy() const;
263
264 const std::vector<G4VEnergyLossProcess*>& GetEnergyLossProcessVector();
265
266 const std::vector<G4VEmProcess*>& GetEmProcessVector();
267
268 const std::vector<G4VMultipleScattering*>& GetMultipleScatteringVector();
269
271
273
275
277
279
281
283
285
286private:
287
288 //-------------------------------------------------
289 // Private methods and members
290 //-------------------------------------------------
291
293
294 G4VEnergyLossProcess* BuildTables(const G4ParticleDefinition* aParticle);
295
296 void CopyTables(const G4ParticleDefinition* aParticle,
298
299 void ParticleHaveNoLoss(const G4ParticleDefinition* aParticle);
300
301 void SetParameters(const G4ParticleDefinition* aParticle,
303
304 void CopyDEDXTables();
305
307 G4LossTableManager & operator=(const G4LossTableManager &right);
308
309 static G4LossTableManager* theInstance;
310
311 typedef const G4ParticleDefinition* PD;
312
313 std::map<PD,G4VEnergyLossProcess*,std::less<PD> > loss_map;
314
315 std::vector<G4VEnergyLossProcess*> loss_vector;
316 std::vector<PD> part_vector;
317 std::vector<PD> base_part_vector;
318 std::vector<G4bool> tables_are_built;
319 std::vector<G4bool> isActive;
320 std::vector<G4PhysicsTable*> dedx_vector;
321 std::vector<G4PhysicsTable*> range_vector;
322 std::vector<G4PhysicsTable*> inv_range_vector;
323 std::vector<G4VMultipleScattering*> msc_vector;
324 std::vector<G4VEmProcess*> emp_vector;
325 std::vector<G4VEmModel*> mod_vector;
326 std::vector<G4VEmFluctuationModel*> fmod_vector;
327
328 // cash
329 G4VEnergyLossProcess* currentLoss;
330 PD currentParticle;
331 PD theElectron;
332 PD firstParticle;
333
334 G4int n_loss;
335 G4int run;
336
337 G4bool all_tables_are_built;
338 G4bool startInitialisation;
339
340 G4bool lossFluctuationFlag;
341 G4bool subCutoffFlag;
342 G4bool rndmStepFlag;
343 G4bool integral;
344 G4bool integralActive;
345 G4bool buildCSDARange;
346 G4bool minEnergyActive;
347 G4bool maxEnergyActive;
348 G4bool maxEnergyForMuonsActive;
349 G4bool stepFunctionActive;
350 G4bool flagLPM;
351 G4bool splineFlag;
352
353 G4double minSubRange;
354 G4double maxRangeVariation;
355 G4double maxFinalStep;
356 G4double minKinEnergy;
357 G4double maxKinEnergy;
358 G4double maxKinEnergyForMuons;
359 G4double bremsTh;
360 G4double factorForAngleLimit;
361
362 G4LossTableBuilder* tableBuilder;
363 G4EnergyLossMessenger* theMessenger;
364 G4EmCorrections* emCorrections;
365 G4EmSaturation* emSaturation;
366 G4EmConfigurator* emConfigurator;
367 G4ElectronIonPair* emElectronIonPair;
368 G4VAtomDeexcitation* atomDeexcitation;
369
370 G4int nbinsLambda;
371 G4int nbinsPerDecade;
372 G4int verbose;
373
374};
375
376//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
377
378#endif
379
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
void RegisterIon(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
void SetAtomDeexcitation(G4VAtomDeexcitation *)
void SetLinearLossLimit(G4double val)
void SetFactorForAngleLimit(G4double val)
void SetSplineFlag(G4bool val)
G4double MinKinEnergy() const
void SetMaxEnergy(G4double val)
static G4LossTableManager * Instance()
const std::vector< G4VEmProcess * > & GetEmProcessVector()
G4double GetCSDARange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
G4double FactorForAngleLimit() const
void SetSubCutoff(G4bool val, const G4Region *r=0)
G4VEnergyLossProcess * GetEnergyLossProcess(const G4ParticleDefinition *)
G4LossTableBuilder * GetTableBuilder()
G4double GetSubDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
void SetIntegral(G4bool val)
G4double MaxKinEnergy() const
void SetBremsstrahlungTh(G4double val)
void BuildPhysicsTable(const G4ParticleDefinition *aParticle)
G4int GetNumberOfBinsPerDecade() const
G4double BremsstrahlungTh() const
void SetMaxEnergyForCSDARange(G4double val)
G4double GetEnergy(const G4ParticleDefinition *aParticle, G4double range, const G4MaterialCutsCouple *couple)
const std::vector< G4VMultipleScattering * > & GetMultipleScatteringVector()
void SetVerbose(G4int val)
void DeRegister(G4VEnergyLossProcess *p)
void SetBuildCSDARange(G4bool val)
void SetMinEnergy(G4double val)
G4EmConfigurator * EmConfigurator()
void Register(G4VEnergyLossProcess *p)
G4ElectronIonPair * ElectronIonPair()
G4EmSaturation * EmSaturation()
const std::vector< G4VEnergyLossProcess * > & GetEnergyLossProcessVector()
G4bool BuildCSDARange() const
G4VAtomDeexcitation * AtomDeexcitation()
void SetRandomStep(G4bool val)
G4double GetRangeFromRestricteDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
void SetDEDXBinning(G4int val)
void PreparePhysicsTable(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
void SetStepFunction(G4double v1, G4double v2)
G4EmCorrections * EmCorrections()
void SetLossFluctuations(G4bool val)
G4double GetDEDXDispersion(const G4MaterialCutsCouple *couple, const G4DynamicParticle *dp, G4double &length)
void SetMaxEnergyForMuons(G4double val)
void SetLambdaBinning(G4int val)
void RegisterExtraParticle(const G4ParticleDefinition *aParticle, G4VEnergyLossProcess *p)
G4double GetRange(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
void SetLPMFlag(G4bool val)
void SetMinSubRange(G4double val)
G4EnergyLossMessenger * GetMessenger()
G4double GetDEDX(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4MaterialCutsCouple *couple)
void SetDEDXBinningForCSDARange(G4int val)