Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/track/include/G4VParticleChange.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 // G4VParticleChange
 27 //
 28 // Class description:
 29 //
 30 // Abstract class for "Particle Change".
 31 //
 32 // The ParticleChange class contains the results after invocation
 33 // of a physics process. This includes final states of parent particle
 34 // (momentum, energy, etc) and secondary particles generated by the
 35 // interaction.
 36 // The tracking assumes that all the values of energy and momentum are
 37 // in global reference system, therefore all the needed Lorentz
 38 // transformations must have been already computed when filling the
 39 // data-members of this class.
 40 //
 41 // This abstract class has following four virtual methods:
 42 //     virtual G4Step* UpdateStepForAtRest(G4Step* Step);
 43 //     virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
 44 //     virtual G4Step* UpdateStepForPostStep(G4Step* Step);
 45 //     virtual void Initialize(const G4Track&);
 46 // The UpdateStep methods return the pointer to the G4Step after updating
 47 // the given Step information by using final state information of the track
 48 // given by a physics process.
 49 // User must add methods to keep the final state information in the derived
 50 // class as well as implement UpdateStep() methods wished to use.
 51 //
 52 // The Initialize() methods are provided to refresh the final state
 53 // information and should be called by each process at the beginning of DoIt().
 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& right) = delete;
 77     G4VParticleChange& operator=(const G4VParticleChange& right) = delete;
 78 
 79   // --- the following methods are for updating G4Step ---
 80 
 81     virtual G4Step* UpdateStepForAtRest(G4Step* Step);
 82     virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
 83     virtual G4Step* UpdateStepForPostStep(G4Step* Step);
 84       // Return the pointer to the G4Step after updating the Step information
 85       // by using final state information of the track given by a physics
 86       // process
 87 
 88     virtual void Initialize(const G4Track&);
 89       // This methods will be called by each process at the beginning
 90       // of DoIt() if necessary
 91 
 92   // --- the following methods are for TruePathLength ---
 93 
 94     inline G4double GetTrueStepLength() const;
 95     inline void ProposeTrueStepLength(G4double truePathLength);
 96       // Get/Propose theTrueStepLength
 97 
 98   // --- the following methods are for LocalEnergyDeposit ---
 99 
100     inline G4double GetLocalEnergyDeposit() const;
101     inline void ProposeLocalEnergyDeposit(G4double anEnergyPart);
102       // Get/Propose the locally deposited energy
103 
104   // --- the following methods are for nonIonizingEnergyDeposit  ---
105 
106     inline G4double GetNonIonizingEnergyDeposit() const;
107     inline void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart);
108       // Get/Propose the non-ionizing deposited energy
109 
110   // --- the following methods are for TrackStatus ---
111 
112     inline G4TrackStatus GetTrackStatus() const;
113     inline void ProposeTrackStatus(G4TrackStatus status);
114       // Get/Propose the final TrackStatus of the current particle
115 
116     inline const G4Track* GetCurrentTrack() const;
117       // Get primary track pointer
118 
119   // --- the following methods are for management of SteppingControl ---
120 
121     inline G4SteppingControl GetSteppingControl() const;
122     inline void ProposeSteppingControl(G4SteppingControl StepControlFlag);
123       // Set/Propose a flag to control stepping manager behaviour
124 
125   // --- the following methods are for management of initial/last step
126 
127     inline G4bool GetFirstStepInVolume() const;
128     inline G4bool GetLastStepInVolume() const;
129     inline void ProposeFirstStepInVolume(G4bool flag);
130     inline void ProposeLastStepInVolume(G4bool flag);
131 
132   // --- the following methods are for management of secondaries ---
133 
134     inline void Clear();
135       // Clear the contents of this objects
136       // This method should be called after the Tracking(Stepping)
137       // manager removes all secondaries in theListOfSecondaries
138 
139     inline void SetNumberOfSecondaries(G4int totSecondaries);
140       // SetNumberOfSecondaries must be called just before AddSecondary()
141       // in order to secure memory space for theListOfSecondaries
142       // This method resets theNumberOfSecondaries to zero
143       // (that will be incremented at every AddSecondary() call)
144 
145     inline G4int GetNumberOfSecondaries() const;
146       // Returns the number of secondaries current stored in G4TrackFastVector
147 
148     inline G4Track* GetSecondary(G4int anIndex) const;
149       // Returns the pointer to the generated secondary particle,
150       // which is specified by an Index, no check on boundary is performed
151 
152     void AddSecondary(G4Track* aSecondary);
153       // Adds a secondary particle to theListOfSecondaries
154 
155   // --- the following methods are for management of weights ---
156 
157     inline G4double GetWeight() const;
158     inline G4double GetParentWeight() const;
159       // Get weight of the parent (i.e. current) track
160 
161     inline void ProposeWeight(G4double finalWeight);
162     inline void ProposeParentWeight(G4double finalWeight);
163       // Propose new weight of the parent (i.e. current) track
164       // As for AlongStepDoIt, the parent weight will be set
165       // in accumulated manner, i.e. - If two processes propose
166       // weight of W1 and W2 respectively for the track with initial
167       // weight of W0 the final weight is set to: (W1/W0) * (W2/W0) * W0
168 
169     inline void SetSecondaryWeightByProcess(G4bool);
170     inline G4bool IsSecondaryWeightSetByProcess() const;
171       // In default (fSecondaryWeightByProcess flag is false),
172       // the weight of secondary tracks will be set to the parent weight
173       // If fSecondaryWeightByProcess flag is true, the weight of secondary
174       // tracks will not be changed by the ParticleChange (i.e. the process
175       // determine the secondary weight)
176       // NOTE:
177       // Make sure that only one process in AlongStepDoIt() proposes the
178       // parent weight; if several processes in AlongStepDoIt() propose
179       // the parent weight and add secondaties with fSecondaryWeightByProcess
180       // is set to false, secondary weights may be wrong
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 debug regime
196 
197     inline void ClearDebugFlag();
198     inline void SetDebugFlag();
199     inline G4bool GetDebugFlag() const;
200       // CheckIt method is activated if debug flag is set
201       // and 'G4VERBOSE' is defined
202 
203   protected:
204 
205     G4Step* UpdateStepInfo(G4Step* Step);
206       // Update the G4Step specific attributes
207       // (i.e. SteppingControl, LocalEnergyDeposit, and TrueStepLength)
208 
209     inline void InitializeLocalEnergyDeposit();
210     inline void InitializeSteppingControl();
211     inline void InitializeParentWeight(const G4Track&);
212     inline void InitializeStatusChange(const G4Track&);
213     inline void InitializeSecondaries();
214     inline void InitializeFromStep(const G4Step*);
215 
216     inline G4double ComputeBeta(G4double kinEnergy); 
217 
218     G4bool CheckSecondary(G4Track&);
219       // CheckSecondary method is provided to control secondary track 
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 given particle
236 
237     G4SteppingControl theSteppingControlFlag = NormalCondition;
238       // A flag to control stepping manager behavior
239 
240     G4double theLocalEnergyDeposit = 0.0;
241       // It represents the part of the energy lost for discrete
242       // or semi-continuous processes which is due to secondaries
243       // not generated because they would have been below their cut
244       // threshold.
245       // The sum of the locally deposited energy + the delta-energy
246       // coming from the continuous processes gives the
247       // total energy loss localized in the current Step
248 
249     G4double theNonIonizingEnergyDeposit = 0.0;
250       // Non-ionizing energu deposit is defined as a part of local
251       // energy deposit, which does not cause ionization of atoms
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 produced by each process.
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 = false;
281       // Flag for setting weight of secondaries
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