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 ) );
   325   G4bool EntryIsMotherExit = std::fabs(sampleStep-motherStep) < kCarTolerance;
   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;
   423     if( DaughterEntryIsOutside || TransitProblem )
   430              << 
" -- Checked distance of Entry to daughter vs exit of mother" 
static const G4double kInfinity
 
std::ostringstream G4ExceptionDescription
 
G4GLOB_DLL std::ostream G4cout
 
virtual EInside Inside(const G4ThreeVector &p) const =0
 
virtual G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &v) const =0
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
static const double millimeter
 
virtual G4double DistanceToOut(const G4ThreeVector &p, const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const =0
 
G4double GetTolerance() const