9#include <trg/ecl/modules/trgeclUnpacker/trgeclUnpackerModule.h>
11#include "trg/ecl/TrgEclDataBase.h"
12#include "trg/ecl/TrgEclMapping.h"
22 return string(
"4.02");
29 string desc =
"TRGECLUnpackerModule(" +
version() +
")";
33 B2DEBUG(20,
"trgeclunpacker: Constructor done.");
59 for (
int i = 0; i < raw_trgarray.
getEntries(); i++) {
61 for (
int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
62 nodeid = raw_trgarray[i]->GetNodeID(j);
63 trgtype = raw_trgarray[i]->GetTRGType(j);
65 if (
nodeid == 0x13000001) {
66 for (
int ch = 0; ch < raw_trgarray[i]->GetMaxNumOfCh(j); ch++) {
67 nwords = raw_trgarray[i]->GetDetectorNwords(j, ch);
71 B2ERROR(
"Consistecy error in unpacker.");
72 B2ERROR(
"data length " <<
nwords <<
" nWord " <<
nwords);
83 uint16_t nTCsPerRegion[3] = {};
84 const int firstBarrelId = 81;
85 const int lastBarrelId = 512;
87 const int tcId = trgeclhit.getTCId();
88 if (tcId < firstBarrelId) {
90 }
else if (tcId > lastBarrelId) {
123 int version_check = (rdat[0] >> 12) & 0xf;
124 if (version_check != 15)
return;
127 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
128 unsigned char data_sum = 0;
129 unsigned char kdat[4] = {0};
130 for (
int j = nnn - 2; j > -1; j--) {
131 kdat[0] = rdat[j] & 0xff;
132 kdat[1] = (rdat[j] >> 8) & 0xff;
133 kdat[2] = (rdat[j] >> 16) & 0xff;
134 kdat[3] = (rdat[j] >> 24) & 0xff;
135 for (
int k = 0; k < 4; k++) {
136 data_sum = data_sum + kdat[k];
140 int flag_checksum = 0;
142 if (check_sum == data_sum) {
149 int l1_revo = rdat[0] & 0x7ff;
155 int summary_data = 0;
156 int summary_recon = 0;
158 int summary_revo = 0;
160 bool summary_trg =
false;
173 int win3_revo = -9999;
175 vector<unsigned> sum_data;
176 vector<vector<unsigned>> sum_info;
179 vector<vector<int>> tc_info;
180 vector<vector<int>> tc_info_FE1;
181 vector<vector<int>> tc_info_FE2;
182 vector<vector<int>> tc_info_BE1;
183 vector<vector<int>> tc_info_BE2;
186 while (i < nnn - 2) {
187 summary_data = rdat[i + 1];
188 summary_trg = (summary_data >> 23) & 0x1;
189 summary_revo = (summary_data >> 16) & 0x7f;
190 ntc_win = summary_data & 0x3ff;
196 data_win = window_num;
197 if (window_num == 3) win3_revo = summary_revo;
199 if (summary_trg ==
true) {
201 sum_data.push_back(data_win);
202 sum_data.push_back(summary_revo);
203 for (
int j = 0; j < 12; j++) {
205 (((rdat[i + j + 2] >> 0) & 0xFF) << 24) +
206 (((rdat[i + j + 2] >> 8) & 0xFF) << 16) +
207 (((rdat[i + j + 2] >> 16) & 0xFF) << 8) +
208 (((rdat[i + j + 2] >> 24) & 0xFF) << 0);
209 sum_data.push_back(summary_recon);
211 sum_info.push_back(sum_data);
215 if (tc_trg ==
true) {
216 for (
int j = 0; j < ntc_win; j++) {
217 tc_id = (rdat[i + j] >> 20) & 0x3FF;
218 tc_t = (rdat[i + j] >> 12) & 0x7F;
219 tc_e = rdat[i + j] & 0xFFF;
220 conv_tc_t = (data_win - 3) * 128 + tc_t;
223 tc_data.push_back(tc_id);
224 tc_data.push_back(conv_tc_t);
225 tc_data.push_back(tc_e);
226 tc_data.push_back(data_win);
229 tc_info_FE1.push_back(tc_data);
231 tc_info_FE2.push_back(tc_data);
233 }
else if (tc_id > 512) {
235 tc_info_BE1.push_back(tc_data);
237 tc_info_BE2.push_back(tc_data);
240 tc_info.push_back(tc_data);
248 if (tc_trg ==
true) {
249 for (
int j = 0; j < ntc_win; j++) {
250 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
251 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
252 conv_tc_t = (data_win - 3) * 128 + tc_t;
253 tc_e = rdat[i + j + 2] & 0xFFF;
256 tc_data.push_back(tc_id);
257 tc_data.push_back(conv_tc_t);
258 tc_data.push_back(tc_e);
259 tc_data.push_back(data_win);
262 tc_info_FE1.push_back(tc_data);
264 tc_info_FE2.push_back(tc_data);
266 }
else if (tc_id > 512) {
268 tc_info_BE1.push_back(tc_data);
270 tc_info_BE2.push_back(tc_data);
273 tc_info.push_back(tc_data);
294 int cl_theta[6] = {0};
296 int cl_time[6] = { -9999};
297 int cl_energy[6] = {0};
298 int cl_1gev[6] = {0};
299 int cl_2gev[6] = {0};
325 vector<vector<int>> cl_2d;
327 vector<int> evt_1d_vector;
328 vector<vector<int>> evt_2d_vector;
331 int sum_size = sum_info.size();
333 for (
int j = 0; j < sum_size; j++) {
334 sum_num = sum_info[j][0];
335 sum_revo = sum_info[j][1];
337 time = (sum_info[j][2]) & 0x7F;
338 time_type = (sum_info[j][2] >> 7) & 0x7;
339 physics = (sum_info[j][2] >> 10) & 0x1;
340 b1bhabha = (sum_info[j][2] >> 11) & 0x1;
341 b1_type = (sum_info[j][2] >> 12) & 0x3FFF;
342 etot = ((sum_info[j][3] & 0x7F) << 6) + ((sum_info[j][2] >> 26) & 0x3F);
343 etot_type = (sum_info[j][3] >> 7) & 0x7;
344 icn = (sum_info[j][3] >> 10) & 0x7F;
345 bg_veto = (sum_info[j][3] >> 17) & 0x7;
346 icn_over = (sum_info[j][3] >> 20) & 0x1;
347 b2bhabha_v = (sum_info[j][3] >> 21) & 0x1;
348 low_multi = (((sum_info[j][4] >> 6) & 0x3) << 12) + ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][3] >> 22) & 0x3FF);
349 b2bhabha_s = (sum_info[j][4] >> 2) & 0x1;
350 mumu = (sum_info[j][4] >> 3) & 0x1;
351 prescale = (sum_info[j][4] >> 4) & 0x1;
352 ecl_bst = (sum_info[j][4] >> 5) & 0x1;
354 cl_energy[0] = (sum_info[j][5]) & 0xFFF;
355 cl_time[0] = (sum_info[j][5] >> 12) & 0xFF;
356 cl_phi[0] = (sum_info[j][5] >> 20) & 0xFF;
357 cl_theta[0] = ((sum_info[j][6] & 0x7) << 4) + ((sum_info[j][5] >> 28) & 0xF);
359 cl_energy[1] = (sum_info[j][6] >> 3) & 0xFFF;
360 cl_time[1] = (sum_info[j][6] >> 15) & 0xFF;
361 cl_phi[1] = (sum_info[j][6] >> 23) & 0xFF;
362 cl_theta[1] = ((sum_info[j][7] & 0x3F) << 1) + ((sum_info[j][6] >> 31) & 0x1);
364 cl_energy[2] = (sum_info[j][7] >> 6) & 0xFFF;
365 cl_time[2] = (sum_info[j][7] >> 18) & 0xFF;
366 cl_phi[2] = ((sum_info[j][8] & 0x3) << 6) + ((sum_info[j][7] >> 26) & 0x3F);
367 cl_theta[2] = (sum_info[j][8] >> 2) & 0x7F;
369 cl_energy[3] = (sum_info[j][8] >> 9) & 0xFFF;
370 cl_time[3] = (sum_info[j][8] >> 21) & 0xFF;
371 cl_phi[3] = ((sum_info[j][9] & 0x1F) << 3) + ((sum_info[j][8] >> 29) & 0x7);
372 cl_theta[3] = (sum_info[j][9] >> 5) & 0x7F;
374 cl_energy[4] = (sum_info[j][ 9] >> 12) & 0xFFF;
375 cl_time[4] = (sum_info[j][ 9] >> 24) & 0xFF;
376 cl_phi[4] = (sum_info[j][10]) & 0xFF;
377 cl_theta[4] = (sum_info[j][10] >> 8) & 0x7F;
379 cl_energy[5] = (sum_info[j][10] >> 15) & 0xFFF;
380 cl_time[5] = ((sum_info[j][11] & 0x7) << 5) + ((sum_info[j][10] >> 27) & 0x1F);
381 cl_phi[5] = (sum_info[j][11] >> 3) & 0xFF;
382 cl_theta[5] = (sum_info[j][11] >> 11) & 0x7F;
385 for (
int k = 0; k < 6; k++) {
386 cl_1gev[k] = (sum_info[j][12] >> k) & 0x1;
387 cl_2gev[k] = (sum_info[j][12] >> (k + 6)) & 0x1;
388 cl_bha[k] = (sum_info[j][12] >> (k + 12)) & 0x1;
390 ncl = (sum_info[j][13]) & 0x7;
422 for (
int k = 0; k < 6; k++) {
423 cl_1d.push_back(cl_theta[k]);
424 cl_1d.push_back(cl_phi[k]);
425 cl_1d.push_back(cl_time[k]);
426 cl_1d.push_back(cl_energy[k]);
427 cl_1d.push_back(cl_1gev[k]);
428 cl_1d.push_back(cl_2gev[k]);
429 cl_1d.push_back(cl_bha[k]);
430 cl_2d.push_back(cl_1d);
433 sort(cl_2d.begin(), cl_2d.end(),
434 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
436 if (sum_num == -9999) {
438 }
else if (sum_num <= 3) {
439 sum_num_ord = 2 * abs(sum_num - 3);
441 sum_num_ord = (sum_num * 2) - 7;
443 evt_1d_vector.push_back(sum_num_ord);
444 evt_1d_vector.push_back(sum_revo);
445 evt_1d_vector.push_back(sum_num);
446 evt_1d_vector.push_back(time);
447 for (
int k = 0; k < 6; k++) {
448 for (
int l = 0; l < 7; l++) {
449 evt_1d_vector.push_back(cl_2d[k][l]);
453 evt_1d_vector.push_back(ncl);
454 evt_1d_vector.push_back(low_multi);
455 evt_1d_vector.push_back(b2bhabha_v);
456 evt_1d_vector.push_back(b2bhabha_s);
457 evt_1d_vector.push_back(mumu);
458 evt_1d_vector.push_back(prescale);
459 evt_1d_vector.push_back(icn);
460 evt_1d_vector.push_back(icn_over);
461 evt_1d_vector.push_back(etot_type);
462 evt_1d_vector.push_back(etot);
463 evt_1d_vector.push_back(ecl_bst);
464 evt_1d_vector.push_back(b1_type);
465 evt_1d_vector.push_back(b1bhabha);
466 evt_1d_vector.push_back(physics);
467 evt_1d_vector.push_back(time_type);
468 evt_2d_vector.push_back(evt_1d_vector);
469 evt_1d_vector.clear();
472 for (
int k = 0; k < 6; k++) {
530 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
531 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
532 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
533 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
549 int m_caltime = -9999;
551 int tot_ntc = tc_info.size();
555 int evt_revo = -9999;
559 int evt_timing = -9999;
560 int evt_cl_theta[6] = {0};
561 int evt_cl_phi[6] = {0};
562 int evt_cl_time[6] = { -9999};
563 int evt_cl_energy[6] = {0};
564 int evt_cl_1gev[6] = {0};
565 int evt_cl_2gev[6] = {0};
566 int evt_cl_bha[6] = {0};
570 int evt_low_multi = 0;
572 int evt_b2bhabha_v = 0;
574 int evt_b2bhabha_s = 0;
578 int evt_prescale = 0;
582 int evt_icn_over = 0;
584 int evt_etot_type = 0;
592 int evt_b1bhabha = 0;
596 int evt_time_type = 0;
598 int evt_etot_all = 0;
600 int evt_time_min = 0;
602 int evt_time_max = 0;
604 int evt_time_win = 0;
621 int evt_v_size = evt_2d_vector.size();
622 if (evt_v_size != 0) {
624 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
625 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
628 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
629 if (evt_v_size == 0) {
631 sort(tc_info.begin(), tc_info.end(),
632 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
633 evt_revo = win3_revo;
634 evt_win = tc_info[0][3];
635 evt_timing = tc_info[0][1];
636 for (
int k = 0; k < 6; k++) {
640 evt_cl_energy[k] = 0;
661 evt_revo = evt_2d_vector[0][1];
662 evt_win = evt_2d_vector[0][2];
663 evt_timing = evt_2d_vector[0][3];
664 for (
int k = 0; k < 6; k++) {
665 evt_cl_theta[k] = evt_2d_vector[0][ 4 + k * 7];
666 evt_cl_phi[k] = evt_2d_vector[0][ 5 + k * 7];
667 evt_cl_time[k] = evt_2d_vector[0][ 6 + k * 7];
668 evt_cl_energy[k] = evt_2d_vector[0][ 7 + k * 7];
669 evt_cl_1gev[k] = evt_2d_vector[0][ 8 + k * 7];
670 evt_cl_2gev[k] = evt_2d_vector[0][ 9 + k * 7];
671 evt_cl_bha[k] = evt_2d_vector[0][10 + k * 7];
673 evt_ncl = evt_2d_vector[0][46];
674 evt_low_multi = evt_2d_vector[0][47];
675 evt_b2bhabha_v = evt_2d_vector[0][48];
676 evt_b2bhabha_s = evt_2d_vector[0][49];
677 evt_mumu = evt_2d_vector[0][50];
678 evt_prescale = evt_2d_vector[0][51];
679 evt_icn = evt_2d_vector[0][52];
680 evt_icn_over = evt_2d_vector[0][53];
681 evt_etot_type = evt_2d_vector[0][54];
682 evt_etot = evt_2d_vector[0][55];
683 evt_ecl_bst = evt_2d_vector[0][56];
684 evt_b1_type = evt_2d_vector[0][57];
685 evt_b1bhabha = evt_2d_vector[0][58];
686 evt_physics = evt_2d_vector[0][59];
687 evt_time_type = evt_2d_vector[0][60];
690 sort(tc_info.begin(), tc_info.end(),
691 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
693 for (
int ii = 0; ii < tot_ntc; ii++) {
694 m_tcid = tc_info[ii][0];
695 m_time = tc_info[ii][1];
696 m_energy = tc_info[ii][2];
697 m_win = tc_info[ii][3];
699 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
711 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
712 if (m_win == evt_win - 1) {
715 if (m_win == evt_win) {
718 if (m_win == evt_win + 1) {
723 if (etot_i == 0 && etot_f == 0) {
724 evt_etot_all = etot_c;
725 evt_time_min = - evt_timing;
726 evt_time_max = 256 - evt_timing;
728 }
else if (etot_i >= etot_f) {
729 evt_etot_all = etot_c + etot_i;
730 evt_time_min = -128 - evt_timing;
731 evt_time_max = 128 - evt_timing;
734 evt_etot_all = etot_c + etot_f;
735 evt_time_min = - evt_timing;
736 evt_time_max = 256 - evt_timing;
740 for (
int icluster = 0; icluster < 6; icluster++) {
741 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
743 if (cl_tcid == 0) {
continue;}
758 double cl_timing = -1000;
759 for (
int i_tc = 0; i_tc < tot_ntc; i_tc++) {
760 if (cl_tcid == tc_info[i_tc][0]) {
761 cl_timing = tc_info[i_tc][1];
829 for (
int k = 0; k < 6; k++) {
832 evt_cl_time[k] = -9999;
833 evt_cl_energy[k] = 0;
875 int version_check = (rdat[0] >> 12) & 0xf;
876 if (version_check != 15)
return;
879 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
880 unsigned char data_sum = 0;
881 unsigned char kdat[4] = {0};
882 for (
int j = nnn - 2; j > -1; j--) {
883 kdat[0] = rdat[j] & 0xff;
884 kdat[1] = (rdat[j] >> 8) & 0xff;
885 kdat[2] = (rdat[j] >> 16) & 0xff;
886 kdat[3] = (rdat[j] >> 24) & 0xff;
887 for (
int k = 0; k < 4; k++) {
888 data_sum = data_sum + kdat[k];
892 int flag_checksum = 0;
894 if (check_sum == data_sum) {
901 int l1_revo = rdat[0] & 0x7ff;
907 int summary_data = 0;
909 int summary_revo = 0;
911 bool summary_trg =
false;
924 int win3_revo = -9999;
926 vector<unsigned> sum_data;
927 vector<vector<unsigned>> sum_info;
930 vector<vector<int>> tc_info;
931 vector<vector<int>> tc_info_FE1;
932 vector<vector<int>> tc_info_FE2;
933 vector<vector<int>> tc_info_BE1;
934 vector<vector<int>> tc_info_BE2;
937 while (i < nnn - 2) {
938 summary_data = rdat[i + 1];
939 summary_trg = (summary_data >> 23) & 0x1;
940 summary_revo = (summary_data >> 16) & 0x7f;
941 ntc_win = summary_data & 0x3ff;
947 data_win = window_num;
948 if (window_num == 3) win3_revo = summary_revo;
950 if (summary_trg ==
true) {
952 sum_data.push_back(data_win);
953 sum_data.push_back(summary_revo);
954 for (
int j = 0; j < 9; j++) {
955 sum_data.push_back(rdat[i + j + 2]);
957 sum_info.push_back(sum_data);
961 if (tc_trg ==
true) {
962 for (
int j = 0; j < ntc_win; j++) {
963 tc_id = (rdat[i + j] >> 20) & 0x3FF;
964 tc_t = (rdat[i + j] >> 12) & 0x7F;
965 tc_e = rdat[i + j] & 0xFFF;
966 conv_tc_t = (data_win - 3) * 128 + tc_t;
969 tc_data.push_back(tc_id);
970 tc_data.push_back(conv_tc_t);
971 tc_data.push_back(tc_e);
972 tc_data.push_back(data_win);
975 tc_info_FE1.push_back(tc_data);
977 tc_info_FE2.push_back(tc_data);
979 }
else if (tc_id > 512) {
981 tc_info_BE1.push_back(tc_data);
983 tc_info_BE2.push_back(tc_data);
986 tc_info.push_back(tc_data);
994 if (tc_trg ==
true) {
995 for (
int j = 0; j < ntc_win; j++) {
996 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
997 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
998 conv_tc_t = (data_win - 3) * 128 + tc_t;
999 tc_e = rdat[i + j + 2] & 0xFFF;
1002 tc_data.push_back(tc_id);
1003 tc_data.push_back(conv_tc_t);
1004 tc_data.push_back(tc_e);
1005 tc_data.push_back(data_win);
1008 tc_info_FE1.push_back(tc_data);
1010 tc_info_FE2.push_back(tc_data);
1012 }
else if (tc_id > 512) {
1014 tc_info_BE1.push_back(tc_data);
1016 tc_info_BE2.push_back(tc_data);
1019 tc_info.push_back(tc_data);
1023 i = i + ntc_win + 1;
1038 int cl_theta[6] = {0};
1039 int cl_phi[6] = {0};
1040 int cl_time[6] = { -9999};
1041 int cl_energy[6] = {0};
1066 vector<vector<int>> cl_2d;
1068 vector<int> evt_1d_vector;
1069 vector<vector<int>> evt_2d_vector;
1072 int sum_size = sum_info.size();
1073 if (sum_size != 0) {
1074 for (
int j = 0; j < sum_size; j++) {
1075 sum_num = sum_info[j][0];
1076 sum_revo = sum_info[j][1];
1078 ecl_bst = (sum_info[j][2] >> 26) & 0x1;
1081 cl_theta[5] = (sum_info[j][2] >> 19) & 0x7f;
1082 cl_phi[5] = (sum_info[j][2] >> 11) & 0xff;
1083 cl_time[5] = (sum_info[j][2] >> 3) & 0xff;
1084 cl_energy[5] = ((sum_info[j][2] & 0x7) << 9) + ((sum_info[j][3] >> 23) & 0x1ff);
1086 cl_theta[4] = (sum_info[j][3] >> 16) & 0x7f;
1087 cl_phi[4] = (sum_info[j][3] >> 8) & 0xff;
1088 cl_time[4] = (sum_info[j][3]) & 0xff;
1089 cl_energy[4] = (sum_info[j][4] >> 20) & 0xfff;
1091 cl_theta[3] = (sum_info[j][4] >> 13) & 0x7f;
1092 cl_phi[3] = (sum_info[j][4] >> 5) & 0xff;
1093 cl_time[3] = ((sum_info[j][4] & 0x1f) << 3) + ((sum_info[j][5] >> 29) & 0x7);
1094 cl_energy[3] = (sum_info[j][5] >> 17) & 0xfff;
1096 cl_theta[2] = (sum_info[j][5] >> 10) & 0x7f;
1097 cl_phi[2] = (sum_info[j][5] >> 2) & 0xff;
1098 cl_time[2] = ((sum_info[j][5] & 0x3) << 6) + ((sum_info[j][6] >> 26) & 0x3f);
1099 cl_energy[2] = (sum_info[j][6] >> 14) & 0xfff;
1101 cl_theta[1] = (sum_info[j][6] >> 7) & 0x7f;
1102 cl_phi[1] = ((sum_info[j][6] & 0x7f) << 1) + ((sum_info[j][7] >> 31) & 0x1);
1103 cl_time[1] = (sum_info[j][7] >> 23) & 0xff;
1104 cl_energy[1] = (sum_info[j][7] >> 11) & 0xfff;
1106 cl_theta[0] = (sum_info[j][7] >> 4) & 0x7f;
1107 cl_phi[0] = ((sum_info[j][7] & 0xf) << 4) + ((sum_info[j][8] >> 28) & 0xf);
1108 cl_time[0] = (sum_info[j][8] >> 20) & 0xff;
1109 cl_energy[0] = (sum_info[j][8] >> 8) & 0xfff;
1111 ncl = (sum_info[j][8] >> 5) & 0x7;
1113 prescale = (sum_info[j][8] >> 4) & 0x1;
1114 mumu = (sum_info[j][8] >> 3) & 0x1;
1115 b2bhabha_s = (sum_info[j][8] >> 2) & 0x1;
1117 low_multi = (((sum_info[j][2] >> 27) & 0x3) << 12) + ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1119 low_multi = ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1121 b2bhabha_v = (sum_info[j][9] >> 21) & 0x1;
1122 icn_over = (sum_info[j][9] >> 20) & 0x1;
1123 bg_veto = (sum_info[j][9] >> 17) & 0x7;
1124 icn = (sum_info[j][9] >> 10) & 0x7f;
1125 etot_type = (sum_info[j][9] >> 7) & 0x7;
1126 etot = ((sum_info[j][9] & 0x7f) << 6) + ((sum_info[j][10] >> 26) & 0x3f);
1127 b1_type = (sum_info[j][10] >> 12) & 0x3fff;
1128 b1bhabha = (sum_info[j][10] >> 11) & 0x1;
1129 physics = (sum_info[j][10] >> 10) & 0x1;
1130 time_type = (sum_info[j][10] >> 7) & 0x7;
1131 time = (sum_info[j][10]) & 0x7f;
1133 cl_theta[5] = (sum_info[j][2] >> 24) & 0x7f;
1134 cl_phi[5] = (sum_info[j][2] >> 16) & 0xff;
1135 cl_time[5] = (sum_info[j][2] >> 8) & 0xff;
1136 cl_energy[5] = ((sum_info[j][2] & 0xff) << 4) + ((sum_info[j][3] >> 28) & 0xf);
1138 cl_theta[4] = (sum_info[j][3] >> 21) & 0x7f;
1139 cl_phi[4] = (sum_info[j][3] >> 13) & 0xff;
1140 cl_time[4] = (sum_info[j][3] >> 5) & 0xff;
1141 cl_energy[4] = ((sum_info[j][3] & 0x1f) << 7) + ((sum_info[j][4] >> 25) & 0x7f);
1143 cl_theta[3] = (sum_info[j][4] >> 18) & 0x7f;
1144 cl_phi[3] = (sum_info[j][4] >> 10) & 0xff;
1145 cl_time[3] = (sum_info[j][4] >> 2) & 0xff;
1146 cl_energy[3] = ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][5] >> 22) & 0x3ff);
1148 cl_theta[2] = (sum_info[j][5] >> 15) & 0x7f;
1149 cl_phi[2] = (sum_info[j][5] >> 7) & 0xff;
1150 cl_time[2] = ((sum_info[j][5] & 0x7f) << 1) + ((sum_info[j][6] >> 31) & 0x1);
1151 cl_energy[2] = (sum_info[j][6] >> 19) & 0xfff;
1153 cl_theta[1] = (sum_info[j][6] >> 12) & 0x7f;
1154 cl_phi[1] = (sum_info[j][6] >> 4) & 0xff;
1155 cl_time[1] = ((sum_info[j][6] & 0xf) << 4) + ((sum_info[j][7] >> 28) & 0xf);
1156 cl_energy[1] = (sum_info[j][7] >> 16) & 0xfff;
1158 cl_theta[0] = (sum_info[j][7] >> 9) & 0x7f;
1159 cl_phi[0] = (sum_info[j][7] >> 1) & 0xff;
1160 cl_time[0] = ((sum_info[j][7] & 0x1) << 7) + ((sum_info[j][8] >> 25) & 0x7f);
1161 cl_energy[0] = (sum_info[j][8] >> 13) & 0xfff;
1163 ncl = (sum_info[j][8] >> 10) & 0x7;
1165 low_multi = ((sum_info[j][8] & 0x3ff) << 2) + ((sum_info[j][9] >> 30) & 0x3);
1166 b2bhabha_v = (sum_info[j][9] >> 29) & 0x1;
1167 icn_over = (sum_info[j][9] >> 28) & 0x1;
1168 bg_veto = (sum_info[j][9] >> 25) & 0x7;
1169 icn = (sum_info[j][9] >> 18) & 0x7f;
1170 etot_type = (sum_info[j][9] >> 15) & 0x7;
1171 etot = (sum_info[j][9] >> 2) & 0x1fff;
1173 b1_type = ((sum_info[j][9] & 0x3) << 12) + ((sum_info[j][10] >> 20) & 0xfff);
1174 b1bhabha = (sum_info[j][10] >> 19) & 0x1;
1175 physics = (sum_info[j][10] >> 18) & 0x1;
1176 time_type = (sum_info[j][10] >> 15) & 0x7;
1177 time = (sum_info[j][10] >> 8) & 0x7f;
1211 for (
int k = 0; k < 6; k++) {
1212 cl_1d.push_back(cl_theta[k]);
1213 cl_1d.push_back(cl_phi[k]);
1214 cl_1d.push_back(cl_time[k]);
1215 cl_1d.push_back(cl_energy[k]);
1216 cl_2d.push_back(cl_1d);
1219 sort(cl_2d.begin(), cl_2d.end(),
1220 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
1222 evt_1d_vector.push_back(abs(sum_num - 3));
1223 evt_1d_vector.push_back(sum_revo);
1224 evt_1d_vector.push_back(sum_num);
1225 evt_1d_vector.push_back(time);
1226 for (
int k = 0; k < 6; k++) {
1227 evt_1d_vector.push_back(cl_2d[k][0]);
1228 evt_1d_vector.push_back(cl_2d[k][1]);
1229 evt_1d_vector.push_back(cl_2d[k][2]);
1230 evt_1d_vector.push_back(cl_2d[k][3]);
1233 evt_1d_vector.push_back(ncl);
1234 evt_1d_vector.push_back(low_multi);
1235 evt_1d_vector.push_back(b2bhabha_v);
1236 evt_1d_vector.push_back(b2bhabha_s);
1237 evt_1d_vector.push_back(mumu);
1238 evt_1d_vector.push_back(prescale);
1239 evt_1d_vector.push_back(icn);
1240 evt_1d_vector.push_back(icn_over);
1241 evt_1d_vector.push_back(etot_type);
1242 evt_1d_vector.push_back(etot);
1243 evt_1d_vector.push_back(ecl_bst);
1244 evt_1d_vector.push_back(b1_type);
1245 evt_1d_vector.push_back(b1bhabha);
1246 evt_1d_vector.push_back(physics);
1247 evt_1d_vector.push_back(time_type);
1248 evt_2d_vector.push_back(evt_1d_vector);
1249 evt_1d_vector.clear();
1253 for (
int k = 0; k < 6; k++) {
1305 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
1306 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
1307 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
1308 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
1324 int m_caltime = -9999;
1326 int tot_ntc = tc_info.size();
1330 int evt_revo = -9999;
1334 int evt_timing = -9999;
1335 int evt_cl_theta[6] = {0};
1336 int evt_cl_phi[6] = {0};
1337 int evt_cl_time[6] = { -9999};
1338 int evt_cl_energy[6] = {0};
1342 int evt_low_multi = 0;
1344 int evt_b2bhabha_v = 0;
1346 int evt_b2bhabha_s = 0;
1350 int evt_prescale = 0;
1354 int evt_icn_over = 0;
1356 int evt_etot_type = 0;
1360 int evt_ecl_bst = 0;
1362 int evt_b1_type = 0;
1364 int evt_b1bhabha = 0;
1366 int evt_physics = 0;
1368 int evt_time_type = 0;
1370 int evt_etot_all = 0;
1372 int evt_time_min = 0;
1374 int evt_time_max = 0;
1376 int evt_time_win = 0;
1393 int evt_v_size = evt_2d_vector.size();
1394 if (evt_v_size != 0) {
1396 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
1397 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1400 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
1401 if (evt_v_size == 0) {
1403 sort(tc_info.begin(), tc_info.end(),
1404 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
1405 evt_revo = win3_revo;
1406 evt_win = tc_info[0][3];
1407 evt_timing = tc_info[0][1];
1408 for (
int k = 0; k < 6; k++) {
1409 evt_cl_theta[k] = 0;
1412 evt_cl_energy[k] = 0;
1430 evt_revo = evt_2d_vector[0][1];
1431 evt_win = evt_2d_vector[0][2];
1432 evt_timing = evt_2d_vector[0][3];
1433 for (
int k = 0; k < 6; k++) {
1434 evt_cl_theta[k] = evt_2d_vector[0][4 + k * 4];
1435 evt_cl_phi[k] = evt_2d_vector[0][5 + k * 4];
1436 evt_cl_time[k] = evt_2d_vector[0][6 + k * 4];
1437 evt_cl_energy[k] = evt_2d_vector[0][7 + k * 4];
1439 evt_ncl = evt_2d_vector[0][28];
1440 evt_low_multi = evt_2d_vector[0][29];
1441 evt_b2bhabha_v = evt_2d_vector[0][30];
1442 evt_b2bhabha_s = evt_2d_vector[0][31];
1443 evt_mumu = evt_2d_vector[0][32];
1444 evt_prescale = evt_2d_vector[0][33];
1445 evt_icn = evt_2d_vector[0][34];
1446 evt_icn_over = evt_2d_vector[0][35];
1447 evt_etot_type = evt_2d_vector[0][36];
1448 evt_etot = evt_2d_vector[0][37];
1449 evt_ecl_bst = evt_2d_vector[0][38];
1450 evt_b1_type = evt_2d_vector[0][39];
1451 evt_b1bhabha = evt_2d_vector[0][40];
1452 evt_physics = evt_2d_vector[0][41];
1453 evt_time_type = evt_2d_vector[0][42];
1456 sort(tc_info.begin(), tc_info.end(),
1457 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1459 for (
int ii = 0; ii < tot_ntc; ii++) {
1460 m_tcid = tc_info[ii][0];
1461 m_time = tc_info[ii][1];
1462 m_energy = tc_info[ii][2];
1463 m_win = tc_info[ii][3];
1465 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
1477 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
1478 if (m_win == evt_win - 1) {
1481 if (m_win == evt_win) {
1484 if (m_win == evt_win + 1) {
1489 if (etot_i == 0 && etot_f == 0) {
1490 evt_etot_all = etot_c;
1491 evt_time_min = - evt_timing;
1492 evt_time_max = 256 - evt_timing;
1494 }
else if (etot_i >= etot_f) {
1495 evt_etot_all = etot_c + etot_i;
1496 evt_time_min = -128 - evt_timing;
1497 evt_time_max = 128 - evt_timing;
1500 evt_etot_all = etot_c + etot_f;
1501 evt_time_min = - evt_timing;
1502 evt_time_max = 256 - evt_timing;
1506 for (
int icluster = 0; icluster < 6; icluster++) {
1507 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
1509 if (cl_tcid == 0) {
continue;}
1524 double cl_timing = -1000;
1525 for (
int i_tc = 0; i_tc < tot_ntc; i_tc++) {
1526 if (cl_tcid == tc_info[i_tc][0]) {
1527 cl_timing = tc_info[i_tc][1];
1592 for (
int k = 0; k < 6; k++) {
1593 evt_cl_theta[k] = 0;
1595 evt_cl_time[k] = -9999;
1596 evt_cl_energy[k] = 0;
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
The Raw TOP class Class for RawCOPPER class data taken by TOP Currently, this class is almost same as...
Accessor to arrays stored in the data store.
int getEntries() const
Get the number of objects in the array.
virtual ~TRGECLUnpackerModule()
Destructor.
int etm_version
ETM Version.
void initialize() override
Initilizes TRGECLUnpackerModuel.
void event() override
Called event by event.
virtual void readCOPPEREvent(RawTRG *, int, int, int)
Read data from TRG copper.
unsigned int nodeid
Node Id.
void endRun() override
Called when run ended.
StoreArray< TRGECLUnpackerSumStore > m_TRGECLSumArray
ECL Trigger Unpacker Summary output.
void terminate() override
Called when processing ended.
int n_basf2evt
Event number.
StoreArray< TRGECLUnpackerStore > m_TRGECLTCArray
ECL Trigger Unpacker TC output.
void beginRun() override
Called when new run started.
StoreArray< TRGECLUnpackerEvtStore > m_TRGECLEvtArray
ECL Trigger Unpacker Event output.
std::string version() const
returns version of TRGECLUnpackerModule.
virtual void checkBuffer_v136(int *, int)
Unpacker main function for upto version 136.
StoreObjPtr< EventLevelClusteringInfo > m_eventLevelClusteringInfo
EventLevelClusteringInfo.
virtual void checkBuffer(int *, int)
Unpacker main function.
TRGECLUnpackerModule()
Constructor.
StoreArray< TRGECLCluster > m_TRGECLClusterArray
ECL Trigger Cluster output.
int getTCThetaIdFromTCId(int)
get [TC Theta ID] from [TC ID]
int getTCIdFromPosition(int, int)
get TCId from phi and theta position(LSB = 1.4)
ROOT::Math::XYZVector getTCPosition(int)
TC position (cm)
int getTCPhiIdFromTCId(int)
get [TC Phi ID] from [TC ID]
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
int GetDetectorNwords(int n, int finesse_num)
get Detector buffer length
int * GetDetectorBuffer(int n, int finesse_num)
get Detector buffer
Abstract base class for different kinds of events.