Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ITSafetyHelper Class Reference

#include <G4ITSafetyHelper.hh>

+ Inheritance diagram for G4ITSafetyHelper:

Classes

class  State
 

Public Member Functions

 G4ITSafetyHelper ()
 
 ~G4ITSafetyHelper () override
 
G4double CheckNextStep (const G4ThreeVector &position, const G4ThreeVector &direction, const G4double currentMaxStep, G4double &newSafety)
 
G4double ComputeSafety (const G4ThreeVector &pGlobalPoint, G4double maxRadius=DBL_MAX)
 
void Locate (const G4ThreeVector &pGlobalPoint, const G4ThreeVector &direction)
 
void ReLocateWithinVolume (const G4ThreeVector &pGlobalPoint)
 
void EnableParallelNavigation (G4bool parallel)
 
void InitialiseNavigator ()
 
G4int SetVerboseLevel (G4int lev)
 
G4VPhysicalVolumeGetWorldVolume ()
 
void SetCurrentSafety (G4double val, const G4ThreeVector &pos)
 
void InitialiseHelper ()
 
- Public Member Functions inherited from G4TrackStateDependent< G4ITSafetyHelper >
 ~G4TrackStateDependent () override=default
 
virtual void SetTrackState (G4shared_ptr< StateType > state)
 
G4VTrackStateHandle PopTrackState () override
 
G4VTrackStateHandle GetTrackState () const override
 
virtual StateTypeHandle GetConcreteTrackState () const
 
void LoadTrackState (G4TrackStateManager &manager) override
 
void SaveTrackState (G4TrackStateManager &manager) override
 
void NewTrackState () override
 
virtual StateTypeHandle CreateTrackState () const
 
void ResetTrackState () override
 
- Public Member Functions inherited from G4VTrackStateDependent
 G4VTrackStateDependent ()=default
 
virtual ~G4VTrackStateDependent ()=default
 

Additional Inherited Members

- Public Types inherited from G4TrackStateDependent< G4ITSafetyHelper >
using ClassType
 
using StateType
 
using StateTypeHandle
 
- Protected Member Functions inherited from G4TrackStateDependent< G4ITSafetyHelper >
 G4TrackStateDependent ()
 
- Protected Attributes inherited from G4TrackStateDependent< G4ITSafetyHelper >
StateTypeHandle fpTrackState
 

Detailed Description

Definition at line 54 of file G4ITSafetyHelper.hh.

Constructor & Destructor Documentation

◆ G4ITSafetyHelper()

G4ITSafetyHelper::G4ITSafetyHelper ( )

Definition at line 41 of file G4ITSafetyHelper.cc.

42{
43 fpPathFinder = nullptr; // Cannot initialise this yet - a loop results
44
45 // Initialization of the Navigator pointer is postponed, and must
46 // be undertaken by another class calling InitialiseHelper()
47 //
48 fpMassNavigator = nullptr;
49 fMassNavigatorId = -1;
50}

◆ ~G4ITSafetyHelper()

G4ITSafetyHelper::~G4ITSafetyHelper ( )
overridedefault

Member Function Documentation

◆ CheckNextStep()

G4double G4ITSafetyHelper::CheckNextStep ( const G4ThreeVector & position,
const G4ThreeVector & direction,
const G4double currentMaxStep,
G4double & newSafety )

Definition at line 89 of file G4ITSafetyHelper.cc.

93{
94 // Distance in the Mass geometry
95 //
96 G4double linstep = fpMassNavigator->CheckNextStep(position, direction,
97 currentMaxStep, newSafety);
98 fpTrackState->fLastSafetyPosition = position;
99 fpTrackState->fLastSafety = newSafety;
100
101 // TODO: Can replace this with a call to PathFinder
102 // giving id of Mass Geometry --> this avoid doing the work twice
103
104 return linstep;
105}
double G4double
Definition G4Types.hh:83

Referenced by G4DNABrownianTransportation::ComputeGeomLimit().

◆ ComputeSafety()

G4double G4ITSafetyHelper::ComputeSafety ( const G4ThreeVector & pGlobalPoint,
G4double maxRadius = DBL_MAX )

Definition at line 107 of file G4ITSafetyHelper.cc.

109{
110 G4double newSafety;
111
112 // Only recompute (calling Navigator/PathFinder) if 'position'
113 // is *not* the safety location and has moved 'significantly'
114 //
115 G4double moveLengthSq = (position - fpTrackState->fLastSafetyPosition).mag2();
116 if ((moveLengthSq > 0.0))
117 {
118 if (!fUseParallelGeometries)
119 {
120 // Safety for mass geometry
121 newSafety = fpMassNavigator->ComputeSafety(position, maxLength, true);
122 }
123 else
124 {
125 // Safety for all geometries
126 newSafety = fpPathFinder->ComputeSafety(position);
127 }
128
129 // We can only store a 'true' safety - one that was not restricted by maxLength
130 if (newSafety < maxLength)
131 {
132 fpTrackState->fLastSafety = newSafety;
133 fpTrackState->fLastSafetyPosition = position;
134 }
135 }
136 else
137 {
138 // return last value if position is not (significantly) changed
139 //
140 // G4double moveLength = 0;
141 // if( moveLengthSq > 0.0 ) { moveLength= std::sqrt(moveLengthSq); }
142 newSafety = fpTrackState->fLastSafety; // -moveLength;
143 }
144 return newSafety;
145}
G4double ComputeSafety(const G4ThreeVector &globalPoint)

◆ EnableParallelNavigation()

void G4ITSafetyHelper::EnableParallelNavigation ( G4bool parallel)
inline

◆ GetWorldVolume()

G4VPhysicalVolume * G4ITSafetyHelper::GetWorldVolume ( )
inline

Definition at line 153 of file G4ITSafetyHelper.hh.

154{
155 return fpMassNavigator->GetWorldVolume();
156}

Referenced by G4DNABrownianTransportation::ComputeGeomLimit().

◆ InitialiseHelper()

void G4ITSafetyHelper::InitialiseHelper ( )

Definition at line 76 of file G4ITSafetyHelper.cc.

77{
79 if (fFirstCall)
80 {
82 }
83 fFirstCall = false;
84}

Referenced by G4DNABrownianTransportation::BuildPhysicsTable(), G4ITTransportation::BuildPhysicsTable(), and G4ITPathFinder::PrepareNewTrack().

◆ InitialiseNavigator()

void G4ITSafetyHelper::InitialiseNavigator ( )

Definition at line 52 of file G4ITSafetyHelper.cc.

53{
54 fpPathFinder = G4PathFinder::GetInstance();
55
56 G4ITTransportationManager* pTransportMgr =
58
59 fpMassNavigator = pTransportMgr->GetNavigatorForTracking();
60
61 if(fpMassNavigator == nullptr) abort();
62
63 // Check
64 //
65 G4VPhysicalVolume* worldPV = fpMassNavigator->GetWorldVolume();
66 if (worldPV == nullptr)
67 {
68 G4Exception("G4ITSafetyHelper::InitialiseNavigator",
69 "InvalidNavigatorWorld", FatalException,
70 "Found that existing tracking Navigator has NULL world");
71 }
72
73 // fMassNavigatorId = pTransportMgr->ActivateNavigator( fpMassNavigator );
74}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
static G4ITTransportationManager * GetTransportationManager()
G4ITNavigator * GetNavigatorForTracking() const
static G4PathFinder * GetInstance()

Referenced by InitialiseHelper().

◆ Locate()

void G4ITSafetyHelper::Locate ( const G4ThreeVector & pGlobalPoint,
const G4ThreeVector & direction )

Definition at line 179 of file G4ITSafetyHelper.cc.

181{
182 if (!fUseParallelGeometries)
183 {
184 fpMassNavigator->LocateGlobalPointAndSetup(newPosition, &newDirection, true,
185 false);
186 }
187 else
188 {
189 fpPathFinder->Locate(newPosition, newDirection);
190 }
191}
void Locate(const G4ThreeVector &position, const G4ThreeVector &direction, G4bool relativeSearch=true)

◆ ReLocateWithinVolume()

void G4ITSafetyHelper::ReLocateWithinVolume ( const G4ThreeVector & pGlobalPoint)

Definition at line 147 of file G4ITSafetyHelper.cc.

148{
149#ifdef G4VERBOSE
150 if (fVerbose > 0)
151 {
152 // There is an opportunity - and need - to check whether the proposed move is safe
153 G4ThreeVector moveVec = newPosition - fpTrackState->fLastSafetyPosition;
154 if (moveVec.mag2() > sqr(fpTrackState->fLastSafety))
155 {
156 // A problem exists - we are proposing to move outside 'Safety Sphere'
158 ed << " Safety Sphere: Radius = " << fpTrackState->fLastSafety;
159 ed << " Center = " << fpTrackState->fLastSafetyPosition << G4endl;
160 ed << " New Location : Move = " << moveVec.mag2();
161 ed << " Position = " << newPosition << G4endl;
162 G4Exception("G4ITSafetyHelper::ReLocateWithinVolume", "GeomNav999",
164 "Unsafe Move> Asked to relocate beyond 'Safety sphere'.");
165 }
166 }
167#endif
168
169 if (!fUseParallelGeometries)
170 {
171 fpMassNavigator->LocateGlobalPointWithinVolume(newPosition);
172 }
173 else
174 {
175 fpPathFinder->ReLocate(newPosition);
176 }
177}
@ JustWarning
std::ostringstream G4ExceptionDescription
#define G4endl
Definition G4ios.hh:67
double mag2() const
void ReLocate(const G4ThreeVector &position)
T sqr(const T &x)
Definition templates.hh:128

◆ SetCurrentSafety()

void G4ITSafetyHelper::SetCurrentSafety ( G4double val,
const G4ThreeVector & pos )
inline

Definition at line 159 of file G4ITSafetyHelper.hh.

160{
161 fpTrackState->fLastSafety = val;
162 fpTrackState->fLastSafetyPosition = pos;
163}

Referenced by G4ITTransportation::AlongStepGetPhysicalInteractionLength().

◆ SetVerboseLevel()

G4int G4ITSafetyHelper::SetVerboseLevel ( G4int lev)
inline

Definition at line 97 of file G4ITSafetyHelper.hh.

98 { G4int oldlv= fVerbose; fVerbose= lev; return oldlv;}
int G4int
Definition G4Types.hh:85

The documentation for this class was generated from the following files: