diff --git a/macro/rich/Import_GDML_Export_ROOT.c b/macro/rich/Import_GDML_Export_ROOT.c index 64ed443c7bd167f64c5bfeb510ed7f1d7491c4aa..7dcfc0937251b862de04e33e886c37c399749db3 100644 --- a/macro/rich/Import_GDML_Export_ROOT.c +++ b/macro/rich/Import_GDML_Export_ROOT.c @@ -1,4 +1,7 @@ +void addCopyNumbersToNodes(TGeoVolume* volume); + + void Import_GDML_Export_ROOT() { @@ -94,6 +97,7 @@ void Import_GDML_Export_ROOT() gdmlTop->Print(); gGeoManager->SetTopVolume(rootTop); + gGeoManager->SetAllIndex(); // Starting from the version v18a position is defined inside the GDML file // Define your position HERE @@ -103,6 +107,8 @@ void Import_GDML_Export_ROOT() rootTop->AddNode(gdmlTop, 1, posrot); + addCopyNumbersToNodes(gGeoManager->GetTopNode()->GetVolume()); + gGeoManager->CloseGeometry(); gGeoManager->CheckOverlaps(); gGeoManager->PrintOverlaps(); @@ -136,3 +142,21 @@ void Import_GDML_Export_ROOT() gROOT->LoadMacro(createmedialist); gROOT->ProcessLine("create_medialist(\"\", false)"); } + + +void addCopyNumbersToNodes(TGeoVolume* volume) +{ + map<string, int> counterMap; + TGeoIterator geoIterator(volume); + geoIterator.SetType(1); + geoIterator.Reset(); + TGeoNode* curNode; + while ((curNode = geoIterator())) { + string volumeName = string(curNode->GetVolume()->GetName()); + counterMap[volumeName]++; + int curCounter = counterMap[volumeName]; + curNode->SetNumber(curCounter); + curNode->SetName((volumeName + "_" + to_string(curCounter)).c_str()); + addCopyNumbersToNodes(curNode->GetVolume()); + } +}