37 const uint64_t tTimeslice)
const
45 auto msSize = msDescr.size / 4;
46 const uint32_t* pInBuff =
reinterpret_cast<const uint32_t*
>(msContent);
48 auto eq_idx = msDescr.eq_id;
50 const uint32_t len = msSize;
51 const uint32_t* arr = pInBuff;
55 for (; n < len; n++) {
57 if (data == 0xFCAAFCAA)
continue;
58 ProcessData(data, tTimeslice, std::get<0>(result), std::get<1>(result), std::get<2>(result), eq_idx);
68 uint32_t column = std::numeric_limits<uint32_t>::max();
69 uint32_t row = std::numeric_limits<uint32_t>::max();
71 if ((data & 0xFF000000) == 0xFE000000) {
89 uint64_t tmp_l =
static_cast<uint64_t
>(
frame_nbr_l);
90 uint64_t tmp_m =
static_cast<uint64_t
>(
frame_nbr_m);
97 else if ((data & 0xFF00) == 0xFF00) {
107 if ((data & 0xFF00) == 0xFD00) {
108 int tmp = data & 0xFF;
109 if (tmp > 63)
return;
117 int code = data & 0b111;
121 dcd_pxl(
region, ((data & 0xFFFF) + (codeTmp << 6)), column, row);
126 dcd_pxl(
region, ((data & 0xFFFF) + (codeTmp << 6)), column, row);
131 dcd_pxl(
region, ((data & 0xFFFF) + (codeTmp << 6)), column, row);
136 if ((data & 0xFF000000) != 0xFC000000) {
139 int code = (data >> 16) & 0b111;
143 dcd_pxl(
region, ((data >> 16) + (codeTmp << 6)), column, row);
148 dcd_pxl(
region, ((data >> 16) + (codeTmp << 6)), column, row);
153 dcd_pxl(
region, ((data >> 16) + (codeTmp << 6)), column, row);
157 if (std::numeric_limits<uint32_t>::max() == row && std::numeric_limits<uint32_t>::max() == column)
return;
159 if (eq_idx == 0) column = 1023 - column;
170 void UnpackMS::dcd_pxl(
const uint16_t& regionIn,
const uint16_t& word, uint32_t& column, uint32_t& row)
const
172 unsigned pixelcode = (word >> 6) & 0x3ff;
173 unsigned side = 0, topdown = 0;
174 if ((pixelcode & 3) == 0x1 || (pixelcode & 3) == 0x2) side = 1;
175 if ((pixelcode & 3) == 0x3 || (pixelcode & 3) == 0x2) topdown = 1;
176 row = (pixelcode >> 2) * 2 + topdown;
177 column = (((word >> 3) & 0x7) + regionIn * 8) * 2 + side;
static uint32_t GetAddress(int32_t station=0, int32_t sideUD=0, int32_t sideLR=0, int32_t sideTB=0, int32_t ladder=0, int32_t sensor=0, int32_t sensorY=0, int32_t sensorX=0)
void ProcessData(const uint32_t &data, const uint64_t &time, std::vector< CbmMvdRawDigi > &digiVec, UnpackMonitorData &monitor, UnpackAuxData &aux, uint16_t &eq_idx) const
Process a hit message.