From 55ae649e143cb840c7f5f96f238e6d03f2fcbd66 Mon Sep 17 00:00:00 2001
From: Dominik Smith <smith@th.physik.uni-frankfurt.de>
Date: Fri, 6 Aug 2021 15:55:20 +0200
Subject: [PATCH] Introduced a base class for Sts unpackers
 (CbmStsUnpackAlgoBase).

---
 reco/detectors/sts/CMakeLists.txt             |  1 +
 reco/detectors/sts/CbmRecoStsLinkDef.h        |  1 +
 .../detectors/sts/unpack/CbmStsUnpackAlgo.cxx |  2 +-
 reco/detectors/sts/unpack/CbmStsUnpackAlgo.h  | 16 +----
 .../sts/unpack/CbmStsUnpackAlgoBase.cxx       | 12 ++++
 .../sts/unpack/CbmStsUnpackAlgoBase.h         | 70 +++++++++++++++++++
 .../sts/unpack/CbmStsUnpackAlgoLegacy.cxx     |  2 +-
 .../sts/unpack/CbmStsUnpackAlgoLegacy.h       |  7 +-
 8 files changed, 90 insertions(+), 21 deletions(-)
 create mode 100644 reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx
 create mode 100644 reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h

diff --git a/reco/detectors/sts/CMakeLists.txt b/reco/detectors/sts/CMakeLists.txt
index 7b28844bb0..07203f6f88 100644
--- a/reco/detectors/sts/CMakeLists.txt
+++ b/reco/detectors/sts/CMakeLists.txt
@@ -21,6 +21,7 @@ CbmStsRecoModule.cxx
 CbmStsTrackFinderIdeal.cxx
 
 unpack/CbmStsUnpackAlgo.cxx
+unpack/CbmStsUnpackAlgoBase.cxx
 unpack/CbmStsUnpackAlgoLegacy.cxx
 unpack/CbmStsUnpackConfig.cxx
 unpack/CbmStsUnpackMonitor.cxx
diff --git a/reco/detectors/sts/CbmRecoStsLinkDef.h b/reco/detectors/sts/CbmRecoStsLinkDef.h
index 4ea941a18e..7e7281d5ad 100644
--- a/reco/detectors/sts/CbmRecoStsLinkDef.h
+++ b/reco/detectors/sts/CbmRecoStsLinkDef.h
@@ -20,6 +20,7 @@
 #pragma link C++ class CbmStsTrackFinderIdeal + ;
 
 #pragma link C++ class CbmStsUnpackAlgo + ;
+#pragma link C++ class CbmStsUnpackAlgoBase + ;
 #pragma link C++ class CbmStsUnpackAlgoLegacy + ;
 #pragma link C++ class CbmStsUnpackConfig + ;
 #pragma link C++ class CbmStsUnpackMonitor + ;
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
index e738045445..f9992f794a 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.cxx
@@ -13,7 +13,7 @@
 #include <cstdint>
 #include <iomanip>
 
-CbmStsUnpackAlgo::CbmStsUnpackAlgo() : CbmRecoUnpackAlgo("CbmStsUnpackAlgo") {}
+CbmStsUnpackAlgo::CbmStsUnpackAlgo() : CbmStsUnpackAlgoBase("CbmStsUnpackAlgo") {}
 
 CbmStsUnpackAlgo::~CbmStsUnpackAlgo() {}
 
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
index 9f5ffb1d27..b59acc5139 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgo.h
@@ -21,23 +21,11 @@
 #ifndef CbmStsUnpackAlgo_H
 #define CbmStsUnpackAlgo_H
 
-#include "CbmErrorMessage.h"  // REMARK see remark in CbmStsUnpackConfig
 #include "CbmMcbm2018StsPar.h"
-#include "CbmRecoUnpackAlgo.tmpl"
-#include "CbmStsDigi.h"
-#include "CbmStsUnpackMonitor.h"
+#include "CbmStsUnpackAlgoBase.h"
 
-#include "Timeslice.hpp"  // timeslice
 
-#include <Rtypes.h>  // for types
-#include <RtypesCore.h>
-
-#include <cstddef>
-#include <cstdint>
-#include <memory>
-#include <utility>
-
-class CbmStsUnpackAlgo : public CbmRecoUnpackAlgo<CbmStsDigi, CbmErrorMessage> {
+class CbmStsUnpackAlgo : public CbmStsUnpackAlgoBase {
 public:
   /** @brief Create the Cbm Trd Unpack AlgoBase object */
   CbmStsUnpackAlgo();
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx
new file mode 100644
index 0000000000..a4af6daa95
--- /dev/null
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.cxx
@@ -0,0 +1,12 @@
+/* Copyright (C) 2010 - 2021 Fair GmbH 
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Dominik Smith */
+
+#include "CbmStsUnpackAlgoBase.h"
+
+CbmStsUnpackAlgoBase::CbmStsUnpackAlgoBase(std::string name) : CbmRecoUnpackAlgo(name) {}
+
+CbmStsUnpackAlgoBase::~CbmStsUnpackAlgoBase() {}
+
+
+ClassImp(CbmStsUnpackAlgoBase)
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h
new file mode 100644
index 0000000000..32634cff69
--- /dev/null
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoBase.h
@@ -0,0 +1,70 @@
+/* Copyright (C) 2010 - 2021 Fair GmbH 
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Dominik Smith */
+
+/**
+ * @file CbmStsUnpackAlgoBase.h
+ * @author Dominik Smith (d.smith@gsi.de)
+ * @brief Baseclass for the Sts unpacker algorithms
+ * @version 0.1
+ * @date 2021-04-21
+ * 
+ * @copyright Copyright (c) 2021
+ * 
+ * This is the base class for the algorithmic part of the tsa data unpacking 
+ * processes of the CbmSts.
+ * The actual translation from tsa to digi happens in the derived classes. 
+ * 
+ * 
+*/
+
+#ifndef CbmStsUnpackAlgoBase_H
+#define CbmStsUnpackAlgoBase_H
+
+#include "CbmErrorMessage.h"  // REMARK see remark in CbmStsUnpackConfig
+#include "CbmRecoUnpackAlgo.tmpl"
+#include "CbmStsDigi.h"
+#include "CbmStsUnpackMonitor.h"
+
+#include "Timeslice.hpp"  // timeslice
+
+#include <FairTask.h>  // for InitStatus
+
+#include <Rtypes.h>  // for types
+#include <RtypesCore.h>
+
+#include <cstddef>
+#include <cstdint>
+#include <memory>
+#include <utility>
+
+class CbmStsUnpackAlgoBase : public CbmRecoUnpackAlgo<CbmStsDigi, CbmErrorMessage> {
+public:
+  /** @brief Create the Cbm Sts Unpack AlgoBase object */
+  CbmStsUnpackAlgoBase(std::string name);
+
+  /** @brief Destroy the Cbm Sts Unpack Task object */
+  virtual ~CbmStsUnpackAlgoBase();
+
+  /** @brief Copy constructor - not implemented **/
+  CbmStsUnpackAlgoBase(const CbmStsUnpackAlgoBase&) = delete;
+
+  /** @brief Assignment operator - not implemented **/
+  CbmStsUnpackAlgoBase& operator=(const CbmStsUnpackAlgoBase&) = delete;
+
+  // Setters
+  /** @brief Set a predefined monitor @param monitor predefined unpacking monitor */
+  void SetMonitor(std::shared_ptr<CbmStsUnpackMonitor> monitor) { fMonitor = monitor; }
+
+
+protected:
+  // Monitoring
+  /** @brief Potential (online) monitor for the unpacking process */
+  std::shared_ptr<CbmStsUnpackMonitor> fMonitor = nullptr;
+
+
+private:
+  ClassDef(CbmStsUnpackAlgoBase, 2)
+};
+
+#endif  // CbmStsUnpackAlgoBase_H
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
index cf90af171d..0561a7295b 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.cxx
@@ -30,7 +30,7 @@
 // -------------------------------------------------------------------------
 
 CbmStsUnpackAlgoLegacy::CbmStsUnpackAlgoLegacy()
-  : CbmRecoUnpackAlgo("CbmStsUnpackAlgoLegacy")
+  : CbmStsUnpackAlgoBase("CbmStsUnpackAlgoLegacy")
   ,
   /// From the class itself
   fbMonitorMode(false)
diff --git a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
index d097121527..34c1af7084 100644
--- a/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
+++ b/reco/detectors/sts/unpack/CbmStsUnpackAlgoLegacy.h
@@ -9,10 +9,7 @@
 #define CbmStsUnpackAlgoLegacy_H
 
 #include "CbmErrorMessage.h"  // REMARK see remark in CbmStsUnpackConfig
-#include "CbmRecoUnpackAlgo.tmpl"
-
-// Data
-#include "CbmStsDigi.h"
+#include "CbmStsUnpackAlgoBase.h"
 
 #include "StsXyterFinalHit.h"
 #include "StsXyterMessage.h"
@@ -29,7 +26,7 @@
 class CbmMcbm2018StsPar;
 class CbmStsUnpackMonitor;
 
-class CbmStsUnpackAlgoLegacy : public CbmRecoUnpackAlgo<CbmStsDigi, CbmErrorMessage> {
+class CbmStsUnpackAlgoLegacy : public CbmStsUnpackAlgoBase {
 public:
   CbmStsUnpackAlgoLegacy();
   ~CbmStsUnpackAlgoLegacy();
-- 
GitLab