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 9.3.p2)


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