34 {
35 MdtAmtReadOut amtReadOut{};
36 MdtHptdcReadOut hptdcReadOut{};
37 MdtCsmReadOut csmReadOut{};
38
40
41 using hit_vector = std::vector<const MdtAmtHit*>;
42 using tdc_map = std::map<uint16_t, hit_vector>;
43 using masked_map = std::map<uint16_t, uint32_t>;
44
45 tdc_map tdcMap;
46 masked_map maskedMap;
47
48
50 v.push_back(csmReadOut.
makeBOB(lvl1Id));
51
52
53
55 const bool isHPTDC =
m_mdtIdHelper->hasHPTDC(csm->identify());
56
58
60 v.push_back(csmReadOut.
makeBOL(csm->MrodId(), csm->CsmId()));
61
63 ++ctwc;
64
65
66 tdcMap.clear();
67 maskedMap.clear();
68 for (const MdtAmtHit* amt : *csm) {
70
71 if (!amt->isMasked()) {
72 tdcMap[tdcNum].push_back(amt);
73 } else {
74 maskedMap[tdcNum] = maskedMap[tdcNum] | (
int)
pow(2, amt->channelId());
75 }
76 }
77
78
80 tdc_map::const_iterator it_tdc = tdcMap.begin();
81 for (; it_tdc != tdcMap.end(); ++it_tdc) {
82
83
84 v.push_back((isHPTDC ? hptdcReadOut.
makeBOT((*it_tdc).first, 0, 0) : amtReadOut.
makeBOT((*it_tdc).first, 0, 0)));
85 ++ctwc;
86
87 uint32_t maskedFlags = maskedMap[(*it_tdc).first];
89
90
91 if (maskedFlags != 0) {
92 v.push_back((isHPTDC ? 0 : amtReadOut.
makeTMC(jt, maskedFlags)));
93 ++ctwc;
94 ++wcnt;
95 }
96
97
98 hit_vector::const_iterator it_amtvec = (*it_tdc).second.begin();
99 for (; it_amtvec != (*it_tdc).second.end(); ++it_amtvec) {
101
102 uint16_t coarse = (*it_amtvec)->coarse();
103 uint16_t fine = (*it_amtvec)->fine();
105 uint16_t tdcId = (*it_amtvec)->tdcId();
106
107
108
109
110
111
113 (isHPTDC ? hptdcReadOut.
makeTCM(tdcId, chan,
width, coarse, fine) : amtReadOut.
makeTCM(jt, chan,
width, coarse, fine)));
114
115 ++ctwc;
116 ++wcnt;
117 }
118
120
121 v.push_back((isHPTDC ? hptdcReadOut.
makeEOT(tdcId, ecnt, wcnt + 2) : amtReadOut.
makeEOT(jt, ecnt, wcnt + 2)));
122 ++ctwc;
123 }
124
125
127 v.push_back(csmReadOut.
makeTWC(ecnt, ctwc));
128
129
130 mrod_wcnt += ctwc;
131 mrod_wcnt += 2;
132 }
133
134
135 v.push_back(csmReadOut.
makeEOB(mrod_wcnt));
136}
Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current MdtCsm
constexpr int pow(int base, int exp) noexcept
uint32_t makeTMC(uint16_t jt, uint32_t masked)
uint32_t makeEOT(uint16_t jt, uint16_t ecnt, uint16_t wcnt)
uint32_t makeTCM(uint16_t jt, uint16_t channel, uint16_t width, uint16_t coarse, uint16_t fine)
uint32_t makeBOT(uint16_t tdcId, uint16_t ecnt, uint16_t bcid)
uint32_t makeEOB(uint32_t wcnt)
uint32_t makeBOB(uint32_t lvl1Id)
uint32_t makeTLP(uint32_t flags)
uint32_t makeLWC(uint32_t clwc)
uint32_t makeBOL(uint16_t mrodId, uint16_t csmId)
uint32_t makeTWC(uint16_t ecnt, uint16_t ctwc)
uint32_t makeBOT(uint16_t tdcId, uint16_t ecnt, uint16_t bcid)
uint32_t makeEOT(uint16_t tdcId, uint16_t ecnt, uint16_t wcnt)
uint32_t makeTCM(uint16_t tdcId, uint16_t channel, uint16_t width, uint16_t coarse, uint16_t fine)