24 #include <trg/ecl/modules/trgeclUnpacker/trgeclUnpackerModule.h>
26 #include "trg/ecl/TrgEclDataBase.h"
27 #include "trg/ecl/TrgEclMapping.h"
35 string TRGECLUnpackerModule::version()
const
37 return string(
"4.02");
40 TRGECLUnpackerModule::TRGECLUnpackerModule()
44 string desc =
"TRGECLUnpackerModule(" +
version() +
")";
48 B2DEBUG(20,
"trgeclunpacker: Constructor done.");
72 for (
int i = 0; i < raw_trgarray.
getEntries(); i++) {
74 for (
int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
75 nodeid = ((raw_trgarray[i]->GetNodeID(j)) >> 24) & 0x1F;
76 nwords = raw_trgarray[i]->GetDetectorNwords(j, 0);
77 trgtype = raw_trgarray[i]->GetTRGType(j);
81 B2ERROR(
"Consistecy error in unpacker.");
82 B2ERROR(
"data length " <<
nwords <<
" nWord " <<
nwords);
110 int version_check = (rdat[0] >> 12) & 0xf;
111 if (version_check != 15)
return;
114 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
115 unsigned char data_sum = 0;
116 unsigned char kdat[4] = {0};
117 for (
int j = nnn - 2; j > -1; j--) {
118 kdat[0] = rdat[j] & 0xff;
119 kdat[1] = (rdat[j] >> 8) & 0xff;
120 kdat[2] = (rdat[j] >> 16) & 0xff;
121 kdat[3] = (rdat[j] >> 24) & 0xff;
122 for (
int k = 0; k < 4; k++) {
123 data_sum = data_sum + kdat[k];
127 int flag_checksum = 0;
129 if (check_sum == data_sum) {
136 int l1_revo = rdat[0] & 0x7ff;
142 int summary_data = 0;
143 int summary_recon = 0;
145 int summary_revo = 0;
147 bool summary_trg =
false;
160 int win3_revo = -9999;
162 vector<int> sum_data;
163 vector<vector<int>> sum_info;
166 vector<vector<int>> tc_info;
167 vector<vector<int>> tc_info_FE1;
168 vector<vector<int>> tc_info_FE2;
169 vector<vector<int>> tc_info_BE1;
170 vector<vector<int>> tc_info_BE2;
173 while (i < nnn - 2) {
174 summary_data = rdat[i + 1];
175 summary_trg = (summary_data >> 23) & 0x1;
176 summary_revo = (summary_data >> 16) & 0x7f;
177 ntc_win = summary_data & 0x3ff;
183 data_win = window_num;
184 if (window_num == 3) win3_revo = summary_revo;
186 if (summary_trg ==
true) {
187 sum_data.push_back(data_win);
188 sum_data.push_back(summary_revo);
189 for (
int j = 0; j < 12; j++) {
191 (((rdat[i + j + 2] >> 0) & 0xFF) << 24) +
192 (((rdat[i + j + 2] >> 8) & 0xFF) << 16) +
193 (((rdat[i + j + 2] >> 16) & 0xFF) << 8) +
194 (((rdat[i + j + 2] >> 24) & 0xFF) << 0);
195 sum_data.push_back(summary_recon);
197 sum_info.push_back(sum_data);
201 if (tc_trg ==
true) {
202 for (
int j = 0; j < ntc_win; j++) {
203 tc_id = (rdat[i + j] >> 20) & 0x3FF;
204 tc_t = (rdat[i + j] >> 12) & 0x7F;
205 tc_e = rdat[i + j] & 0xFFF;
206 conv_tc_t = (data_win - 3) * 128 + tc_t;
209 tc_data.push_back(tc_id);
210 tc_data.push_back(conv_tc_t);
211 tc_data.push_back(tc_e);
212 tc_data.push_back(data_win);
215 tc_info_FE1.push_back(tc_data);
217 tc_info_FE2.push_back(tc_data);
219 }
else if (tc_id > 512) {
221 tc_info_BE1.push_back(tc_data);
223 tc_info_BE2.push_back(tc_data);
226 tc_info.push_back(tc_data);
234 if (tc_trg ==
true) {
235 for (
int j = 0; j < ntc_win; j++) {
236 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
237 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
238 conv_tc_t = (data_win - 3) * 128 + tc_t;
239 tc_e = rdat[i + j + 2] & 0xFFF;
242 tc_data.push_back(tc_id);
243 tc_data.push_back(conv_tc_t);
244 tc_data.push_back(tc_e);
245 tc_data.push_back(data_win);
248 tc_info_FE1.push_back(tc_data);
250 tc_info_FE2.push_back(tc_data);
252 }
else if (tc_id > 512) {
254 tc_info_BE1.push_back(tc_data);
256 tc_info_BE2.push_back(tc_data);
259 tc_info.push_back(tc_data);
280 int cl_theta[6] = {0};
282 int cl_time[6] = { -9999};
283 int cl_energy[6] = {0};
284 int cl_1gev[6] = {0};
285 int cl_2gev[6] = {0};
311 vector<vector<int>> cl_2d;
313 vector<int> evt_1d_vector;
314 vector<vector<int>> evt_2d_vector;
317 int sum_size = sum_info.size();
319 for (
int j = 0; j < sum_size; j++) {
320 sum_num = sum_info[j][0];
321 sum_revo = sum_info[j][1];
323 time = (sum_info[j][2]) & 0x7F;
324 time_type = (sum_info[j][2] >> 7) & 0x7;
325 physics = (sum_info[j][2] >> 10) & 0x1;
326 b1bhabha = (sum_info[j][2] >> 11) & 0x1;
327 b1_type = (sum_info[j][2] >> 12) & 0x3FFF;
328 etot = ((sum_info[j][3] & 0x7F) << 6) + ((sum_info[j][2] >> 26) & 0x3F);
329 etot_type = (sum_info[j][3] >> 7) & 0x7;
330 icn = (sum_info[j][3] >> 10) & 0x7F;
331 bg_veto = (sum_info[j][3] >> 17) & 0x7;
332 icn_over = (sum_info[j][3] >> 20) & 0x1;
333 b2bhabha_v = (sum_info[j][3] >> 21) & 0x1;
334 low_multi = (((sum_info[j][4] >> 6) & 0x3) << 12) + ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][3] >> 22) & 0x3FF);
335 b2bhabha_s = (sum_info[j][4] >> 2) & 0x1;
336 mumu = (sum_info[j][4] >> 3) & 0x1;
337 prescale = (sum_info[j][4] >> 4) & 0x1;
338 ecl_bst = (sum_info[j][4] >> 5) & 0x1;
340 cl_energy[0] = (sum_info[j][5]) & 0xFFF;
341 cl_time[0] = (sum_info[j][5] >> 12) & 0xFF;
342 cl_phi[0] = (sum_info[j][5] >> 20) & 0xFF;
343 cl_theta[0] = ((sum_info[j][6] & 0x7) << 4) + ((sum_info[j][5] >> 28) & 0xF);
345 cl_energy[1] = (sum_info[j][6] >> 3) & 0xFFF;
346 cl_time[1] = (sum_info[j][6] >> 15) & 0xFF;
347 cl_phi[1] = (sum_info[j][6] >> 23) & 0xFF;
348 cl_theta[1] = ((sum_info[j][7] & 0x3F) << 1) + ((sum_info[j][6] >> 31) & 0x1);
350 cl_energy[2] = (sum_info[j][7] >> 6) & 0xFFF;
351 cl_time[2] = (sum_info[j][7] >> 18) & 0xFF;
352 cl_phi[2] = ((sum_info[j][8] & 0x3) << 6) + ((sum_info[j][7] >> 26) & 0x3F);
353 cl_theta[2] = (sum_info[j][8] >> 2) & 0x3F;
355 cl_energy[3] = (sum_info[j][8] >> 9) & 0xFFF;
356 cl_time[3] = (sum_info[j][8] >> 21) & 0xFF;
357 cl_phi[3] = ((sum_info[j][9] & 0x1F) << 3) + ((sum_info[j][8] >> 29) & 0x7);
358 cl_theta[3] = (sum_info[j][9] >> 5) & 0x3F;
360 cl_energy[4] = (sum_info[j][ 9] >> 12) & 0xFFF;
361 cl_time[4] = (sum_info[j][ 9] >> 24) & 0xFF;
362 cl_phi[4] = (sum_info[j][10]) & 0xFF;
363 cl_theta[4] = (sum_info[j][10] >> 8) & 0x3F;
365 cl_energy[5] = (sum_info[j][10] >> 15) & 0xFFF;
366 cl_time[5] = ((sum_info[j][11] & 0x7) << 5) + ((sum_info[j][10] >> 27) & 0x1F);
367 cl_phi[5] = (sum_info[j][11] >> 3) & 0xFF;
368 cl_theta[5] = (sum_info[j][11] >> 11) & 0x3F;
370 for (
int k = 0; k < 6; k++) {
371 cl_1gev[k] = (sum_info[j][12] >> k) & 0x1;
372 cl_2gev[k] = (sum_info[j][12] >> (k + 6)) & 0x1;
373 cl_bha[k] = (sum_info[j][12] >> (k + 12)) & 0x1;
375 ncl = (sum_info[j][13]) & 0x7;
407 for (
int k = 0; k < 6; k++) {
408 cl_1d.push_back(cl_theta[k]);
409 cl_1d.push_back(cl_phi[k]);
410 cl_1d.push_back(cl_time[k]);
411 cl_1d.push_back(cl_energy[k]);
412 cl_1d.push_back(cl_1gev[k]);
413 cl_1d.push_back(cl_2gev[k]);
414 cl_1d.push_back(cl_bha[k]);
415 cl_2d.push_back(cl_1d);
418 sort(cl_2d.begin(), cl_2d.end(),
419 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
421 if (sum_num == -9999) {
423 }
else if (sum_num <= 3) {
424 sum_num_ord = 2 * abs(sum_num - 3);
426 sum_num_ord = (sum_num * 2) - 7;
428 evt_1d_vector.push_back(sum_num_ord);
429 evt_1d_vector.push_back(sum_revo);
430 evt_1d_vector.push_back(sum_num);
431 evt_1d_vector.push_back(time);
432 for (
int k = 0; k < 6; k++) {
433 for (
int l = 0; l < 7; l++) {
434 evt_1d_vector.push_back(cl_2d[k][l]);
437 evt_1d_vector.push_back(ncl);
438 evt_1d_vector.push_back(low_multi);
439 evt_1d_vector.push_back(b2bhabha_v);
440 evt_1d_vector.push_back(b2bhabha_s);
441 evt_1d_vector.push_back(mumu);
442 evt_1d_vector.push_back(prescale);
443 evt_1d_vector.push_back(icn);
444 evt_1d_vector.push_back(icn_over);
445 evt_1d_vector.push_back(etot_type);
446 evt_1d_vector.push_back(etot);
447 evt_1d_vector.push_back(ecl_bst);
448 evt_1d_vector.push_back(b1_type);
449 evt_1d_vector.push_back(b1bhabha);
450 evt_1d_vector.push_back(physics);
451 evt_1d_vector.push_back(time_type);
452 evt_2d_vector.push_back(evt_1d_vector);
453 evt_1d_vector.clear();
456 for (
int k = 0; k < 6; k++) {
514 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
515 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
516 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
517 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
533 int m_caltime = -9999;
535 int tot_ntc = tc_info.size();
539 int evt_revo = -9999;
543 int evt_timing = -9999;
544 int evt_cl_theta[6] = {0};
545 int evt_cl_phi[6] = {0};
546 int evt_cl_time[6] = { -9999};
547 int evt_cl_energy[6] = {0};
548 int evt_cl_1gev[6] = {0};
549 int evt_cl_2gev[6] = {0};
550 int evt_cl_bha[6] = {0};
554 int evt_low_multi = 0;
556 int evt_b2bhabha_v = 0;
558 int evt_b2bhabha_s = 0;
562 int evt_prescale = 0;
566 int evt_icn_over = 0;
568 int evt_etot_type = 0;
576 int evt_b1bhabha = 0;
580 int evt_time_type = 0;
582 int evt_etot_all = 0;
584 int evt_time_min = 0;
586 int evt_time_max = 0;
588 int evt_time_win = 0;
605 int evt_v_size = evt_2d_vector.size();
606 if (evt_v_size != 0) {
608 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
609 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
612 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
613 if (evt_v_size == 0) {
615 sort(tc_info.begin(), tc_info.end(),
616 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
617 evt_revo = win3_revo;
618 evt_win = tc_info[0][3];
619 evt_timing = tc_info[0][1];
620 for (
int k = 0; k < 6; k++) {
624 evt_cl_energy[k] = 0;
645 evt_revo = evt_2d_vector[0][1];
646 evt_win = evt_2d_vector[0][2];
647 evt_timing = evt_2d_vector[0][3];
648 for (
int k = 0; k < 6; k++) {
649 evt_cl_theta[k] = evt_2d_vector[0][ 4 + k * 7];
650 evt_cl_phi[k] = evt_2d_vector[0][ 5 + k * 7];
651 evt_cl_time[k] = evt_2d_vector[0][ 6 + k * 7];
652 evt_cl_energy[k] = evt_2d_vector[0][ 7 + k * 7];
653 evt_cl_1gev[k] = evt_2d_vector[0][ 8 + k * 7];
654 evt_cl_2gev[k] = evt_2d_vector[0][ 9 + k * 7];
655 evt_cl_bha[k] = evt_2d_vector[0][10 + k * 7];
657 evt_ncl = evt_2d_vector[0][46];
658 evt_low_multi = evt_2d_vector[0][47];
659 evt_b2bhabha_v = evt_2d_vector[0][48];
660 evt_b2bhabha_s = evt_2d_vector[0][49];
661 evt_mumu = evt_2d_vector[0][50];
662 evt_prescale = evt_2d_vector[0][51];
663 evt_icn = evt_2d_vector[0][52];
664 evt_icn_over = evt_2d_vector[0][53];
665 evt_etot_type = evt_2d_vector[0][54];
666 evt_etot = evt_2d_vector[0][55];
667 evt_ecl_bst = evt_2d_vector[0][56];
668 evt_b1_type = evt_2d_vector[0][57];
669 evt_b1bhabha = evt_2d_vector[0][58];
670 evt_physics = evt_2d_vector[0][59];
671 evt_time_type = evt_2d_vector[0][60];
674 sort(tc_info.begin(), tc_info.end(),
675 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
677 for (
int ii = 0; ii < tot_ntc; ii++) {
678 m_tcid = tc_info[ii][0];
679 m_time = tc_info[ii][1];
680 m_energy = tc_info[ii][2];
681 m_win = tc_info[ii][3];
683 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
695 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
696 if (m_win == evt_win - 1) {
699 if (m_win == evt_win) {
702 if (m_win == evt_win + 1) {
707 if (etot_i == 0 && etot_f == 0) {
708 evt_etot_all = etot_c;
709 evt_time_min = - evt_timing;
710 evt_time_max = 256 - evt_timing;
712 }
else if (etot_i >= etot_f) {
713 evt_etot_all = etot_c + etot_i;
714 evt_time_min = -128 - evt_timing;
715 evt_time_max = 128 - evt_timing;
718 evt_etot_all = etot_c + etot_f;
719 evt_time_min = - evt_timing;
720 evt_time_max = 256 - evt_timing;
724 for (
int icluster = 0; icluster < 6; icluster++) {
725 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
727 if (cl_tcid == 0) {
continue;}
806 for (
int k = 0; k < 6; k++) {
809 evt_cl_time[k] = -9999;
810 evt_cl_energy[k] = 0;
852 int version_check = (rdat[0] >> 12) & 0xf;
853 if (version_check != 15)
return;
856 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
857 unsigned char data_sum = 0;
858 unsigned char kdat[4] = {0};
859 for (
int j = nnn - 2; j > -1; j--) {
860 kdat[0] = rdat[j] & 0xff;
861 kdat[1] = (rdat[j] >> 8) & 0xff;
862 kdat[2] = (rdat[j] >> 16) & 0xff;
863 kdat[3] = (rdat[j] >> 24) & 0xff;
864 for (
int k = 0; k < 4; k++) {
865 data_sum = data_sum + kdat[k];
869 int flag_checksum = 0;
871 if (check_sum == data_sum) {
878 int l1_revo = rdat[0] & 0x7ff;
884 int summary_data = 0;
886 int summary_revo = 0;
888 bool summary_trg =
false;
901 int win3_revo = -9999;
903 vector<int> sum_data;
904 vector<vector<int>> sum_info;
907 vector<vector<int>> tc_info;
908 vector<vector<int>> tc_info_FE1;
909 vector<vector<int>> tc_info_FE2;
910 vector<vector<int>> tc_info_BE1;
911 vector<vector<int>> tc_info_BE2;
914 while (i < nnn - 2) {
915 summary_data = rdat[i + 1];
916 summary_trg = (summary_data >> 23) & 0x1;
917 summary_revo = (summary_data >> 16) & 0x7f;
918 ntc_win = summary_data & 0x3ff;
924 data_win = window_num;
925 if (window_num == 3) win3_revo = summary_revo;
927 if (summary_trg ==
true) {
928 sum_data.push_back(data_win);
929 sum_data.push_back(summary_revo);
930 for (
int j = 0; j < 9; j++) {
931 sum_data.push_back(rdat[i + j + 2]);
933 sum_info.push_back(sum_data);
937 if (tc_trg ==
true) {
938 for (
int j = 0; j < ntc_win; j++) {
939 tc_id = (rdat[i + j] >> 20) & 0x3FF;
940 tc_t = (rdat[i + j] >> 12) & 0x7F;
941 tc_e = rdat[i + j] & 0xFFF;
942 conv_tc_t = (data_win - 3) * 128 + tc_t;
945 tc_data.push_back(tc_id);
946 tc_data.push_back(conv_tc_t);
947 tc_data.push_back(tc_e);
948 tc_data.push_back(data_win);
951 tc_info_FE1.push_back(tc_data);
953 tc_info_FE2.push_back(tc_data);
955 }
else if (tc_id > 512) {
957 tc_info_BE1.push_back(tc_data);
959 tc_info_BE2.push_back(tc_data);
962 tc_info.push_back(tc_data);
970 if (tc_trg ==
true) {
971 for (
int j = 0; j < ntc_win; j++) {
972 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
973 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
974 conv_tc_t = (data_win - 3) * 128 + tc_t;
975 tc_e = rdat[i + j + 2] & 0xFFF;
978 tc_data.push_back(tc_id);
979 tc_data.push_back(conv_tc_t);
980 tc_data.push_back(tc_e);
981 tc_data.push_back(data_win);
984 tc_info_FE1.push_back(tc_data);
986 tc_info_FE2.push_back(tc_data);
988 }
else if (tc_id > 512) {
990 tc_info_BE1.push_back(tc_data);
992 tc_info_BE2.push_back(tc_data);
995 tc_info.push_back(tc_data);
1014 int cl_theta[6] = {0};
1015 int cl_phi[6] = {0};
1016 int cl_time[6] = { -9999};
1017 int cl_energy[6] = {0};
1042 vector<vector<int>> cl_2d;
1044 vector<int> evt_1d_vector;
1045 vector<vector<int>> evt_2d_vector;
1048 int sum_size = sum_info.size();
1049 if (sum_size != 0) {
1050 for (
int j = 0; j < sum_size; j++) {
1051 sum_num = sum_info[j][0];
1052 sum_revo = sum_info[j][1];
1054 ecl_bst = (sum_info[j][2] >> 26) & 0x1;
1057 cl_theta[5] = (sum_info[j][2] >> 19) & 0x7f;
1058 cl_phi[5] = (sum_info[j][2] >> 11) & 0xff;
1059 cl_time[5] = (sum_info[j][2] >> 3) & 0xff;
1060 cl_energy[5] = ((sum_info[j][2] & 0x7) << 9) + ((sum_info[j][3] >> 23) & 0x1ff);
1062 cl_theta[4] = (sum_info[j][3] >> 16) & 0x7f;
1063 cl_phi[4] = (sum_info[j][3] >> 8) & 0xff;
1064 cl_time[4] = (sum_info[j][3]) & 0xff;
1065 cl_energy[4] = (sum_info[j][4] >> 20) & 0xfff;
1067 cl_theta[3] = (sum_info[j][4] >> 13) & 0x7f;
1068 cl_phi[3] = (sum_info[j][4] >> 5) & 0xff;
1069 cl_time[3] = ((sum_info[j][4] & 0x1f) << 3) + ((sum_info[j][5] >> 29) & 0x7);
1070 cl_energy[3] = (sum_info[j][5] >> 17) & 0xfff;
1072 cl_theta[2] = (sum_info[j][5] >> 10) & 0x7f;
1073 cl_phi[2] = (sum_info[j][5] >> 2) & 0xff;
1074 cl_time[2] = ((sum_info[j][5] & 0x3) << 6) + ((sum_info[j][6] >> 26) & 0x3f);
1075 cl_energy[2] = (sum_info[j][6] >> 14) & 0xfff;
1077 cl_theta[1] = (sum_info[j][6] >> 7) & 0x7f;
1078 cl_phi[1] = ((sum_info[j][6] & 0x7f) << 1) + ((sum_info[j][7] >> 31) & 0x1);
1079 cl_time[1] = (sum_info[j][7] >> 23) & 0xff;
1080 cl_energy[1] = (sum_info[j][7] >> 11) & 0xfff;
1082 cl_theta[0] = (sum_info[j][7] >> 4) & 0x7f;
1083 cl_phi[0] = ((sum_info[j][7] & 0xf) << 4) + ((sum_info[j][8] >> 28) & 0xf);
1084 cl_time[0] = (sum_info[j][8] >> 20) & 0xff;
1085 cl_energy[0] = (sum_info[j][8] >> 8) & 0xfff;
1087 ncl = (sum_info[j][8] >> 5) & 0x7;
1089 prescale = (sum_info[j][8] >> 4) & 0x1;
1090 mumu = (sum_info[j][8] >> 3) & 0x1;
1091 b2bhabha_s = (sum_info[j][8] >> 2) & 0x1;
1093 low_multi = (((sum_info[j][2] >> 27) & 0x3) << 12) + ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1095 low_multi = ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1097 b2bhabha_v = (sum_info[j][9] >> 21) & 0x1;
1098 icn_over = (sum_info[j][9] >> 20) & 0x1;
1099 bg_veto = (sum_info[j][9] >> 17) & 0x7;
1100 icn = (sum_info[j][9] >> 10) & 0x7f;
1101 etot_type = (sum_info[j][9] >> 7) & 0x7;
1102 etot = ((sum_info[j][9] & 0x7f) << 6) + ((sum_info[j][10] >> 26) & 0x3f);
1103 b1_type = (sum_info[j][10] >> 12) & 0x3fff;
1104 b1bhabha = (sum_info[j][10] >> 11) & 0x1;
1105 physics = (sum_info[j][10] >> 10) & 0x1;
1106 time_type = (sum_info[j][10] >> 7) & 0x7;
1107 time = (sum_info[j][10]) & 0x7f;
1109 cl_theta[5] = (sum_info[j][2] >> 24) & 0x7f;
1110 cl_phi[5] = (sum_info[j][2] >> 16) & 0xff;
1111 cl_time[5] = (sum_info[j][2] >> 8) & 0xff;
1112 cl_energy[5] = ((sum_info[j][2] & 0xff) << 4) + ((sum_info[j][3] >> 28) & 0xf);
1114 cl_theta[4] = (sum_info[j][3] >> 21) & 0x7f;
1115 cl_phi[4] = (sum_info[j][3] >> 13) & 0xff;
1116 cl_time[4] = (sum_info[j][3] >> 5) & 0xff;
1117 cl_energy[4] = ((sum_info[j][3] & 0x1f) << 7) + ((sum_info[j][4] >> 25) & 0x7f);
1119 cl_theta[3] = (sum_info[j][4] >> 18) & 0x7f;
1120 cl_phi[3] = (sum_info[j][4] >> 10) & 0xff;
1121 cl_time[3] = (sum_info[j][4] >> 2) & 0xff;
1122 cl_energy[3] = ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][5] >> 22) & 0x3ff);
1124 cl_theta[2] = (sum_info[j][5] >> 15) & 0x7f;
1125 cl_phi[2] = (sum_info[j][5] >> 7) & 0xff;
1126 cl_time[2] = ((sum_info[j][5] & 0x7f) << 1) + ((sum_info[j][6] >> 31) & 0x1);
1127 cl_energy[2] = (sum_info[j][6] >> 19) & 0xfff;
1129 cl_theta[1] = (sum_info[j][6] >> 12) & 0x7f;
1130 cl_phi[1] = (sum_info[j][6] >> 4) & 0xff;
1131 cl_time[1] = ((sum_info[j][6] & 0xf) << 4) + ((sum_info[j][7] >> 28) & 0xf);
1132 cl_energy[1] = (sum_info[j][7] >> 16) & 0xfff;
1134 cl_theta[0] = (sum_info[j][7] >> 9) & 0x7f;
1135 cl_phi[0] = (sum_info[j][7] >> 1) & 0xff;
1136 cl_time[0] = ((sum_info[j][7] & 0x1) << 7) + ((sum_info[j][8] >> 25) & 0x7f);
1137 cl_energy[0] = (sum_info[j][8] >> 13) & 0xfff;
1139 ncl = (sum_info[j][8] >> 10) & 0x7;
1141 low_multi = ((sum_info[j][8] & 0x3ff) << 2) + ((sum_info[j][9] >> 30) & 0x3);
1142 b2bhabha_v = (sum_info[j][9] >> 29) & 0x1;
1143 icn_over = (sum_info[j][9] >> 28) & 0x1;
1144 bg_veto = (sum_info[j][9] >> 25) & 0x7;
1145 icn = (sum_info[j][9] >> 18) & 0x7f;
1146 etot_type = (sum_info[j][9] >> 15) & 0x7;
1147 etot = (sum_info[j][9] >> 2) & 0x1fff;
1149 b1_type = ((sum_info[j][9] & 0x3) << 12) + ((sum_info[j][10] >> 20) & 0xfff);
1150 b1bhabha = (sum_info[j][10] >> 19) & 0x1;
1151 physics = (sum_info[j][10] >> 18) & 0x1;
1152 time_type = (sum_info[j][10] >> 15) & 0x7;
1153 time = (sum_info[j][10] >> 8) & 0x7f;
1187 for (
int k = 0; k < 6; k++) {
1188 cl_1d.push_back(cl_theta[k]);
1189 cl_1d.push_back(cl_phi[k]);
1190 cl_1d.push_back(cl_time[k]);
1191 cl_1d.push_back(cl_energy[k]);
1192 cl_2d.push_back(cl_1d);
1195 sort(cl_2d.begin(), cl_2d.end(),
1196 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
1198 evt_1d_vector.push_back(abs(sum_num - 3));
1199 evt_1d_vector.push_back(sum_revo);
1200 evt_1d_vector.push_back(sum_num);
1201 evt_1d_vector.push_back(time);
1202 for (
int k = 0; k < 6; k++) {
1203 evt_1d_vector.push_back(cl_2d[k][0]);
1204 evt_1d_vector.push_back(cl_2d[k][1]);
1205 evt_1d_vector.push_back(cl_2d[k][2]);
1206 evt_1d_vector.push_back(cl_2d[k][3]);
1208 evt_1d_vector.push_back(ncl);
1209 evt_1d_vector.push_back(low_multi);
1210 evt_1d_vector.push_back(b2bhabha_v);
1211 evt_1d_vector.push_back(b2bhabha_s);
1212 evt_1d_vector.push_back(mumu);
1213 evt_1d_vector.push_back(prescale);
1214 evt_1d_vector.push_back(icn);
1215 evt_1d_vector.push_back(icn_over);
1216 evt_1d_vector.push_back(etot_type);
1217 evt_1d_vector.push_back(etot);
1218 evt_1d_vector.push_back(ecl_bst);
1219 evt_1d_vector.push_back(b1_type);
1220 evt_1d_vector.push_back(b1bhabha);
1221 evt_1d_vector.push_back(physics);
1222 evt_1d_vector.push_back(time_type);
1223 evt_2d_vector.push_back(evt_1d_vector);
1224 evt_1d_vector.clear();
1228 for (
int k = 0; k < 6; k++) {
1280 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
1281 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
1282 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
1283 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
1299 int m_caltime = -9999;
1301 int tot_ntc = tc_info.size();
1305 int evt_revo = -9999;
1309 int evt_timing = -9999;
1310 int evt_cl_theta[6] = {0};
1311 int evt_cl_phi[6] = {0};
1312 int evt_cl_time[6] = { -9999};
1313 int evt_cl_energy[6] = {0};
1317 int evt_low_multi = 0;
1319 int evt_b2bhabha_v = 0;
1321 int evt_b2bhabha_s = 0;
1325 int evt_prescale = 0;
1329 int evt_icn_over = 0;
1331 int evt_etot_type = 0;
1335 int evt_ecl_bst = 0;
1337 int evt_b1_type = 0;
1339 int evt_b1bhabha = 0;
1341 int evt_physics = 0;
1343 int evt_time_type = 0;
1345 int evt_etot_all = 0;
1347 int evt_time_min = 0;
1349 int evt_time_max = 0;
1351 int evt_time_win = 0;
1368 int evt_v_size = evt_2d_vector.size();
1369 if (evt_v_size != 0) {
1371 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
1372 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1375 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
1376 if (evt_v_size == 0) {
1378 sort(tc_info.begin(), tc_info.end(),
1379 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
1380 evt_revo = win3_revo;
1381 evt_win = tc_info[0][3];
1382 evt_timing = tc_info[0][1];
1383 for (
int k = 0; k < 6; k++) {
1384 evt_cl_theta[k] = 0;
1387 evt_cl_energy[k] = 0;
1405 evt_revo = evt_2d_vector[0][1];
1406 evt_win = evt_2d_vector[0][2];
1407 evt_timing = evt_2d_vector[0][3];
1408 for (
int k = 0; k < 6; k++) {
1409 evt_cl_theta[k] = evt_2d_vector[0][4 + k * 4];
1410 evt_cl_phi[k] = evt_2d_vector[0][5 + k * 4];
1411 evt_cl_time[k] = evt_2d_vector[0][6 + k * 4];
1412 evt_cl_energy[k] = evt_2d_vector[0][7 + k * 4];
1414 evt_ncl = evt_2d_vector[0][28];
1415 evt_low_multi = evt_2d_vector[0][29];
1416 evt_b2bhabha_v = evt_2d_vector[0][30];
1417 evt_b2bhabha_s = evt_2d_vector[0][31];
1418 evt_mumu = evt_2d_vector[0][32];
1419 evt_prescale = evt_2d_vector[0][33];
1420 evt_icn = evt_2d_vector[0][34];
1421 evt_icn_over = evt_2d_vector[0][35];
1422 evt_etot_type = evt_2d_vector[0][36];
1423 evt_etot = evt_2d_vector[0][37];
1424 evt_ecl_bst = evt_2d_vector[0][38];
1425 evt_b1_type = evt_2d_vector[0][39];
1426 evt_b1bhabha = evt_2d_vector[0][40];
1427 evt_physics = evt_2d_vector[0][41];
1428 evt_time_type = evt_2d_vector[0][42];
1431 sort(tc_info.begin(), tc_info.end(),
1432 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1434 for (
int ii = 0; ii < tot_ntc; ii++) {
1435 m_tcid = tc_info[ii][0];
1436 m_time = tc_info[ii][1];
1437 m_energy = tc_info[ii][2];
1438 m_win = tc_info[ii][3];
1440 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
1452 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
1453 if (m_win == evt_win - 1) {
1456 if (m_win == evt_win) {
1459 if (m_win == evt_win + 1) {
1464 if (etot_i == 0 && etot_f == 0) {
1465 evt_etot_all = etot_c;
1466 evt_time_min = - evt_timing;
1467 evt_time_max = 256 - evt_timing;
1469 }
else if (etot_i >= etot_f) {
1470 evt_etot_all = etot_c + etot_i;
1471 evt_time_min = -128 - evt_timing;
1472 evt_time_max = 128 - evt_timing;
1475 evt_etot_all = etot_c + etot_f;
1476 evt_time_min = - evt_timing;
1477 evt_time_max = 256 - evt_timing;
1481 for (
int icluster = 0; icluster < 6; icluster++) {
1482 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
1484 if (cl_tcid == 0) {
continue;}
1560 for (
int k = 0; k < 6; k++) {
1561 evt_cl_theta[k] = 0;
1563 evt_cl_time[k] = -9999;
1564 evt_cl_energy[k] = 0;