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 // G4Track 27 // 28 // Class description: 29 // 30 // This class describes the particle under tra 31 // It includes information related to tracking 32 // 1) current position/time of the particl 33 // 2) static particle information, 34 // 3) the pointer to the physical volume w 35 // the particle exists 36 37 // Author: Katsuya Amako, KEK - 1995 38 // Revisions: Hisaya Kurashige, 1998-2011 39 // ------------------------------------------- 40 #ifndef G4Track_hh 41 #define G4Track_hh 1 42 43 #include <cmath> // Include from 'system' 44 #include <map> 45 #include <CLHEP/Units/PhysicalConstants.h> 46 47 #include "globals.hh" // Include fr 48 #include "trkdefs.hh" // Include DL 49 #include "G4ThreeVector.hh" // Include fr 50 #include "G4LogicalVolume.hh" // Include fr 51 #include "G4VPhysicalVolume.hh" // Include fr 52 #include "G4Allocator.hh" // Include fr 53 #include "G4DynamicParticle.hh" // Include fr 54 #include "G4TrackStatus.hh" // Include fr 55 #include "G4TouchableHandle.hh" // Include fr 56 #include "G4VUserTrackInformation.hh" 57 #include "G4PhysicsModelCatalog.hh" 58 #include "G4Material.hh" 59 60 class G4Step; // Forward declaration 61 class G4MaterialCutsCouple; 62 class G4VAuxiliaryTrackInformation; 63 class G4VProcess; 64 65 class G4Track 66 { 67 public: 68 G4Track(); 69 // Default constructor 70 G4Track(G4DynamicParticle* apValueDynamicP 71 G4double aValueTime, 72 const G4ThreeVector& aValuePositio 73 // Constructor - aValueTime is a global 74 75 G4Track(const G4Track&,G4bool copyTouchabl 76 // Copy Constructor - copies members oth 77 78 ~G4Track(); 79 // Destructor 80 81 inline void* operator new(std::size_t); 82 // Override "new" for "G4Allocator". 83 inline void operator delete(void* aTrack); 84 // Override "delete" for "G4Allocator". 85 86 G4Track& operator=(const G4Track&); 87 // Assignment operator 88 89 inline G4bool operator==(const G4Track&); 90 inline G4bool operator!=(const G4Track&); 91 // Equality operators 92 93 void CopyTrackInfo(const G4Track&, G4bool 94 // Copy information of the track (w/o tr 95 96 inline G4int GetTrackID() const; 97 inline void SetTrackID(const G4int aValue) 98 // Get/Set functions track ID 99 100 inline G4int GetParentID() const; 101 inline void SetParentID(const G4int aValue 102 103 inline const G4DynamicParticle* GetDynamic 104 // Dynamic particle 105 106 inline const G4ParticleDefinition* GetPart 107 // Particle definition 108 inline G4ParticleDefinition* GetDefinition 109 // Obsolete, for backwards compatibility 110 111 inline const G4ThreeVector& GetPosition() 112 inline void SetPosition(const G4ThreeVecto 113 // Position, time 114 115 inline G4double GetGlobalTime() const; 116 inline void SetGlobalTime(const G4double a 117 // Time since the event in which the tra 118 119 inline G4double GetLocalTime() const; 120 inline void SetLocalTime(const G4double aV 121 // Time since the current track is creat 122 123 inline G4double GetProperTime() const; 124 inline void SetProperTime(const G4double a 125 // Proper time of the current track 126 127 inline G4VPhysicalVolume* GetVolume() cons 128 inline G4VPhysicalVolume* GetNextVolume() 129 // Volume, material, touchable 130 131 inline G4Material* GetMaterial() const; 132 inline G4Material* GetNextMaterial() const 133 134 inline const G4MaterialCutsCouple* GetMate 135 inline const G4MaterialCutsCouple* GetNext 136 137 inline const G4VTouchable* GetTouchable() 138 inline const G4TouchableHandle& GetTouchab 139 inline void SetTouchableHandle(const G4Tou 140 141 inline const G4VTouchable* GetNextTouchabl 142 inline const G4TouchableHandle& GetNextTou 143 inline void SetNextTouchableHandle(const G 144 145 inline const G4VTouchable* GetOriginToucha 146 inline const G4TouchableHandle& GetOriginT 147 inline void SetOriginTouchableHandle(const 148 149 inline G4double GetKineticEnergy() const; 150 inline G4double GetTotalEnergy() const; 151 inline void SetKineticEnergy(const G4doubl 152 // Energy 153 154 inline G4ThreeVector GetMomentum() const; 155 inline const G4ThreeVector& GetMomentumDir 156 inline void SetMomentumDirection(const G4T 157 // Momentum 158 159 inline G4double GetVelocity() const; 160 inline void SetVelocity(G4double val); 161 // Velocity 162 163 inline G4double CalculateVelocity() const; 164 G4double CalculateVelocityForOpticalPhoton 165 166 inline G4bool UseGivenVelocity() const; 167 inline void UseGivenVelocity(G4bool val); 168 169 inline const G4ThreeVector& GetPolarizatio 170 inline void SetPolarization(const G4ThreeV 171 // Polarization 172 173 inline G4TrackStatus GetTrackStatus() cons 174 inline void SetTrackStatus(const G4TrackSt 175 // Track status, flags for tracking 176 177 inline G4bool IsBelowThreshold() const; 178 inline void SetBelowThresholdFlag(G4bool v 179 // The flag of "BelowThreshold" is set t 180 // If this track energy is below thresho 181 // in this material is determined by the 182 183 inline G4bool IsGoodForTracking() const; 184 inline void SetGoodForTrackingFlag(G4bool 185 // The flag of "GoodForTracking" is set 186 // if this track should be tracked 187 // even if the energy is below threshold 188 189 inline G4double GetTrackLength() const; 190 inline void AddTrackLength(const G4double 191 // Accumulated track length 192 193 inline const G4Step* GetStep() const; 194 inline void SetStep(const G4Step* aValue); 195 // Step information 196 197 inline G4int GetCurrentStepNumber() const; 198 inline void IncrementCurrentStepNumber(); 199 200 inline G4double GetStepLength() const; 201 inline void SetStepLength(G4double value); 202 // Before the end of the AlongStepDoIt() 203 // the initial value which is determined 204 // proposed by a physics process. After 205 // it will be set equal to 'StepLength' 206 207 inline const G4ThreeVector& GetVertexPosit 208 inline void SetVertexPosition(const G4Thre 209 // Vertex (where this track was created) 210 211 inline const G4ThreeVector& GetVertexMomen 212 inline void SetVertexMomentumDirection(con 213 214 inline G4double GetVertexKineticEnergy() c 215 inline void SetVertexKineticEnergy(const G 216 217 inline const G4LogicalVolume* GetLogicalVo 218 inline void SetLogicalVolumeAtVertex(const 219 220 inline const G4VProcess* GetCreatorProcess 221 inline void SetCreatorProcess(const G4VPro 222 223 inline void SetCreatorModelID(const G4int 224 inline G4int GetCreatorModelID() const; 225 inline G4int GetCreatorModelIndex() const; 226 inline const G4String GetCreatorModelName( 227 // Identification of the physics model t 228 // each of the three information (ID, in 229 // (the model ID and its name are suppos 230 // code, whereas the index is meant for 231 232 inline const G4ParticleDefinition* GetPare 233 inline void SetParentResonanceDef(const G4 234 inline G4int GetParentResonanceID() const; 235 inline void SetParentResonanceID(const G4i 236 inline G4bool HasParentResonance() const; 237 inline G4int GetParentResonancePDGEncoding 238 inline G4String GetParentResonanceName() c 239 inline G4double GetParentResonanceMass() c 240 // Because short-lived resonances (e.g. 241 // do not have corresponding track objec 242 // by a resonance parent, these methods 243 // regarding this short-lived parent. 244 // The ID is a unique (integer) identifi 245 // corresponds to the rounded integer of 246 // in keV), which allows to know if two 247 // from the same parent resonance: this 248 // the parent-track-ID (fParentID) which 249 // ancestor which is not a short-lived r 250 // a corresponding track object). 251 // In the case of a track non originatin 252 // the above "Get" methods return, respe 253 // 0, "", 0. 254 255 inline G4double GetWeight() const; 256 inline void SetWeight(G4double aValue); 257 // Track weight; methods for manipulatin 258 259 inline G4VUserTrackInformation* GetUserInf 260 inline void SetUserInformation(G4VUserTrac 261 // User information 262 263 void SetAuxiliaryTrackInformation(G4int id 264 G4VAuxil 265 G4VAuxiliaryTrackInformation* GetAuxiliary 266 inline std::map<G4int, G4VAuxiliaryTrackIn 267 GetAuxiliaryTrackInformationMap() c 268 269 void RemoveAuxiliaryTrackInformation(G4int 270 void RemoveAuxiliaryTrackInformation(G4Str 271 // Note: G4VAuxiliaryTrackInformation ob 272 273 private: 274 275 void ClearAuxiliaryTrackInformation(); 276 277 // Member data 278 279 G4ThreeVector fPosition; 280 // Current positon 281 G4double fGlobalTime = 0.0; 282 // Time since the event is created 283 G4double fLocalTime = 0.0; 284 // Time since the track is created 285 G4double fTrackLength = 0.0; 286 // Accumulated track length 287 288 G4double fVelocity = 0.0; 289 290 G4TouchableHandle fpTouchable; 291 G4TouchableHandle fpNextTouchable; 292 G4TouchableHandle fpOriginTouchable; 293 // Touchable Handle 294 295 G4DynamicParticle* fpDynamicParticle = nul 296 mutable G4TrackStatus fTrackStatus = fAliv 297 298 G4double fStepLength = 0.0; 299 // Before the end of the AlongStepDoIt l 300 // Step length which is determined by th 301 // proposed by a physics process. After 302 // this will be set equal to 'StepLength 303 304 G4double fWeight = 1.0; 305 // This is a weight for this track 306 307 const G4Step* fpStep = nullptr; 308 309 G4ThreeVector fVtxPosition; 310 // (x,y,z) of the vertex 311 G4ThreeVector fVtxMomentumDirection; 312 // Momentum direction at the vertex 313 G4double fVtxKineticEnergy = 0.0; 314 // Kinetic energy at the vertex 315 const G4LogicalVolume* fpLVAtVertex = null 316 // Logical Volume at the vertex 317 const G4VProcess* fpCreatorProcess = nullp 318 // Process which created the track 319 320 mutable G4VUserTrackInformation* fpUserInf 321 322 mutable G4Material* prev_mat = nullptr; 323 mutable G4MaterialPropertyVector* groupvel 324 mutable G4double prev_velocity = 0.0; 325 mutable G4double prev_momentum = 0.0; 326 // cached values for CalculateVelocity 327 328 mutable std::map<G4int, G4VAuxiliaryTrackI 329 fpAuxiliaryTrackInformationMap = n 330 331 G4int fCurrentStepNumber = 0; 332 // Total steps number up to now 333 334 G4int fCreatorModelID = -1; 335 // ID of the physics model which created 336 337 const G4ParticleDefinition* fParentResonan 338 // Pointer to the particle definition of 339 // in the case that the track is produce 340 // (which does not have a corresponding 341 G4int fParentResonanceID = 0; 342 // Unique ID for the parent resonance, i 343 // is produced by a resonance parent, el 344 345 G4int fParentID = 0; 346 G4int fTrackID = 0; 347 348 G4bool fBelowThreshold = false; 349 // This flag is set to true if this trac 350 // threshold energy in this material det 351 G4bool fGoodForTracking = false; 352 // This flag is set by processes if this 353 // even if the energy is below threshold 354 355 G4bool is_OpticalPhoton = false; 356 357 G4bool useGivenVelocity = false; 358 // do not calculate velocity and just us 359 // if this flag is set 360 361 G4bool fCopyTouchables = true; 362 }; 363 364 #include "G4Track.icc" 365 366 #endif 367