65 const G4double currentProposedStepLength,
73 G4int &blockedReplicaNo)
79 G4double ourStep=currentProposedStepLength, motherSafety, ourSafety;
80 G4int localNoDaughters, sampleNo;
84 motherSolid = motherLogical->
GetSolid();
89 ourSafety = motherSafety;
104 if ( exiting&&validExitNormal )
106 if ( localDirection.
dot(exitNormal)>=kMinExitingNormalCosine )
110 blockedExitedVol =* pBlockedPhysical;
118 for ( sampleNo=localNoDaughters-1; sampleNo>=0; sampleNo--)
120 samplePhysical = motherLogical->
GetDaughter(sampleNo);
121 if ( samplePhysical!=blockedExitedVol )
138 if ( sampleSafety<ourSafety )
140 ourSafety=sampleSafety;
142 if ( sampleSafety<=ourStep )
152 sampleSafety, sampleStep);
155 if ( sampleStep<=ourStep )
157 ourStep = sampleStep;
160 *pBlockedPhysical = samplePhysical;
161 blockedReplicaNo = -1;
166 sampleDirection, localDirection, sampleSafety, sampleStep);
173 if ( currentProposedStepLength<ourSafety )
179 *pBlockedPhysical = 0;
186 if ( motherSafety<=ourStep )
197 motherStep, motherSafety);
201 if ( motherStep<=ourStep )
203 ourStep = motherStep;
206 if ( validExitNormal )
217 validExitNormal =
false;
221 newSafety = ourSafety;
237 G4int localNoDaughters, sampleNo;
241 motherSolid = motherLogical->
GetSolid();
246 ourSafety = motherSafety;
258 for ( sampleNo=localNoDaughters-1; sampleNo>=0; sampleNo-- )
260 samplePhysical = motherLogical->
GetDaughter(sampleNo);
270 if ( sampleSafety<ourSafety )
272 ourSafety = sampleSafety;
double dot(const Hep3Vector &) const
HepRotation inverse() const
G4VSolid * GetSolid() const
G4int GetNoDaughters() const
G4VPhysicalVolume * GetDaughter(const G4int i) const
G4VPhysicalVolume * GetTopVolume() const
void PreComputeStepLog(const G4VPhysicalVolume *motherPhysical, G4double motherSafety, const G4ThreeVector &localPoint) const
void PostComputeStepLog(const G4VSolid *motherSolid, const G4ThreeVector &localPoint, const G4ThreeVector &localDirection, G4double motherStep, G4double motherSafety) const
void PrintDaughterLog(const G4VSolid *sampleSolid, const G4ThreeVector &samplePoint, G4double sampleSafety, G4double sampleStep) const
void ComputeSafetyLog(const G4VSolid *solid, const G4ThreeVector &point, G4double safety, G4bool banner) const
void AlongComputeStepLog(const G4VSolid *sampleSolid, const G4ThreeVector &samplePoint, const G4ThreeVector &sampleDirection, const G4ThreeVector &localDirection, G4double sampleSafety, G4double sampleStep) const
G4double ComputeStep(const G4ThreeVector &localPoint, const G4ThreeVector &localDirection, const G4double currentProposedStepLength, G4double &newSafety, G4NavigationHistory &history, G4bool &validExitNormal, G4ThreeVector &exitNormal, G4bool &exiting, G4bool &entering, G4VPhysicalVolume *(*pBlockedPhysical), G4int &blockedReplicaNo)
G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4NavigationHistory &history, const G4double pMaxLength=DBL_MAX)
const G4RotationMatrix * GetRotation() const
G4LogicalVolume * GetLogicalVolume() const
const G4ThreeVector & GetTranslation() const
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0