From 51bffcc7c588d71d64102ec50dfe28eb45acd4f6 Mon Sep 17 00:00:00 2001 From: Radoslaw Karabowicz Date: Fri, 6 May 2022 11:24:25 +0200 Subject: [PATCH] Fix the construction of cloned sensitive volumes FairRoot allows for construction of clones volumes using the volume_name#{clone_number} scheme. Changing FairMCApplication::ConstructSensitiveDetectors() to support this. --- base/sim/FairMCApplication.cxx | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/base/sim/FairMCApplication.cxx b/base/sim/FairMCApplication.cxx index eedb7a82d7..886625806c 100644 --- a/base/sim/FairMCApplication.cxx +++ b/base/sim/FairMCApplication.cxx @@ -1336,10 +1336,23 @@ void FairMCApplication::UndoGeometryModifications() void FairMCApplication::ConstructSensitiveDetectors() { - for (auto const& x : fMapSensitiveDetectors) { - LOG(debug) << "FairMCApplication::ConstructSensitiveDetectors " << x.first << " " << x.second; - TVirtualMC::GetMC()->SetSensitiveDetector(x.first, x.second); - } + std::map cloneVolumeMap; + + for (auto const& x : fMapSensitiveDetectors) { + std::string volName = x.first;//.substr(0, x.first.find("#", 0)); + if (volName.find('#') != std::string::npos) { + volName = volName.substr(0, volName.find("#", 0)); + std::map::iterator it; + it = cloneVolumeMap.find(volName); + LOG(debug) << "FairMCApplication::ConstructSensitiveDetectors got clone " << x.first << " " << x.second; + if (it != cloneVolumeMap.end()) + continue; + cloneVolumeMap[volName] = x.second; + LOG(debug) << "FairMCApplication::ConstructSensitiveDetectors really do " << volName; + } + LOG(debug) << "FairMCApplication::ConstructSensitiveDetectors really do " << volName; + TVirtualMC::GetMC()->SetSensitiveDetector(volName, x.second); + } } void FairMCApplication::AddSensitiveModule(std::string volName, FairModule* module)