ROOT logo
void
CheckOverlaps(const char* file="geometry.root", 
	      Bool_t align=kFALSE, Bool_t sample=kTRUE)
{
  TObjArray* checked = new TObjArray();
  
  AliGeomManager::LoadGeometry(file);
  if (align)
    AliGeomManager::ApplyAlignObjsToGeom("FMDfullMisalignment.root", 
					 "FMDAlignment");
  TObjArray*        l = gGeoManager->GetListOfPhysicalNodes();
  TIter             next(l);
  TGeoPhysicalNode* pn = 0;
  TGeoVolume*       v  = 0;
  while ((pn = static_cast<TGeoPhysicalNode*>(next()))) { 
    pn->cd();
    gGeoManager->CdUp();
    v = gGeoManager->GetCurrentVolume();
    if (checked->FindObject(v)) continue;
    
    std::cout << "Checking " << v->GetName() << std::endl;
    v->CheckOverlaps(0.01);
    Int_t n = gGeoManager->GetListOfOverlaps()->GetEntriesFast();
    if (n) { 
      gGeoManager->GetListOfOverlaps()->ls();
    }
    checked->Add(v);
    
    if (!sample) continue;

    // gGeoManager->ClearOverlaps();
    gGeoManager->SetCheckingOverlaps();
    TGeoNode*    start = gGeoManager->GetCurrentNode();
    TGeoVolume*  vol   = start->GetVolume();
    TGeoIterator gnext(vol);
    TGeoNode*    node;
    TString      path;
    while ((node = gnext())) {
      gnext.GetPath(path);
      // std::cout << " Checking: " <<  path.Data() << std::endl;
      node->GetVolume()->CheckOverlaps(0.01,"s");
    }
    gGeoManager->SetCheckingOverlaps(kFALSE);
    n = gGeoManager->GetListOfOverlaps()->GetEntriesFast();
    if (n) {
      gGeoManager->GetListOfOverlaps()->ls();
      pn->Print();
    }
  }
}

 CheckOverlaps.C:1
 CheckOverlaps.C:2
 CheckOverlaps.C:3
 CheckOverlaps.C:4
 CheckOverlaps.C:5
 CheckOverlaps.C:6
 CheckOverlaps.C:7
 CheckOverlaps.C:8
 CheckOverlaps.C:9
 CheckOverlaps.C:10
 CheckOverlaps.C:11
 CheckOverlaps.C:12
 CheckOverlaps.C:13
 CheckOverlaps.C:14
 CheckOverlaps.C:15
 CheckOverlaps.C:16
 CheckOverlaps.C:17
 CheckOverlaps.C:18
 CheckOverlaps.C:19
 CheckOverlaps.C:20
 CheckOverlaps.C:21
 CheckOverlaps.C:22
 CheckOverlaps.C:23
 CheckOverlaps.C:24
 CheckOverlaps.C:25
 CheckOverlaps.C:26
 CheckOverlaps.C:27
 CheckOverlaps.C:28
 CheckOverlaps.C:29
 CheckOverlaps.C:30
 CheckOverlaps.C:31
 CheckOverlaps.C:32
 CheckOverlaps.C:33
 CheckOverlaps.C:34
 CheckOverlaps.C:35
 CheckOverlaps.C:36
 CheckOverlaps.C:37
 CheckOverlaps.C:38
 CheckOverlaps.C:39
 CheckOverlaps.C:40
 CheckOverlaps.C:41
 CheckOverlaps.C:42
 CheckOverlaps.C:43
 CheckOverlaps.C:44
 CheckOverlaps.C:45
 CheckOverlaps.C:46
 CheckOverlaps.C:47
 CheckOverlaps.C:48
 CheckOverlaps.C:49
 CheckOverlaps.C:50
 CheckOverlaps.C:51
 CheckOverlaps.C:52