CbmRoot
Loading...
Searching...
No Matches
mvd/Unpack.cxx
Go to the documentation of this file.
1/* Copyright (C) 2025 IKF Frankfurt University, Frankfurt am Main
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Ajit Kumar [committer], Bartosz Sobol, Benedikt Gutsche */
4
6
8
9using namespace cbm::algo::mvd;
10using fles::Subsystem;
11
12Unpack::Unpack(const ReadoutConfig& readout) : fReadout(readout)
13{
14 constexpr u8 SystemVersion = 0x01;
15 i32 SystemTimeOffset = fReadout.GetSystemTimeOffset();
16
17 // Create one algorithm per component for MVD and configure it with parameters
18 auto equipIdsMvd = fReadout.GetEquipmentIds();
19 L_(info) << " mvd equipment ids " << equipIdsMvd.size();
20 for (auto& equip : equipIdsMvd) {
21 mvd::UnpackPar par{};
22 const size_t numElinks = fReadout.GetNumElinks(equip);
23 for (size_t elink = 0; elink < numElinks; elink++) {
24 mvd::UnpackElinkPar elinkPar;
25 elinkPar.fStation = fReadout.Map(equip, elink); // Vector of MVD addresses for this elink
26 elinkPar.fTimeOffset = SystemTimeOffset;
27 elinkPar.fPixX = fReadout.MaskMap(equip, elink);
28 elinkPar.fPixY = fReadout.MaskMap(equip, elink);
29 par.fElinkParams.push_back(elinkPar);
30 }
31 auto algo = std::make_unique<UnpackMS>(par, fReadout.GetFrameLength());
32 fAlgos[{equip, SystemVersion}] = std::move(algo);
33 L_(debug) << "--- Configured equipment " << equip << " with " << numElinks << " elinks";
34 }
35 L_(info) << "--- Configured " << fAlgos.size() << " unpacker algorithms for MVD.";
36}
37
38Unpack::Result_t Unpack::operator()(const fles::Timeslice& ts) const { return DoUnpack(Subsystem::MVD, ts); }
#define L_(level)
Result_t DoUnpack(const fles::Subsystem subsystem, const fles::Timeslice &ts) const
Unpack(const ReadoutConfig &readout)
detail::UnpackBase::Result_t Result_t
Definition mvd/Unpack.h:22
Result_t operator()(const fles::Timeslice &) const
ReadoutConfig fReadout
Definition mvd/Unpack.h:29
uint8_t u8
Definition Definitions.h:17
int32_t i32
Definition Definitions.h:20
MVD Unpacking parameters for one eLink / ASIC.
std::vector< uint8_t > fPixX
col masking flags
std::vector< uint32_t > fStation
CbmMuchAddress for different channels.
uint64_t fTimeOffset
Time calibration parameter.
std::vector< uint8_t > fPixY
row masking flags
Parameters required for the MVD unpacking (specific to one component)