9 #include <trg/ecl/modules/trgeclUnpacker/trgeclUnpackerModule.h>
11 #include "trg/ecl/TrgEclDataBase.h"
12 #include "trg/ecl/TrgEclMapping.h"
20 string TRGECLUnpackerModule::version()
const
22 return string(
"4.02");
25 TRGECLUnpackerModule::TRGECLUnpackerModule()
29 string desc =
"TRGECLUnpackerModule(" +
version() +
")";
33 B2DEBUG(20,
"trgeclunpacker: Constructor done.");
57 for (
int i = 0; i < raw_trgarray.
getEntries(); i++) {
59 for (
int j = 0; j < raw_trgarray[i]->GetNumEntries(); j++) {
60 nodeid = ((raw_trgarray[i]->GetNodeID(j)) >> 24) & 0x1F;
61 trgtype = raw_trgarray[i]->GetTRGType(j);
64 for (
int ch = 0; ch < raw_trgarray[i]->GetMaxNumOfCh(j); ch++) {
65 nwords = raw_trgarray[i]->GetDetectorNwords(j, ch);
69 B2ERROR(
"Consistecy error in unpacker.");
70 B2ERROR(
"data length " <<
nwords <<
" nWord " <<
nwords);
99 int version_check = (rdat[0] >> 12) & 0xf;
100 if (version_check != 15)
return;
103 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
104 unsigned char data_sum = 0;
105 unsigned char kdat[4] = {0};
106 for (
int j = nnn - 2; j > -1; j--) {
107 kdat[0] = rdat[j] & 0xff;
108 kdat[1] = (rdat[j] >> 8) & 0xff;
109 kdat[2] = (rdat[j] >> 16) & 0xff;
110 kdat[3] = (rdat[j] >> 24) & 0xff;
111 for (
int k = 0; k < 4; k++) {
112 data_sum = data_sum + kdat[k];
116 int flag_checksum = 0;
118 if (check_sum == data_sum) {
125 int l1_revo = rdat[0] & 0x7ff;
131 int summary_data = 0;
132 int summary_recon = 0;
134 int summary_revo = 0;
136 bool summary_trg =
false;
149 int win3_revo = -9999;
151 vector<unsigned> sum_data;
152 vector<vector<unsigned>> sum_info;
155 vector<vector<int>> tc_info;
156 vector<vector<int>> tc_info_FE1;
157 vector<vector<int>> tc_info_FE2;
158 vector<vector<int>> tc_info_BE1;
159 vector<vector<int>> tc_info_BE2;
162 while (i < nnn - 2) {
163 summary_data = rdat[i + 1];
164 summary_trg = (summary_data >> 23) & 0x1;
165 summary_revo = (summary_data >> 16) & 0x7f;
166 ntc_win = summary_data & 0x3ff;
172 data_win = window_num;
173 if (window_num == 3) win3_revo = summary_revo;
175 if (summary_trg ==
true) {
176 sum_data.push_back(data_win);
177 sum_data.push_back(summary_revo);
178 for (
int j = 0; j < 12; j++) {
180 (((rdat[i + j + 2] >> 0) & 0xFF) << 24) +
181 (((rdat[i + j + 2] >> 8) & 0xFF) << 16) +
182 (((rdat[i + j + 2] >> 16) & 0xFF) << 8) +
183 (((rdat[i + j + 2] >> 24) & 0xFF) << 0);
184 sum_data.push_back(summary_recon);
186 sum_info.push_back(sum_data);
190 if (tc_trg ==
true) {
191 for (
int j = 0; j < ntc_win; j++) {
192 tc_id = (rdat[i + j] >> 20) & 0x3FF;
193 tc_t = (rdat[i + j] >> 12) & 0x7F;
194 tc_e = rdat[i + j] & 0xFFF;
195 conv_tc_t = (data_win - 3) * 128 + tc_t;
198 tc_data.push_back(tc_id);
199 tc_data.push_back(conv_tc_t);
200 tc_data.push_back(tc_e);
201 tc_data.push_back(data_win);
204 tc_info_FE1.push_back(tc_data);
206 tc_info_FE2.push_back(tc_data);
208 }
else if (tc_id > 512) {
210 tc_info_BE1.push_back(tc_data);
212 tc_info_BE2.push_back(tc_data);
215 tc_info.push_back(tc_data);
223 if (tc_trg ==
true) {
224 for (
int j = 0; j < ntc_win; j++) {
225 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
226 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
227 conv_tc_t = (data_win - 3) * 128 + tc_t;
228 tc_e = rdat[i + j + 2] & 0xFFF;
231 tc_data.push_back(tc_id);
232 tc_data.push_back(conv_tc_t);
233 tc_data.push_back(tc_e);
234 tc_data.push_back(data_win);
237 tc_info_FE1.push_back(tc_data);
239 tc_info_FE2.push_back(tc_data);
241 }
else if (tc_id > 512) {
243 tc_info_BE1.push_back(tc_data);
245 tc_info_BE2.push_back(tc_data);
248 tc_info.push_back(tc_data);
269 int cl_theta[6] = {0};
271 int cl_time[6] = { -9999};
272 int cl_energy[6] = {0};
273 int cl_1gev[6] = {0};
274 int cl_2gev[6] = {0};
300 vector<vector<int>> cl_2d;
302 vector<int> evt_1d_vector;
303 vector<vector<int>> evt_2d_vector;
306 int sum_size = sum_info.size();
308 for (
int j = 0; j < sum_size; j++) {
309 sum_num = sum_info[j][0];
310 sum_revo = sum_info[j][1];
312 time = (sum_info[j][2]) & 0x7F;
313 time_type = (sum_info[j][2] >> 7) & 0x7;
314 physics = (sum_info[j][2] >> 10) & 0x1;
315 b1bhabha = (sum_info[j][2] >> 11) & 0x1;
316 b1_type = (sum_info[j][2] >> 12) & 0x3FFF;
317 etot = ((sum_info[j][3] & 0x7F) << 6) + ((sum_info[j][2] >> 26) & 0x3F);
318 etot_type = (sum_info[j][3] >> 7) & 0x7;
319 icn = (sum_info[j][3] >> 10) & 0x7F;
320 bg_veto = (sum_info[j][3] >> 17) & 0x7;
321 icn_over = (sum_info[j][3] >> 20) & 0x1;
322 b2bhabha_v = (sum_info[j][3] >> 21) & 0x1;
323 low_multi = (((sum_info[j][4] >> 6) & 0x3) << 12) + ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][3] >> 22) & 0x3FF);
324 b2bhabha_s = (sum_info[j][4] >> 2) & 0x1;
325 mumu = (sum_info[j][4] >> 3) & 0x1;
326 prescale = (sum_info[j][4] >> 4) & 0x1;
327 ecl_bst = (sum_info[j][4] >> 5) & 0x1;
329 cl_energy[0] = (sum_info[j][5]) & 0xFFF;
330 cl_time[0] = (sum_info[j][5] >> 12) & 0xFF;
331 cl_phi[0] = (sum_info[j][5] >> 20) & 0xFF;
332 cl_theta[0] = ((sum_info[j][6] & 0x7) << 4) + ((sum_info[j][5] >> 28) & 0xF);
334 cl_energy[1] = (sum_info[j][6] >> 3) & 0xFFF;
335 cl_time[1] = (sum_info[j][6] >> 15) & 0xFF;
336 cl_phi[1] = (sum_info[j][6] >> 23) & 0xFF;
337 cl_theta[1] = ((sum_info[j][7] & 0x3F) << 1) + ((sum_info[j][6] >> 31) & 0x1);
339 cl_energy[2] = (sum_info[j][7] >> 6) & 0xFFF;
340 cl_time[2] = (sum_info[j][7] >> 18) & 0xFF;
341 cl_phi[2] = ((sum_info[j][8] & 0x3) << 6) + ((sum_info[j][7] >> 26) & 0x3F);
342 cl_theta[2] = (sum_info[j][8] >> 2) & 0x3F;
344 cl_energy[3] = (sum_info[j][8] >> 9) & 0xFFF;
345 cl_time[3] = (sum_info[j][8] >> 21) & 0xFF;
346 cl_phi[3] = ((sum_info[j][9] & 0x1F) << 3) + ((sum_info[j][8] >> 29) & 0x7);
347 cl_theta[3] = (sum_info[j][9] >> 5) & 0x3F;
349 cl_energy[4] = (sum_info[j][ 9] >> 12) & 0xFFF;
350 cl_time[4] = (sum_info[j][ 9] >> 24) & 0xFF;
351 cl_phi[4] = (sum_info[j][10]) & 0xFF;
352 cl_theta[4] = (sum_info[j][10] >> 8) & 0x3F;
354 cl_energy[5] = (sum_info[j][10] >> 15) & 0xFFF;
355 cl_time[5] = ((sum_info[j][11] & 0x7) << 5) + ((sum_info[j][10] >> 27) & 0x1F);
356 cl_phi[5] = (sum_info[j][11] >> 3) & 0xFF;
357 cl_theta[5] = (sum_info[j][11] >> 11) & 0x3F;
359 for (
int k = 0; k < 6; k++) {
360 cl_1gev[k] = (sum_info[j][12] >> k) & 0x1;
361 cl_2gev[k] = (sum_info[j][12] >> (k + 6)) & 0x1;
362 cl_bha[k] = (sum_info[j][12] >> (k + 12)) & 0x1;
364 ncl = (sum_info[j][13]) & 0x7;
396 for (
int k = 0; k < 6; k++) {
397 cl_1d.push_back(cl_theta[k]);
398 cl_1d.push_back(cl_phi[k]);
399 cl_1d.push_back(cl_time[k]);
400 cl_1d.push_back(cl_energy[k]);
401 cl_1d.push_back(cl_1gev[k]);
402 cl_1d.push_back(cl_2gev[k]);
403 cl_1d.push_back(cl_bha[k]);
404 cl_2d.push_back(cl_1d);
407 sort(cl_2d.begin(), cl_2d.end(),
408 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
410 if (sum_num == -9999) {
412 }
else if (sum_num <= 3) {
413 sum_num_ord = 2 * abs(sum_num - 3);
415 sum_num_ord = (sum_num * 2) - 7;
417 evt_1d_vector.push_back(sum_num_ord);
418 evt_1d_vector.push_back(sum_revo);
419 evt_1d_vector.push_back(sum_num);
420 evt_1d_vector.push_back(time);
421 for (
int k = 0; k < 6; k++) {
422 for (
int l = 0; l < 7; l++) {
423 evt_1d_vector.push_back(cl_2d[k][l]);
426 evt_1d_vector.push_back(ncl);
427 evt_1d_vector.push_back(low_multi);
428 evt_1d_vector.push_back(b2bhabha_v);
429 evt_1d_vector.push_back(b2bhabha_s);
430 evt_1d_vector.push_back(mumu);
431 evt_1d_vector.push_back(prescale);
432 evt_1d_vector.push_back(icn);
433 evt_1d_vector.push_back(icn_over);
434 evt_1d_vector.push_back(etot_type);
435 evt_1d_vector.push_back(etot);
436 evt_1d_vector.push_back(ecl_bst);
437 evt_1d_vector.push_back(b1_type);
438 evt_1d_vector.push_back(b1bhabha);
439 evt_1d_vector.push_back(physics);
440 evt_1d_vector.push_back(time_type);
441 evt_2d_vector.push_back(evt_1d_vector);
442 evt_1d_vector.clear();
445 for (
int k = 0; k < 6; k++) {
503 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
504 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
505 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
506 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
522 int m_caltime = -9999;
524 int tot_ntc = tc_info.size();
528 int evt_revo = -9999;
532 int evt_timing = -9999;
533 int evt_cl_theta[6] = {0};
534 int evt_cl_phi[6] = {0};
535 int evt_cl_time[6] = { -9999};
536 int evt_cl_energy[6] = {0};
537 int evt_cl_1gev[6] = {0};
538 int evt_cl_2gev[6] = {0};
539 int evt_cl_bha[6] = {0};
543 int evt_low_multi = 0;
545 int evt_b2bhabha_v = 0;
547 int evt_b2bhabha_s = 0;
551 int evt_prescale = 0;
555 int evt_icn_over = 0;
557 int evt_etot_type = 0;
565 int evt_b1bhabha = 0;
569 int evt_time_type = 0;
571 int evt_etot_all = 0;
573 int evt_time_min = 0;
575 int evt_time_max = 0;
577 int evt_time_win = 0;
594 int evt_v_size = evt_2d_vector.size();
595 if (evt_v_size != 0) {
597 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
598 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
601 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
602 if (evt_v_size == 0) {
604 sort(tc_info.begin(), tc_info.end(),
605 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
606 evt_revo = win3_revo;
607 evt_win = tc_info[0][3];
608 evt_timing = tc_info[0][1];
609 for (
int k = 0; k < 6; k++) {
613 evt_cl_energy[k] = 0;
634 evt_revo = evt_2d_vector[0][1];
635 evt_win = evt_2d_vector[0][2];
636 evt_timing = evt_2d_vector[0][3];
637 for (
int k = 0; k < 6; k++) {
638 evt_cl_theta[k] = evt_2d_vector[0][ 4 + k * 7];
639 evt_cl_phi[k] = evt_2d_vector[0][ 5 + k * 7];
640 evt_cl_time[k] = evt_2d_vector[0][ 6 + k * 7];
641 evt_cl_energy[k] = evt_2d_vector[0][ 7 + k * 7];
642 evt_cl_1gev[k] = evt_2d_vector[0][ 8 + k * 7];
643 evt_cl_2gev[k] = evt_2d_vector[0][ 9 + k * 7];
644 evt_cl_bha[k] = evt_2d_vector[0][10 + k * 7];
646 evt_ncl = evt_2d_vector[0][46];
647 evt_low_multi = evt_2d_vector[0][47];
648 evt_b2bhabha_v = evt_2d_vector[0][48];
649 evt_b2bhabha_s = evt_2d_vector[0][49];
650 evt_mumu = evt_2d_vector[0][50];
651 evt_prescale = evt_2d_vector[0][51];
652 evt_icn = evt_2d_vector[0][52];
653 evt_icn_over = evt_2d_vector[0][53];
654 evt_etot_type = evt_2d_vector[0][54];
655 evt_etot = evt_2d_vector[0][55];
656 evt_ecl_bst = evt_2d_vector[0][56];
657 evt_b1_type = evt_2d_vector[0][57];
658 evt_b1bhabha = evt_2d_vector[0][58];
659 evt_physics = evt_2d_vector[0][59];
660 evt_time_type = evt_2d_vector[0][60];
663 sort(tc_info.begin(), tc_info.end(),
664 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
666 for (
int ii = 0; ii < tot_ntc; ii++) {
667 m_tcid = tc_info[ii][0];
668 m_time = tc_info[ii][1];
669 m_energy = tc_info[ii][2];
670 m_win = tc_info[ii][3];
672 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
684 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
685 if (m_win == evt_win - 1) {
688 if (m_win == evt_win) {
691 if (m_win == evt_win + 1) {
696 if (etot_i == 0 && etot_f == 0) {
697 evt_etot_all = etot_c;
698 evt_time_min = - evt_timing;
699 evt_time_max = 256 - evt_timing;
701 }
else if (etot_i >= etot_f) {
702 evt_etot_all = etot_c + etot_i;
703 evt_time_min = -128 - evt_timing;
704 evt_time_max = 128 - evt_timing;
707 evt_etot_all = etot_c + etot_f;
708 evt_time_min = - evt_timing;
709 evt_time_max = 256 - evt_timing;
713 for (
int icluster = 0; icluster < 6; icluster++) {
714 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
716 if (cl_tcid == 0) {
continue;}
795 for (
int k = 0; k < 6; k++) {
798 evt_cl_time[k] = -9999;
799 evt_cl_energy[k] = 0;
841 int version_check = (rdat[0] >> 12) & 0xf;
842 if (version_check != 15)
return;
845 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
846 unsigned char data_sum = 0;
847 unsigned char kdat[4] = {0};
848 for (
int j = nnn - 2; j > -1; j--) {
849 kdat[0] = rdat[j] & 0xff;
850 kdat[1] = (rdat[j] >> 8) & 0xff;
851 kdat[2] = (rdat[j] >> 16) & 0xff;
852 kdat[3] = (rdat[j] >> 24) & 0xff;
853 for (
int k = 0; k < 4; k++) {
854 data_sum = data_sum + kdat[k];
858 int flag_checksum = 0;
860 if (check_sum == data_sum) {
867 int l1_revo = rdat[0] & 0x7ff;
873 int summary_data = 0;
875 int summary_revo = 0;
877 bool summary_trg =
false;
890 int win3_revo = -9999;
892 vector<unsigned> sum_data;
893 vector<vector<unsigned>> sum_info;
896 vector<vector<int>> tc_info;
897 vector<vector<int>> tc_info_FE1;
898 vector<vector<int>> tc_info_FE2;
899 vector<vector<int>> tc_info_BE1;
900 vector<vector<int>> tc_info_BE2;
903 while (i < nnn - 2) {
904 summary_data = rdat[i + 1];
905 summary_trg = (summary_data >> 23) & 0x1;
906 summary_revo = (summary_data >> 16) & 0x7f;
907 ntc_win = summary_data & 0x3ff;
913 data_win = window_num;
914 if (window_num == 3) win3_revo = summary_revo;
916 if (summary_trg ==
true) {
917 sum_data.push_back(data_win);
918 sum_data.push_back(summary_revo);
919 for (
int j = 0; j < 9; j++) {
920 sum_data.push_back(rdat[i + j + 2]);
922 sum_info.push_back(sum_data);
926 if (tc_trg ==
true) {
927 for (
int j = 0; j < ntc_win; j++) {
928 tc_id = (rdat[i + j] >> 20) & 0x3FF;
929 tc_t = (rdat[i + j] >> 12) & 0x7F;
930 tc_e = rdat[i + j] & 0xFFF;
931 conv_tc_t = (data_win - 3) * 128 + tc_t;
934 tc_data.push_back(tc_id);
935 tc_data.push_back(conv_tc_t);
936 tc_data.push_back(tc_e);
937 tc_data.push_back(data_win);
940 tc_info_FE1.push_back(tc_data);
942 tc_info_FE2.push_back(tc_data);
944 }
else if (tc_id > 512) {
946 tc_info_BE1.push_back(tc_data);
948 tc_info_BE2.push_back(tc_data);
951 tc_info.push_back(tc_data);
959 if (tc_trg ==
true) {
960 for (
int j = 0; j < ntc_win; j++) {
961 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
962 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
963 conv_tc_t = (data_win - 3) * 128 + tc_t;
964 tc_e = rdat[i + j + 2] & 0xFFF;
967 tc_data.push_back(tc_id);
968 tc_data.push_back(conv_tc_t);
969 tc_data.push_back(tc_e);
970 tc_data.push_back(data_win);
973 tc_info_FE1.push_back(tc_data);
975 tc_info_FE2.push_back(tc_data);
977 }
else if (tc_id > 512) {
979 tc_info_BE1.push_back(tc_data);
981 tc_info_BE2.push_back(tc_data);
984 tc_info.push_back(tc_data);
1003 int cl_theta[6] = {0};
1004 int cl_phi[6] = {0};
1005 int cl_time[6] = { -9999};
1006 int cl_energy[6] = {0};
1031 vector<vector<int>> cl_2d;
1033 vector<int> evt_1d_vector;
1034 vector<vector<int>> evt_2d_vector;
1037 int sum_size = sum_info.size();
1038 if (sum_size != 0) {
1039 for (
int j = 0; j < sum_size; j++) {
1040 sum_num = sum_info[j][0];
1041 sum_revo = sum_info[j][1];
1043 ecl_bst = (sum_info[j][2] >> 26) & 0x1;
1046 cl_theta[5] = (sum_info[j][2] >> 19) & 0x7f;
1047 cl_phi[5] = (sum_info[j][2] >> 11) & 0xff;
1048 cl_time[5] = (sum_info[j][2] >> 3) & 0xff;
1049 cl_energy[5] = ((sum_info[j][2] & 0x7) << 9) + ((sum_info[j][3] >> 23) & 0x1ff);
1051 cl_theta[4] = (sum_info[j][3] >> 16) & 0x7f;
1052 cl_phi[4] = (sum_info[j][3] >> 8) & 0xff;
1053 cl_time[4] = (sum_info[j][3]) & 0xff;
1054 cl_energy[4] = (sum_info[j][4] >> 20) & 0xfff;
1056 cl_theta[3] = (sum_info[j][4] >> 13) & 0x7f;
1057 cl_phi[3] = (sum_info[j][4] >> 5) & 0xff;
1058 cl_time[3] = ((sum_info[j][4] & 0x1f) << 3) + ((sum_info[j][5] >> 29) & 0x7);
1059 cl_energy[3] = (sum_info[j][5] >> 17) & 0xfff;
1061 cl_theta[2] = (sum_info[j][5] >> 10) & 0x7f;
1062 cl_phi[2] = (sum_info[j][5] >> 2) & 0xff;
1063 cl_time[2] = ((sum_info[j][5] & 0x3) << 6) + ((sum_info[j][6] >> 26) & 0x3f);
1064 cl_energy[2] = (sum_info[j][6] >> 14) & 0xfff;
1066 cl_theta[1] = (sum_info[j][6] >> 7) & 0x7f;
1067 cl_phi[1] = ((sum_info[j][6] & 0x7f) << 1) + ((sum_info[j][7] >> 31) & 0x1);
1068 cl_time[1] = (sum_info[j][7] >> 23) & 0xff;
1069 cl_energy[1] = (sum_info[j][7] >> 11) & 0xfff;
1071 cl_theta[0] = (sum_info[j][7] >> 4) & 0x7f;
1072 cl_phi[0] = ((sum_info[j][7] & 0xf) << 4) + ((sum_info[j][8] >> 28) & 0xf);
1073 cl_time[0] = (sum_info[j][8] >> 20) & 0xff;
1074 cl_energy[0] = (sum_info[j][8] >> 8) & 0xfff;
1076 ncl = (sum_info[j][8] >> 5) & 0x7;
1078 prescale = (sum_info[j][8] >> 4) & 0x1;
1079 mumu = (sum_info[j][8] >> 3) & 0x1;
1080 b2bhabha_s = (sum_info[j][8] >> 2) & 0x1;
1082 low_multi = (((sum_info[j][2] >> 27) & 0x3) << 12) + ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1084 low_multi = ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1086 b2bhabha_v = (sum_info[j][9] >> 21) & 0x1;
1087 icn_over = (sum_info[j][9] >> 20) & 0x1;
1088 bg_veto = (sum_info[j][9] >> 17) & 0x7;
1089 icn = (sum_info[j][9] >> 10) & 0x7f;
1090 etot_type = (sum_info[j][9] >> 7) & 0x7;
1091 etot = ((sum_info[j][9] & 0x7f) << 6) + ((sum_info[j][10] >> 26) & 0x3f);
1092 b1_type = (sum_info[j][10] >> 12) & 0x3fff;
1093 b1bhabha = (sum_info[j][10] >> 11) & 0x1;
1094 physics = (sum_info[j][10] >> 10) & 0x1;
1095 time_type = (sum_info[j][10] >> 7) & 0x7;
1096 time = (sum_info[j][10]) & 0x7f;
1098 cl_theta[5] = (sum_info[j][2] >> 24) & 0x7f;
1099 cl_phi[5] = (sum_info[j][2] >> 16) & 0xff;
1100 cl_time[5] = (sum_info[j][2] >> 8) & 0xff;
1101 cl_energy[5] = ((sum_info[j][2] & 0xff) << 4) + ((sum_info[j][3] >> 28) & 0xf);
1103 cl_theta[4] = (sum_info[j][3] >> 21) & 0x7f;
1104 cl_phi[4] = (sum_info[j][3] >> 13) & 0xff;
1105 cl_time[4] = (sum_info[j][3] >> 5) & 0xff;
1106 cl_energy[4] = ((sum_info[j][3] & 0x1f) << 7) + ((sum_info[j][4] >> 25) & 0x7f);
1108 cl_theta[3] = (sum_info[j][4] >> 18) & 0x7f;
1109 cl_phi[3] = (sum_info[j][4] >> 10) & 0xff;
1110 cl_time[3] = (sum_info[j][4] >> 2) & 0xff;
1111 cl_energy[3] = ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][5] >> 22) & 0x3ff);
1113 cl_theta[2] = (sum_info[j][5] >> 15) & 0x7f;
1114 cl_phi[2] = (sum_info[j][5] >> 7) & 0xff;
1115 cl_time[2] = ((sum_info[j][5] & 0x7f) << 1) + ((sum_info[j][6] >> 31) & 0x1);
1116 cl_energy[2] = (sum_info[j][6] >> 19) & 0xfff;
1118 cl_theta[1] = (sum_info[j][6] >> 12) & 0x7f;
1119 cl_phi[1] = (sum_info[j][6] >> 4) & 0xff;
1120 cl_time[1] = ((sum_info[j][6] & 0xf) << 4) + ((sum_info[j][7] >> 28) & 0xf);
1121 cl_energy[1] = (sum_info[j][7] >> 16) & 0xfff;
1123 cl_theta[0] = (sum_info[j][7] >> 9) & 0x7f;
1124 cl_phi[0] = (sum_info[j][7] >> 1) & 0xff;
1125 cl_time[0] = ((sum_info[j][7] & 0x1) << 7) + ((sum_info[j][8] >> 25) & 0x7f);
1126 cl_energy[0] = (sum_info[j][8] >> 13) & 0xfff;
1128 ncl = (sum_info[j][8] >> 10) & 0x7;
1130 low_multi = ((sum_info[j][8] & 0x3ff) << 2) + ((sum_info[j][9] >> 30) & 0x3);
1131 b2bhabha_v = (sum_info[j][9] >> 29) & 0x1;
1132 icn_over = (sum_info[j][9] >> 28) & 0x1;
1133 bg_veto = (sum_info[j][9] >> 25) & 0x7;
1134 icn = (sum_info[j][9] >> 18) & 0x7f;
1135 etot_type = (sum_info[j][9] >> 15) & 0x7;
1136 etot = (sum_info[j][9] >> 2) & 0x1fff;
1138 b1_type = ((sum_info[j][9] & 0x3) << 12) + ((sum_info[j][10] >> 20) & 0xfff);
1139 b1bhabha = (sum_info[j][10] >> 19) & 0x1;
1140 physics = (sum_info[j][10] >> 18) & 0x1;
1141 time_type = (sum_info[j][10] >> 15) & 0x7;
1142 time = (sum_info[j][10] >> 8) & 0x7f;
1176 for (
int k = 0; k < 6; k++) {
1177 cl_1d.push_back(cl_theta[k]);
1178 cl_1d.push_back(cl_phi[k]);
1179 cl_1d.push_back(cl_time[k]);
1180 cl_1d.push_back(cl_energy[k]);
1181 cl_2d.push_back(cl_1d);
1184 sort(cl_2d.begin(), cl_2d.end(),
1185 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
1187 evt_1d_vector.push_back(abs(sum_num - 3));
1188 evt_1d_vector.push_back(sum_revo);
1189 evt_1d_vector.push_back(sum_num);
1190 evt_1d_vector.push_back(time);
1191 for (
int k = 0; k < 6; k++) {
1192 evt_1d_vector.push_back(cl_2d[k][0]);
1193 evt_1d_vector.push_back(cl_2d[k][1]);
1194 evt_1d_vector.push_back(cl_2d[k][2]);
1195 evt_1d_vector.push_back(cl_2d[k][3]);
1197 evt_1d_vector.push_back(ncl);
1198 evt_1d_vector.push_back(low_multi);
1199 evt_1d_vector.push_back(b2bhabha_v);
1200 evt_1d_vector.push_back(b2bhabha_s);
1201 evt_1d_vector.push_back(mumu);
1202 evt_1d_vector.push_back(prescale);
1203 evt_1d_vector.push_back(icn);
1204 evt_1d_vector.push_back(icn_over);
1205 evt_1d_vector.push_back(etot_type);
1206 evt_1d_vector.push_back(etot);
1207 evt_1d_vector.push_back(ecl_bst);
1208 evt_1d_vector.push_back(b1_type);
1209 evt_1d_vector.push_back(b1bhabha);
1210 evt_1d_vector.push_back(physics);
1211 evt_1d_vector.push_back(time_type);
1212 evt_2d_vector.push_back(evt_1d_vector);
1213 evt_1d_vector.clear();
1217 for (
int k = 0; k < 6; k++) {
1269 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
1270 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
1271 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
1272 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
1288 int m_caltime = -9999;
1290 int tot_ntc = tc_info.size();
1294 int evt_revo = -9999;
1298 int evt_timing = -9999;
1299 int evt_cl_theta[6] = {0};
1300 int evt_cl_phi[6] = {0};
1301 int evt_cl_time[6] = { -9999};
1302 int evt_cl_energy[6] = {0};
1306 int evt_low_multi = 0;
1308 int evt_b2bhabha_v = 0;
1310 int evt_b2bhabha_s = 0;
1314 int evt_prescale = 0;
1318 int evt_icn_over = 0;
1320 int evt_etot_type = 0;
1324 int evt_ecl_bst = 0;
1326 int evt_b1_type = 0;
1328 int evt_b1bhabha = 0;
1330 int evt_physics = 0;
1332 int evt_time_type = 0;
1334 int evt_etot_all = 0;
1336 int evt_time_min = 0;
1338 int evt_time_max = 0;
1340 int evt_time_win = 0;
1357 int evt_v_size = evt_2d_vector.size();
1358 if (evt_v_size != 0) {
1360 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
1361 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1364 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
1365 if (evt_v_size == 0) {
1367 sort(tc_info.begin(), tc_info.end(),
1368 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
1369 evt_revo = win3_revo;
1370 evt_win = tc_info[0][3];
1371 evt_timing = tc_info[0][1];
1372 for (
int k = 0; k < 6; k++) {
1373 evt_cl_theta[k] = 0;
1376 evt_cl_energy[k] = 0;
1394 evt_revo = evt_2d_vector[0][1];
1395 evt_win = evt_2d_vector[0][2];
1396 evt_timing = evt_2d_vector[0][3];
1397 for (
int k = 0; k < 6; k++) {
1398 evt_cl_theta[k] = evt_2d_vector[0][4 + k * 4];
1399 evt_cl_phi[k] = evt_2d_vector[0][5 + k * 4];
1400 evt_cl_time[k] = evt_2d_vector[0][6 + k * 4];
1401 evt_cl_energy[k] = evt_2d_vector[0][7 + k * 4];
1403 evt_ncl = evt_2d_vector[0][28];
1404 evt_low_multi = evt_2d_vector[0][29];
1405 evt_b2bhabha_v = evt_2d_vector[0][30];
1406 evt_b2bhabha_s = evt_2d_vector[0][31];
1407 evt_mumu = evt_2d_vector[0][32];
1408 evt_prescale = evt_2d_vector[0][33];
1409 evt_icn = evt_2d_vector[0][34];
1410 evt_icn_over = evt_2d_vector[0][35];
1411 evt_etot_type = evt_2d_vector[0][36];
1412 evt_etot = evt_2d_vector[0][37];
1413 evt_ecl_bst = evt_2d_vector[0][38];
1414 evt_b1_type = evt_2d_vector[0][39];
1415 evt_b1bhabha = evt_2d_vector[0][40];
1416 evt_physics = evt_2d_vector[0][41];
1417 evt_time_type = evt_2d_vector[0][42];
1420 sort(tc_info.begin(), tc_info.end(),
1421 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1423 for (
int ii = 0; ii < tot_ntc; ii++) {
1424 m_tcid = tc_info[ii][0];
1425 m_time = tc_info[ii][1];
1426 m_energy = tc_info[ii][2];
1427 m_win = tc_info[ii][3];
1429 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
1441 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
1442 if (m_win == evt_win - 1) {
1445 if (m_win == evt_win) {
1448 if (m_win == evt_win + 1) {
1453 if (etot_i == 0 && etot_f == 0) {
1454 evt_etot_all = etot_c;
1455 evt_time_min = - evt_timing;
1456 evt_time_max = 256 - evt_timing;
1458 }
else if (etot_i >= etot_f) {
1459 evt_etot_all = etot_c + etot_i;
1460 evt_time_min = -128 - evt_timing;
1461 evt_time_max = 128 - evt_timing;
1464 evt_etot_all = etot_c + etot_f;
1465 evt_time_min = - evt_timing;
1466 evt_time_max = 256 - evt_timing;
1470 for (
int icluster = 0; icluster < 6; icluster++) {
1471 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
1473 if (cl_tcid == 0) {
continue;}
1549 for (
int k = 0; k < 6; k++) {
1550 evt_cl_theta[k] = 0;
1552 evt_cl_time[k] = -9999;
1553 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.
virtual void checkBuffer(int *, int)
Unpacker main function.
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)
TVector3 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.