278   G4bool SuspiciousDaughterDist = ( sampleStep >= motherStep )
 
  285     msg << 
" WARNING - Called with 'infinite' step. " << 
G4endl;
 
  286     msg << 
"    Checks have no meaning if daughter step is infinite." << 
G4endl;
 
  289     msg << 
"    sampleStep < kInfinity " << (sampleStep<
kInfinity) << G4endl;
 
  291     msg << 
" Returning immediately.";
 
  292     G4Exception(
"G4NavigationLogger::CheckDaughterEntryPoint()",
 
  306   G4ThreeVector localExitMotherPos= localPoint+motherStep*localDirection;
 
  312   G4ThreeVector localEntryInDaughter = localPoint+sampleStep*localDirection; 
 
  313   EInside insideMother= motherSolid->
Inside( localEntryInDaughter ); 
 
  315   G4String solidResponse = 
"-kInside-";
 
  316   if (insideMother == 
kOutside)       { solidResponse = 
"-kOutside-"; }
 
  317   else if (insideMother == 
kSurface)  { solidResponse = 
"-kSurface-"; }
 
  319   G4double       distToReEntry = distExitToReEntry + motherStep;
 
  320   G4ThreeVector  localReEntryPoint = localPoint+distToReEntry*localDirection;
 
  323   G4bool DaughterEntryIsOutside = SuspiciousDaughterDist
 
  324          && ( (sampleStep < distToReEntry) || (insideMother == 
kOutside ) );
 
  328   G4ThreeVector sampleEntryPoint= samplePoint+sampleStep*sampleDirection;
 
  331   G4double      sampleExitDist = sampleStep+sampleCrossingDist;
 
  332   G4ThreeVector sampleExitPoint= samplePoint+sampleExitDist*sampleDirection;
 
  334   G4bool TransitProblem = ( (sampleStep < motherStep)
 
  335                          && (sampleExitDist > motherStep + kCarTolerance) )
 
  336            || ( EntryIsMotherExit && (sampleCrossingDist > kCarTolerance) );
 
  338   if( DaughterEntryIsOutside
 
  340        || (SuspiciousDaughterDist && (fVerbose > 3) ) )
 
  345     if( DaughterEntryIsOutside )
 
  347       msg << 
"WARNING> Intersection distance to Daughter volume is further" 
  348           <<    
" than the distance to boundary." << 
G4endl 
  349           << 
"  It appears that part of the daughter volume is *outside*" 
  350           <<    
" this mother. " << 
G4endl;
 
  351       msg << 
"  One of the following checks signaled a problem:" << G4endl
 
  352           << 
"  -sampleStep (dist to daugh) <  mother-exit dist + distance " 
  353           <<      
"to ReEntry point for mother " << G4endl
 
  354           << 
"  -position of daughter intersection is outside mother volume." 
  357     else if( TransitProblem )
 
  359       G4double protrusion = sampleExitDist - motherStep;
 
  361       msg << 
"WARNING>  Daughter volume extends beyond mother boundary. " 
  363       if ( ( sampleStep < motherStep )
 
  364         && (sampleExitDist > motherStep + kCarTolerance ) )
 
  367         msg << 
"        Crossing distance in the daughter causes is to extend" 
  368             << 
" beyond the mother exit. " << 
G4endl;
 
  369         msg << 
"        Length protruding = " << protrusion << 
G4endl;
 
  371       if( EntryIsMotherExit )
 
  374         msg << 
"        Intersection distance to Daughter is within " 
  375             << 
" tolerance of the distance" << 
G4endl;
 
  376         msg << 
"        to the mother boundary * and * " << 
G4endl;
 
  377         msg << 
"        the crossing distance in the daughter is > tolerance." 
  383       msg << 
"NearMiss> Intersection to Daughter volume is in extension past the" 
  384           <<   
" current exit point of the mother volume." << 
G4endl;
 
  385       msg << 
"          This is not an error - just an unusual occurence," 
  386           <<   
" possible in the case of concave volume. " << 
G4endl;
 
  388     msg << 
"---- Information about intersection with daughter, mother: " 
  390     msg << 
"    sampleStep (daughter) = " << sampleStep << G4endl
 
  391         << 
"    motherStep            = " << motherStep << G4endl
 
  392         << 
"    distToRentry(mother)  = " << distToReEntry << G4endl
 
  393         << 
"    Inside(entry pnt daug): " << solidResponse << G4endl
 
  394         << 
"    dist across daughter  = " << sampleCrossingDist << 
G4endl;
 
  395     msg << 
" Mother Name (Solid) : " << motherSolid->
GetName() << G4endl
 
  396         << 
" In local (mother) coordinates: " << G4endl
 
  397         << 
"    Starting     Point    = " << localPoint << G4endl
 
  398         << 
"    Direction             = " << localDirection << G4endl
 
  399         << 
"    Exit Point    (mother)= " << localExitMotherPos << G4endl
 
  400         << 
"    Entry Point (daughter)= " << localPoint+sampleStep*localDirection
 
  404       msg << 
"    ReEntry Point (mother)= " << localReEntryPoint << 
G4endl;
 
  408       msg << 
"    No ReEntry - track does not encounter mother volume again! " 
  411     msg << 
" Daughter Name (Solid): " << sampleSolid->
GetName() << G4endl
 
  412         << 
" In daughter coordinates: " << G4endl
 
  413         << 
"    Starting     Point    = " << samplePoint << G4endl
 
  414         << 
"    Direction             = " << sampleDirection << G4endl
 
  415         << 
"    Entry Point (daughter)= " << sampleEntryPoint
 
  417     msg << 
"  Description of mother solid: " << G4endl
 
  418         << *motherSolid << G4endl
 
  419         << 
"  Description of daughter solid: " << G4endl
 
  420         << *sampleSolid << 
G4endl;
 
  421     G4String fType = fId + 
"::ComputeStep()";
 
  423     if( DaughterEntryIsOutside || TransitProblem )
 
  430              << 
" -- Checked distance of Entry to daughter vs exit of mother" 
static const G4double kInfinity
 
std::ostringstream G4ExceptionDescription
 
G4double GetTolerance() const 
 
G4GLOB_DLL std::ostream G4cout
 
virtual EInside Inside(const G4ThreeVector &p) const =0
 
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
 
const G4double kCarTolerance
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static constexpr double millimeter
 
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0