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 // G4VParticleChange 27 // 28 // Class description: 29 // 30 // Abstract class for "Particle Change". 31 // 32 // The ParticleChange class contains the resul 33 // of a physics process. This includes final s 34 // (momentum, energy, etc) and secondary parti 35 // interaction. 36 // The tracking assumes that all the values of 37 // in global reference system, therefore all t 38 // transformations must have been already comp 39 // data-members of this class. 40 // 41 // This abstract class has following four virt 42 // virtual G4Step* UpdateStepForAtRest(G4S 43 // virtual G4Step* UpdateStepForAlongStep( 44 // virtual G4Step* UpdateStepForPostStep(G 45 // virtual void Initialize(const G4Track&) 46 // The UpdateStep methods return the pointer t 47 // the given Step information by using final s 48 // given by a physics process. 49 // User must add methods to keep the final sta 50 // class as well as implement UpdateStep() met 51 // 52 // The Initialize() methods are provided to re 53 // information and should be called by each pr 54 55 // Author: Hisaya Kurashige, 23 March 1998 56 // ------------------------------------------- 57 #ifndef G4VParticleChange_hh 58 #define G4VParticleChange_hh 1 59 60 #include <vector> 61 #include "globals.hh" 62 #include "G4ios.hh" 63 #include "G4TrackStatus.hh" 64 #include "G4SteppingControl.hh" 65 #include "G4Step.hh" 66 #include "G4Track.hh" 67 68 class G4VParticleChange 69 { 70 public: 71 72 G4VParticleChange(); 73 74 virtual ~G4VParticleChange() = default; 75 76 G4VParticleChange(const G4VParticleChange& 77 G4VParticleChange& operator=(const G4VPart 78 79 // --- the following methods are for updatin 80 81 virtual G4Step* UpdateStepForAtRest(G4Step 82 virtual G4Step* UpdateStepForAlongStep(G4S 83 virtual G4Step* UpdateStepForPostStep(G4St 84 // Return the pointer to the G4Step afte 85 // by using final state information of t 86 // process 87 88 virtual void Initialize(const G4Track&); 89 // This methods will be called by each p 90 // of DoIt() if necessary 91 92 // --- the following methods are for TruePat 93 94 inline G4double GetTrueStepLength() const; 95 inline void ProposeTrueStepLength(G4double 96 // Get/Propose theTrueStepLength 97 98 // --- the following methods are for LocalEn 99 100 inline G4double GetLocalEnergyDeposit() co 101 inline void ProposeLocalEnergyDeposit(G4do 102 // Get/Propose the locally deposited ene 103 104 // --- the following methods are for nonIoni 105 106 inline G4double GetNonIonizingEnergyDeposi 107 inline void ProposeNonIonizingEnergyDeposi 108 // Get/Propose the non-ionizing deposite 109 110 // --- the following methods are for TrackSt 111 112 inline G4TrackStatus GetTrackStatus() cons 113 inline void ProposeTrackStatus(G4TrackStat 114 // Get/Propose the final TrackStatus of 115 116 inline const G4Track* GetCurrentTrack() co 117 // Get primary track pointer 118 119 // --- the following methods are for managem 120 121 inline G4SteppingControl GetSteppingContro 122 inline void ProposeSteppingControl(G4Stepp 123 // Set/Propose a flag to control steppin 124 125 // --- the following methods are for managem 126 127 inline G4bool GetFirstStepInVolume() const 128 inline G4bool GetLastStepInVolume() const; 129 inline void ProposeFirstStepInVolume(G4boo 130 inline void ProposeLastStepInVolume(G4bool 131 132 // --- the following methods are for managem 133 134 inline void Clear(); 135 // Clear the contents of this objects 136 // This method should be called after th 137 // manager removes all secondaries in th 138 139 inline void SetNumberOfSecondaries(G4int t 140 // SetNumberOfSecondaries must be called 141 // in order to secure memory space for t 142 // This method resets theNumberOfSeconda 143 // (that will be incremented at every Ad 144 145 inline G4int GetNumberOfSecondaries() cons 146 // Returns the number of secondaries cur 147 148 inline G4Track* GetSecondary(G4int anIndex 149 // Returns the pointer to the generated 150 // which is specified by an Index, no ch 151 152 void AddSecondary(G4Track* aSecondary); 153 // Adds a secondary particle to theListO 154 155 // --- the following methods are for managem 156 157 inline G4double GetWeight() const; 158 inline G4double GetParentWeight() const; 159 // Get weight of the parent (i.e. curren 160 161 inline void ProposeWeight(G4double finalWe 162 inline void ProposeParentWeight(G4double f 163 // Propose new weight of the parent (i.e 164 // As for AlongStepDoIt, the parent weig 165 // in accumulated manner, i.e. - If two 166 // weight of W1 and W2 respectively for 167 // weight of W0 the final weight is set 168 169 inline void SetSecondaryWeightByProcess(G4 170 inline G4bool IsSecondaryWeightSetByProces 171 // In default (fSecondaryWeightByProcess 172 // the weight of secondary tracks will b 173 // If fSecondaryWeightByProcess flag is 174 // tracks will not be changed by the Par 175 // determine the secondary weight) 176 // NOTE: 177 // Make sure that only one process in Al 178 // parent weight; if several processes i 179 // the parent weight and add secondaties 180 // is set to false, secondary weights ma 181 182 void SetParentWeightByProcess(G4bool); 183 G4bool IsParentWeightSetByProcess() const; 184 // Obsolete 185 186 // --- Dump and debug methods --- 187 188 virtual void DumpInfo() const; 189 // Print out information 190 191 inline void SetVerboseLevel(G4int vLevel); 192 inline G4int GetVerboseLevel() const; 193 194 virtual G4bool CheckIt(const G4Track&); 195 // CheckIt method for general control in 196 197 inline void ClearDebugFlag(); 198 inline void SetDebugFlag(); 199 inline G4bool GetDebugFlag() const; 200 // CheckIt method is activated if debug 201 // and 'G4VERBOSE' is defined 202 203 protected: 204 205 G4Step* UpdateStepInfo(G4Step* Step); 206 // Update the G4Step specific attributes 207 // (i.e. SteppingControl, LocalEnergyDep 208 209 inline void InitializeLocalEnergyDeposit() 210 inline void InitializeSteppingControl(); 211 inline void InitializeParentWeight(const G 212 inline void InitializeStatusChange(const G 213 inline void InitializeSecondaries(); 214 inline void InitializeFromStep(const G4Ste 215 216 inline G4double ComputeBeta(G4double kinEn 217 218 G4bool CheckSecondary(G4Track&); 219 // CheckSecondary method is provided to 220 // in debug regime 221 222 G4double GetAccuracyForWarning() const; 223 G4double GetAccuracyForException() const; 224 225 protected: 226 227 static const G4double accuracyForWarning; 228 static const G4double accuracyForException 229 static const G4int maxError; 230 // accuracy levels 231 232 const G4Track* theCurrentTrack = nullptr; 233 234 G4TrackStatus theStatusChange = fAlive; 235 // The changed (final) track status of a 236 237 G4SteppingControl theSteppingControlFlag = 238 // A flag to control stepping manager be 239 240 G4double theLocalEnergyDeposit = 0.0; 241 // It represents the part of the energy 242 // or semi-continuous processes which is 243 // not generated because they would have 244 // threshold. 245 // The sum of the locally deposited ener 246 // coming from the continuous processes 247 // total energy loss localized in the cu 248 249 G4double theNonIonizingEnergyDeposit = 0.0 250 // Non-ionizing energu deposit is define 251 // energy deposit, which does not cause 252 253 G4double theTrueStepLength = 0.0; 254 // The value of "True" Step Length 255 256 G4double theParentWeight = 1.0; 257 // Weight ofparent track 258 259 G4double theParentGlobalTime = 0.0; 260 // Global time of the parent. 261 // This is used only for checking 262 263 G4int theNumberOfSecondaries = 0; 264 // The total number of secondaries produ 265 266 G4int theSizeOftheListOfSecondaries = 0; 267 // TheSizeOftheListOfSecondaries; 268 269 G4int verboseLevel = 1; 270 // The Verbose level 271 272 G4int nError = 0; 273 274 G4bool theFirstStepInVolume = false; 275 G4bool theLastStepInVolume = false; 276 // Flag for initial/last step 277 278 G4bool isParentWeightProposed = false; 279 // Flag for Weight of parent track 280 G4bool fSetSecondaryWeightByProcess = fals 281 // Flag for setting weight of secondarie 282 283 G4bool debugFlag = false; 284 285 std::vector<G4Track*> theListOfSecondaries 286 // The vector of secondaries 287 }; 288 289 #include "G4VParticleChange.icc" 290 291 #endif 292