Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/eRosita/physics/include/G4eLowEnergyLoss.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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"
 73 #include "G4ParticleChangeForLoss.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 
 85 class G4eLowEnergyLoss : public G4RDVeLowEnergyLoss
 86 
 87 {
 88   public:
 89 
 90     G4eLowEnergyLoss(const G4String& );
 91 
 92    ~G4eLowEnergyLoss();
 93 
 94     G4bool IsApplicable(const G4ParticleDefinition&);
 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 
101     G4double GetContinuousStepLimit(const G4Track& track,
102                                     G4double previousStepSize,
103                                     G4double currentMinimumStep,
104                                     G4double& currentSafety);
105     // Computes the steplimit due to the energy loss process.
106 
107     G4VParticleChange* AlongStepDoIt(const G4Track& track,
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,
114                                      G4ForceCondition* condition) = 0;
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 
156     G4PhysicsTable* theLossTable;
157 
158     G4double MinKineticEnergy ;     // particle with kinetic energy
159                                     // smaller than MinKineticEnergy
160                                     // is stopped in  AlongStepDoIt
161 
162     G4double Charge,lastCharge ;
163 
164     //basic DEDX and Range tables
165     static G4PhysicsTable* theDEDXElectronTable ;
166     static G4PhysicsTable* theDEDXPositronTable ;
167     static G4PhysicsTable* theRangeElectronTable ;
168     static G4PhysicsTable* theRangePositronTable ;
169 
170     //inverse tables of the range tables
171     static G4PhysicsTable* theInverseRangeElectronTable;
172     static G4PhysicsTable* theInverseRangePositronTable;
173 
174     // lab and proper time tables
175     static G4PhysicsTable* theLabTimeElectronTable ;
176     static G4PhysicsTable* theLabTimePositronTable ;
177     static G4PhysicsTable* theProperTimeElectronTable ;
178     static G4PhysicsTable* theProperTimePositronTable ;
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
184     static G4int NbOfProcesses;
185     static G4int CounterOfElectronProcess;
186     static G4int CounterOfPositronProcess ;
187     static G4PhysicsTable** RecorderOfElectronProcess;
188     static G4PhysicsTable** RecorderOfPositronProcess;
189 
190 
191   private:
192 
193     G4double GetConstraints(const G4DynamicParticle* aParticle,
194                             const G4MaterialCutsCouple* couple);
195 
196     // hide  assignment operator
197     G4eLowEnergyLoss (G4eLowEnergyLoss &);
198     G4eLowEnergyLoss & operator=(const G4eLowEnergyLoss &right);
199 
200 
201     G4PhysicsTable* theDEDXTable;
202 
203     G4int            CounterOfProcess;
204     G4PhysicsTable** RecorderOfProcess;
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
213     G4ParticleChangeForLoss fParticleChange ;
214 
215  //
216  // static part of the class
217  //
218 
219     static G4int NbinEloss;               // number of bins in table,
220                                           // calculated in BuildPhysicTable
221     static G4double LowerBoundEloss;
222     static G4double UpperBoundEloss;
223     static G4double RTable,LOGRTable;    // LOGRTable=std::log(UpperBoundEloss-
224                                          // LowerBoundEloss)/NbinEloss
225                                          // RTable = std::exp(LOGRTable)
226 
227     //for interpolation within the tables
228     static G4PhysicsTable* theeRangeCoeffATable;
229     static G4PhysicsTable* theeRangeCoeffBTable;
230     static G4PhysicsTable* theeRangeCoeffCTable;
231     static G4PhysicsTable* thepRangeCoeffATable;
232     static G4PhysicsTable* thepRangeCoeffBTable;
233     static G4PhysicsTable* thepRangeCoeffCTable;
234 
235     static G4EnergyLossMessenger* eLossMessenger;
236 
237     G4bool theFluo;                     // Fluorescence flag
238 
239 };
240 
241 #include "G4eLowEnergyLoss.icc"
242 
243 #endif
244 
245