ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4VParticleChange.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4VParticleChange.hh
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 // GEANT 4 class header file
31 //
32 //
33 // ------------------------------------------------------------
34 // Implemented for the new scheme 23 Mar. 1998 H.Kurahige
35 //
36 // Class Description
37 // This class is the abstract class for ParticleChange.
38 //-
39 // The ParticleChange class ontains the results after invocation
40 // of a physics process. This includes final states of parent
41 // particle (momentum, energy, etc) and secondary particles generated
42 // by the interaction.
43 // The tracking assumes that all the values of energy and
44 // momentum are in global reference system, therefore all the
45 // needed Lorentz transformations must have been already Done
46 // when filling the data-members of this class.
47 //-
48 //-
49 // This abstract class has following four virtual methods
50 // virtual G4Step* UpdateStepForAtRest(G4Step* Step);
51 // virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
52 // virtual G4Step* UpdateStepForPostStep(G4Step* Step);
53 // virtual void Initialize(const G4Track&);
54 // The UpdateStep methods return the pointer to the G4Step
55 // after updating the given Step information by using final state
56 // information of the track given by a physics process.
57 // User must add methods to keep the final state information
58 // in his derived class as well as implement UpdateStep methods
59 // which he want to use.
60 //-
61 // The Initialize methods is provided to refresh the final
62 // state information and should be called by each process
63 // at the beginning of DoIt.
64 //
65 // ------------------------------------------------------------
66 // Implement Event Biasing Scheme 9 Nov.,98 H.Kurashige
67 // add CheckIt 13 Apr.,99 H.Kurashige
68 // add accuracy leveles 5 May, 99 H.Kurashige
69 // add check secondaries 11 June, 03 H.Kurashige
70 // add new methods of ProposeXXX 08 May, 04 H.Kurashige
71 // remove obsolete methods of SetXXX 19 Sep, 04 H.Kurashige
72 // add flag for first/last step in volume 30 Oct. 2006 H.Kurashige
73 // add nonIonizingEnergyLoss 26 Mar 2007 H.Kurashige
74 // modify/fix bugs related to weight 17 Sep. 2011 H.Kurashige
75 // fix bugs related to weight 29 Apr. 2012 H.Kurashige
76 //
77 
78 #ifndef G4VParticleChange_h
79 #define G4VParticleChange_h 1
80 
81 #include "globals.hh"
82 #include "G4ios.hh"
83 #include <cmath>
84 
85 class G4Track;
86 class G4Step;
87 
88 #include "G4TrackFastVector.hh"
89 #include "G4TrackStatus.hh"
90 #include "G4SteppingControl.hh"
91 
92 
94 {
95  public:
96  // default constructor
98 
99  // destructor
100  virtual ~G4VParticleChange();
101 
102  // equal/unequal operator
104  G4bool operator!=(const G4VParticleChange &right) const;
105  // "equal" means that teo objects have the same pointer.
106 
107  protected:
108  // hide copy constructor and assignment operaor as protected
109  G4VParticleChange(const G4VParticleChange &right);
111 
112  public: // with description
113  // --- the following methods are for updating G4Step -----
114  virtual G4Step* UpdateStepForAtRest(G4Step* Step);
115  virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
116  virtual G4Step* UpdateStepForPostStep(G4Step* Step);
117  // Return the pointer to the G4Step after updating the Step information
118  // by using final state information of the track given by a physics
119  // process
120 
121  protected: // with description
122  G4Step* UpdateStepInfo(G4Step* Step);
123  // Update the G4Step specific attributes
124  // (i.e. SteppingControl, LocalEnergyDeposit, and TrueStepLength)
125 
126 
127  public: // with description
128  virtual void Initialize(const G4Track&);
129  // This methods will be called by each process at the beginning of DoIt
130  // if necessary.
131 
132  protected:
133  void InitializeTrueStepLength(const G4Track&);
135  void InitializeSteppingControl(const G4Track&);
136  void InitializeParentWeight(const G4Track&);
137  void InitializeParentGlobalTime(const G4Track&);
138 
139  void InitializeStatusChange(const G4Track&);
140  void InitializeSecondaries(const G4Track&);
142  // ------------------------------------------------------
143 
144  public: // with description
145  //---- the following methods are for TruePathLength ----
146  G4double GetTrueStepLength() const;
147  void ProposeTrueStepLength(G4double truePathLength);
148  // Get/Propose theTrueStepLength
149 
150  //---- the following methods are for LocalEnergyDeposit ----
152  void ProposeLocalEnergyDeposit(G4double anEnergyPart);
153  // Get/Propose the locally deposited energy
154 
155  //---- the following methods are for nonIonizingEnergyDeposit ----
157  void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart);
158  // Get/Propose the non-ionizing deposited energy
159 
160  //---- the following methods are for TrackStatus -----
162  void ProposeTrackStatus(G4TrackStatus status);
163  // Get/Propose the final TrackStatus of the current particle.
164  // ------------------------------------------------------
165 
166  //---- the following methods are for managements of SteppingControl --
168  void ProposeSteppingControl(G4SteppingControl StepControlFlag);
169  // Set/Propose a flag to control stepping manager behavier
170  // ------------------------------------------------------
171 
172  //---- the following methods are for managements of initial/last step
174  G4bool GetLastStepInVolume() const;
175  void ProposeFirstStepInVolume(G4bool flag);
176  void ProposeLastStepInVolume(G4bool flag);
177 
178  //---- the following methods are for managements of secondaries --
179  void Clear();
180  // Clear the contents of this objects
181  // This method should be called after the Tracking(Stepping)
182  // manager removes all secondaries in theListOfSecondaries
183 
184  void SetNumberOfSecondaries(G4int totSecondaries);
185  // SetNumberOfSecondaries must be called just before AddSecondary()
186  // in order to secure memory space for theListOfSecondaries
187  // This method resets theNumberOfSecondaries to 0
188  // (that will be incremented at every AddSecondary() call).
189 
191  // Returns the number of secondaries current stored in
192  // G4TrackFastVector.
193 
194  G4Track* GetSecondary(G4int anIndex) const;
195  // Returns the pointer to the generated secondary particle
196  // which is specified by an Index.
197 
198  void AddSecondary(G4Track* aSecondary);
199  // Add a secondary particle to theListOfSecondaries.
200  // ------------------------------------------------------
201 
202  G4double GetWeight() const;
203  G4double GetParentWeight() const ;
204  // Get weight of the parent (i.e. current) track
205  void ProposeWeight(G4double finalWeight);
206  void ProposeParentWeight(G4double finalWeight);
207  // Propse new weight of the parent (i.e. current) track
208  // As for AlongStepDoIt, the parent weight will be set
209  // in accumulated manner
210  // i.e.) If two processes propose weight of W1 and W2 respectively
211  // for the track with initial weight of W0
212  // the final weight is set to
213  // (W1/W0) * (W2/W0) * W0
214 
217  // In default (fSecondaryWeightByProcess flag is false),
218  // the weight of secondary tracks will be set to
219  // the parent weight
220  // If fSecondaryWeightByProcess flag is true,
221  // the weight of secondary tracks will not be changed
222  // by the ParticleChange
223  // (i.e. the process determine the secodary weight)
224  // NOTE:
225  // Make sure that only one processe in AlongStepDoIt
226  // proposes the parent weight,
227  // If several processes in AlongStepDoIt proposes
228  // the parent weight and add secondaties with
229  // fSecondaryWeightByProcess is set to false,
230  // secondary weights may be wrong
231 
234  // Obsolete
235 
236  virtual void DumpInfo() const;
237  // Print out information
238 
239  void SetVerboseLevel(G4int vLevel);
240  G4int GetVerboseLevel() const;
241 
242  protected:
243 
245  // The vector of secondaries.
246 
248  // The total number of secondaries produced by each process.
249 
251  // TheSizeOftheListOfSecondaries;
252 
254  // The changed (final) track status of a given particle.
255 
257  // a flag to control stepping manager behavior
258 
260  // It represents the part of the energy lost for discrete
261  // or semi-continuous processes which is due to secondaries
262  // not generated because they would have been below their cut
263  // threshold.
264  // The sum of the locally deposited energy + the delta-energy
265  // coming from the continuous processes gives the
266  // total energy loss localized in the current Step.
267 
269  // non-ionizing energu deposit is defined as
270  // a part of local energy deposit, which does not cause
271  // ionization of atoms
272 
274  // The value of "True" Step Length
275 
276 
279  // flag for initial/last step
280 
282  // Weight ofparent track
284  // flags for Weight ofparent track
286  // flag for setting weight of secondaries
287 
289  // global time of the parent.
290  // This is used only for checking
291 
293  // The Verbose level
294 
295  public: // with description
296  // CheckIt method is provided for debug
297  virtual G4bool CheckIt(const G4Track&);
298 
299  // CheckIt method is activated
300  // if debug flag is set and 'G4VERBOSE' is defined
301  void ClearDebugFlag();
302  void SetDebugFlag();
303  G4bool GetDebugFlag() const;
304 
305  protected:
306  // CheckSecondary method is provided for debug
308 
311 
312  protected:
314 
315  // accuracy levels
318 
319 
320 };
321 
322 #include "G4Step.hh"
323 #include "G4Track.hh"
324 #include "G4VParticleChange.icc"
325 
326 #endif