CbmRoot
Loading...
Searching...
No Matches
bmon/ReadoutConfig.h
Go to the documentation of this file.
1/* Copyright (C) 2022 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 "Definitions.h"
8#include "yaml/Property.h"
9#include "yaml/Yaml.h"
10
11#include <cstddef>
12#include <cstdint>
13#include <map>
14#include <vector>
15
16namespace cbm::algo::bmon
17{
18
23 struct ReadoutSetup {
24
25 struct CROB {
31
33 yaml::Property(&CROB::moduleId, "moduleId", "Unique ID of module the CROB resides in"),
34 yaml::Property(&CROB::rpcType, "rpcType", "add explanation."),
35 yaml::Property(&CROB::rpcSide, "rpcSide", "add explanation."),
36 yaml::Property(&CROB::nRPC, "nRPC", "number of RPCs."),
37 yaml::Property(&CROB::timeOffset, "timeOffset", "time offset for CROB"));
38 };
39
45 std::vector<CROB> crobs;
46 std::vector<u16> eqIds;
47
48 CBM_YAML_PROPERTIES(yaml::Property(&ReadoutSetup::timeOffset, "timeOffset", "Time offset for BMon"),
49 yaml::Property(&ReadoutSetup::nFebsPerComponent, "nFebsPerComponent", "Number of FEBs per component"),
50 yaml::Property(&ReadoutSetup::nAsicsPerFeb, "nAsicsPerFeb", "Number of ASICs per FEB"),
51 yaml::Property(&ReadoutSetup::nChannelsPerAsic, "nChannelsPerAsic", "Number of channels per ASIC"),
52 yaml::Property(&ReadoutSetup::nCrobPerComponent, "nCrobPerComponent", "Number of CROBs per component"),
53 yaml::Property(&ReadoutSetup::crobs, "crobs", "Crobs", {}, YAML::Flow),
54 yaml::Property(&ReadoutSetup::eqIds, "eqIds", "Array to hold the unique IDs (equipment ID) for all BMON DPBs" , YAML::Flow, YAML::Hex));
55
56 size_t NComponents() const { return eqIds.size(); }
57 size_t NCrobs() const { return crobs.size(); }
64
65 bool CheckBmonComp(uint32_t uCompId) const { return ((uCompId & 0xFFF0) == 0xABF0); }
66 bool CheckInnerComp(uint32_t uCompId) const { return ((uCompId & 0xFFF0) == 0xBBC0); }
67 };
68
69
71
72 public:
74 ReadoutConfig(const ReadoutSetup& pars);
75
77 virtual ~ReadoutConfig();
78
83
87 std::vector<uint16_t> GetEquipmentIds();
88
93 size_t GetNumElinks(uint16_t equipmentId);
94
100 std::vector<uint32_t> Map(uint16_t equipId, uint16_t elink);
101
107 int32_t GetElinkTimeOffset(uint16_t equipId, uint16_t elink);
108
109 private:
110 // --- BMon system time offset
111 int32_t fTimeOffset = 0;
112
113 // --- Bmon elink time offsets
114 // --- Map index: (equipment, elink), map value: (time offset)
115 std::map<uint16_t, std::vector<int32_t>> fTimeOffsetMap = {};
116
117 // --- Bmon readout map
118 // --- Map index: (equipment, elink, channel), map value: (TOF address)
119 std::map<uint16_t, std::vector<std::vector<uint32_t>>> fReadoutMap = {};
120
122 void Init(const ReadoutSetup& pars);
123
124 std::vector<int32_t> fviRpcChUId = {};
125
126 void BuildChannelsUidMap(const ReadoutSetup& pars);
127 void BuildChannelsUidMapBmon(uint32_t& uCh, uint32_t uGbtx, const ReadoutSetup& pars);
128 void BuildChannelsUidMapBmon_2022(uint32_t& uCh, uint32_t uGbtx, const ReadoutSetup& pars);
129 };
130
131} // namespace cbm::algo::bmon
std::map< uint16_t, std::vector< std::vector< uint32_t > > > fReadoutMap
void Init(const ReadoutSetup &pars)
Initialisation of readout map.
ReadoutConfig(const ReadoutSetup &pars)
Constructor.
int32_t GetElinkTimeOffset(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to time offset.
std::vector< uint16_t > GetEquipmentIds()
Equipment in the configuration.
i32 GetSystemTimeOffset() const
System time offset for BMon.
std::vector< uint32_t > Map(uint16_t equipId, uint16_t elink)
API: Mapping from component and elink to addresses per channel.
std::map< uint16_t, std::vector< int32_t > > fTimeOffsetMap
void BuildChannelsUidMap(const ReadoutSetup &pars)
size_t GetNumElinks(uint16_t equipmentId)
Number of elinks of a component.
void BuildChannelsUidMapBmon(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.
void BuildChannelsUidMapBmon_2022(uint32_t &uCh, uint32_t uGbtx, const ReadoutSetup &pars)
Property(T Class::*member, std::string_view key, std::string_view description) -> Property< Class, T >
std::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))