CbmRoot
Loading...
Searching...
No Matches
bmon/ReadoutConfig.h
Go to the documentation of this file.
1/* Copyright (C) 2022-2025 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Dominik Smith [committer] */
4
5#pragma once
6
7#include "CbmYaml.h"
9
10#include <cstddef>
11#include <cstdint>
12#include <map>
13#include <vector>
14
15namespace cbm::algo::bmon
16{
17
22 struct ReadoutSetup {
23
24 struct CROB {
30
32 yaml::Property(&CROB::moduleId, "moduleId", "Unique ID of module the CROB resides in"),
33 yaml::Property(&CROB::rpcType, "rpcType", "add explanation."),
34 yaml::Property(&CROB::rpcSide, "rpcSide", "add explanation."),
35 yaml::Property(&CROB::nRPC, "nRPC", "number of RPCs."),
36 yaml::Property(&CROB::timeOffset, "timeOffset", "time offset for CROB"));
37 };
38
44 std::vector<CROB> crobs;
45 std::vector<u16> eqIds;
46
47 CBM_YAML_PROPERTIES(yaml::Property(&ReadoutSetup::timeOffset, "timeOffset", "Time offset for BMon"),
48 yaml::Property(&ReadoutSetup::nFebsPerComponent, "nFebsPerComponent", "Number of FEBs per component"),
49 yaml::Property(&ReadoutSetup::nAsicsPerFeb, "nAsicsPerFeb", "Number of ASICs per FEB"),
50 yaml::Property(&ReadoutSetup::nChannelsPerAsic, "nChannelsPerAsic", "Number of channels per ASIC"),
51 yaml::Property(&ReadoutSetup::nCrobPerComponent, "nCrobPerComponent", "Number of CROBs per component"),
52 yaml::Property(&ReadoutSetup::crobs, "crobs", "Crobs", {}, YAML::Flow),
53 yaml::Property(&ReadoutSetup::eqIds, "eqIds", "Array to hold the unique IDs (equipment ID) for all BMON DPBs" , YAML::Flow, YAML::Hex));
54
55 size_t NComponents() const { return eqIds.size(); }
56 size_t NCrobs() const { return crobs.size(); }
63
64 bool CheckBmonComp(uint32_t uCompId) const { return ((uCompId & 0xFFF0) == 0xABF0); }
65 bool CheckInnerComp(uint32_t uCompId) const { return ((uCompId & 0xFFF0) == 0xBBC0); }
66 };
67
68
70
71 public:
73 ReadoutConfig(const ReadoutSetup& pars);
74
76 virtual ~ReadoutConfig();
77
82
86 std::vector<uint16_t> GetEquipmentIds();
87
92 size_t GetNumElinks(uint16_t equipmentId);
93
99 std::vector<uint32_t> Map(uint16_t equipId, uint16_t elink);
100
106 int32_t GetElinkTimeOffset(uint16_t equipId, uint16_t elink);
107
108 private:
109 // --- BMon system time offset
110 int32_t fTimeOffset = 0;
111
112 // --- Bmon elink time offsets
113 // --- Map index: (equipment, elink), map value: (time offset)
114 std::map<uint16_t, std::vector<int32_t>> fTimeOffsetMap = {};
115
116 // --- Bmon readout map
117 // --- Map index: (equipment, elink, channel), map value: (TOF address)
118 std::map<uint16_t, std::vector<std::vector<uint32_t>>> fReadoutMap = {};
119
121 void Init(const ReadoutSetup& pars);
122
123 std::vector<int32_t> fviRpcChUId = {};
124
125 void BuildChannelsUidMap(const ReadoutSetup& pars);
126 void BuildChannelsUidMapBmon(uint32_t& uCh, uint32_t uGbtx, const ReadoutSetup& pars);
127 void BuildChannelsUidMapBmon_2022(uint32_t& uCh, uint32_t uGbtx, const ReadoutSetup& pars);
128 };
129
130} // namespace cbm::algo::bmon
int32_t GetElinkTimeOffset(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to time offset.
ReadoutConfig(const ReadoutSetup &pars)
Constructor.
std::map< uint16_t, std::vector< std::vector< uint32_t > > > fReadoutMap
std::vector< uint16_t > GetEquipmentIds()
Equipment in the configuration.
i32 GetSystemTimeOffset() const
System time offset for BMon.
void Init(const ReadoutSetup &pars)
Initialisation of readout map.
std::vector< uint32_t > Map(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to addresses per channel.
size_t GetNumElinks(uint16_t equipmentId)
Number of elinks of a component.
std::map< uint16_t, std::vector< int32_t > > fTimeOffsetMap
void BuildChannelsUidMap(const ReadoutSetup &pars)
void BuildChannelsUidMapBmon(uint32_t &uCh, uint32_t uGbtx, const ReadoutSetup &pars)
void BuildChannelsUidMapBmon_2022(uint32_t &uCh, uint32_t uGbtx, const ReadoutSetup &pars)
std::vector< int32_t > fviRpcChUId
UID/address for each channel, build from type, side and module.
int32_t i32
Definition Definitions.h:20
CBM_YAML_PROPERTIES(yaml::Property(&CROB::moduleId, "moduleId", "Unique ID of module the CROB resides in"), yaml::Property(&CROB::rpcType, "rpcType", "add explanation."), yaml::Property(&CROB::rpcSide, "rpcSide", "add explanation."), yaml::Property(&CROB::nRPC, "nRPC", "number of RPCs."), yaml::Property(&CROB::timeOffset, "timeOffset", "time offset for CROB"))
Readout setup / Hardware cabling for BMon Used to create the hardware mapping for the BMon unpacker.
bool CheckInnerComp(uint32_t uCompId) const
bool CheckBmonComp(uint32_t uCompId) const
CBM_YAML_PROPERTIES(yaml::Property(&ReadoutSetup::timeOffset, "timeOffset", "Time offset for BMon"), yaml::Property(&ReadoutSetup::nFebsPerComponent, "nFebsPerComponent", "Number of FEBs per component"), yaml::Property(&ReadoutSetup::nAsicsPerFeb, "nAsicsPerFeb", "Number of ASICs per FEB"), yaml::Property(&ReadoutSetup::nChannelsPerAsic, "nChannelsPerAsic", "Number of channels per ASIC"), yaml::Property(&ReadoutSetup::nCrobPerComponent, "nCrobPerComponent", "Number of CROBs per component"), yaml::Property(&ReadoutSetup::crobs, "crobs", "Crobs", {}, YAML::Flow), yaml::Property(&ReadoutSetup::eqIds, "eqIds", "Array to hold the unique IDs (equipment ID) for all BMON DPBs", YAML::Flow, YAML::Hex))