66                                const G4double currentProposedStepLength,
 
   74                                      G4int& blockedReplicaNo)
 
   77                    *blockedExitedVol = 
nullptr;
 
   81  G4double ourStep = currentProposedStepLength, ourSafety;
 
   83  G4int localNoDaughters, sampleNo;
 
   84  G4bool motherValidExitNormal = 
false;
 
   87  motherPhysical = 
history.GetTopVolume();
 
   89  motherSolid    = motherLogical->
GetSolid();
 
   94  ourSafety = motherSafety; 
 
   99  if ( 
fCheck && ( (localNoDaughters>0) || (ourStep < motherSafety) )  )
 
  109  if ( exiting && validExitNormal )
 
  115      blockedExitedVol = (*pBlockedPhysical);
 
  133                                           &motherValidExitNormal,
 
  136    if( (motherStep >= 
kInfinity) || (motherStep < 0.0) )
 
  141      ourStep = motherStep = 0.0;
 
  147      validExitNormal = motherValidExitNormal;
 
  148      exitNormal = motherExitNormal;
 
  150      *pBlockedPhysical = 
nullptr; 
 
  151      blockedReplicaNo = 0;  
 
  159  for ( sampleNo=localNoDaughters-1; sampleNo>=0; sampleNo--)
 
  161    samplePhysical = motherLogical->
GetDaughter(sampleNo);
 
  162    if ( samplePhysical!=blockedExitedVol )
 
  173      if ( sampleSafety<ourSafety )
 
  175        ourSafety=sampleSafety;
 
  178      if ( sampleSafety<=ourStep )
 
  188                                    sampleDirection, sampleStep);          
 
  191        if ( sampleStep<=ourStep )
 
  193          ourStep  = sampleStep;
 
  196          *pBlockedPhysical = samplePhysical;
 
  197          blockedReplicaNo  = -1;
 
  202                                         sampleDirection, localDirection,
 
  203                                         sampleSafety, sampleStep);
 
  214                                            samplePoint, sampleDirection,
 
  216                                            localPoint, localDirection,
 
  217                                            motherStep, sampleStep);
 
  231  if ( currentProposedStepLength<ourSafety )
 
  237    *pBlockedPhysical = 
nullptr;
 
  244    if ( motherSafety<=ourStep )
 
  251                                               &motherValidExitNormal,
 
  258                                    motherStep, motherSafety);
 
  259        if( motherValidExitNormal )
 
  266                                           "From motherSolid::DistanceToOut" );
 
  271      if( (motherStep >= 
kInfinity) || (motherStep < 0.0) )
 
  280        ourStep = motherStep = 0.0;
 
  287        validExitNormal = 
false;
 
  288        *pBlockedPhysical = 
nullptr; 
 
  289        blockedReplicaNo = 0;  
 
  294      if ( motherStep<=ourStep )
 
  296        ourStep  = motherStep;
 
  299        validExitNormal = motherValidExitNormal;
 
  300        exitNormal = motherExitNormal;
 
  302        if ( motherValidExitNormal )
 
  313                                                "From RotationMatrix" );
 
  320        validExitNormal = 
false;
 
  324  newSafety = ourSafety;
 
  340  G4int localNoDaughters, sampleNo;
 
  342  motherPhysical = 
history.GetTopVolume();
 
  344  motherSolid    = motherLogical->
GetSolid();
 
  349  ourSafety = motherSafety; 
 
  361  for ( sampleNo=localNoDaughters-1; sampleNo>=0; sampleNo-- )
 
  363    samplePhysical = motherLogical->
GetDaughter(sampleNo);
 
  373    if ( sampleSafety<ourSafety )
 
  375      ourSafety = sampleSafety;
 
  381                                sampleSafety, 
false, 
false);
 
CLHEP::Hep3Vector G4ThreeVector
double dot(const Hep3Vector &) const
HepRotation inverse() const
G4VSolid * GetSolid() const
size_t GetNoDaughters() const
G4VPhysicalVolume * GetDaughter(const G4int i) const
void SetVerboseLevel(G4int level)
void PreComputeStepLog(const G4VPhysicalVolume *motherPhysical, G4double motherSafety, const G4ThreeVector &localPoint) const
void CheckDaughterEntryPoint(const G4VSolid *sampleSolid, const G4ThreeVector &samplePoint, const G4ThreeVector &sampleDirection, const G4VSolid *motherSolid, const G4ThreeVector &localPoint, const G4ThreeVector &localDirection, G4double motherStep, G4double sampleStep) const
G4int GetVerboseLevel() const
void PrintDaughterLog(const G4VSolid *sampleSolid, const G4ThreeVector &samplePoint, G4double sampleSafety, G4bool onlySafety, const G4ThreeVector &sampleDirection, G4double sampleStep) const
G4bool CheckAndReportBadNormal(const G4ThreeVector &unitNormal, const G4ThreeVector &localPoint, const G4ThreeVector &localDirection, G4double step, const G4VSolid *solid, const char *msg) const
void ComputeSafetyLog(const G4VSolid *solid, const G4ThreeVector &point, G4double safety, G4bool isMotherVolume, G4int banner=-1) const
void PostComputeStepLog(const G4VSolid *motherSolid, const G4ThreeVector &localPoint, const G4ThreeVector &localDirection, G4double motherStep, G4double motherSafety) const
void ReportOutsideMother(const G4ThreeVector &localPoint, const G4ThreeVector &localDirection, const G4VPhysicalVolume *motherPV, G4double tDist=30.0 *CLHEP::cm) 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)
G4int GetVerboseLevel() const
G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4NavigationHistory &history, const G4double pMaxLength=DBL_MAX)
void SetVerboseLevel(G4int level)
G4NavigationLogger * fLogger
const G4RotationMatrix * GetRotation() const
const G4ThreeVector GetTranslation() const
G4LogicalVolume * GetLogicalVolume() const
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=nullptr, G4ThreeVector *n=nullptr) const =0
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
static const double kMinExitingNormalCosine
static const G4double kInfinity