From e878ebfe444d2286bbd0a39b388e8796a625885e Mon Sep 17 00:00:00 2001 From: Volker Friese <v.friese@gsi.de> Date: Mon, 12 Dec 2022 12:43:33 +0100 Subject: [PATCH] Make CbmDigiData, CbmDigiEvent and CbmDigiTimeslice classes (previously structs) with ROOT streamers --- core/data/base/CbmDigiData.h | 67 ++++++++++++----------------- core/data/global/CbmDigiEvent.h | 29 +++++++++++-- core/data/global/CbmDigiTimeslice.h | 21 ++++++--- core/data/tof/CbmTofDigiData.h | 1 + reco/mq/CbmDevTrigger.h | 2 +- reco/mq/CbmDevUnpack.h | 2 +- reco/tasks/CbmTaskTriggerDigi.h | 2 +- 7 files changed, 71 insertions(+), 53 deletions(-) diff --git a/core/data/base/CbmDigiData.h b/core/data/base/CbmDigiData.h index c8b8e20385..a6fe40612a 100644 --- a/core/data/base/CbmDigiData.h +++ b/core/data/base/CbmDigiData.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt +/* Copyright (C) 2021-2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt SPDX-License-Identifier: GPL-3.0-only Authors: Volker Friese [committer] */ @@ -6,60 +6,40 @@ #ifndef CBMDIGIDATA_H #define CBMDIGIDATA_H 1 -#include "CbmMuchDigi.h" #include "CbmMuchDigiData.h" -#include "CbmPsdDigi.h" #include "CbmPsdDigiData.h" -#include "CbmRichDigi.h" #include "CbmRichDigiData.h" -#include "CbmStsDigi.h" #include "CbmStsDigiData.h" -#include "CbmTofDigi.h" #include "CbmTofDigiData.h" -#include "CbmTrdDigi.h" #include "CbmTrdDigiData.h" #include <boost/serialization/access.hpp> -#include <boost/serialization/vector.hpp> +#include <boost/serialization/base_object.hpp> -#include <vector> +#ifndef NO_ROOT +#include <Rtypes.h> // for ClassDef +#endif -/** @struct DigiVec - ** @brief Digi collection in a std::vector - ** - ** This is the simplest form of a collection of detector digis. A detector-specific - ** implementation may choose a different representation (i.e., several vectors) or - ** add meta-data. +/** @class CbmDigiData + ** @brief Collection of digis from all detector systems + ** @author Volker Friese <v.friese@gsi.de> + ** @since 7.12.2022 + ** @version 1.0 **/ -template<class Digi> -struct DigiVec { - std::vector<Digi> fDigis; - friend class boost::serialization::access; - template<class Archive> - void serialize(Archive& ar, const unsigned int /*version*/) - { - ar& fDigis; - } - void Clear() { fDigis.clear(); } -}; +class CbmDigiData { +public: + CbmTofDigiData fT0; ///< Beam monitor data + CbmStsDigiData fSts; ///< STS data + CbmMuchDigiData fMuch; ///< MUCH data + CbmRichDigiData fRich; ///< RICH data + CbmTrdDigiData fTrd; ///< TRD data + CbmTofDigiData fTof; ///< TOF data + CbmPsdDigiData fPsd; ///< PSD data -/** @struct CbmDigiData - ** @brief Collection of digis from all detector systems - ** - ** If no detector-specific collection class is provided, the simplest form (DigiVector) - ** is used. - **/ -struct CbmDigiData { friend class boost::serialization::access; - CbmTofDigiData fT0; - CbmStsDigiData fSts; - CbmMuchDigiData fMuch; - CbmRichDigiData fRich; - CbmTrdDigiData fTrd; - CbmTofDigiData fTof; - CbmPsdDigiData fPsd; + /** @brief BOOST serializer**/ template<class Archive> void serialize(Archive& ar, const unsigned int /*version*/) { @@ -71,6 +51,13 @@ struct CbmDigiData { ar& fPsd; ar& fRich; } + + // --- ROOT serializer +#ifndef NO_ROOT + ClassDefNV(CbmDigiData, 1); +#endif + + /** @brief Clear content **/ void Clear() { fT0.Clear(); diff --git a/core/data/global/CbmDigiEvent.h b/core/data/global/CbmDigiEvent.h index 5f4dfd96c8..189755391c 100644 --- a/core/data/global/CbmDigiEvent.h +++ b/core/data/global/CbmDigiEvent.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt +/* Copyright (C) 2021-22 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt SPDX-License-Identifier: GPL-3.0-only Authors: Volker Friese [committer] */ @@ -10,14 +10,22 @@ #include <boost/serialization/access.hpp> -/** @struct CbmDigiEvent - ** @brief Container of digis from all detectors in an event +/** @class CbmDigiEvent + ** @brief Collection of digis from all detector systems within one event + ** @author Volker Friese <v.friese@gsi.de> + ** @since 7.12.2022 + ** @version 1.0 **/ -struct CbmDigiEvent { +class CbmDigiEvent { + +public: CbmDigiData fData; ///< Event data uint64_t fNumber; ///< Event identifier double fTime; ///< Event trigger time [ns] + + friend class boost::serialization::access; + /** @brief BOOST serializer**/ template<class Archive> void serialize(Archive& ar, const unsigned int /*version*/) { @@ -25,6 +33,19 @@ struct CbmDigiEvent { ar& fNumber; ar& fTime; } + + // --- ROOT serializer +#ifndef NO_ROOT + ClassDefNV(CbmDigiEvent, 1); +#endif + + /** @brief Clear content **/ + void Clear() + { + fData.Clear(); + fNumber = 0; + fTime = 0.; + } }; #endif /* CBMDIGIEVENT_H */ diff --git a/core/data/global/CbmDigiTimeslice.h b/core/data/global/CbmDigiTimeslice.h index b6b9e0f29b..b4c0ace282 100644 --- a/core/data/global/CbmDigiTimeslice.h +++ b/core/data/global/CbmDigiTimeslice.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt +/* Copyright (C) 2021-2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt SPDX-License-Identifier: GPL-3.0-only Authors: Volker Friese [committer] */ @@ -12,19 +12,28 @@ #include <boost/serialization/access.hpp> -/** @struct CbmDigiTimeslice - ** @brief Container of digis from all detectors in a time slice +/** @class CbmDigiTimeslice + ** @brief Collection of digis from all detector systems within one timeslice + ** @author Volker Friese <v.friese@gsi.de> + ** @since 7.12.2022 + ** @version 1.0 **/ -struct CbmDigiTimeslice { - CbmDigiData fData; - fles::TimesliceDescriptor fDesc; +class CbmDigiTimeslice { + +public: + CbmDigiData fData; ///< Timeslice data + fles::TimesliceDescriptor fDesc; ///< Timeslice descriptor (metadata) + friend class boost::serialization::access; + /** @brief BOOST serializer**/ template<class Archive> void serialize(Archive& ar, const unsigned int /*version*/) { ar& fData; ar& fDesc; } + + /** @brief Clear content **/ void Clear() { fData.Clear(); diff --git a/core/data/tof/CbmTofDigiData.h b/core/data/tof/CbmTofDigiData.h index 45cabfbe8e..dcd73b1598 100644 --- a/core/data/tof/CbmTofDigiData.h +++ b/core/data/tof/CbmTofDigiData.h @@ -14,6 +14,7 @@ #include <boost/serialization/access.hpp> #include <boost/serialization/base_object.hpp> +#include <boost/serialization/vector.hpp> #include <vector> diff --git a/reco/mq/CbmDevTrigger.h b/reco/mq/CbmDevTrigger.h index ffe7acfe59..5ab19fdf16 100644 --- a/reco/mq/CbmDevTrigger.h +++ b/reco/mq/CbmDevTrigger.h @@ -28,7 +28,7 @@ #include <chrono> #include <vector> -struct CbmDigiTimeslice; +class CbmDigiTimeslice; class CbmTsEventHeader; class TimesliceMetaData; diff --git a/reco/mq/CbmDevUnpack.h b/reco/mq/CbmDevUnpack.h index 03bde82adb..af5a996e04 100644 --- a/reco/mq/CbmDevUnpack.h +++ b/reco/mq/CbmDevUnpack.h @@ -30,7 +30,7 @@ #include "UnpackSts.h" class TimesliceMetaData; -struct CbmDigiTimeslice; +class CbmDigiTimeslice; class CbmDevUnpack : public FairMQDevice { public: diff --git a/reco/tasks/CbmTaskTriggerDigi.h b/reco/tasks/CbmTaskTriggerDigi.h index 6106097984..3a6f0bf59d 100644 --- a/reco/tasks/CbmTaskTriggerDigi.h +++ b/reco/tasks/CbmTaskTriggerDigi.h @@ -19,7 +19,7 @@ class CbmDigiBranchBase; class CbmDigiManager; -struct CbmDigiTimeslice; +class CbmDigiTimeslice; using namespace std; -- GitLab