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