From d9b8b7c4ef5d3d24effbee8ce8f3bc48f767e009 Mon Sep 17 00:00:00 2001 From: Felix Weiglhofer <weiglhofer@fias.uni-frankfurt.de> Date: Tue, 27 Jun 2023 14:58:43 +0000 Subject: [PATCH] algo::Unpack: Generalize ParallelMsLoop function. --- algo/unpack/Unpack.cxx | 18 ++++++++++-------- algo/unpack/Unpack.h | 12 +++++++----- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/algo/unpack/Unpack.cxx b/algo/unpack/Unpack.cxx index b0b1c2aa95..b4df2a746c 100644 --- a/algo/unpack/Unpack.cxx +++ b/algo/unpack/Unpack.cxx @@ -30,7 +30,7 @@ namespace cbm::algo if (DetectorEnabled(fles::SubsystemIdentifier::STS)) { xpu::scoped_timer t1("STS"); - ParallelMsLoop(digiTs.fData.fSts.fDigis, monitor.fSts, *timeslice, 0x20); + ParallelMsLoop(fParallelStsSetup, digiTs.fData.fSts.fDigis, monitor.fSts, *timeslice, fAlgoSts, 0x20); } // --- Component loop @@ -342,14 +342,16 @@ namespace cbm::algo // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- - void Unpack::ParallelMsLoop(std::vector<CbmStsDigi>& digisOut, std::vector<UnpackStsMonitorData>& monitorOut, - const fles::Timeslice& ts, u8 sys_ver) + template<class Digi, class UnpackAlgo, class Monitor> + void Unpack::ParallelMsLoop(ParallelSetup<Digi, Monitor>& setup, std::vector<Digi>& digisOut, + std::vector<Monitor>& monitorOut, const fles::Timeslice& ts, + const std::map<u16, UnpackAlgo>& algos, u8 sys_ver) { - const auto& msContent = fParallelStsSetup.msContent; - const auto& msDesc = fParallelStsSetup.msDescriptors; - const auto& msEqIds = fParallelStsSetup.msEquipmentIds; - auto& monitor = fParallelStsSetup.msMonitorData; - auto& msDigis = fParallelStsSetup.msDigis; + const auto& msContent = setup.msContent; + const auto& msDesc = setup.msDescriptors; + const auto& msEqIds = setup.msEquipmentIds; + auto& monitor = setup.msMonitorData; + auto& msDigis = setup.msDigis; size_t numMs = msDigis.size(); xpu::push_timer("Unpack"); diff --git a/algo/unpack/Unpack.h b/algo/unpack/Unpack.h index 26189dd835..dd87b0dd2d 100644 --- a/algo/unpack/Unpack.h +++ b/algo/unpack/Unpack.h @@ -131,12 +131,13 @@ namespace cbm::algo } private: // types + template<class Digi, class Monitor> struct ParallelSetup { std::vector<u16> msEquipmentIds; std::vector<fles::MicrosliceDescriptor> msDescriptors; std::vector<const u8*> msContent; - std::vector<std::vector<sts::Digi>> msDigis; - std::vector<UnpackStsMonitorData> msMonitorData; + std::vector<std::vector<Digi>> msDigis; + std::vector<Monitor> msMonitorData; }; private: // methods @@ -150,8 +151,9 @@ namespace cbm::algo void ParallelInit(const fles::Timeslice& timeslice); /** @brief Parallel microslice loop **/ - void ParallelMsLoop(std::vector<CbmStsDigi>& digisOut, std::vector<UnpackStsMonitorData>& monitor, - const fles::Timeslice& ts, u8 sys_ver); + template<class Digi, class UnpackAlgo, class Monitor> + void ParallelMsLoop(ParallelSetup<Digi, Monitor>& setup, std::vector<Digi>& digisOut, std::vector<Monitor>& monitor, + const fles::Timeslice& ts, const std::map<u16, UnpackAlgo>& algos, u8 sys_ver); private: // members @@ -186,7 +188,7 @@ namespace cbm::algo {fles::SubsystemIdentifier::T0, 0}, {fles::SubsystemIdentifier::TRD, 1300}, {fles::SubsystemIdentifier::TRD2D, -510}}; /** @brief Parallel STS Setup */ - ParallelSetup fParallelStsSetup = {}; + ParallelSetup<sts::Digi, UnpackStsMonitorData> fParallelStsSetup = {}; }; } // namespace cbm::algo -- GitLab