From 52291839bdc1be47802c87a06721f23b7e0dd373 Mon Sep 17 00:00:00 2001 From: "P.-A. Loizeau" <p.-a.loizeau@gsi.de> Date: Mon, 22 Nov 2021 18:15:38 +0100 Subject: [PATCH] Make CbmEvent, CbmDigiData and CbmDigiEvent streamable for mCBM MQ devices - Add copy constructor to CbmEvent - Define DigiData types and add members for the other CBM detectors in CbmDigiData(!MUCH beamtime digi usage!) - Add vector of CbmEvents, all DigiData types, CbmDigiEvent and vector of CbmDigiEvent to LinkDef to get ROOT streamers (needed to write to ROOT file) --- core/data/CMakeLists.txt | 3 +++ core/data/CbmEvent.cxx | 14 ++++++++++++++ core/data/CbmEvent.h | 4 ++-- core/data/DataLinkDef.h | 11 +++++++++++ core/data/base/CbmDigiData.h | 22 ++++++++++++++++++++++ core/data/test/global/CMakeLists.txt | 14 ++++++++++---- 6 files changed, 62 insertions(+), 6 deletions(-) diff --git a/core/data/CMakeLists.txt b/core/data/CMakeLists.txt index 08fdae3eb5..1ee4b62b81 100644 --- a/core/data/CMakeLists.txt +++ b/core/data/CMakeLists.txt @@ -137,6 +137,9 @@ Set(NO_DICT_SRCS # Mask warning from file provided by STAR SET_SOURCE_FILES_PROPERTIES(tof/etof/star_rhicf.c PROPERTIES COMPILE_FLAGS -Wno-pointer-sign) +CHANGE_FILE_EXTENSION(*.cxx *.h HEADERS "${SRCS}") +list(APPEND HEADERS base/CbmDigiData.h global/CbmDigiEvent.h) + set(LINKDEF DataLinkDef.h) set(LIBRARY_NAME CbmData) set(DEPENDENCIES Base) diff --git a/core/data/CbmEvent.cxx b/core/data/CbmEvent.cxx index 0146f3b783..84321c41e2 100644 --- a/core/data/CbmEvent.cxx +++ b/core/data/CbmEvent.cxx @@ -14,6 +14,20 @@ #include <string> // for char_traits #include <utility> // for pair +// ----- Add data to event --------------------------------------------- +CbmEvent::CbmEvent(const CbmEvent& rhs) + : TObject(rhs) + , fNumber(rhs.fNumber) + , fTimeStart(rhs.fTimeStart) + , fTimeEnd(rhs.fTimeEnd) + , fNofData(rhs.fNofData) + , fVertex(rhs.fVertex) + , fMatch(nullptr) + , fIndexMap(rhs.fIndexMap) +{ + if (fMatch) fMatch = new CbmMatch(*(rhs.fMatch)); +} +// ------------------------------------------------------------------------- // ----- Add data to event --------------------------------------------- void CbmEvent::AddData(ECbmDataType type, uint32_t index) diff --git a/core/data/CbmEvent.h b/core/data/CbmEvent.h index dbeeb141fb..67e6785431 100644 --- a/core/data/CbmEvent.h +++ b/core/data/CbmEvent.h @@ -54,6 +54,8 @@ public: { } + CbmEvent(const CbmEvent&); + CbmEvent(CbmEvent&&) = default; /** Destructor **/ @@ -207,10 +209,8 @@ private: /** Arrays of indices to data types **/ std::map<ECbmDataType, std::vector<uint32_t>> fIndexMap; - CbmEvent(const CbmEvent&); CbmEvent& operator=(const CbmEvent&); - ClassDef(CbmEvent, 2); }; diff --git a/core/data/DataLinkDef.h b/core/data/DataLinkDef.h index 4a734aacf4..66e9f013d6 100644 --- a/core/data/DataLinkDef.h +++ b/core/data/DataLinkDef.h @@ -133,6 +133,17 @@ #pragma link C++ class CbmDigiVector < CbmPsdDsp> + ; #pragma link C++ class vector < CbmEventStore> + ; +#pragma link C++ class std::vector < CbmEvent > + ; +#pragma link C++ class StsDigiData + ; +#pragma link C++ class MuchDigiData + ; +#pragma link C++ class RichDigiData + ; +#pragma link C++ class TrdDigiData + ; +#pragma link C++ class TofDigiData + ; +#pragma link C++ class PsdDigiData + ; +#pragma link C++ class CbmDigiData + ; +#pragma link C++ class CbmDigiEvent + ; +#pragma link C++ class std::vector < CbmDigiEvent > + ; + /* clang-format off */ #pragma read sourceClass="CbmStsDigi" version="[7]" targetClass="CbmStsDigi" \ source="int64_t fTime; int32_t fAddress; uint16_t fChannel; uint16_t fCharge" \ diff --git a/core/data/base/CbmDigiData.h b/core/data/base/CbmDigiData.h index 962fa632dc..10aa53796e 100644 --- a/core/data/base/CbmDigiData.h +++ b/core/data/base/CbmDigiData.h @@ -6,7 +6,12 @@ #ifndef CBMDIGIDATA_H #define CBMDIGIDATA_H 1 +#include "CbmMuchDigi.h" +#include "CbmPsdDigi.h" +#include "CbmRichDigi.h" #include "CbmStsDigi.h" +#include "CbmTofDigi.h" +#include "CbmTrdDigi.h" #include <boost/serialization/access.hpp> #include <boost/serialization/vector.hpp> @@ -35,6 +40,11 @@ struct DigiVec { /** Unless a detector-specific implementation for the digi data is present, the ** simplest form (std::vector) will be used. **/ typedef DigiVec<CbmStsDigi> StsDigiData; +typedef DigiVec<CbmMuchDigi> MuchDigiData; +typedef DigiVec<CbmRichDigi> RichDigiData; +typedef DigiVec<CbmTrdDigi> TrdDigiData; +typedef DigiVec<CbmTofDigi> TofDigiData; +typedef DigiVec<CbmPsdDigi> PsdDigiData; /** @struct CbmDigiData @@ -47,11 +57,23 @@ typedef DigiVec<CbmStsDigi> StsDigiData; **/ struct CbmDigiData { friend class boost::serialization::access; + TofDigiData fT0; StsDigiData fSts; + MuchDigiData fMuch; + RichDigiData fRich; + TrdDigiData fTrd; + TofDigiData fTof; + PsdDigiData fPsd; template<class Archive> void serialize(Archive& ar, const unsigned int /*version*/) { + ar& fT0; ar& fSts; + ar& fMuch; + ar& fTrd; + ar& fTof; + ar& fPsd; + ar& fRich; } }; diff --git a/core/data/test/global/CMakeLists.txt b/core/data/test/global/CMakeLists.txt index 30267f52c6..eeaa12a889 100644 --- a/core/data/test/global/CMakeLists.txt +++ b/core/data/test/global/CMakeLists.txt @@ -6,8 +6,14 @@ Set(INCLUDE_DIRECTORIES ${CBMDATA_DIR}/base ${CBMDATA_DIR}/global ${CBMDATA_DIR}/sts + ${CBMDATA_DIR}/much + ${CBMDATA_DIR}/rich + ${CBMDATA_DIR}/tof + ${CBMDATA_DIR}/psd + ${CBMDATA_DIR}/trd + ${CBMDATA_DIR}/mvd ${CBMDATA_DIR}/test/sts - ${CMAKE_SOURCE_DIR}/external/ipc/ipc/lib/fles_ipc + ${CMAKE_SOURCE_DIR}/external/ipc/ipc/lib/fles_ipc ${BASE_INCLUDE_DIRECTORIES} ${GTEST_INCLUDE_DIR} ) @@ -49,7 +55,7 @@ Set(CbmDigiEventSources ) CreateGTestExeAndAddTest(_GTestCbmDigiEvent "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}" "${CbmDigiEventSources}" "${DEPENDENCIES}" "") - + # --- Test CbmDigiTimeslice Set(CbmDigiTimesliceSources ${CBMDATA_DIR}/global/CbmDigiTimeslice.h @@ -57,7 +63,7 @@ Set(CbmDigiTimesliceSources ) CreateGTestExeAndAddTest(_GTestCbmDigiTimeslice "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}" "${CbmDigiTimesliceSources}" "${DEPENDENCIES}" "_GTestCbmDigiEvent") - + # --- Test CbmVertex Set(CbmVertexSources ${CBMDATA_DIR}/global/CbmVertex.cxx @@ -65,5 +71,5 @@ Set(CbmVertexSources ) CreateGTestExeAndAddTest(_GTestCbmVertex "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}" "${CbmVertexSources}" "${DEPENDENCIES}" "_GTestCbmDigiTimeslice") - + -- GitLab