From 6a857620c595cec063a450278dd1848015a055b9 Mon Sep 17 00:00:00 2001
From: praisig <praisig@ikf.uni-frankfurt.de>
Date: Thu, 17 Sep 2020 17:37:09 +0200
Subject: [PATCH] TrdParManager add some helpers to unify parameter handling
 Added functions that use the new enum, which contains all parameter
 containers of the trd, which return a list of the containers or the extension
 names for the ascii files. This is suppose to unify the handling in tasks and
 macros and reduce potential pitfalls

---
 core/detectors/trd/CbmTrdParManager.cxx | 48 +++++++++++++++++++++
 core/detectors/trd/CbmTrdParManager.h   | 57 ++++++++++++++++---------
 2 files changed, 85 insertions(+), 20 deletions(-)

diff --git a/core/detectors/trd/CbmTrdParManager.cxx b/core/detectors/trd/CbmTrdParManager.cxx
index 0b747d2f1c..ef69c4d7bf 100644
--- a/core/detectors/trd/CbmTrdParManager.cxx
+++ b/core/detectors/trd/CbmTrdParManager.cxx
@@ -435,6 +435,54 @@ bool CbmTrdParManager::CreateParFilesFromGeometry(TString outDir) {
   return true;  // check if rtdb->writeContainers() could be used to run a bool check and return that bool instead of saveOutput void
 }
 
+// ---- GetParSetList ----
+void CbmTrdParManager::GetParSetList(std::vector<CbmTrdParSet*>* parSetList) {
+  // std::vector<CbmTrdParSet*> parSetList;
+  CbmTrdParSet* parSet = nullptr;
+  for (Int_t iParSetType = (Int_t) ECbmTrdParSets::kBegin;
+       iParSetType <= (Int_t) ECbmTrdParSets::kEnd;
+       iParSetType++) {
+    switch (iParSetType) {
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetAsic:
+        parSet = new CbmTrdParSetAsic();
+        break;
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetDigi:
+        parSet = new CbmTrdParSetDigi();
+        break;
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetGain:
+        parSet = new CbmTrdParSetGain();
+        break;
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetGas:
+        parSet = new CbmTrdParSetGas();
+        break;
+    }
+    parSetList->emplace_back(parSet);
+  }
+}
+
+// ---- GetParFileExtensions ----
+void CbmTrdParManager::GetParFileExtensions(std::vector<std::string>* vec) {
+  for (Int_t iParSetType = (Int_t) ECbmTrdParSets::kBegin;
+       iParSetType <= (Int_t) ECbmTrdParSets::kEnd;
+       iParSetType++) {
+    switch (iParSetType) {
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetAsic:
+        vec->emplace_back("asic");
+        break;
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetDigi:
+        vec->emplace_back("digi");
+        break;
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetGain:
+        vec->emplace_back("gas");
+        break;
+      case (Int_t) ECbmTrdParSets::kCbmTrdParSetGas:
+        vec->emplace_back("gain");
+        break;
+    }
+  }
+}
+
+
 // void CbmTrdParManager::FillDigiPar()
 // {
 //   printf("CbmTrdParManager::FillDigiPar()\n");
diff --git a/core/detectors/trd/CbmTrdParManager.h b/core/detectors/trd/CbmTrdParManager.h
index 44b19c8cd0..b11e63cde8 100644
--- a/core/detectors/trd/CbmTrdParManager.h
+++ b/core/detectors/trd/CbmTrdParManager.h
@@ -21,6 +21,7 @@
 #include "FairTask.h"  // for FairTask, InitStatus
 
 #include "CbmTrdHardwareSetupR.h"  //for CbmTrdHardwareSetupR
+#include "CbmTrdParSet.h"          // for GetParSetList
 
 class CbmTrdGeoHandler;
 class CbmTrdParSetAsic;
@@ -34,50 +35,66 @@ class CbmTrdParSetGas;
  */
 class CbmTrdParManager : public FairTask {
 public:
+  enum class ECbmTrdParSets : Int_t {
+    kBegin            = 0,
+    kCbmTrdParSetAsic = kBegin,
+    kCbmTrdParSetDigi,
+    kCbmTrdParSetGain,
+    kCbmTrdParSetGas,
+    kEnd = kCbmTrdParSetGas
+  };
   /**
-    * \brief Default constructor.
-    * \param[in] fasp switch between ASICs. Default SPADIC (fasp == kFALSE)
-    * \sa SetFASP(Bool_t) 
-    **/
+   * @brief enumerator for organising the existing parameter sets of the trd
+   *
+   */
+
+  /**
+   * \brief Default constructor.
+   * \param[in] fasp switch between ASICs. Default SPADIC (fasp == kFALSE)
+   * \sa SetFASP(Bool_t)
+   **/
   CbmTrdParManager(Bool_t fasp = kFALSE);
 
   /**
-    * \brief Destructor.
-    **/
+   * \brief Destructor.
+   **/
   virtual ~CbmTrdParManager();
 
   /**
-    * \breif Inherited from FairTask.
-    **/
+   * \brief Inherited from FairTask.
+   **/
   virtual InitStatus Init();
 
   /**
-    * \brief Inherited from FairTask.
-    **/
+   * \brief Inherited from FairTask.
+   **/
   virtual void SetParContainers();
 
   /**
-    * \brief Change the default ASIC to FASP
-    **/
+   * \brief Change the default ASIC to FASP
+   **/
   virtual void SetFASP(Bool_t set = kTRUE) { fFASP = set; }
 
   /**
-    * \brief Inherited from FairTask.
-    **/
+   * \brief Inherited from FairTask.
+   **/
   virtual void Exec(Option_t* option);
 
   /**
-    * \brief Inherited from FairTask.
-    **/
+   * \brief Inherited from FairTask.
+   **/
   virtual void Finish();
 
   /**
-    * \brief Create parameter files from geometry in gGeoManager
-    * A run macro can be found in the trd cbm.gsi git repository
-    **/
+   * \brief Create parameter files from geometry in gGeoManager
+   * A run macro can be found in the trd cbm.gsi git repository
+   **/
   bool CreateParFilesFromGeometry(bool createRootFileOutput,
                                   TString outDir = "");
 
+  static void GetParSetList(std::vector<CbmTrdParSet*>* parSetList);
+  static void GetParFileExtensions(std::vector<std::string>* vec);
+
 private:
   void CreateModuleParameters(const TString& path);
   bool CreateParFilesFromGeometry(TString outDir = "");
@@ -103,4 +120,4 @@ private:
 
   ClassDef(CbmTrdParManager, 2)
 };
-#endif  //CBMTRDPARMANAGER_H
+#endif  // CBMTRDPARMANAGER_H
-- 
GitLab