ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4LossTableBuilder.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4LossTableBuilder.hh
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 // GEANT4 Class header file
29 //
30 //
31 // File name: G4LossTableBuilder
32 //
33 // Author: Vladimir Ivanchenko on base of Laszlo Urban code
34 //
35 // Creation date: 03.01.2002
36 //
37 // Modifications:
38 // 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivanchenko)
39 // 17-07-08 Added splineFlag (V.Ivanchenko)
40 //
41 // Class Description:
42 //
43 // Provide building of dE/dx, range, and inverse range tables.
44 
45 // -------------------------------------------------------------------
46 //
47 
48 #ifndef G4LossTableBuilder_h
49 #define G4LossTableBuilder_h 1
50 
51 #include <vector>
52 #include "globals.hh"
53 #include "G4PhysicsTable.hh"
54 #include "G4Threading.hh"
55 
56 class G4VEmModel;
58 class G4EmParameters;
59 
61 {
62 
63 public:
64 
65  G4LossTableBuilder(G4bool master=true);
66 
67  virtual ~G4LossTableBuilder();
68 
69  // build sum of all energy loss processes
70  void BuildDEDXTable(G4PhysicsTable* dedxTable,
71  const std::vector<G4PhysicsTable*>&);
72 
73  // build range
74  void BuildRangeTable(const G4PhysicsTable* dedxTable,
75  G4PhysicsTable* rangeTable,
76  G4bool useBM = false);
77 
78  // build inverse range
79  void BuildInverseRangeTable(const G4PhysicsTable* rangeTable,
80  G4PhysicsTable* invRangeTable,
81  G4bool useBM = false);
82 
83  // build a table requested by any model class
86  const G4ParticleDefinition*,
88  G4bool spline);
89 
90  // initialise base materials
91  void InitialiseBaseMaterials(const G4PhysicsTable* table=nullptr);
92 
93  // access methods
94  const std::vector<G4int>* GetCoupleIndexes() const;
95 
96  const std::vector<G4double>* GetDensityFactors() const;
97 
98  G4bool GetFlag(size_t idx);
99 
100  inline void SetSplineFlag(G4bool flag);
101 
102  inline void SetInitialisationFlag(G4bool flag);
103 
104 private:
105 
108 
110 
114 
115  static std::vector<G4double>* theDensityFactor;
116  static std::vector<G4int>* theDensityIdx;
117  static std::vector<G4bool>* theFlag;
118 #ifdef G4MULTITHREADED
119  static G4Mutex ltbMutex;
120 #endif
121 };
122 
124 {
125  splineFlag = flag;
126 }
127 
129 {
130  isInitialized = flag;
131 }
132 
133 //....oooOO0OOooo.......oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
134 
135 #endif