Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/parameterisation/include/G4FastStep.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 ]

Diff markup

Differences between /processes/parameterisation/include/G4FastStep.hh (Version 11.3.0) and /processes/parameterisation/include/G4FastStep.hh (Version 11.2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 //                                                 27 //
 28 //                                                 28 //
 29 //--------------------------------------------     29 //---------------------------------------------------------------
 30 //                                                 30 //
 31 //  G4FastStep.hh                                  31 //  G4FastStep.hh
 32 //                                                 32 //
 33 //  Description:                                   33 //  Description:
 34 //    The G4FastStep class insures a friendly      34 //    The G4FastStep class insures a friendly interface
 35 //    to manage the primary/secondaries final      35 //    to manage the primary/secondaries final state for
 36 //    Fast Simulation Models. This includes fi     36 //    Fast Simulation Models. This includes final states of parent
 37 //    particle (normalized direction of the mo     37 //    particle (normalized direction of the momentum, energy, etc) and
 38 //    secondary particles generated by the par     38 //    secondary particles generated by the parameterisation.
 39 //                                                 39 //
 40 //    The G4FastStep class acts also as the G4     40 //    The G4FastStep class acts also as the G4ParticleChange
 41 //    for the Fast Simulation Process. So it i     41 //    for the Fast Simulation Process. So it inherites from
 42 //    the G4VParticleChange class and redefine     42 //    the G4VParticleChange class and redefines the four virtual
 43 //    methods :                                    43 //    methods :
 44 //                                                 44 //
 45 //     virtual G4Step* UpdateStepForAtRest(G4S     45 //     virtual G4Step* UpdateStepForAtRest(G4Step* Step);
 46 //     virtual G4Step* UpdateStepForAlongStep(     46 //     virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
 47 //     virtual G4Step* UpdateStepForPostStep(G     47 //     virtual G4Step* UpdateStepForPostStep(G4Step* Step);
 48 //     virtual void Initialize(const G4Track&)     48 //     virtual void Initialize(const G4Track&);
 49 //                                                 49 //
 50 //  History:                                       50 //  History:
 51 //    Oct 97: Verderi && MoraDeFreitas - First     51 //    Oct 97: Verderi && MoraDeFreitas - First Implementation.
 52 //    Dec 97: Verderi - ForceSteppingHitInvoca     52 //    Dec 97: Verderi - ForceSteppingHitInvocation(),
 53 //                      Set/GetTotalEnergyDepo     53 //                      Set/GetTotalEnergyDeposited() methods.
 54 //    Apr 98: MoraDeFreitas - G4FastStep becom     54 //    Apr 98: MoraDeFreitas - G4FastStep becomes the G4ParticleChange
 55 //                      for the Fast Simulatio     55 //                      for the Fast Simulation Process.
 56 //    Nov 04: Verderi - Add ProposeXXX methods     56 //    Nov 04: Verderi - Add ProposeXXX methods. SetXXX ones are kept
 57 //                      for backward compatibi     57 //                      for backward compatibility.
 58 //                                                 58 //
 59 //--------------------------------------------     59 //---------------------------------------------------------------
 60                                                    60 
 61 #ifndef G4FastStep_h                               61 #ifndef G4FastStep_h
 62 #define G4FastStep_h                               62 #define G4FastStep_h
 63                                                    63 
 64 #include "G4ParticleMomentum.hh"                   64 #include "G4ParticleMomentum.hh"
 65 #include "G4ThreeVector.hh"                        65 #include "G4ThreeVector.hh"
 66 #include "G4ios.hh"                                66 #include "G4ios.hh"
 67 #include "globals.hh"                              67 #include "globals.hh"
 68 class G4DynamicParticle;                           68 class G4DynamicParticle;
 69 #include "G4FastTrack.hh"                          69 #include "G4FastTrack.hh"
 70 #include "G4VParticleChange.hh"                    70 #include "G4VParticleChange.hh"
 71                                                    71 
 72 //-------------------------------------------      72 //-------------------------------------------
 73 //                                                 73 //
 74 //        G4FastStep class                         74 //        G4FastStep class
 75 //                                                 75 //
 76 //-------------------------------------------      76 //-------------------------------------------
 77                                                    77 
 78 // Class Description:                              78 // Class Description:
 79 //  The final state of the particles after par     79 //  The final state of the particles after parameterisation has to be returned through a G4FastStep
 80 //  reference. This final state is described a     80 //  reference. This final state is described as "requests" the tracking will apply after your
 81 //  parameterisation has been invoked.             81 //  parameterisation has been invoked.
 82 //                                                 82 //
 83 //  To facilitate the developers work, changes     83 //  To facilitate the developers work, changes of position/normalized direction of the
 84 //  momentum/polarization can be specified in      84 //  momentum/polarization can be specified in the local coordinate system of the envelope or in the
 85 //  global one.                                    85 //  global one.
 86 //  The default is local system coordinates.       86 //  The default is local system coordinates.
 87 //                                                 87 //
 88                                                    88 
 89 class G4FastStep : public G4VParticleChange        89 class G4FastStep : public G4VParticleChange
 90 {                                                  90 {
 91   public:  // Without description                  91   public:  // Without description
 92     //------------------------                     92     //------------------------
 93     // Constructor/Destructor                      93     // Constructor/Destructor
 94     //------------------------                     94     //------------------------
 95     G4FastStep() = default;                        95     G4FastStep() = default;
 96     ~G4FastStep() override = default;              96     ~G4FastStep() override = default;
 97                                                    97 
 98     G4FastStep(const G4FastStep& right) = dele     98     G4FastStep(const G4FastStep& right) = delete;
 99     G4FastStep& operator=(const G4FastStep& ri     99     G4FastStep& operator=(const G4FastStep& right) = delete;
100                                                   100 
101     // Set the kinetic energy of the primary t    101     // Set the kinetic energy of the primary to zero, and set the "fStopAndKill" signal
102     // used by the stepping.                      102     // used by the stepping.
103     void KillPrimaryTrack();                      103     void KillPrimaryTrack();
104                                                   104 
105     // -- Methods used to change the position,    105     // -- Methods used to change the position, normalized direction of
106     // the momentum, time etc... of the primar    106     // the momentum, time etc... of the primary.
107     // .. space and time:                         107     // .. space and time:
108                                                   108 
109     // Set the primary track final position.      109     // Set the primary track final position.
110     void ProposePrimaryTrackFinalPosition(cons    110     void ProposePrimaryTrackFinalPosition(const G4ThreeVector&, G4bool localCoordinates = true);
111                                                   111 
112     // Set the primary track final position --    112     // Set the primary track final position -- maintained for backward compatibility.
113     [[deprecated("use ProposePrimaryTrackFinal    113     [[deprecated("use ProposePrimaryTrackFinalPosition instead")]]
114     void SetPrimaryTrackFinalPosition(const G4    114     void SetPrimaryTrackFinalPosition(const G4ThreeVector&, G4bool localCoordinates = true);
115                                                   115 
116     // Set the primary track final time.          116     // Set the primary track final time.
117     void ProposePrimaryTrackFinalTime(G4double    117     void ProposePrimaryTrackFinalTime(G4double);
118                                                   118 
119     // Set the primary track final time -- mai    119     // Set the primary track final time -- maintained for backward compatibility.
120     [[deprecated("use ProposePrimaryTrackFinal    120     [[deprecated("use ProposePrimaryTrackFinalTime instead")]]
121     void SetPrimaryTrackFinalTime(G4double);      121     void SetPrimaryTrackFinalTime(G4double);
122                                                   122 
123     // Set the primary final track Proper Time    123     // Set the primary final track Proper Time.
124     void ProposePrimaryTrackFinalProperTime(G4    124     void ProposePrimaryTrackFinalProperTime(G4double);
125                                                   125 
126     // Set the primary final track Proper Time    126     // Set the primary final track Proper Time -- maintained for backward compatibility.
127     [[deprecated("use ProposePrimaryTrackPrope    127     [[deprecated("use ProposePrimaryTrackProperTime instead")]]
128     void SetPrimaryTrackFinalProperTime(G4doub    128     void SetPrimaryTrackFinalProperTime(G4double);
129                                                   129 
130     // .. dynamics:                               130     // .. dynamics:
131                                                   131 
132     // Be careful: the Track Final Momentum me    132     // Be careful: the Track Final Momentum means the normalized direction
133     // of the momentum!                           133     // of the momentum!
134     void ProposePrimaryTrackFinalMomentumDirec    134     void ProposePrimaryTrackFinalMomentumDirection(const G4ThreeVector&,
135                                                   135                                                    G4bool localCoordinates = true);
136                                                   136 
137     // Set the primary track final momentum --    137     // Set the primary track final momentum -- maintained for backward compatibility. Same as
138     // ProposePrimaryTrackMomentumDirection(..    138     // ProposePrimaryTrackMomentumDirection(...)
139     [[deprecated("use ProposePrimaryTrackMomen    139     [[deprecated("use ProposePrimaryTrackMomentumDirection instead")]]
140     void SetPrimaryTrackFinalMomentum(const G4    140     void SetPrimaryTrackFinalMomentum(const G4ThreeVector&, G4bool localCoordinates = true);
141                                                   141 
142     // Set the primary track final kinetic ene    142     // Set the primary track final kinetic energy.
143     void ProposePrimaryTrackFinalKineticEnergy    143     void ProposePrimaryTrackFinalKineticEnergy(G4double);
144                                                   144 
145     // Set the primary track final kinetic ene    145     // Set the primary track final kinetic energy-- maintained for backward compatibility.
146     [[deprecated("use ProposePrimaryTrackFinal    146     [[deprecated("use ProposePrimaryTrackFinalKineticEnergy instead")]]
147     void SetPrimaryTrackFinalKineticEnergy(G4d    147     void SetPrimaryTrackFinalKineticEnergy(G4double);
148                                                   148 
149     // Set the primary track final kinetic ene    149     // Set the primary track final kinetic energy and direction.
150     void ProposePrimaryTrackFinalKineticEnergy    150     void ProposePrimaryTrackFinalKineticEnergyAndDirection(G4double, const G4ThreeVector&,
151                                                   151                                                            G4bool localCoordinates = true);
152                                                   152 
153     // Set the primary track final kinetic ene    153     // Set the primary track final kinetic energy and direction -- maintained for backward
154     // compatibility.                             154     // compatibility.
155     [[deprecated("use ProposePrimaryTrackFinal    155     [[deprecated("use ProposePrimaryTrackFinalKineticEnergyAndDirection instead")]]
156     void SetPrimaryTrackFinalKineticEnergyAndD    156     void SetPrimaryTrackFinalKineticEnergyAndDirection(G4double, const G4ThreeVector&,
157                                                   157                                                        G4bool localCoordinates = true);
158                                                   158 
159     // Set the primary track final polarizatio    159     // Set the primary track final polarization.
160     void ProposePrimaryTrackFinalPolarization(    160     void ProposePrimaryTrackFinalPolarization(const G4ThreeVector&, G4bool localCoordinates = true);
161                                                   161 
162     // Set the primary track final polarizatio    162     // Set the primary track final polarization.
163     [[deprecated("use ProposePrimaryTrackFinal    163     [[deprecated("use ProposePrimaryTrackFinalPolarization instead")]]
164     void SetPrimaryTrackFinalPolarization(cons    164     void SetPrimaryTrackFinalPolarization(const G4ThreeVector&, G4bool localCoordinates = true);
165                                                   165 
166     // Set the true path length of the primary    166     // Set the true path length of the primary track during the step.
167     void ProposePrimaryTrackPathLength(G4doubl    167     void ProposePrimaryTrackPathLength(G4double);
168                                                   168 
169     // Set the true path length of the primary    169     // Set the true path length of the primary track during the step -- maintained for backward
170     // compatibility.                             170     // compatibility.
171     [[deprecated("use ProposePrimaryTrackPathL    171     [[deprecated("use ProposePrimaryTrackPathLength instead")]]
172     void SetPrimaryTrackPathLength(G4double);     172     void SetPrimaryTrackPathLength(G4double);
173                                                   173 
174     // Set the weight applied for event biasin    174     // Set the weight applied for event biasing mechanism.
175     void ProposePrimaryTrackFinalEventBiasingW    175     void ProposePrimaryTrackFinalEventBiasingWeight(G4double);
176                                                   176 
177     // Set the weight applied for event biasin    177     // Set the weight applied for event biasing mechanism -- kept for backward compatibility.
178     [[deprecated("use ProposePrimaryTrackFinal    178     [[deprecated("use ProposePrimaryTrackFinalEventBiasingWeight instead")]]
179     void SetPrimaryTrackFinalEventBiasingWeigh    179     void SetPrimaryTrackFinalEventBiasingWeight(G4double);
180                                                   180 
181     // ------------------------------             181     // ------------------------------
182     // -- Management of secondaries:              182     // -- Management of secondaries:
183     // ------------------------------             183     // ------------------------------
184                                                   184 
185     // ---------------------------------------    185     // ----------------------------------------------------
186     // -- The creation of secondaries is Done     186     // -- The creation of secondaries is Done in two steps:
187     // --      1) Give the total number of sec    187     // --      1) Give the total number of secondaries
188     // --         that the FastStep returns       188     // --         that the FastStep returns
189     // --         to the tracking using:          189     // --         to the tracking using:
190     // --         SetNumberOfSecondaryTracks()    190     // --         SetNumberOfSecondaryTracks()
191     // --                                         191     // --
192     // --      2) Invoke the CreateSecondaryTr    192     // --      2) Invoke the CreateSecondaryTrack() method
193     // --         to create one secondary at e    193     // --         to create one secondary at each time.
194     // ---------------------------------------    194     // ----------------------------------------------------
195                                                   195 
196     // Set the total number of secondaries tha    196     // Set the total number of secondaries that will be created.
197     // -- Total Number of secondaries to be cr    197     // -- Total Number of secondaries to be created,
198     // -- (to be called first)                    198     // -- (to be called first)
199     void SetNumberOfSecondaryTracks(G4int);       199     void SetNumberOfSecondaryTracks(G4int);
200                                                   200 
201     // Returns the number of secondaries effec    201     // Returns the number of secondaries effectively stored.
202     // -- Number of secondaries effectively st    202     // -- Number of secondaries effectively stored:
203     // -- (incremented at each CreateSecondary    203     // -- (incremented at each CreateSecondaryTrack()
204     // -- call)                                   204     // -- call)
205     G4int GetNumberOfSecondaryTracks();           205     G4int GetNumberOfSecondaryTracks();
206                                                   206 
207     // -- Create a secondary: the arguments ar    207     // -- Create a secondary: the arguments are:
208     // --     * G4DynamicsParticle: see header    208     // --     * G4DynamicsParticle: see header file, many constructors exist
209     // --                           (allow to     209     // --                           (allow to set particle type + energy +
210     // -- the normalized direction of momentum    210     // -- the normalized direction of momentum...)
211     // --     * G4ThreeVector     : Polarizati    211     // --     * G4ThreeVector     : Polarization (not in G4ParticleChange constructor)
212     // --     * G4ThreeVector     : Position      212     // --     * G4ThreeVector     : Position
213     // --     * G4double          : Time          213     // --     * G4double          : Time
214     // --     * G4bool            : says if Po    214     // --     * G4bool            : says if Position/Momentum are given in the
215     // --                           local coor    215     // --                           local coordinate system (true by default)
216     // -- Returned value: pointer to the track    216     // -- Returned value: pointer to the track created.
217     G4Track* CreateSecondaryTrack(const G4Dyna    217     G4Track* CreateSecondaryTrack(const G4DynamicParticle&, G4ThreeVector, G4ThreeVector, G4double,
218                                   G4bool local    218                                   G4bool localCoordinates = true);
219                                                   219 
220     //-- Create a secondary: the difference wi    220     //-- Create a secondary: the difference with he above declaration
221     //-- is that the Polarization is not given    221     //-- is that the Polarization is not given and is assumed already set
222     //-- in the G4DynamicParticle.                222     //-- in the G4DynamicParticle.
223     //-- Returned value: pointer to the track     223     //-- Returned value: pointer to the track created
224     G4Track* CreateSecondaryTrack(const G4Dyna    224     G4Track* CreateSecondaryTrack(const G4DynamicParticle&, G4ThreeVector, G4double,
225                                   G4bool local    225                                   G4bool localCoordinates = true);
226                                                   226 
227     // Returns a pointer on the i-th secondary    227     // Returns a pointer on the i-th secondary track created.
228     G4Track* GetSecondaryTrack(G4int);            228     G4Track* GetSecondaryTrack(G4int);
229                                                   229 
230     //----------------------------------------    230     //------------------------------------------------
231     //                                            231     //
232     //   Total energy deposit in the "fast Ste    232     //   Total energy deposit in the "fast Step"
233     //   (a default should be provided in futu    233     //   (a default should be provided in future,
234     //    which can be:                           234     //    which can be:
235     //      delta energy of primary -             235     //      delta energy of primary -
236     //      energy of the secondaries)            236     //      energy of the secondaries)
237     //   This allow the user to Store a consis    237     //   This allow the user to Store a consistent
238     //   information in the G4Trajectory.         238     //   information in the G4Trajectory.
239     //                                            239     //
240     //----------------------------------------    240     //------------------------------------------------
241     // Set the total energy deposited.            241     // Set the total energy deposited.
242     void ProposeTotalEnergyDeposited(G4double     242     void ProposeTotalEnergyDeposited(G4double anEnergyPart);
243                                                   243 
244     // Set the total energy deposited -- kept     244     // Set the total energy deposited -- kept for backward compatibility.
245     // It should be the delta energy of primar    245     // It should be the delta energy of primary less the energy of the secondaries.
246     [[deprecated("use ProposeTotalEnergyDeposi    246     [[deprecated("use ProposeTotalEnergyDeposited instead")]]
247     void SetTotalEnergyDeposited(G4double anEn    247     void SetTotalEnergyDeposited(G4double anEnergyPart);
248                                                   248 
249     // Returns the total energy deposited.        249     // Returns the total energy deposited.
250     G4double GetTotalEnergyDeposited() const;     250     G4double GetTotalEnergyDeposited() const;
251                                                   251 
252     // Control of the stepping manager Hit inv    252     // Control of the stepping manager Hit invocation.
253     //                                            253     //
254     // In a usual parameterisation, the contro    254     // In a usual parameterisation, the control of the hits production is under the user
255     // responsability in his G4VFastSimulation    255     // responsability in his G4VFastSimulationModel (he generally produces several hits at once.)
256     //                                            256     //
257     // However, in the particular case the G4F    257     // However, in the particular case the G4FastSimulation user's model acts as the physics
258     // replacement only (ie replaces all the *    258     // replacement only (ie replaces all the ***DoIt() and leads to the construction of a meaningful
259     // G4Step), the user can delegate to the G    259     // G4Step), the user can delegate to the G4SteppingManager the responsability to invoke
260     // the Hit()method of the current sensitiv    260     // the Hit()method of the current sensitive if any.
261     //                                            261     //
262     // By default, the G4SteppingManager is as    262     // By default, the G4SteppingManager is asked to NOT invoke this Hit() method when
263     // parameterisation is invoked.               263     // parameterisation is invoked.
264     void ForceSteppingHitInvocation();            264     void ForceSteppingHitInvocation();
265                                                   265 
266     // =======================================    266     // ===============================================
267     // Stepping interface.                        267     // Stepping interface.
268     // =======================================    268     // ===============================================
269     // --- the following methods are for updat    269     // --- the following methods are for updating G4Step -----
270     // Return the pointer to the G4Step after     270     // Return the pointer to the G4Step after updating the Step information
271     // by using final state information of the    271     // by using final state information of the track given by a Model.
272     //                                            272     //
273     // The Fast Simulation Mechanism doesn't c    273     // The Fast Simulation Mechanism doesn't change the track's final
274     // state on the AlongDoIt loop, so the def    274     // state on the AlongDoIt loop, so the default one all we need.
275     // virtual G4Step* UpdateStepForAlongStep(    275     // virtual G4Step* UpdateStepForAlongStep(G4Step* Step);
276                                                   276 
277     G4Step* UpdateStepForAtRest(G4Step* Step)     277     G4Step* UpdateStepForAtRest(G4Step* Step) override;
278     G4Step* UpdateStepForPostStep(G4Step* Step    278     G4Step* UpdateStepForPostStep(G4Step* Step) override;
279                                                   279 
280     // A Model gives the final state of the pa    280     // A Model gives the final state of the particle
281     // based on information of G4FastTrack. So    281     // based on information of G4FastTrack. So the
282     // Initialize method is an interface to th    282     // Initialize method is an interface to the
283     // G4FastSimulationManager to Initialize t    283     // G4FastSimulationManager to Initialize the
284     // G4FastStep.                                284     // G4FastStep.
285                                                   285 
286     void Initialize(const G4FastTrack&);          286     void Initialize(const G4FastTrack&);
287                                                   287 
288     // for Debug                                  288     // for Debug
289     void DumpInfo() const override;               289     void DumpInfo() const override;
290     G4bool CheckIt(const G4Track&) override;      290     G4bool CheckIt(const G4Track&) override;
291                                                   291 
292   private:                                        292   private:
293     //========================================    293     //===================================================
294     // Private Internal methods (implementatio    294     // Private Internal methods (implementation).
295     //========================================    295     //===================================================
296                                                   296 
297     // G4FastStep should never be Initialized     297     // G4FastStep should never be Initialized in this way
298     // but we must define it to avoid compiler    298     // but we must define it to avoid compiler warnings.
299     void Initialize(const G4Track&) override;     299     void Initialize(const G4Track&) override;
300                                                   300 
301     //  -- Utility functions --                   301     //  -- Utility functions --
302     //--- methods to keep information of the f    302     //--- methods to keep information of the final state--
303     //  IMPORTANT NOTE: Although the name of t    303     //  IMPORTANT NOTE: Although the name of the class and methods are
304     //   "Change", what it stores (and returns    304     //   "Change", what it stores (and returns in get) are the "FINAL"
305     //   values of the Position, the normalize    305     //   values of the Position, the normalized direction of Momentum,
306     //   etc.                                     306     //   etc.
307                                                   307 
308     // Set theMomentumChange vector: it is the    308     // Set theMomentumChange vector: it is the final unitary momentum
309     // direction.                                 309     // direction.
310     void SetMomentumChange(G4double Px, G4doub    310     void SetMomentumChange(G4double Px, G4double Py, G4double Pz);
311     void SetMomentumChange(const G4ThreeVector    311     void SetMomentumChange(const G4ThreeVector& Pfinal);
312                                                   312 
313     //========================================    313     //=====================================================
314     // Data members.                              314     // Data members.
315     //========================================    315     //=====================================================
316     //  theMomentumChange is the vector contai    316     //  theMomentumChange is the vector containing the final momentum
317     //  direction after the invoked process. T    317     //  direction after the invoked process. The application of the change
318     //  of the momentum direction of the parti    318     //  of the momentum direction of the particle is not Done here.
319     //  The responsibility to apply the change    319     //  The responsibility to apply the change is up the entity
320     //  which invoked the process.                320     //  which invoked the process.
321     G4ParticleMomentum theMomentumChange;         321     G4ParticleMomentum theMomentumChange;
322                                                   322 
323     //  The changed (final) polarization of a     323     //  The changed (final) polarization of a given particle.
324     G4ThreeVector thePolarizationChange;          324     G4ThreeVector thePolarizationChange;
325                                                   325 
326     //  The final kinetic energy of the curren    326     //  The final kinetic energy of the current particle.
327     G4double theEnergyChange = 0.0;               327     G4double theEnergyChange = 0.0;
328                                                   328 
329     //  The changed (final) position of a give    329     //  The changed (final) position of a given particle.
330     G4ThreeVector thePositionChange;              330     G4ThreeVector thePositionChange;
331                                                   331 
332     //  The changed (final) global time of a g    332     //  The changed (final) global time of a given particle.
333     G4double theTimeChange = 0.0;                 333     G4double theTimeChange = 0.0;
334                                                   334 
335     //  The changed (final) proper time of a g    335     //  The changed (final) proper time of a given particle.
336     G4double theProperTimeChange = 0.0;           336     G4double theProperTimeChange = 0.0;
337                                                   337 
338     // The reference G4FastTrack                  338     // The reference G4FastTrack
339     const G4FastTrack* fFastTrack = nullptr;      339     const G4FastTrack* fFastTrack = nullptr;
340                                                   340 
341     // weight for event biasing mechanism:        341     // weight for event biasing mechanism:
342     G4double theWeightChange = 0.0;               342     G4double theWeightChange = 0.0;
343 };                                                343 };
344                                                   344 
345 //********************************************    345 //*******************************************************************
346 //                                                346 //
347 //  Inline functions                              347 //  Inline functions
348 //                                                348 //
349 //********************************************    349 //*******************************************************************
350                                                   350 
351 #include "G4FastStep.icc"                         351 #include "G4FastStep.icc"
352                                                   352 
353 #endif                                            353 #endif
354                                                   354