83 int nModules = N_MERGERS * N_FEB2MERGER;
85 std::vector<const ARICHDigit*>* sortedDigits =
new std::vector<const ARICHDigit*>[nModules];
86 for (
const auto& digit : digits) {
87 int moduleID = digit.getModuleID();
88 unsigned mergerID =
m_mergerMap->getMergerID(moduleID);
89 if (!mergerID) { B2WARNING(
"No module2merger mapping for module ID: " << moduleID <<
"; Digit will not be packed!");
continue;}
90 if (!
m_copperMap->getCopperID(mergerID)) { B2WARNING(
"No merger2copper mapping for merger ID: " << mergerID <<
"; Digit will not be packed!");
continue;}
91 sortedDigits[moduleID - 1].push_back(&digit);
96 for (
const auto& copperID :
m_copperMap->getCopperIDs()) {
98 int bufferSize[4] = {0, 0, 0, 0};
99 for (
int finesse = 0; finesse < 4; finesse++) {
104 buffer[finesse][j] = 0;
107 auto* buf = buffer[finesse];
110 unsigned mergerID =
m_copperMap->getMergerID(copperID, finesse);
111 unsigned mergerSN =
m_mergerMap->getMergerSN(mergerID);
112 if (!mergerID)
continue;
116 mergerHead.
type = dataFormat;
120 mergerHead.
trigger = evtMetaData->getEvent();
125 int nboards = N_FEB2MERGER;
127 for (
int k = 0; k < nboards; k++) {
129 int moduleID =
m_mergerMap->getModuleID(mergerID, k + 1);
130 if (moduleID <= 0)
continue;
134 FEBHead.
type = dataFormat;
138 FEBHead.
trigger = evtMetaData->getEvent();
147 for (
const auto& digit : sortedDigits[moduleID - 1]) {
148 unsigned chn = digit->getChannelID();
150 unsigned shift = 143 - chn;
151 unsigned bitmap = (unsigned)digit->getBitmap();
152 buf[(ibyte + shift) / 4] += (bitmap << (3 - (ibyte + shift) % 4) * 8);
160 for (
const auto& digit : sortedDigits[moduleID - 1]) {
161 unsigned chn = digit->getChannelID();
163 unsigned shift = (3 - ibyte % 4) * 8;
164 buf[ibyte / 4] += (chn << shift);
166 shift = (3 - ibyte % 4) * 8;
167 unsigned bitmap = (unsigned)digit->getBitmap();
168 buf[ibyte / 4] += (bitmap << shift);
178 bufferSize[finesse] = ceil(ibyte / 4.);
181 std::cout <<
"Pack finesse: " << finesse << std::endl;
182 for (
int i = 0; i < bufferSize[finesse]; i++) {
183 std::cout << i <<
"-th word bitset " << std::bitset<32>(buf[i]) << std::endl;
189 info.
exp_num = evtMetaData->getExperiment();
190 info.run_subrun_num = (evtMetaData->getRun() << 8) +
191 (evtMetaData->getSubrun() & 0xFF);
192 info.eve_num = evtMetaData->getEvent();
193 info.node_id = ARICH_ID + copperID;
197 info.hslb_crc16_error_bit = 0;
198 info.truncation_mask = 0;
199 info.type_of_data = 0;
202 raw->PackDetectorBuf(buffer[0], bufferSize[0],
203 buffer[1], bufferSize[1],
204 buffer[2], bufferSize[2],
205 buffer[3], bufferSize[3],
210 delete [] sortedDigits;
217 unsigned char line1[4];
220 line1[3] = head.
type;
225 for (
int i = 0; i < 4; i++) {
226 shift = (3 - ibyte % 4) * 8;
227 buffer[ibyte / 4] |= line1[3 - i] << shift;
231 auto len =
reinterpret_cast<const unsigned char*
>(&head.
length);
233 for (
int i = 0; i < 4; i++) {
234 shift = (3 - ibyte % 4) * 8;
235 buffer[ibyte / 4] |= len[3 - i] << shift;
240 auto trg =
reinterpret_cast<const unsigned char*
>(&head.
trigger);
241 for (
int i = 0; i < 4; i++) {
242 shift = (3 - ibyte % 4) * 8;
243 buffer[ibyte / 4] |= trg[3 - i] << shift;
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.