24 mDsMap.fill({-1, -1, -1});
25 int link_id, group_id,
de, ds_id[5];
26 std::istringstream in(std::string{content});
27 while (in >> link_id >> group_id >>
de >> ds_id[0] >> ds_id[1] >> ds_id[2] >> ds_id[3] >> ds_id[4]) {
28 for (
int i = 0;
i < 5;
i++) {
32 int ds_addr = group_id * 5 +
i;
33 int ix =
index(link_id, ds_addr);
37 mDsMap.at(ix) = {
de, ds_id[
i], 0};
44int MapFEC::index(uint32_t linkId, uint32_t dsAddr)
const
46 if (linkId < 0 || linkId > sMaxLinkId) {
49 if (dsAddr < 0 || dsAddr >= sMaxDs) {
52 return linkId * sMaxDs + dsAddr;
57 return std::count_if(mDsMap.begin(), mDsMap.end(), [](
const MapDualSampa&
m) {
58 return m.deId >= 0 && m.dsId >= 0 && m.bad == 0;
64 auto link_id = dsElecId.
solarId();
65 auto ds_addr = dsElecId.
elinkId();
71 int ix =
index(link_id, ds_addr);
75 if (mDsMap.at(ix).bad == 1) {
78 auto de = mDsMap.at(ix).deId;
79 auto dsid = mDsMap.at(ix).dsId;
80 if (
de >= 0 && dsid >= 0) {
A DsDetId is just a pair (detection element id, dual sampa id)
constexpr uint8_t elinkId() const
constexpr uint16_t solarId() const
solarId is an identifier that uniquely identify a solar board
std::optional< DsDetId > operator()(const DsElecId &elecId) const
MapFEC(std::string_view content)