24#include "fmt/format.h"
54 auto cfgIt = mROBoardConfigs.find(uniqueLocId);
55 if (cfgIt == mROBoardConfigs.end()) {
56 throw std::runtime_error(fmt::format(
"Cannot find local board {:02x}", uniqueLocId));
61void ROBoardConfigHandler::load(std::istream& in)
63 std::vector<ROBoardConfig> configurations;
64 std::string line, token;
65 while (std::getline(in, line)) {
66 if (std::count(line.begin(), line.end(),
' ') < 5) {
69 if (line.find(
'#') < line.find(
' ')) {
75 std::getline(ss, token,
' ');
76 cfg.boardId =
static_cast<uint8_t
>(std::strtol(token.c_str(),
nullptr, 16));
77 std::getline(ss, token,
' ');
78 cfg.configWord =
static_cast<uint32_t
>(std::strtol(token.c_str(),
nullptr, 16));
79 for (
int ich = 0; ich < 4; ++ich) {
80 std::getline(ss, token,
' ');
81 auto mask =
static_cast<uint32_t
>(std::strtol(token.c_str(),
nullptr, 16));
82 cfg.masksBP[ich] = (
mask >> 16) & 0xFFFF;
83 cfg.masksNBP[ich] = (
mask & 0xFFFF);
85 configurations.emplace_back(cfg);
90bool ROBoardConfigHandler::load(
const char*
filename)
93 if (!inFile.is_open()) {
102 std::vector<ROBoardConfig> configs;
103 for (
auto& cfgIt : mROBoardConfigs) {
104 configs.emplace_back(cfgIt.second);
107 std::sort(configs.begin(), configs.end(), [](
const ROBoardConfig& cfg1,
const ROBoardConfig& cfg2) { return cfg1.boardId < cfg2.boardId; });
109 for (
auto& cfg : configs) {
123 mROBoardConfigs.clear();
124 for (
auto& cfg : configurations) {
125 mROBoardConfigs.emplace(cfg.boardId, cfg);
131 for (
auto&
mask : masks) {
132 auto cfgIt = mROBoardConfigs.find(
mask.boardId);
134 bool isMasked =
false;
135 for (
int ich = 0; ich < 4; ++ich) {
136 if (
mask.patternsBP[ich] != 0xFFFF ||
mask.patternsNBP[ich] != 0xFFFF) {
142 cfgIt->second.configWord |= crateconfig::sMonmoff;
143 cfgIt->second.masksBP =
mask.patternsBP;
144 cfgIt->second.masksNBP =
mask.patternsNBP;
154 std::vector<ROBoardConfig> configurations;
157 for (
auto& locId : locIds) {
161 configurations.emplace_back(cfg);
163 return configurations;
171 for (
auto& cfg : configurations) {
172 cfg.configWord |= crateconfig::sXorY;
174 return configurations;
Mapper to convert the RO Ids to a format suitable for O2.
std::vector< uint8_t > getROBoardIds(uint16_t gbtUniqueId=0xFFFF) const
Returns the list of local board IDs (RO convention)
const ROBoardConfig getConfig(uint8_t uniqueLocId) const
void write(const char *filename) const
void updateMasks(const std::vector< ROBoard > &masks)
void set(const std::vector< ROBoardConfig > &configurations)
ROBoardConfigHandler()
Default constructor.
std::vector< ROBoardConfig > makeNoZSROBoardConfig(uint16_t gbtUniqueId=0xFFFF)
std::vector< ROBoardConfig > makeDefaultROBoardConfig(uint16_t gbtUniqueId=0xFFFF)
std::vector< ROBoardConfig > makeZSROBoardConfig(uint16_t gbtUniqueId=0xFFFF)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...