ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4hRDEnergyLoss.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4hRDEnergyLoss.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 // ------------------------------------------------------------
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"
87 #include "G4PhysicsLinearVector.hh"
88 
89 class G4EnergyLossMessenger;
90 
92 
93 {
94 public:
95 
96  G4hRDEnergyLoss(const G4String& );
97 
99 
100  virtual G4double GetMeanFreePath(
101  const G4Track& track,
102  G4double previousStepSize,
104  ) = 0 ;
105 
106  virtual G4VParticleChange* PostStepDoIt(const G4Track& track,
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
113  static G4int GetNumberOfProcesses();
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 
129 protected:
130 
132 
133  // G4Material *lastMaterial ;
137 
138  static void BuildDEDXTable(const G4ParticleDefinition& aParticleType);
139 
140 protected:
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 
198 private:
199 
200  // hide assignment operator
201 
204 
205  // variables for the integration routines
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 
244 
247 
250 
253 
260 
265 
266 };
267 
268 #endif