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());
+ }
+}