Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // 28 // ------------------------------------------- 29 // GEANT 4 class header file 30 // 31 // History: first implementation, based o 32 // 2nd December 1995, G.Cosmo 33 // ---------- G4hEnergyLoss physics proce 34 // by Laszlo Urban, 30 May 1997 35 // 36 // ******************************************* 37 // It is the first implementation of the NEW U 38 // It calculates the continuous energy loss fo 39 // Processes giving contribution to the contin 40 // ionisation (= cont.ion.loss + delta ray p 41 // can be added more easily .......... 42 // This class creates static proton/antiproton 43 // which tables can be used by other processes 44 // The energy loss for other charged hadrons i 45 // tables with scaled kinetic energy. 46 // 47 // 7/10/98 L.Urban some bugs fixed + some cle 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 a 51 // 09/08/00 V.Ivanchenko remove GetContinuousS 52 // 23/11/01 V.Ivanchenko Move static member-fu 53 // 22/01/03 V.Ivanchenko Cuts per region 54 // 18/04/03 V.Ivanchenko Make dRoverRange prot 55 // 56 // 31 Jul 2008 MGP Short term supply of en 57 // former G4hLowEnergyLoss 58 // To be replaced by rewor 59 // issues properly 60 // 61 // ------------------------------------------- 62 63 // Class description: 64 // Short term supply of energy loss of hadrons 65 // (with some initial cleaning) 66 // To be replaced by reworked class to deal wi 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" 77 #include "G4VContinuousDiscreteProcess.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 91 class G4hRDEnergyLoss : public G4VContinuousDi 92 93 { 94 public: 95 96 G4hRDEnergyLoss(const G4String& ); 97 98 ~G4hRDEnergyLoss(); 99 100 virtual G4double GetMeanFreePath( 101 const G4Track& track, 102 G4double previousStepSize, 103 enum G4ForceCondition* condition 104 ) = 0 ; 105 106 virtual G4VParticleChange* PostStepDoIt(cons 107 const G4Step& Step) = 0 ; 108 109 // ---- MGP ---- All this static stuff is ex 110 // development cycle 111 112 // get the number of processes contributing 113 static G4int GetNumberOfProcesses(); 114 115 // set the number of processes contributing 116 static void SetNumberOfProcesses(G4int numbe 117 118 // Increment the number of processes contri 119 static void PlusNumberOfProcesses(); 120 121 // decrement the number of processes contri 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, G4 128 129 protected: 130 131 G4bool CutsWhereModified(); 132 133 // G4Material *lastMaterial ; 134 const G4double MaxExcitationNumber ; 135 const G4double probLimFluct ; 136 const long nmaxDirectFluct,nmaxCont1,nmaxCon 137 138 static void BuildDEDXTable(const G4ParticleD 139 140 protected: 141 142 static G4ThreadLocal G4PhysicsTable* theDEDX 143 static G4ThreadLocal G4PhysicsTable* theDEDX 144 static G4ThreadLocal G4PhysicsTable* theRang 145 static G4ThreadLocal G4PhysicsTable* theRang 146 147 //inverse of the range tables 148 static G4ThreadLocal G4PhysicsTable* theInve 149 static G4ThreadLocal G4PhysicsTable* theInve 150 151 //lab and proper time tables 152 static G4ThreadLocal G4PhysicsTable* theLabT 153 static G4ThreadLocal G4PhysicsTable* theLabT 154 155 static G4ThreadLocal G4PhysicsTable* theProp 156 static G4ThreadLocal G4PhysicsTable* theProp 157 158 // processes inherited from G4hRDEnergyLoss 159 // register themselves in the static arra 160 static G4ThreadLocal G4PhysicsTable** Record 161 static G4ThreadLocal G4PhysicsTable** Record 162 static G4ThreadLocal G4int CounterOfpProcess 163 static G4ThreadLocal G4int CounterOfpbarProc 164 165 // particle mass 166 static G4ThreadLocal G4double ParticleMass ; 167 168 // cut in range 169 static G4ThreadLocal G4double ptableElectron 170 static G4ThreadLocal G4double pbartableElect 171 172 static G4ThreadLocal G4double Charge ; 173 174 static G4ThreadLocal G4double LowestKineticE 175 static G4ThreadLocal G4double HighestKinetic 176 static G4ThreadLocal G4int TotBin; // number 177 // calculated in BuildPhysicsTable 178 179 static G4ThreadLocal G4double RTable,LOGRTab 180 // /LowestKineticEnergy)/TotBin 181 // RTable = std::exp(LOGRTable) 182 183 G4PhysicsTable* theLossTable ; 184 185 G4double linLossLimit ; 186 187 G4double MinKineticEnergy ; 188 189 static G4ThreadLocal G4double dRoverRange ; 190 // in one step 191 static G4ThreadLocal G4double finalRange ; 192 static G4ThreadLocal G4double c1lim,c2lim,c3 193 194 static G4ThreadLocal G4bool rndmStepFlag ; 195 static G4ThreadLocal G4bool EnlossFlucFlag ; 196 197 198 private: 199 200 // hide assignment operator 201 202 G4hRDEnergyLoss(G4hRDEnergyLoss &); 203 G4hRDEnergyLoss & operator=(const G4hRDEnerg 204 205 // variables for the integration routines 206 static G4ThreadLocal G4double Mass,taulow,ta 207 208 // ========================================= 209 // static part of the class 210 211 static void BuildRangeTable(const G4Particle 212 213 static void BuildInverseRangeTable(const G4P 214 215 static void BuildTimeTables(const G4Particle 216 217 static void BuildLabTimeVector(G4int materia 218 G4PhysicsLogVector* rangeVector); 219 220 static void BuildProperTimeVector(G4int mate 221 G4PhysicsLogVector* rangeVector); 222 223 static void InvertRangeVector(G4int material 224 G4PhysicsLogVector* rangeVector); 225 226 static void BuildRangeVector(G4int materialI 227 G4PhysicsLogVector* rangeVector); 228 229 static G4double LabTimeIntLog(G4PhysicsVecto 230 231 static G4double ProperTimeIntLog(G4PhysicsVe 232 233 static G4double RangeIntLin(G4PhysicsVector* 234 235 static G4double RangeIntLog(G4PhysicsVector* 236 237 static void BuildRangeCoeffATable( const G4P 238 static void BuildRangeCoeffBTable( const G4P 239 static void BuildRangeCoeffCTable(const G4Pa 240 241 // ========================================= 242 243 static G4ThreadLocal G4PhysicsTable* theDEDX 244 245 static G4ThreadLocal G4PhysicsTable* theRang 246 static G4ThreadLocal G4PhysicsTable* theInve 247 248 static G4ThreadLocal G4PhysicsTable* theLabT 249 static G4ThreadLocal G4PhysicsTable* theProp 250 251 static G4ThreadLocal G4PhysicsTable** Record 252 static G4ThreadLocal G4int CounterOfProcess; 253 254 static G4ThreadLocal G4PhysicsTable* thepRan 255 static G4ThreadLocal G4PhysicsTable* thepRan 256 static G4ThreadLocal G4PhysicsTable* thepRan 257 static G4ThreadLocal G4PhysicsTable* thepbar 258 static G4ThreadLocal G4PhysicsTable* thepbar 259 static G4ThreadLocal G4PhysicsTable* thepbar 260 261 static G4ThreadLocal G4PhysicsTable* theRang 262 static G4ThreadLocal G4PhysicsTable* theRang 263 static G4ThreadLocal G4PhysicsTable* theRang 264 static G4ThreadLocal G4int NumberOfProcesses 265 266 }; 267 268 #endif 269