From c36ca947db68f7fdd8eb9312c30736d90f8a574c Mon Sep 17 00:00:00 2001 From: slebedev <s.lebedev@gsi.de> Date: Fri, 18 Feb 2022 13:37:24 +0100 Subject: [PATCH] RICH: add copy number to nodes to provide a unique path for each node (#2425). --- macro/rich/Import_GDML_Export_ROOT.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/macro/rich/Import_GDML_Export_ROOT.c b/macro/rich/Import_GDML_Export_ROOT.c index 64ed443c7b..7dcfc09372 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()); + } +} -- GitLab