ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4eLowEnergyLoss.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4eLowEnergyLoss.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 
30 // Class description:
31 // Low Energy electromagnetic process, electron energy loss
32 // Further documentation available from http://www.ge.infn.it/geant4/lowE
33 
34 // -------------------------------------------------------------------
35 //
36 // This class is the implementation of the unified Energy Loss process.
37 // It calculates the continuous energy loss for e+/e-.
38 // The following processes give contributions to the continuous
39 // energy loss (by default) :
40 // --- ionisation (= cont.ion.loss + delta ray production)
41 // --- bremsstrahlung (= cont.loss due to soft brems+discrete bremsstrahlung)
42 // more can be added ..........
43 // This class creates static dE/dx and range tables for e+ and e-,
44 // which tables can be used by other processes , too.
45 // G4eLowEnergyLoss is the base class for the processes giving contribution
46 // to the (continuous) energy loss of e+/e- .
47 //
48 // History: first implementation, based on object model of
49 // 2nd December 1995, G.Cosmo
50 // ---------- G4eLowEnergyLoss physics process -----------
51 // by Laszlo Urban, 20 March 1997
52 //
53 // 27.05.98 OldGetRange removed + other corrs , L.Urban
54 // 10.09.98 cleanup
55 // 16.10.98 public method SetStepFunction() + messenger class
56 // 20.01.99 new data members , L.Urban
57 // 10.02.00 modifications, new e.m. structure , L.Urban
58 // 18.10.01 Revision to improve code quality and consistency with design
59 // 23.11.01 V.Ivanchenko Move static member-functions from header to source
60 // 28.03.02 V.Ivanchenko add fluorescence flag
61 // 21.01.03 V.Ivanchenko cut per region
62 // ------------------------------------------------------------
63 
64 #ifndef G4RDeLowEnergyLoss_h
65 #define G4RDeLowEnergyLoss_h 1
66 
67 #include "G4ios.hh"
68 #include "globals.hh"
69 #include "Randomize.hh"
70 #include "G4RDVeLowEnergyLoss.hh"
71 #include "G4Material.hh"
72 #include "G4Element.hh"
74 #include "globals.hh"
75 #include "G4Track.hh"
76 #include "G4Step.hh"
77 #include "G4Electron.hh"
78 #include "G4Positron.hh"
79 #include "G4PhysicsLogVector.hh"
80 #include "G4PhysicsLinearVector.hh"
81 #include "G4EnergyLossTables.hh"
82 
83 class G4EnergyLossMessenger;
84 
86 
87 {
88  public:
89 
90  G4eLowEnergyLoss(const G4String& );
91 
93 
95  // true for e+/e- , false otherwise
96 
97  void BuildDEDXTable(const G4ParticleDefinition& aParticleType);
98  // It builds dE/dx and range tables for aParticleType and
99  // for every material contained in the materialtable.
100 
102  G4double previousStepSize,
103  G4double currentMinimumStep,
104  G4double& currentSafety);
105  // Computes the steplimit due to the energy loss process.
106 
108  const G4Step& Step) ;
109  // Performs the computation of the (continuous) energy loss
110  // after the step (with fluctuation).
111 
112  virtual G4double GetMeanFreePath(const G4Track& track,
113  G4double previousStepSize,
115  // Virtual function to be overridden in the derived classes
116  // ( ionisation and bremsstrahlung) .
117 
118  virtual G4VParticleChange* PostStepDoIt(const G4Track& track,
119  const G4Step& step) = 0;
120  // Virtual function to be overridden in the derived classes
121  // ( ionisation and bremsstrahlung) .
122 
123  static void SetNbOfProcesses(G4int nb);
124  // Sets number of processes giving contribution to the energy loss
125 
126  static void PlusNbOfProcesses();
127  // Increases number of processes giving contribution to the energy loss
128 
129  static void MinusNbOfProcesses();
130  // Decreases number of processes giving contribution to the energy loss
131 
132  static G4int GetNbOfProcesses();
133  // Gets number of processes giving contribution to the energy loss
134  // ( default value = 2)
135 
136  static void SetLowerBoundEloss(G4double val);
137  static void SetUpperBoundEloss(G4double val);
138  static void SetNbinEloss(G4int nb);
139 
140  static G4double GetLowerBoundEloss();
141  static G4double GetUpperBoundEloss();
142  static G4int GetNbinEloss();
143 
144  void ActivateFluorescence(G4bool val);
145  // Set fluorescence flag on/off
146 
147  G4bool Fluorescence() const;
148  // Get flurescence flag
149 
150  protected:
151 
152  virtual std::vector<G4DynamicParticle*>* DeexciteAtom(const G4MaterialCutsCouple* ,
153  G4double, G4double) // incidentEnergy, eLoss
154  { return 0; };
155 
157 
158  G4double MinKineticEnergy ; // particle with kinetic energy
159  // smaller than MinKineticEnergy
160  // is stopped in AlongStepDoIt
161 
163 
164  //basic DEDX and Range tables
169 
170  //inverse tables of the range tables
173 
174  // lab and proper time tables
179 
180  //processes inherited from G4eLowEnergyLoss
181  //register themselves in the static array Recorder
182  //for electrons/positrons separately
183  //nb of contributing processes = NbOfProcesses
189 
190 
191  private:
192 
193  G4double GetConstraints(const G4DynamicParticle* aParticle,
194  const G4MaterialCutsCouple* couple);
195 
196  // hide assignment operator
199 
200 
202 
205 
206  G4double fdEdx; // computed in GetConstraints
207  G4double fRangeNow; // computed in GetConstraints
208 
209  G4double linLossLimit ; // used in AlongStepDoIt
210 
211 
212  //New ParticleChange
214 
215  //
216  // static part of the class
217  //
218 
219  static G4int NbinEloss; // number of bins in table,
220  // calculated in BuildPhysicTable
223  static G4double RTable,LOGRTable; // LOGRTable=std::log(UpperBoundEloss-
224  // LowerBoundEloss)/NbinEloss
225  // RTable = std::exp(LOGRTable)
226 
227  //for interpolation within the tables
234 
235  static G4EnergyLossMessenger* eLossMessenger;
236 
237  G4bool theFluo; // Fluorescence flag
238 
239 };
240 
241 #include "G4eLowEnergyLoss.icc"
242 
243 #endif
244