CbmRoot
Loading...
Searching...
No Matches
tof/Unpack.cxx
Go to the documentation of this file.
1/* Copyright (C) 2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Felix Weiglhofer [committer], Dominik Smith */
4
5#include "Unpack.h"
6
8
9using namespace cbm::algo::tof;
10using fles::Subsystem;
11
12Unpack::Unpack(const ReadoutConfig& readout) : fReadout(readout)
13{
14 constexpr u8 SystemVersion = 0x00;
15 i32 SysTimeOffset = fReadout.GetSystemTimeOffset();
16
17 auto equipIdsTof = fReadout.GetEquipmentIds();
18 for (auto& equip : equipIdsTof) {
19 tof::UnpackPar par{};
20 const size_t numElinks = fReadout.GetNumElinks(equip);
21 for (size_t elink = 0; elink < numElinks; elink++) {
22 tof::UnpackElinkPar elinkPar;
23 elinkPar.fChannelUId = fReadout.Map(equip, elink); // Vector of TOF addresses for this elink
24 elinkPar.fTimeOffset = SysTimeOffset + fReadout.GetElinkTimeOffset(equip, elink); // Time offset for this elink
25 par.fElinkParams.push_back(elinkPar);
26 }
27 auto algo = std::make_unique<UnpackMS>(std::move(par));
28 fAlgos[{equip, SystemVersion}] = std::move(algo);
29 L_(debug) << "--- Configured equipment " << equip << " with " << numElinks << " elinks";
30 }
31
32 L_(info) << "--- Configured " << fAlgos.size() << " unpacker algorithms for TOF.";
33}
34
35Unpack::Result_t Unpack::operator()(const fles::Timeslice& ts) const { return DoUnpack(Subsystem::TOF, ts); }
#define L_(level)
Result_t DoUnpack(const fles::Subsystem subsystem, const fles::Timeslice &ts) const
std::map< UnpackKey, std::unique_ptr< Unpack_t > > fAlgos
int32_t GetElinkTimeOffset(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to time offset.
std::vector< uint32_t > Map(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to addresses per channel.
std::vector< uint16_t > GetEquipmentIds()
Equipment in the configuration.
i32 GetSystemTimeOffset() const
System time offset for TOF.
size_t GetNumElinks(uint16_t equipmentId)
Number of elinks of a component.
ReadoutConfig fReadout
Definition tof/Unpack.h:28
Unpack(const ReadoutConfig &readout)
detail::UnpackBase::Result_t Result_t
Definition tof/Unpack.h:21
Result_t operator()(const fles::Timeslice &) const
std::int32_t i32
Definition Definitions.h:20
std::uint8_t u8
Definition Definitions.h:17
TOF Unpacking parameters for one eLink / ASIC.
int32_t fTimeOffset
Time calibration parameter.
std::vector< uint32_t > fChannelUId
CbmTofAddress for different channels.
Parameters required for the STS unpacking (specific to one component)