Geant4 Cross Reference |
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