138int RawReaderZDC::getDigits(std::vector<BCData>& digitsBC, std::vector<ChannelData>& digitsCh, std::vector<OrbitData>& orbitData)
140 const char* thefcn =
"RawReaderZDC::getDigits";
142 if (mModuleConfig ==
nullptr) {
143 LOG(fatal) <<
"Missing ModuleConfig";
152 int bcCounter = mMapData.size();
155 LOG(info) <<
"Processing #bc " << bcCounter;
157 for (
int im = 0; im <
NModules; im++) {
159 printf(
"%6u", mEvents[im][ic]);
161 printf(
" %6u", mEvents[im][ic]);
168 for (
auto& [
ir, ev] : mMapData) {
172 auto& pdata = orbitData.emplace_back();
174 for (int32_t im = 0; im <
NModules; im++) {
176 if (ev.data[im][ic].f.fixed_0 ==
Id_w0 && ev.data[im][ic].f.fixed_1 ==
Id_w1 && ev.data[im][ic].f.fixed_2 ==
Id_w2) {
180 if (mModuleConfig->
modules[im].readChannel[ic]) {
182 auto id = mModuleConfig->
modules[im].channelID[ic];
183 word16.uns = ev.data[im][ic].f.offset;
184 pdata.data[
id] = word16.sig;
185 if (ev.data[im][ic].f.dLoss) {
189 pdata.scaler[
id] = ev.data[im][ic].f.hits | 0x8000;
191 pdata.scaler[
id] = ev.data[im][ic].f.hits;
194 }
else if (ev.data[im][ic].f.fixed_0 == 0 && ev.data[im][ic].f.fixed_1 == 0 && ev.data[im][ic].f.fixed_2 == 0) {
197 LOG(error) <<
"Data format error";
203 auto& bcdata = digitsBC.emplace_back();
206 bool inconsistent_event =
false;
207 bool inconsistent_alice_trig =
false;
208 bool inconsistent_auto_trig =
false;
209 bool filled_event =
false;
210 bcdata.ref.setFirstEntry(digitsCh.size());
212 bool alice_0 =
false;
213 bool alice_1 =
false;
214 bool alice_2 =
false;
215 bool alice_3 =
false;
217 for (int32_t im = 0; im <
NModules; im++) {
220 bool filled_module =
false;
223 if (ev.data[im][ic].f.fixed_0 ==
Id_w0 && ev.data[im][ic].f.fixed_1 ==
Id_w1 && ev.data[im][ic].f.fixed_2 ==
Id_w2) {
224 if (mModuleConfig->
modules[im].readChannel[ic] ==
false) {
226 if (bcdata.ir.bc == 0 || bcdata.ir.bc == 3563) {
234 auto& ch = ev.data[im][ic];
249 auto& chd = digitsCh.emplace_back();
250 auto id = mModuleConfig->
modules[im].channelID[ic];
256 chd.data[is] = us[is];
263 if (filled_event ==
false) {
265 alice_0 = ch.f.Alice_0;
266 alice_1 = ch.f.Alice_1;
267 alice_2 = ch.f.Alice_2;
268 alice_3 = ch.f.Alice_3;
270 }
else if (alice_0 != ch.f.Alice_0 || alice_1 != ch.f.Alice_1 || alice_2 != ch.f.Alice_2 || alice_3 != ch.f.Alice_3) {
271 inconsistent_event =
true;
272 inconsistent_alice_trig =
true;
273 mt.f.AliceErr =
true;
274 LOGF(warn,
"%s (m,c)=(%d,%d) Alice [0123] %u%s%u %u%s%u %u%s%u %u%s%u", thefcn, im, ic,
275 alice_0, alice_0 == ch.f.Alice_0 ?
"==" :
"!=", ch.f.Alice_0,
276 alice_1, alice_1 == ch.f.Alice_1 ?
"==" :
"!=", ch.f.Alice_1,
277 alice_2, alice_2 == ch.f.Alice_2 ?
"==" :
"!=", ch.f.Alice_2,
278 alice_3, alice_3 == ch.f.Alice_3 ?
"==" :
"!=", ch.f.Alice_3);
280 if (filled_module ==
false) {
281 mt.f.Auto_m = ch.f.Auto_m;
282 mt.f.Auto_0 = ch.f.Auto_0;
283 mt.f.Auto_1 = ch.f.Auto_1;
284 mt.f.Auto_2 = ch.f.Auto_2;
285 mt.f.Auto_3 = ch.f.Auto_3;
286 mt.f.Alice_0 = ch.f.Alice_0;
287 mt.f.Alice_1 = ch.f.Alice_1;
288 mt.f.Alice_2 = ch.f.Alice_2;
289 mt.f.Alice_3 = ch.f.Alice_3;
290 filled_module =
true;
291 }
else if (mt.f.Auto_m != ch.f.Auto_m || mt.f.Auto_0 != ch.f.Auto_0 || mt.f.Auto_1 != ch.f.Auto_1 || mt.f.Auto_2 != ch.f.Auto_2 || mt.f.Auto_3 != ch.f.Auto_3) {
293 inconsistent_auto_trig =
true;
294 LOGF(warn,
"%s (m,c)=(%d,%d) Auto [m0123] %u%s%u %u%s%u %u%s%u %u%s%u %u%s%u", thefcn, im, ic,
295 mt.f.Auto_m, mt.f.Auto_m == ch.f.Auto_m ?
"==" :
"!=", ch.f.Auto_m,
296 mt.f.Auto_0, mt.f.Auto_0 == ch.f.Auto_0 ?
"==" :
"!=", ch.f.Auto_0,
297 mt.f.Auto_1, mt.f.Auto_1 == ch.f.Auto_1 ?
"==" :
"!=", ch.f.Auto_1,
298 mt.f.Auto_2, mt.f.Auto_2 == ch.f.Auto_2 ?
"==" :
"!=", ch.f.Auto_2,
299 mt.f.Auto_3, mt.f.Auto_3 == ch.f.Auto_3 ?
"==" :
"!=", ch.f.Auto_3);
302 }
else if (ev.data[im][ic].f.fixed_0 == 0 && ev.data[im][ic].f.fixed_1 == 0 && ev.data[im][ic].f.fixed_2 == 0) {
305 LOG(error) << thefcn <<
"RAW Data format error";
308 bcdata.moduleTriggers[im] = mt.w;
309 if (mt.f.AutoErr ==
true) {
310 inconsistent_event =
true;
317 bcdata.ref.setEntries(ncd);
319 bcdata.print(mTriggerMask);
320 auto first_entry = bcdata.ref.getFirstEntry();
321 for (Int_t icd = 0; icd < ncd; icd++) {
322 digitsCh[icd + first_entry].print();
326 if (inconsistent_event) {
327 LOGF(error,
"%s %u.%04u Inconsistent event:%s%s", thefcn, bcdata.ir.orbit, bcdata.ir.bc, (inconsistent_auto_trig ?
" AUTOT" :
""), (inconsistent_alice_trig ?
" ALICET" :
""));
329 if ((inconsistent_event && mVerbosity >
DbgMinimal) || (mVerbosity >=
DbgFull)) {
330 bcdata.print(mTriggerMask);
331 for (int32_t im = 0; im <
NModules; im++) {
333 if (ev.data[im][ic].f.fixed_0 ==
Id_w0 && ev.data[im][ic].f.fixed_1 ==
Id_w1 && ev.data[im][ic].f.fixed_2 ==
Id_w2) {
334 for (int32_t iw = 0; iw <
NWPerBc; iw++) {