From 85647f2f61b6268c957a05ae71a50b0eee45ff94 Mon Sep 17 00:00:00 2001
From: Frederic Julian Linz <f.linz@gsi.de>
Date: Tue, 9 Jul 2024 07:08:25 +0000
Subject: [PATCH] Digitization binary feature: allow for multiple detectors to
 be deactivated

---
 sim/response/config/DigiConfig_event.yaml     |  3 ++-
 sim/response/config/DigiConfig_timeslice.yaml |  3 ++-
 sim/response/steer/Config.cxx                 | 10 ++++++++--
 sim/response/steer/Config.h                   |  3 +--
 sim/response/steer/Run.cxx                    |  5 ++++-
 5 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/sim/response/config/DigiConfig_event.yaml b/sim/response/config/DigiConfig_event.yaml
index 6829a650e5..97d12619ae 100644
--- a/sim/response/config/DigiConfig_event.yaml
+++ b/sim/response/config/DigiConfig_event.yaml
@@ -6,7 +6,8 @@ global:
   nTimeslices: -1
   firstTimeslice: -1
 detectors:
-  deactivate: ""
+  deactivate: 
+    - ""
   deactivateAllBut: ""
 timeslice:
   timeslicelength: 1.e5     
diff --git a/sim/response/config/DigiConfig_timeslice.yaml b/sim/response/config/DigiConfig_timeslice.yaml
index 7989ccf5a0..e014050be8 100644
--- a/sim/response/config/DigiConfig_timeslice.yaml
+++ b/sim/response/config/DigiConfig_timeslice.yaml
@@ -6,7 +6,8 @@ global:
   nTimeslices: -1
   firstTimeslice: -1
 detectors:
-  deactivate: ""
+  deactivate:
+    - ""
   deactivateAllBut: ""
 timeslice:
   timeslicelength: 1.e13
diff --git a/sim/response/steer/Config.cxx b/sim/response/steer/Config.cxx
index 6cd0076dce..15df8cf535 100644
--- a/sim/response/steer/Config.cxx
+++ b/sim/response/steer/Config.cxx
@@ -39,7 +39,10 @@ namespace cbm::sim::digitization
 
     // --- Detector choice
     f_det_deactivateAllBut = ToECbmModuleId(settings["detectors"]["deactivateAllBut"].as<string>());
-    f_det_deactivate       = ToECbmModuleId(settings["detectors"]["deactivate"].as<string>());
+
+    YAML::Node deactivatedSystems = settings["detectors"]["deactivate"];
+    for (auto det : deactivatedSystems)
+      f_det_deactivate.push_back(ToECbmModuleId(det.as<string>()));
 
     // --- Timeslice settings
     f_ts_tslength   = settings["timeslice"]["timeslicelength"].as<float>();
@@ -218,7 +221,10 @@ namespace cbm::sim::digitization
 
     // --- Detector choice
     settings["detectors"]["deactivateAllBut"] = ToString(f_det_deactivateAllBut);
-    settings["detectors"]["deactivate"]       = ToString(f_det_deactivate);
+
+    for (int i = 0; i < (int) f_det_deactivate.size(); ++i) {
+      settings["detectors"]["deactivate"][i] = ToString(f_det_deactivate.at(i));
+    }
 
     // --- Timeslice settings
     settings["timeslice"]["timeslicelength"]    = f_ts_tslength;
diff --git a/sim/response/steer/Config.h b/sim/response/steer/Config.h
index 8d8c167b9f..c1916b0e89 100644
--- a/sim/response/steer/Config.h
+++ b/sim/response/steer/Config.h
@@ -94,8 +94,7 @@ namespace cbm::sim::digitization
 
     // --- Detector selection
     ECbmModuleId f_det_deactivateAllBut = ECbmModuleId::kNotExist;
-    ECbmModuleId f_det_deactivate =
-      ECbmModuleId::kNotExist;  // TODO: option should be able to deal with several detectors
+    std::vector<ECbmModuleId> f_det_deactivate;
 
     // --- Timeslice settings
     float f_ts_tslength  = 1.e5;
diff --git a/sim/response/steer/Run.cxx b/sim/response/steer/Run.cxx
index bdab3b756d..1e76e6be65 100644
--- a/sim/response/steer/Run.cxx
+++ b/sim/response/steer/Run.cxx
@@ -110,7 +110,10 @@ namespace cbm::sim::digitization
 
     if (fConfig.f_det_deactivateAllBut != ECbmModuleId::kNotExist)
       fRun.DeactivateAllBut(fConfig.f_det_deactivateAllBut);
-    if (fConfig.f_det_deactivate != ECbmModuleId::kNotExist) fRun.Deactivate(fConfig.f_det_deactivate);
+
+    for (auto det : fConfig.f_det_deactivate) {
+      if (det != ECbmModuleId::kNotExist) fRun.Deactivate(det);
+    }
 
     timer.Stop();
     double timeInit = timer.RealTime();
-- 
GitLab