Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4Navigator.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// class G4Navigator
27//
28// Class description:
29//
30// A class for use by the tracking management, able to obtain/calculate
31// dynamic tracking time information such as the distance to the next volume,
32// or to find the physical volume containing a given point in the world
33// reference system. The navigator maintains a transformation history and
34// other information to optimise the tracking time performance.
35
36// - Created. Paul Kent, Jul 95/96
37// - Made Navigator Abstract G. Cosmo, Nov 2003
38// - Added check mode G. Cosmo, Mar 2004
39// - Zero step protections J.A. / G.C., Nov 2004
40// *********************************************************************
41
42#ifndef G4NAVIGATOR_HH
43#define G4NAVIGATOR_HH
44
45#include "geomdefs.hh"
46
47#include "G4ThreeVector.hh"
48#include "G4AffineTransform.hh"
49#include "G4RotationMatrix.hh"
50
51#include "G4LogicalVolume.hh" // Used in inline methods
52#include "G4GRSVolume.hh" // " "
53#include "G4GRSSolid.hh" // " "
54#include "G4TouchableHandle.hh" // " "
56
58#include "G4NormalNavigation.hh"
59#include "G4VoxelNavigation.hh"
64
65#include <iostream>
66
68
69#define ALTERNATIVE_VOXEL_NAV 1
70
72{
73 public: // with description
74
75 friend std::ostream& operator << (std::ostream &os, const G4Navigator &n);
76
78 // Constructor - initialisers and setup.
79
80 G4Navigator(const G4Navigator&) = delete;
82 // Copy constructor & assignment operator not allowed.
83
84 virtual ~G4Navigator();
85 // Destructor. No actions.
86
87 virtual G4double ComputeStep(const G4ThreeVector& pGlobalPoint,
88 const G4ThreeVector& pDirection,
89 const G4double pCurrentProposedStepLength,
90 G4double& pNewSafety);
91 // Calculate the distance to the next boundary intersected
92 // along the specified NORMALISED vector direction and
93 // from the specified point in the global coordinate
94 // system. LocateGlobalPointAndSetup or LocateGlobalPointWithinVolume
95 // must have been called with the same global point prior to this call.
96 // The isotropic distance to the nearest boundary is also
97 // calculated (usually an underestimate). The current
98 // proposed Step length is used to avoid intersection
99 // calculations: if it can be determined that the nearest
100 // boundary is >pCurrentProposedStepLength away, kInfinity
101 // is returned together with the computed isotropic safety
102 // distance. Geometry must be closed.
103
104 G4double CheckNextStep(const G4ThreeVector& pGlobalPoint,
105 const G4ThreeVector& pDirection,
106 const G4double pCurrentProposedStepLength,
107 G4double& pNewSafety);
108 // Same as above, but do not disturb the state of the Navigator.
109
110 virtual
112 const G4ThreeVector& direction,
113 const G4TouchableHistory& h);
114
115 // Resets the geometrical hierarchy and search for the volumes deepest
116 // in the hierarchy containing the point in the global coordinate space.
117 // The direction is used to check if a volume is entered.
118 // The search begin is the geometrical hierarchy at the location of the
119 // last located point, or the endpoint of the previous Step if
120 // SetGeometricallyLimitedStep() has been called immediately before.
121 //
122 // Important Note: In order to call this the geometry MUST be closed.
123
124 virtual
126 const G4ThreeVector* direction = nullptr,
127 const G4bool pRelativeSearch = true,
128 const G4bool ignoreDirection = true);
129 // Search the geometrical hierarchy for the volumes deepest in the hierarchy
130 // containing the point in the global coordinate space. Two main cases are:
131 // i) If pRelativeSearch=false it makes use of no previous/state
132 // information. Returns the physical volume containing the point,
133 // with all previous mothers correctly set up.
134 // ii) If pRelativeSearch is set to true, the search begin is the
135 // geometrical hierarchy at the location of the last located point,
136 // or the endpoint of the previous Step if SetGeometricallyLimitedStep()
137 // has been called immediately before.
138 // The direction is used (to check if a volume is entered) if either
139 // - the argument ignoreDirection is false, or
140 // - the Navigator has determined that it is on an edge shared by two or
141 // more volumes. (This is state information.)
142 //
143 // Important Note: In order to call this the geometry MUST be closed.
144
145 virtual
147 // Notify the Navigator that a track has moved to the new Global point
148 // 'position', that is known to be within the current safety.
149 // No check is performed to ensure that it is within the volume.
150 // This method can be called instead of LocateGlobalPointAndSetup ONLY if
151 // the caller is certain that the new global point (position) is inside the
152 // same volume as the previous position. Usually this can be guaranteed
153 // only if the point is within safety.
154
156 const G4ThreeVector& position,
157 const G4ThreeVector& direction,
158 G4TouchableHandle& oldTouchableToUpdate,
159 const G4bool RelativeSearch = true);
160 // First, search the geometrical hierarchy like the above method
161 // LocateGlobalPointAndSetup(). Then use the volume found and its
162 // navigation history to update the touchable.
163
165 const G4ThreeVector& position,
166 const G4ThreeVector& direction,
167 G4VTouchable* touchableToUpdate,
168 const G4bool RelativeSearch = true);
169 // First, search the geometrical hierarchy like the above method
170 // LocateGlobalPointAndSetup(). Then use the volume found and its
171 // navigation history to update the touchable.
172
174 const G4ThreeVector& position,
175 G4VTouchable* touchableToUpdate,
176 const G4bool RelativeSearch = true);
177 // Same as the method above but missing direction.
178
180 // Inform the navigator that the previous Step calculated
181 // by the geometry was taken in its entirety.
182
183 virtual G4double ComputeSafety(const G4ThreeVector& globalpoint,
184 const G4double pProposedMaxLength = DBL_MAX,
185 const G4bool keepState = true);
186 // Calculate the isotropic distance to the nearest boundary from the
187 // specified point in the global coordinate system.
188 // The globalpoint utilised must be within the current volume.
189 // The value returned is usually an underestimate.
190 // The proposed maximum length is used to avoid volume safety
191 // calculations. The geometry must be closed.
192 // To ensure minimum side effects from the call, keepState
193 // must be true.
194
196 // Return the current world (`topmost') volume.
197
198 inline void SetWorldVolume(G4VPhysicalVolume* pWorld);
199 // Set the world (`topmost') volume. This must be positioned at
200 // origin (0,0,0) and unrotated.
201
203 inline G4GRSSolid* CreateGRSSolid() const;
206 // `Touchable' creation methods: caller has deletion responsibility.
207
209 // Returns a reference counted handle to a touchable history.
210
213 G4bool* valid);
215 G4bool* valid);
216 // Return Exit Surface Normal and validity too.
217 // Can only be called if the Navigator's last Step has crossed a
218 // volume geometrical boundary.
219 // It returns the Normal to the surface pointing out of the volume that
220 // was left behind and/or into the volume that was entered.
221 // Convention:
222 // The *local* normal is in the coordinate system of the *final* volume.
223 // Restriction:
224 // Normals are not available for replica volumes (returns valid= false)
225 // These methods takes full care about how to calculate this normal,
226 // but if the surfaces are not convex it will return valid=false.
227
228 inline G4int GetVerboseLevel() const;
229 inline void SetVerboseLevel(G4int level);
230 // Get/Set Verbose(ness) level.
231 // [if level>0 && G4VERBOSE, printout can occur]
232
233 inline G4bool IsActive() const;
234 // Verify if the navigator is active.
235 inline void Activate(G4bool flag);
236 // Activate/inactivate the navigator.
237
239 // The purpose of this function is to inform the caller if the track is
240 // entering a daughter volume while exiting from the current volume.
241 // This method returns
242 // - True only in case 1) above, that is when the Step has caused
243 // the track to arrive at a boundary of a daughter.
244 // - False in cases 2), 3) and 4), i.e. in all other cases.
245 // This function is not guaranteed to work if SetGeometricallyLimitedStep()
246 // was not called when it should have been called.
248 // Verify if the step has exited the mother volume.
249
250 inline void CheckMode(G4bool mode);
251 // Run navigation in "check-mode", therefore using additional
252 // verifications and more strict correctness conditions.
253 // Is effective only with G4VERBOSE set.
254 inline G4bool IsCheckModeActive() const;
255 inline void SetPushVerbosity(G4bool mode);
256 // Set/unset verbosity for pushed tracks (default is true).
257
258 void PrintState() const;
259 // Print the internal state of the Navigator (for debugging).
260 // The level of detail is according to the verbosity.
261
264 // Obtain the transformations Global/Local (and inverse).
265 // Clients of these methods must copy the data if they need to keep it.
266
268 G4int dReplicaNo,
269 EVolume dVolumeType );
270 // Obtain mother to daughter transformation
271
272 inline void ResetStackAndState();
273 // Reset stack and minimum or navigator state machine necessary for reset
274 // as needed by LocalGlobalPointAndSetup.
275 // [Does not perform clears, resizes, or reset fLastLocatedPointLocal]
276
277 inline G4int SeverityOfZeroStepping( G4int* noZeroSteps ) const;
278 // Report on severity of error and number of zero steps,
279 // in case Navigator is stuck and is returning zero steps.
280 // Values: 1 (small problem), 5 (correcting),
281 // 9 (ready to abandon), 10 (abandoned)
282
284 // Return the local coordinate of the point in the reference system
285 // of its containing volume that was found by LocalGlobalPointAndSetup.
286 // The local coordinate of the last located track.
287
290 // Compute+return the local->global translation/rotation of current volume.
291
292 inline void EnableBestSafety( G4bool value = false );
293 // Enable best-possible evaluation of isotropic safety.
294
297 // Accessor & modifier for custom external navigation.
298
299 inline G4Navigator* Clone() const;
300 // Cloning feature for use in MT applications to clone
301 // navigator, including external sub-navigator.
302 // Client has responsibility for ownership of returned allocated pointer.
303
305 // Get endpoint of last step
306
307 void InformLastStep(G4double lastStep, G4bool entersDaughtVol, G4bool exitsMotherVol );
308 // Derived navigators which rely on LocateGlobalPointAndSetup
309 // need to inform size of step -- to maintain logic about
310 // arriving on boundary for challenging cases.
311 // Required in order to cope with multile trials at boundaries
312 // => Locate with use direction rather than simple, fast logic
313
314 protected: // with description
315
316 void SetSavedState();
317 // ( fValidExitNormal, fExitNormal, fExiting, fEntering,
318 // fBlockedPhysicalVolume, fBlockedReplicaNo, fLastStepWasZero);
319 // Extended to include:
320 // ( fLastLocatedPointLocal, fLocatedOutsideWorld;
321 // fEnteredDaughter, fExitedMother
322 // fPreviousSftOrigin, sPreviousSafety) Safety Sphere.
323
324 void RestoreSavedState();
325 // Copy aspects of the state, to enable a non-state changing
326 // call to ComputeStep().
327
328 virtual void ResetState();
329 // Utility method to reset the navigator state machine.
330
331 inline G4ThreeVector ComputeLocalPoint(const G4ThreeVector& rGlobPoint) const;
332 // Return position vector in local coordinate system, given a position
333 // vector in world coordinate system.
334
336 // Return the local direction of the specified vector in the reference
337 // system of the volume that was found by LocalGlobalPointAndSetup.
338 // The Local Coordinates of point in world coordinate system.
339
340 inline EVolume VolumeType(const G4VPhysicalVolume *pVol) const;
341 // Characterise `type' of volume - normal/replicated/parameterised.
342
344 // Characterise daughter of logical volume.
345
347 // Get regular structure ID of first daughter
348
349 virtual void SetupHierarchy();
350 // Renavigate & reset hierarchy described by current history
351 // o Reset volumes
352 // o Recompute transforms and/or solids of replicated/parameterised
353 // volumes.
354
356 // Utility method to trigger overlaps check on a volume with reported
357 // overlaps ordered by relevance. Used in ComputeStep() when loopings
358 // with zero step are detected.
359
360#ifdef ALTERNATIVE_VOXEL_NAV
361 public:
363 // Alternative navigator for voxel volumes -- for use in integrating
364 // VecGeom Navigation
365#endif
366 private:
367 inline G4VoxelNavigation& GetVoxelNavigator();
368
369 private:
370
371 void ComputeStepLog(const G4ThreeVector& pGlobalpoint,
372 G4double moveLenSq) const;
373 // Log and checks for steps larger than the tolerance
374
375 protected: // without description
376
378 // Cached tolerances.
379
380 //
381 // BEGIN State information
382 //
383
385 // Transformation and history of the current path
386 // through the geometrical hierarchy.
387
389 // Endpoint of last ComputeStep
390 // can be used for optimisation (e.g. when computing safety).
392 // Position of the end-point of the last call to ComputeStep
393 // in last Local coordinates.
394
396 // Verbose(ness) level [if > 0, printout can occur].
397
399 // A memory of whether in this Step a daughter volume is entered
400 // (set in Compute & Locate).
401 // After Compute: it expects to enter a daughter
402 // After Locate: it has entered a daughter
403
405 // A similar memory whether the Step exited current "mother" volume
406 // completely, not entering daughter.
407
409 // Set true if last Step was limited by geometry.
410
411 private:
412
413 G4ThreeVector fLastLocatedPointLocal;
414 // Position of the last located point relative to its containing volume.
415 // This is coupled with the bool member fLocatedOutsideWorld;
416
417 G4ThreeVector fExitNormal; // Leaving volume normal, in the
418 // volume containing the exited
419 // volume's coordinate system
420 // This is closely coupled with G4bool fValidExitNormal - which
421 // signals whether we have a (valid) normal for volume we're leaving
422
423 G4ThreeVector fGrandMotherExitNormal; // Leaving volume normal, in its
424 // own coordinate system
425 G4ThreeVector fExitNormalGlobalFrame; // Leaving volume normal, in the
426 // global coordinate system
427
428 G4ThreeVector fPreviousSftOrigin;
429 G4double fPreviousSafety;
430 // Memory of last safety origin & value. Used in ComputeStep to ensure
431 // that origin of current Step is in the same volume as the point of the
432 // last relocation
433
434 G4VPhysicalVolume* fLastMotherPhys = nullptr;
435 // Memory of the mother volume during previous step.
436 // Intended use: inform user in case of stuck track.
437
438 G4VPhysicalVolume* fBlockedPhysicalVolume;
439 G4int fBlockedReplicaNo;
440 // Identifies the volume and copy / replica number that is
441 // blocked (after exiting -- because the exit direction is along the exit normal)
442 // or a candidate for entry (after compute step.)
443
444 // Count zero steps - as one or two can occur due to changing momentum at
445 // a boundary or at an edge common between volumes
446 // - several are likely a problem in the geometry
447 // description or in the navigation
448 //
449 G4int fNumberZeroSteps;
450 // Number of preceding moves that were Zero. Reset to 0 after finite step
451 G4int fActionThreshold_NoZeroSteps = 10;
452 // After this many failed/zero steps, act (push etc)
453 G4int fAbandonThreshold_NoZeroSteps = 25;
454 // After this many failed/zero steps, abandon track
455
456 G4bool fActive = false;
457 // States if the navigator is activated or not.
458
459 G4bool fLastTriedStepComputation = false;
460 // Whether ComputeStep was called since the last call to a Locate method
461 // Uses: - distinguish parts of state which differ before/after calls
462 // to ComputeStep or one of the Locate methods;
463 // - avoid two consecutive calls to compute-step (illegal).
464
465 G4bool fEntering,fExiting;
466 // Entering/Exiting volumes blocking/setup
467 // o If exiting
468 // volume ptr & replica number (set & used by Locate..())
469 // used for blocking on redescent of geometry
470 // o If entering
471 // volume ptr & replica number (set by ComputeStep(),used by
472 // Locate..()) of volume for `automatic' entry
473
474 G4bool fValidExitNormal; // Set true if have leaving volume normal
475 G4bool fLastStepWasZero;
476 // Whether the last ComputeStep moved Zero. Used to check for edges.
477 G4bool fLocatedOnEdge;
478 // Whether the Navigator has detected an edge
479 G4bool fLocatedOutsideWorld;
480 // Whether the last call to Locate methods left the world
481
482 G4bool fChangedGrandMotherRefFrame; // Whether frame is changed
483 G4bool fCalculatedExitNormal; // Has it been computed since
484 // the last call to ComputeStep
485 // Covers both Global and GrandMother
486 //
487 // END State information
488 //
489
490 // Optional State information (created/used as needed)
491 //
492
493 // Save key state information (NOT the navigation history stack)
494 //
495 struct G4SaveNavigatorState
496 {
497 G4ThreeVector sExitNormal;
498 G4bool sValidExitNormal;
499 G4bool sEntering, sExiting;
500 G4VPhysicalVolume* spBlockedPhysicalVolume;
501 G4int sBlockedReplicaNo;
502 G4int sLastStepWasZero;
503 G4bool sWasLimitedByGeometry;
504
505 // Potentially relevant
506 //
507 G4bool sLocatedOutsideWorld;
508 G4ThreeVector sLastLocatedPointLocal;
509 G4bool sEnteredDaughter, sExitedMother;
510 G4ThreeVector sPreviousSftOrigin;
511 G4double sPreviousSafety;
512 } fSaveState;
513
514private:
515 // BEGIN -- Tracking Invariants
516 // ===========================================
517 G4VPhysicalVolume* fTopPhysical = nullptr;
518 // A link to the topmost physical volume in the detector.
519 // Must be positioned at the origin and unrotated.
520
521 // Helpers/Utility classes
522 //
523 G4NormalNavigation fnormalNav;
524#ifdef ALTERNATIVE_VOXEL_NAV
525 G4VoxelNavigation* fpvoxelNav;
526#else
527 G4VoxelNavigation fvoxelNav;
528#endif
530 G4ReplicaNavigation freplicaNav;
531 G4RegularNavigation fregularNav;
532 G4VExternalNavigation* fpExternalNav = nullptr;
533 G4VoxelSafety* fpVoxelSafety;
534
535 // Utility information
536 //
537 G4bool fCheck = false;
538 // Check-mode flag [if true, more strict checks are performed].
539 G4bool fPushed = false, fWarnPush = true;
540 // Push flags [if true, means a stuck particle has been pushed].
541
542 // End -- Tracking Invariants
543};
544
545#include "G4Navigator.icc"
546
547#endif
548
549
550// NOTES:
551//
552// The following methods provide detailed information when a Step has
553// arrived at a geometrical boundary. They distinguish between the different
554// causes that can result in the track leaving its current volume.
555//
556// Four cases are possible:
557//
558// 1) The particle has reached a boundary of a daughter of the current volume:
559// (this could cause the relocation to enter the daughter itself
560// or a potential granddaughter or further descendant)
561//
562// 2) The particle has reached a boundary of the current
563// volume, exiting into a mother (regardless the level
564// at which it is located in the tree):
565//
566// 3) The particle has reached a boundary of the current
567// volume, exiting into a volume which is not in its
568// parental hierarchy:
569//
570// 4) The particle is not on a boundary between volumes:
571// the function returns an exception, and the caller is
572// reccomended to compare the G4touchables associated
573// to the preStepPoint and postStepPoint to handle this case.
574//
575// G4bool EnteredDaughterVolume()
576// G4bool IsExitNormalValid()
577// G4ThreeVector GetLocalExitNormal()
578//
579// The expected usefulness of these methods is to allow the caller to
580// determine how to compute the surface normal at the volume boundary. The two
581// possibilities are to obtain the normal from:
582//
583// i) the solid associated with the volume of the initial point of the Step.
584// This is valid for cases 2 and 3.
585// (Note that the initial point is generally the PreStepPoint of a Step).
586// or
587//
588// ii) the solid of the final point, ie of the volume after the relocation.
589// This is valid for case 1.
590// (Note that the final point is generally the PreStepPoint of a Step).
591//
592// This way the caller can always get a valid normal, pointing outside
593// the solid for which it is computed, that can be used at his own
594// discretion.
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4double fMinStep
Definition: G4Navigator.hh:377
void RestoreSavedState()
Definition: G4Navigator.cc:702
void SetVerboseLevel(G4int level)
virtual void SetupHierarchy()
G4TouchableHistory * CreateTouchableHistory() const
void SetPushVerbosity(G4bool mode)
void LocateGlobalPointAndUpdateTouchable(const G4ThreeVector &position, G4VTouchable *touchableToUpdate, const G4bool RelativeSearch=true)
void SetGeometricallyLimitedStep()
G4ThreeVector fStepEndPoint
Definition: G4Navigator.hh:388
void SetExternalNavigation(G4VExternalNavigation *externalNav)
G4int GetVerboseLevel() const
G4bool fExitedMother
Definition: G4Navigator.hh:404
virtual void ResetState()
G4bool fEnteredDaughter
Definition: G4Navigator.hh:398
virtual G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4double pProposedMaxLength=DBL_MAX, const G4bool keepState=true)
EVolume VolumeType(const G4VPhysicalVolume *pVol) const
G4int fVerbose
Definition: G4Navigator.hh:395
G4bool IsActive() const
void Activate(G4bool flag)
G4VExternalNavigation * GetExternalNavigation() const
void CheckMode(G4bool mode)
G4GRSVolume * CreateGRSVolume() const
virtual void LocateGlobalPointWithinVolume(const G4ThreeVector &position)
Definition: G4Navigator.cc:600
G4Navigator(const G4Navigator &)=delete
G4ThreeVector fLastStepEndPointLocal
Definition: G4Navigator.hh:391
G4bool fWasLimitedByGeometry
Definition: G4Navigator.hh:408
virtual ~G4Navigator()
Definition: G4Navigator.cc:88
G4double fSqTol
Definition: G4Navigator.hh:377
G4bool CheckOverlapsIterative(G4VPhysicalVolume *vol)
void SetSavedState()
Definition: G4Navigator.cc:668
G4Navigator & operator=(const G4Navigator &)=delete
EVolume CharacteriseDaughters(const G4LogicalVolume *pLog) const
G4int SeverityOfZeroStepping(G4int *noZeroSteps) const
virtual G4ThreeVector GetGlobalExitNormal(const G4ThreeVector &point, G4bool *valid)
G4ThreeVector ComputeLocalPoint(const G4ThreeVector &rGlobPoint) const
void SetVoxelNavigation(G4VoxelNavigation *voxelNav)
virtual G4TouchableHistoryHandle CreateTouchableHistoryHandle() const
void PrintState() const
void LocateGlobalPointAndUpdateTouchableHandle(const G4ThreeVector &position, const G4ThreeVector &direction, G4TouchableHandle &oldTouchableToUpdate, const G4bool RelativeSearch=true)
G4ThreeVector ComputeLocalAxis(const G4ThreeVector &pVec) const
G4ThreeVector NetTranslation() const
G4double kCarTolerance
Definition: G4Navigator.hh:377
virtual G4ThreeVector GetLocalExitNormalAndCheck(const G4ThreeVector &point, G4bool *valid)
virtual G4ThreeVector GetLocalExitNormal(G4bool *valid)
const G4AffineTransform GetLocalToGlobalTransform() const
void InformLastStep(G4double lastStep, G4bool entersDaughtVol, G4bool exitsMotherVol)
G4RotationMatrix NetRotation() const
virtual G4double ComputeStep(const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double pCurrentProposedStepLength, G4double &pNewSafety)
Definition: G4Navigator.cc:756
virtual G4VPhysicalVolume * LocateGlobalPointAndSetup(const G4ThreeVector &point, const G4ThreeVector *direction=nullptr, const G4bool pRelativeSearch=true, const G4bool ignoreDirection=true)
Definition: G4Navigator.cc:132
G4Navigator * Clone() const
void LocateGlobalPointAndUpdateTouchable(const G4ThreeVector &position, const G4ThreeVector &direction, G4VTouchable *touchableToUpdate, const G4bool RelativeSearch=true)
G4AffineTransform GetMotherToDaughterTransform(G4VPhysicalVolume *dVolume, G4int dReplicaNo, EVolume dVolumeType)
void ResetStackAndState()
G4GRSSolid * CreateGRSSolid() const
void SetWorldVolume(G4VPhysicalVolume *pWorld)
G4bool IsCheckModeActive() const
G4bool EnteredDaughterVolume() const
G4double CheckNextStep(const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double pCurrentProposedStepLength, G4double &pNewSafety)
virtual G4VPhysicalVolume * ResetHierarchyAndLocate(const G4ThreeVector &point, const G4ThreeVector &direction, const G4TouchableHistory &h)
Definition: G4Navigator.cc:102
G4bool ExitedMotherVolume() const
G4int GetDaughtersRegularStructureId(const G4LogicalVolume *pLv) const
G4ThreeVector GetLastStepEndPoint() const
Definition: G4Navigator.hh:304
friend std::ostream & operator<<(std::ostream &os, const G4Navigator &n)
G4VPhysicalVolume * GetWorldVolume() const
G4NavigationHistory fHistory
Definition: G4Navigator.hh:384
const G4AffineTransform & GetGlobalToLocalTransform() const
G4TouchableHistory * CreateTouchableHistory(const G4NavigationHistory *) const
void EnableBestSafety(G4bool value=false)
G4ThreeVector GetCurrentLocalCoordinate() const
EVolume
Definition: geomdefs.hh:83
#define DBL_MAX
Definition: templates.hh:62