20#include "BDSNavigatorPlacements.hh"
22#include "G4AffineTransform.hh"
23#include "G4Navigator.hh"
24#include "G4ThreeVector.hh"
32BDSNavigatorPlacements::BDSNavigatorPlacements():
33 globalToLocal(G4AffineTransform()),
34 localToGlobal(G4AffineTransform())
39BDSNavigatorPlacements::~BDSNavigatorPlacements()
49void BDSNavigatorPlacements::ResetNavigatorStates()
55 G4bool& foundAPlacementVolume)
const
58 if (!foundAPlacementVolume)
59 {
return G4ThreeVector();}
60 return globalToLocal.TransformPoint(globalPosition);
65 return globalToLocal.TransformPoint(globalPosition);
70 return localToGlobal.TransformAxis(localAxis);
75 G4ThreeVector globalB = localToGlobal.TransformAxis(localAxis.first);
76 G4ThreeVector globalE = localToGlobal.TransformAxis(localAxis.second);
77 return std::make_pair(globalB, globalE);
82 G4VPhysicalVolume* foundPVVolume =
navigator->LocateGlobalPointAndSetup(globalPosition);
85 globalToLocal =
navigator->GetGlobalToLocalTransform();
86 localToGlobal =
navigator->GetLocalToGlobalTransform();
static G4int numberOfInstances
G4bool InitialiseTransform(const G4ThreeVector &globalPosition) const
G4ThreeVector ConvertToLocalNoSetup(const G4ThreeVector &globalPosition) const
Similar to above function but does NOT initialise the transforms.
G4ThreeVector ConvertToLocal(const G4ThreeVector &globalPosition, G4bool &foundAPlacementVolume) const
G4ThreeVector ConvertAxisToGlobal(const G4ThreeVector &localAxis) const
static G4VPhysicalVolume * worldPV
Cache of world PV to test if we're getting the wrong volume for the transform.
static G4Navigator * navigator