From ef9b78e34bee2d17bb7c6643ee034de0bb6f01c7 Mon Sep 17 00:00:00 2001
From: P-A Loizeau <p.-a.loizeau@gsi.de>
Date: Mon, 14 Nov 2022 17:11:55 +0100
Subject: [PATCH] Switch DigiEvent/DigiData from TOF to TZD digis for T0 + fix
 online data lib <breaks 2 tasks!>

Most changes done in CbmDigiData:
- Add CbmTzdDigiData class
- Change TZD storage class in CbmDigiData
- Bump Classdef of CbmDigiData to 3
- Add boost serialization version +  Bump to version 3 (default is always 0 in boost)
---
 algo/data/CMakeLists.txt          |  4 ++-
 core/data/CMakeLists.txt          | 23 +++++++-------
 core/data/CbmDataLinkDef.h        |  1 +
 core/data/base/CbmDigiData.h      |  8 +++--
 core/data/global/CbmTzdDigiData.h | 53 +++++++++++++++++++++++++++++++
 5 files changed, 74 insertions(+), 15 deletions(-)
 create mode 100644 core/data/global/CbmTzdDigiData.h

diff --git a/algo/data/CMakeLists.txt b/algo/data/CMakeLists.txt
index d35d41d14f..41483471e5 100644
--- a/algo/data/CMakeLists.txt
+++ b/algo/data/CMakeLists.txt
@@ -23,7 +23,9 @@ set(SRCS
 
   ${CMAKE_SOURCE_DIR}/core/data/psd/CbmPsdDigi.cxx
   ${CMAKE_SOURCE_DIR}/core/data/psd/CbmPsdAddress.cxx
-  
+
+  ${CMAKE_SOURCE_DIR}/core/data/global/CbmTzdDigi.cxx
+
   ${CMAKE_SOURCE_DIR}/core/data/raw/StsXyterMessage.cxx
 )
 
diff --git a/core/data/CMakeLists.txt b/core/data/CMakeLists.txt
index 29151c2da7..bd1d18176b 100644
--- a/core/data/CMakeLists.txt
+++ b/core/data/CMakeLists.txt
@@ -13,7 +13,7 @@ set(INCLUDE_DIRECTORIES
   ${CMAKE_CURRENT_SOURCE_DIR}/tof
   ${CMAKE_CURRENT_SOURCE_DIR}/rich
   ${CMAKE_CURRENT_SOURCE_DIR}/psd
-  ${CMAKE_CURRENT_SOURCE_DIR}/global 
+  ${CMAKE_CURRENT_SOURCE_DIR}/global
   )
 
 
@@ -125,39 +125,40 @@ set(NO_DICT_SRCS
 SET_SOURCE_FILES_PROPERTIES(tof/etof/star_rhicf.c PROPERTIES COMPILE_FLAGS -Wno-pointer-sign)
 
 
-list(APPEND HEADERS base/CbmDigiData.h global/CbmDigiEvent.h global/CbmDigiTimeslice.h 
-sts/CbmStsDigiData.h much/CbmMuchDigiData.h rich/CbmRichDigiData.h trd/CbmTrdDigiData.h 
-tof/CbmTofDigiData.h psd/CbmPsdDigiData.h)
+list(APPEND HEADERS base/CbmDigiData.h global/CbmDigiEvent.h global/CbmDigiTimeslice.h
+sts/CbmStsDigiData.h much/CbmMuchDigiData.h rich/CbmRichDigiData.h trd/CbmTrdDigiData.h
+tof/CbmTofDigiData.h global/CbmTzdDigiData.h psd/CbmPsdDigiData.h)
 
 set(LIBRARY_NAME CbmData)
 set(LINKDEF ${LIBRARY_NAME}LinkDef.h)
-set(PUBLIC_DEPENDENCIES 
+set(PUBLIC_DEPENDENCIES
   FairRoot::Base
-  ROOT::Core  
-  ROOT::Matrix 
+  ROOT::Core
+  ROOT::Matrix
   ROOT::Physics
   external::fles_ipc
   xpu
   )
 
-set(PRIVATE_DEPENDENCIES 
+set(PRIVATE_DEPENDENCIES
   ROOT::EG
   FairLogger::FairLogger
-  ${VMCLIB}  
+  ${VMCLIB}
   )
 
 generate_cbm_library()
 
 # Install file which has no corresponding source file
 Install(FILES
-        CbmDefs.h 
+        CbmDefs.h
         base/CbmDigiData.h base/CbmDigiVector.h
         much/CbmMuchDigiData.h
         psd/CbmPsdDigiData.h
-        rich/CbmRichDigiData.h rich/CbmRichRingLight.h 
+        rich/CbmRichDigiData.h rich/CbmRichRingLight.h
         sts/CbmStsDigiData.h
         trd/CbmTrdDigiData.h
         tof/CbmTofDigiData.h
+        global/CbmTzdDigiData.h
         global/CbmDigiEvent.h global/CbmDigiTimeslice.h
         raw/bitmask_operators.hpp raw/StsXyterFinalHit.h raw/PsdGbtDataFormat-v0.00.h raw/PsdGbtDataFormat-v1.00.h
         DESTINATION include
diff --git a/core/data/CbmDataLinkDef.h b/core/data/CbmDataLinkDef.h
index 50694aa1c0..be7e64e2e0 100644
--- a/core/data/CbmDataLinkDef.h
+++ b/core/data/CbmDataLinkDef.h
@@ -100,6 +100,7 @@
 // --- data/global
 #pragma link C++ class CbmGlobalTrack + ;
 #pragma link C++ class CbmTzdDigi + ;
+#pragma link C++ class CbmTzdDigiData + ;
 #pragma link C++ class CbmVertex + ;
 #pragma link C++ class std::vector < CbmDigiEvent>;
 
diff --git a/core/data/base/CbmDigiData.h b/core/data/base/CbmDigiData.h
index c2df9257c3..5ba3ffe1d8 100644
--- a/core/data/base/CbmDigiData.h
+++ b/core/data/base/CbmDigiData.h
@@ -12,6 +12,7 @@
 #include "CbmStsDigiData.h"
 #include "CbmTofDigiData.h"
 #include "CbmTrdDigiData.h"
+#include "CbmTzdDigiData.h"
 
 #include <boost/serialization/access.hpp>
 #include <boost/serialization/base_object.hpp>
@@ -30,7 +31,7 @@
 class CbmDigiData {
 
 public:
-  CbmTofDigiData fT0;     ///< Beam monitor data
+  CbmTzdDigiData fT0;     ///< Beam monitor data
   CbmStsDigiData fSts;    ///< STS data
   CbmMuchDigiData fMuch;  ///< MUCH data
   CbmRichDigiData fRich;  ///< RICH data
@@ -43,6 +44,7 @@ public:
   template<class Archive>
   void serialize(Archive& ar, const unsigned int /*version*/)
   {
+    // note, version is always the latest when saving
     ar& fT0;
     ar& fSts;
     ar& fMuch;
@@ -54,7 +56,7 @@ public:
 
   // --- ROOT serializer
 #ifndef NO_ROOT
-  ClassDefNV(CbmDigiData, 2);
+  ClassDefNV(CbmDigiData, 3);
 #endif
 
   /** @brief Clear content **/
@@ -70,5 +72,5 @@ public:
   }
 };
 
-
+BOOST_CLASS_VERSION(CbmDigiData, 3)
 #endif /* CBMDIGIDATA_H */
diff --git a/core/data/global/CbmTzdDigiData.h b/core/data/global/CbmTzdDigiData.h
new file mode 100644
index 0000000000..0129f1fcf1
--- /dev/null
+++ b/core/data/global/CbmTzdDigiData.h
@@ -0,0 +1,53 @@
+/* Copyright (C) 2022 Facility for Antiproton and Ion Research in Europe, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Pierre-Alain Loizeau [committer] */
+
+#ifndef CBMTZDDIGIDATA_H
+#define CBMTZDDIGIDATA_H 1
+
+
+#include "CbmTzdDigi.h"
+
+#ifndef NO_ROOT
+#include <Rtypes.h>  // for ClassDef
+#endif
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/vector.hpp>
+
+#include <vector>
+
+/** @class CbmTzdDigiData
+ ** @brief Container class for CbmTzdDigi objects
+ ** @author Volker Friese <v.friese@gsi.de>
+ ** @since 7.12.2022
+ ** @version 1.0
+ **
+ ** Container class for transporting CbmTzdDigi objects.
+ ** The current implementation is the simplest one: a std::vector.
+ **/
+class CbmTzdDigiData {
+
+public:
+  std::vector<CbmTzdDigi> fDigis = {};  ///< Data vector
+
+  friend class boost::serialization::access;
+
+  /** @brief BOOST serializer**/
+  template<class Archive>
+  void serialize(Archive& ar, const unsigned int /*version*/)
+  {
+    ar& fDigis;
+  }
+
+  /** @brief Clear content **/
+  void Clear() { fDigis.clear(); }
+
+  // --- ROOT serializer
+#ifndef NO_ROOT
+  ClassDefNV(CbmTzdDigiData, 1);
+#endif
+};
+
+#endif
-- 
GitLab