diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt index a70b0872c98516d229715c67c7f86b14d8102a83..f0d829c4b091aecb445f0e3685ddec5ca5925243 100644 --- a/algo/CMakeLists.txt +++ b/algo/CMakeLists.txt @@ -143,6 +143,9 @@ set(SRCS detectors/rich/ReadoutConfig.cxx detectors/rich/Unpack.cxx detectors/rich/UnpackMS.cxx + detectors/pasta/Unpack.cxx + detectors/pasta/UnpackMS.cxx + detectors/pasta/ReadoutConfig.cxx global/ParFiles.cxx global/StorableRecoResults.cxx global/Reco.cxx @@ -337,6 +340,7 @@ install(DIRECTORY base/gpu TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY data/sts TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY detectors/bmon TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY detectors/much TYPE INCLUDE FILES_MATCHING PATTERN "*.h") +install(DIRECTORY detectors/pasta TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY detectors/sts TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY detectors/tof TYPE INCLUDE FILES_MATCHING PATTERN "*.h") install(DIRECTORY detectors/trd TYPE INCLUDE FILES_MATCHING PATTERN "*.h") diff --git a/algo/base/AuxDigiData.h b/algo/base/AuxDigiData.h index e464da7e281fbb57a33557ccf43ff98947fd2767..0f67256afce2db99aaed328a4cfc9eea55376bbc 100644 --- a/algo/base/AuxDigiData.h +++ b/algo/base/AuxDigiData.h @@ -13,6 +13,7 @@ #include "bmon/UnpackMS.h" #include "much/UnpackMS.h" #include "rich/UnpackMS.h" +#include "pasta/UnpackMS.h" #include "sts/UnpackMS.h" #include "tof/UnpackMS.h" #include "trd/UnpackMS.h" @@ -28,6 +29,7 @@ namespace cbm::algo UnpackAux<bmon::UnpackAuxData> fBmon; UnpackAux<much::UnpackAuxData> fMuch; UnpackAux<rich::UnpackAuxData> fRich; + UnpackAux<pasta::UnpackAuxData> fPasta; UnpackAux<sts::UnpackAuxData> fSts; UnpackAux<tof::UnpackAuxData> fTof; UnpackAux<trd::UnpackAuxData> fTrd; diff --git a/algo/base/DigiData.h b/algo/base/DigiData.h index 09b82d933478c57b65087b93e1d0a799120d287b..14f8ec848df3c1ef88d4b1cd148f1ff0940f7ae8 100644 --- a/algo/base/DigiData.h +++ b/algo/base/DigiData.h @@ -12,6 +12,7 @@ #include "CbmMuchDigi.h" #include "CbmPsdDigi.h" #include "CbmRichDigi.h" +#include "CbmPastaDigi.h" #include "CbmStsDigi.h" #include "CbmTofDigi.h" #include "CbmTrdDigi.h" @@ -39,6 +40,7 @@ namespace cbm::algo PODVector<CbmRichDigi> fRich; ///< Unpacked RICH digis PODVector<CbmPsdDigi> fPsd; ///< Unpacked PSD digis PODVector<CbmFsdDigi> fFsd; ///< Unpacked FSD digis + PODVector<CbmPastaDigi> fPasta;///< Unpacked PASTA digis DigiData(); ~DigiData(); diff --git a/algo/data/CMakeLists.txt b/algo/data/CMakeLists.txt index 717ba53896c880649c4c07c1ff010fad8c14551b..e65eaba58eff30b3eb3b0fb5836266d42eb8bf0f 100644 --- a/algo/data/CMakeLists.txt +++ b/algo/data/CMakeLists.txt @@ -32,6 +32,7 @@ set(SRCS ${OFFLINE_DATA_DIR}/fsd/CbmFsdDigi.cxx ${OFFLINE_DATA_DIR}/fsd/CbmFsdAddress.cxx + ${OFFLINE_DATA_DIR}/pasta/CbmPastaDigi.cxx ${OFFLINE_DATA_DIR}/raw/CriGet4Mess001.cxx ${OFFLINE_DATA_DIR}/raw/StsXyterMessage.cxx @@ -50,6 +51,7 @@ target_include_directories(OnlineData PUBLIC ${OFFLINE_DATA_DIR}/tof PUBLIC ${OFFLINE_DATA_DIR}/psd PUBLIC ${OFFLINE_DATA_DIR}/fsd + PUBLIC ${OFFLINE_DATA_DIR}/pasta PUBLIC ${OFFLINE_DATA_DIR}/global PUBLIC ${OFFLINE_DATA_DIR}/raw ) diff --git a/algo/detectors/pasta/ReadoutConfig.cxx b/algo/detectors/pasta/ReadoutConfig.cxx new file mode 100644 index 0000000000000000000000000000000000000000..16c05d24847b004a831aea3735de2bccc17753dc --- /dev/null +++ b/algo/detectors/pasta/ReadoutConfig.cxx @@ -0,0 +1,5 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer] */ + +#include "ReadoutConfig.h" diff --git a/algo/detectors/pasta/ReadoutConfig.h b/algo/detectors/pasta/ReadoutConfig.h new file mode 100644 index 0000000000000000000000000000000000000000..aca3b205e701a1cdca17e754800fd5b224203b45 --- /dev/null +++ b/algo/detectors/pasta/ReadoutConfig.h @@ -0,0 +1,14 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer] */ + +#pragma once + +namespace cbm::algo::pasta { + +class ReadoutConfig { + +}; + + +} diff --git a/algo/detectors/pasta/Unpack.cxx b/algo/detectors/pasta/Unpack.cxx new file mode 100644 index 0000000000000000000000000000000000000000..8d3a6d0456100f2b5614e455e910c1e35e0c0a29 --- /dev/null +++ b/algo/detectors/pasta/Unpack.cxx @@ -0,0 +1,12 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer] */ + +#include "Unpack.h" + +namespace cbm { +namespace algo { +namespace pasta { +} // pasta +} // algo +} // cbm \ No newline at end of file diff --git a/algo/detectors/pasta/Unpack.h b/algo/detectors/pasta/Unpack.h new file mode 100644 index 0000000000000000000000000000000000000000..137f7aa985833bd184ac879ee98c9020be09e9ca --- /dev/null +++ b/algo/detectors/pasta/Unpack.h @@ -0,0 +1,29 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer] */ + +#pragma once +#include <CommonUnpacker.h> +#include <Timeslice.hpp> + +#include "CbmRichDigi.h" +#include "ReadoutConfig.h" +#include "UnpackMS.h" + +namespace cbm::algo::pasta { + namespace detail { + using UnpackBase = CommonUnpacker<CbmRichDigi, UnpackMonitorData, UnpackAuxData>; + } + + class Unpack : public detail::UnpackBase { + public: + using Result_t = detail::UnpackBase::Result_t; + + Unpack(const ReadoutConfig &readout); + + Result_t operator()(const fles::Timeslice &) const; + + private: + ReadoutConfig fReadout; + }; +} // cbm::algo::pasta diff --git a/algo/detectors/pasta/UnpackMS.cxx b/algo/detectors/pasta/UnpackMS.cxx new file mode 100644 index 0000000000000000000000000000000000000000..2cfb45b65ddec51c948502aae82580c89c6fc716 --- /dev/null +++ b/algo/detectors/pasta/UnpackMS.cxx @@ -0,0 +1,5 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer], Pascal Raisig, Dominik Smith */ + +#include "UnpackMS.h" diff --git a/algo/detectors/pasta/UnpackMS.h b/algo/detectors/pasta/UnpackMS.h new file mode 100644 index 0000000000000000000000000000000000000000..ce169a69edcb260f286bb31e54483d08399deffc --- /dev/null +++ b/algo/detectors/pasta/UnpackMS.h @@ -0,0 +1,17 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer], Pascal Raisig, Dominik Smith */ + +#pragma once + +namespace cbm::algo::pasta { + + class UnpackAuxData {}; + +class UnpackMS { + +}; + +} + + diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index 0f192df1b6c68934269a1eea7e5561b73dd6aa5d..1085ecd75834da0e3eded8ab9acf6cf2950cb7f1 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -27,6 +27,7 @@ #include "qa/QaManager.h" #include "qa/hitfind/BmonHitfindQa.h" #include "rich/Unpack.h" +#include "pasta/Unpack.h" #include "sts/ChannelMaskSet.h" #include "sts/HitfinderChain.h" #include "sts/Unpack.h" @@ -140,8 +141,10 @@ void Reco::Init(const Options& opts) } if (Opts().Has(Subsystem::RICH) && Opts().Has(Step::Unpack)) { - rich::ReadoutConfig cfg{}; - fRichUnpack = std::make_unique<rich::Unpack>(cfg); + rich::ReadoutConfig richCfg{}; + fRichUnpack = std::make_unique<rich::Unpack>(richCfg); + pasta::ReadoutConfig pastaCfg{}; + fPastaUnpack = std::make_unique<pasta::Unpack>(pastaCfg); } if (Opts().Has(Subsystem::STS) && Opts().Has(Step::Unpack)) { @@ -320,6 +323,7 @@ RecoResults Reco::Run(const fles::Timeslice& ts) std::tie(digis.fBmon, auxDigis.fBmon) = RunUnpacker(fBmonUnpack, ts); std::tie(digis.fMuch, auxDigis.fMuch) = RunUnpacker(fMuchUnpack, ts); std::tie(digis.fRich, auxDigis.fRich) = RunUnpacker(fRichUnpack, ts); + std::tie(digis.fPasta, auxDigis.fPasta) = RunUnpacker(fPastaUnpack, ts); std::tie(digis.fSts, auxDigis.fSts) = RunUnpacker(fStsUnpack, ts); std::tie(digis.fTof, auxDigis.fTof) = RunUnpacker(fTofUnpack, ts); std::tie(digis.fTrd, auxDigis.fTrd) = RunUnpacker(fTrdUnpack, ts); @@ -332,7 +336,7 @@ RecoResults Reco::Run(const fles::Timeslice& ts) L_(info) << "TS contains Digis: STS=" << digis.fSts.size() << " MUCH=" << digis.fMuch.size() << " TOF=" << digis.fTof.size() << " BMON=" << digis.fBmon.size() << " TRD=" << digis.fTrd.size() << " TRD2D=" << digis.fTrd2d.size() << " RICH=" << digis.fRich.size() << " PSD=" << digis.fPsd.size() - << " FSD=" << digis.fFsd.size(); + << " FSD=" << digis.fFsd.size() << " PASTA=" << digis.fPasta.size(); // --- Raw digi QAs if (fSender != nullptr && Opts().Has(Subsystem::STS)) { fStsDigiQa->RegisterDigiData(&digis.fSts); @@ -444,6 +448,7 @@ RecoResults Reco::Run(const fles::Timeslice& ts) results.trdDigis = std::move(digis.fTrd); results.tofDigis = std::move(digis.fTof); results.richDigis = std::move(digis.fRich); + results.pastaDigis = std::move(digis.fPasta); } if (Opts().HasOutput(RecoData::Track)) { results.tracks = std::move(recoData.tracks); diff --git a/algo/global/Reco.h b/algo/global/Reco.h index 35cb5c34626c8dc84ba994478e83a305522cfd98..3ccb4b5ea1b7e0542d05e99dea74eabb1c38e9f8 100644 --- a/algo/global/Reco.h +++ b/algo/global/Reco.h @@ -46,6 +46,11 @@ namespace cbm::algo class Unpack; } + namespace pasta + { + class Unpack; + } + namespace sts { class Unpack; @@ -166,6 +171,9 @@ namespace cbm::algo // RICH std::unique_ptr<rich::Unpack> fRichUnpack; + // PASTA + std::unique_ptr<pasta::Unpack> fPastaUnpack; + // STS std::unique_ptr<sts::Unpack> fStsUnpack; std::unique_ptr<sts::DigiQa> fStsDigiQa; ///< Raw STS-digis QA diff --git a/algo/global/RecoResults.h b/algo/global/RecoResults.h index 3bcee8be6acd66388ab8e0043313888c0f35c615..ee0bd49c78e495a7e0368467a75be6dbb3e79eeb 100644 --- a/algo/global/RecoResults.h +++ b/algo/global/RecoResults.h @@ -36,6 +36,7 @@ namespace cbm::algo PODVector<CbmTrdDigi> trdDigis; PODVector<CbmTofDigi> tofDigis; PODVector<CbmRichDigi> richDigis; + PODVector<CbmPastaDigi> pastaDigis; std::vector<DigiEvent> events; diff --git a/algo/global/StorableRecoResults.h b/algo/global/StorableRecoResults.h index 5560b7d1ad1998bfacc2b35e0f64335acc571820..ae911f774f91c781db43bc0daa5c1fd28bace15f 100644 --- a/algo/global/StorableRecoResults.h +++ b/algo/global/StorableRecoResults.h @@ -70,6 +70,9 @@ namespace cbm::algo std::vector<CbmRichDigi>& RichDigis() { return fRichDigis; } const std::vector<CbmRichDigi>& RichDigis() const { return fRichDigis; } + std::vector<CbmPastaDigi>& PastaDigis() { return fPastaDigis; } + const std::vector<CbmPastaDigi>& PastaDigis() const { return fPastaDigis; } + std::vector<CbmDigiEvent>& DigiEvents() { return fDigiEvents; } const std::vector<CbmDigiEvent>& DigiEvents() const { return fDigiEvents; } @@ -106,6 +109,7 @@ namespace cbm::algo std::vector<CbmTrdDigi> fTrdDigis; std::vector<CbmTofDigi> fTofDigis; std::vector<CbmRichDigi> fRichDigis; + std::vector<CbmPastaDigi> fPastaDigis; // Event builder/filter output std::vector<CbmDigiEvent> fDigiEvents; @@ -142,6 +146,7 @@ namespace cbm::algo ar& fTrdDigis; ar& fTofDigis; ar& fRichDigis; + ar& fPastaDigis; ar& fDigiEvents; diff --git a/core/data/CMakeLists.txt b/core/data/CMakeLists.txt index b5b59dd07855d9e7f8fb17bbd151c570757e7563..3cc94655929a30f2d7ed369213b33fc329c73b33 100644 --- a/core/data/CMakeLists.txt +++ b/core/data/CMakeLists.txt @@ -15,6 +15,7 @@ set(INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/rich ${CMAKE_CURRENT_SOURCE_DIR}/psd ${CMAKE_CURRENT_SOURCE_DIR}/fsd + ${CMAKE_CURRENT_SOURCE_DIR}/pasta ${CMAKE_CURRENT_SOURCE_DIR}/global ) @@ -66,6 +67,8 @@ set(SRCS rich/CbmRichTrbDigi.cxx rich/CbmRichDigi.cxx + pasta/CbmPastaDigi.cxx + much/CbmMuchPixelHit.cxx much/CbmMuchPoint.cxx much/CbmMuchCluster.cxx @@ -134,8 +137,8 @@ SET_SOURCE_FILES_PROPERTIES(tof/etof/star_rhicf.c PROPERTIES COMPILE_FLAGS -Wno- list(APPEND HEADERS base/CbmDigiData.h global/CbmDigiEvent.h global/CbmDigiTimeslice.h -bmon/CbmBmonDigiData.h sts/CbmStsDigiData.h much/CbmMuchDigiData.h rich/CbmRichDigiData.h trd/CbmTrdDigiData.h -tof/CbmTofDigiData.h psd/CbmPsdDigiData.h fsd/CbmFsdDigiData.h trd/CbmTrdFexMessageSpadic.h) +bmon/CbmBmonDigiData.h sts/CbmStsDigiData.h much/CbmMuchDigiData.h rich/CbmRichDigiData.h pasta/CbmPastaDigiData.h +trd/CbmTrdDigiData.h tof/CbmTofDigiData.h psd/CbmPsdDigiData.h fsd/CbmFsdDigiData.h trd/CbmTrdFexMessageSpadic.h) set(LIBRARY_NAME CbmData) set(LINKDEF ${LIBRARY_NAME}LinkDef.h) @@ -166,6 +169,7 @@ Install(FILES psd/CbmPsdDigiData.h fsd/CbmFsdDigiData.h rich/CbmRichDigiData.h rich/CbmRichRingLight.h + pasta/CbmPastaDigiData.h sts/CbmStsDigiData.h trd/CbmTrdDigiData.h tof/CbmTofDigiData.h diff --git a/core/data/base/CbmDigiData.h b/core/data/base/CbmDigiData.h index c864e8ba6fcef44cbdfc3a1f5f4a5886e4d2428f..49f4ac8ff888b5b38f6a6c688f500b1e6746b7eb 100644 --- a/core/data/base/CbmDigiData.h +++ b/core/data/base/CbmDigiData.h @@ -14,6 +14,7 @@ #include "CbmStsDigiData.h" #include "CbmTofDigiData.h" #include "CbmTrdDigiData.h" +#include "CbmPastaDigiData.h" #include <boost/serialization/access.hpp> #include <boost/serialization/base_object.hpp> @@ -41,6 +42,7 @@ class CbmDigiData { CbmTofDigiData fTof; ///< TOF data CbmPsdDigiData fPsd; ///< PSD data CbmFsdDigiData fFsd; ///< FSD data + CbmFsdDigiData fPasta; ///< PASTA data friend class boost::serialization::access; /** @brief BOOST serializer**/ @@ -57,6 +59,7 @@ class CbmDigiData { ar& fPsd; ar& fFsd; ar& fRich; + ar& fPasta; } // --- ROOT serializer @@ -76,6 +79,7 @@ class CbmDigiData { fPsd.Clear(); fFsd.Clear(); fRich.Clear(); + fPasta.Clear(); } /** @brief Size of detector data **/ @@ -92,6 +96,7 @@ class CbmDigiData { case ECbmModuleId::kRich: return fRich.Size(); break; case ECbmModuleId::kFsd: return fFsd.Size(); break; default: return 0; break; + //TODO add PASTA } } @@ -108,6 +113,7 @@ class CbmDigiData { size += fPsd.Size() * sizeof(CbmPsdDigi); size += fFsd.Size() * sizeof(CbmFsdDigi); size += fRich.Size() * sizeof(CbmRichDigi); + size += fPasta.Size() * sizeof(CbmPastaDigi); return size; } }; diff --git a/core/data/pasta/CbmPastaDigi.cxx b/core/data/pasta/CbmPastaDigi.cxx new file mode 100644 index 0000000000000000000000000000000000000000..445f9a6df680ad36ba248cb8e292f46ad0842231 --- /dev/null +++ b/core/data/pasta/CbmPastaDigi.cxx @@ -0,0 +1,5 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer] */ + +#include "CbmPastaDigi.h" diff --git a/core/data/pasta/CbmPastaDigi.h b/core/data/pasta/CbmPastaDigi.h new file mode 100644 index 0000000000000000000000000000000000000000..70382bf7955721839998f815c25829762f4c0900 --- /dev/null +++ b/core/data/pasta/CbmPastaDigi.h @@ -0,0 +1,16 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer] */ + +#ifndef CBMPASTADIGI_H +#define CBMPASTADIGI_H + + + +class CbmPastaDigi { + +}; + + + +#endif //CBMPASTADIGI_H diff --git a/core/data/pasta/CbmPastaDigiData.h b/core/data/pasta/CbmPastaDigiData.h new file mode 100644 index 0000000000000000000000000000000000000000..e44c9e1e7469b2895925cb41166451ea28a1f77a --- /dev/null +++ b/core/data/pasta/CbmPastaDigiData.h @@ -0,0 +1,14 @@ +/* Copyright (C) 2025 Jagiellonian University, Krakow + SPDX-License-Identifier: GPL-3.0-only + Authors: Bartosz Sobol [committer] */ + +#ifndef CBMPASTADIGIDATA_H +#define CBMPASTADIGIDATA_H + +#include "CbmPastaDigi.h" + +class CbmPastaDigiData{ + +}; + +#endif //CBMPASTADIGIDATA_H diff --git a/reco/app/cbmreco/main.cxx b/reco/app/cbmreco/main.cxx index 6dd23efc4481d3854e2f76af8d715f66528521a4..2317119d5346b21a1030a66b58d5b9024f35f37d 100644 --- a/reco/app/cbmreco/main.cxx +++ b/reco/app/cbmreco/main.cxx @@ -43,6 +43,7 @@ std::shared_ptr<StorableRecoResults> makeStorableRecoResults(const fles::Timesli storable->TrdDigis() = ToStdVector(results.trdDigis); storable->TofDigis() = ToStdVector(results.tofDigis); storable->RichDigis() = ToStdVector(results.richDigis); + storable->PastaDigis() = ToStdVector(results.pastaDigis); storable->StsClusters() = results.stsClusters; storable->StsHits() = results.stsHits;