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 nwords = raw_trgarray[i]->GetDetectorNwords(j, 0);
62 trgtype = raw_trgarray[i]->GetTRGType(j);
66 B2ERROR(
"Consistecy error in unpacker.");
67 B2ERROR(
"data length " <<
nwords <<
" nWord " <<
nwords);
95 int version_check = (rdat[0] >> 12) & 0xf;
96 if (version_check != 15)
return;
99 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
100 unsigned char data_sum = 0;
101 unsigned char kdat[4] = {0};
102 for (
int j = nnn - 2; j > -1; j--) {
103 kdat[0] = rdat[j] & 0xff;
104 kdat[1] = (rdat[j] >> 8) & 0xff;
105 kdat[2] = (rdat[j] >> 16) & 0xff;
106 kdat[3] = (rdat[j] >> 24) & 0xff;
107 for (
int k = 0; k < 4; k++) {
108 data_sum = data_sum + kdat[k];
112 int flag_checksum = 0;
114 if (check_sum == data_sum) {
121 int l1_revo = rdat[0] & 0x7ff;
127 int summary_data = 0;
128 int summary_recon = 0;
130 int summary_revo = 0;
132 bool summary_trg =
false;
145 int win3_revo = -9999;
147 vector<unsigned> sum_data;
148 vector<vector<unsigned>> sum_info;
151 vector<vector<int>> tc_info;
152 vector<vector<int>> tc_info_FE1;
153 vector<vector<int>> tc_info_FE2;
154 vector<vector<int>> tc_info_BE1;
155 vector<vector<int>> tc_info_BE2;
158 while (i < nnn - 2) {
159 summary_data = rdat[i + 1];
160 summary_trg = (summary_data >> 23) & 0x1;
161 summary_revo = (summary_data >> 16) & 0x7f;
162 ntc_win = summary_data & 0x3ff;
168 data_win = window_num;
169 if (window_num == 3) win3_revo = summary_revo;
171 if (summary_trg ==
true) {
172 sum_data.push_back(data_win);
173 sum_data.push_back(summary_revo);
174 for (
int j = 0; j < 12; j++) {
176 (((rdat[i + j + 2] >> 0) & 0xFF) << 24) +
177 (((rdat[i + j + 2] >> 8) & 0xFF) << 16) +
178 (((rdat[i + j + 2] >> 16) & 0xFF) << 8) +
179 (((rdat[i + j + 2] >> 24) & 0xFF) << 0);
180 sum_data.push_back(summary_recon);
182 sum_info.push_back(sum_data);
186 if (tc_trg ==
true) {
187 for (
int j = 0; j < ntc_win; j++) {
188 tc_id = (rdat[i + j] >> 20) & 0x3FF;
189 tc_t = (rdat[i + j] >> 12) & 0x7F;
190 tc_e = rdat[i + j] & 0xFFF;
191 conv_tc_t = (data_win - 3) * 128 + tc_t;
194 tc_data.push_back(tc_id);
195 tc_data.push_back(conv_tc_t);
196 tc_data.push_back(tc_e);
197 tc_data.push_back(data_win);
200 tc_info_FE1.push_back(tc_data);
202 tc_info_FE2.push_back(tc_data);
204 }
else if (tc_id > 512) {
206 tc_info_BE1.push_back(tc_data);
208 tc_info_BE2.push_back(tc_data);
211 tc_info.push_back(tc_data);
219 if (tc_trg ==
true) {
220 for (
int j = 0; j < ntc_win; j++) {
221 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
222 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
223 conv_tc_t = (data_win - 3) * 128 + tc_t;
224 tc_e = rdat[i + j + 2] & 0xFFF;
227 tc_data.push_back(tc_id);
228 tc_data.push_back(conv_tc_t);
229 tc_data.push_back(tc_e);
230 tc_data.push_back(data_win);
233 tc_info_FE1.push_back(tc_data);
235 tc_info_FE2.push_back(tc_data);
237 }
else if (tc_id > 512) {
239 tc_info_BE1.push_back(tc_data);
241 tc_info_BE2.push_back(tc_data);
244 tc_info.push_back(tc_data);
265 int cl_theta[6] = {0};
267 int cl_time[6] = { -9999};
268 int cl_energy[6] = {0};
269 int cl_1gev[6] = {0};
270 int cl_2gev[6] = {0};
296 vector<vector<int>> cl_2d;
298 vector<int> evt_1d_vector;
299 vector<vector<int>> evt_2d_vector;
302 int sum_size = sum_info.size();
304 for (
int j = 0; j < sum_size; j++) {
305 sum_num = sum_info[j][0];
306 sum_revo = sum_info[j][1];
308 time = (sum_info[j][2]) & 0x7F;
309 time_type = (sum_info[j][2] >> 7) & 0x7;
310 physics = (sum_info[j][2] >> 10) & 0x1;
311 b1bhabha = (sum_info[j][2] >> 11) & 0x1;
312 b1_type = (sum_info[j][2] >> 12) & 0x3FFF;
313 etot = ((sum_info[j][3] & 0x7F) << 6) + ((sum_info[j][2] >> 26) & 0x3F);
314 etot_type = (sum_info[j][3] >> 7) & 0x7;
315 icn = (sum_info[j][3] >> 10) & 0x7F;
316 bg_veto = (sum_info[j][3] >> 17) & 0x7;
317 icn_over = (sum_info[j][3] >> 20) & 0x1;
318 b2bhabha_v = (sum_info[j][3] >> 21) & 0x1;
319 low_multi = (((sum_info[j][4] >> 6) & 0x3) << 12) + ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][3] >> 22) & 0x3FF);
320 b2bhabha_s = (sum_info[j][4] >> 2) & 0x1;
321 mumu = (sum_info[j][4] >> 3) & 0x1;
322 prescale = (sum_info[j][4] >> 4) & 0x1;
323 ecl_bst = (sum_info[j][4] >> 5) & 0x1;
325 cl_energy[0] = (sum_info[j][5]) & 0xFFF;
326 cl_time[0] = (sum_info[j][5] >> 12) & 0xFF;
327 cl_phi[0] = (sum_info[j][5] >> 20) & 0xFF;
328 cl_theta[0] = ((sum_info[j][6] & 0x7) << 4) + ((sum_info[j][5] >> 28) & 0xF);
330 cl_energy[1] = (sum_info[j][6] >> 3) & 0xFFF;
331 cl_time[1] = (sum_info[j][6] >> 15) & 0xFF;
332 cl_phi[1] = (sum_info[j][6] >> 23) & 0xFF;
333 cl_theta[1] = ((sum_info[j][7] & 0x3F) << 1) + ((sum_info[j][6] >> 31) & 0x1);
335 cl_energy[2] = (sum_info[j][7] >> 6) & 0xFFF;
336 cl_time[2] = (sum_info[j][7] >> 18) & 0xFF;
337 cl_phi[2] = ((sum_info[j][8] & 0x3) << 6) + ((sum_info[j][7] >> 26) & 0x3F);
338 cl_theta[2] = (sum_info[j][8] >> 2) & 0x3F;
340 cl_energy[3] = (sum_info[j][8] >> 9) & 0xFFF;
341 cl_time[3] = (sum_info[j][8] >> 21) & 0xFF;
342 cl_phi[3] = ((sum_info[j][9] & 0x1F) << 3) + ((sum_info[j][8] >> 29) & 0x7);
343 cl_theta[3] = (sum_info[j][9] >> 5) & 0x3F;
345 cl_energy[4] = (sum_info[j][ 9] >> 12) & 0xFFF;
346 cl_time[4] = (sum_info[j][ 9] >> 24) & 0xFF;
347 cl_phi[4] = (sum_info[j][10]) & 0xFF;
348 cl_theta[4] = (sum_info[j][10] >> 8) & 0x3F;
350 cl_energy[5] = (sum_info[j][10] >> 15) & 0xFFF;
351 cl_time[5] = ((sum_info[j][11] & 0x7) << 5) + ((sum_info[j][10] >> 27) & 0x1F);
352 cl_phi[5] = (sum_info[j][11] >> 3) & 0xFF;
353 cl_theta[5] = (sum_info[j][11] >> 11) & 0x3F;
355 for (
int k = 0; k < 6; k++) {
356 cl_1gev[k] = (sum_info[j][12] >> k) & 0x1;
357 cl_2gev[k] = (sum_info[j][12] >> (k + 6)) & 0x1;
358 cl_bha[k] = (sum_info[j][12] >> (k + 12)) & 0x1;
360 ncl = (sum_info[j][13]) & 0x7;
392 for (
int k = 0; k < 6; k++) {
393 cl_1d.push_back(cl_theta[k]);
394 cl_1d.push_back(cl_phi[k]);
395 cl_1d.push_back(cl_time[k]);
396 cl_1d.push_back(cl_energy[k]);
397 cl_1d.push_back(cl_1gev[k]);
398 cl_1d.push_back(cl_2gev[k]);
399 cl_1d.push_back(cl_bha[k]);
400 cl_2d.push_back(cl_1d);
403 sort(cl_2d.begin(), cl_2d.end(),
404 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
406 if (sum_num == -9999) {
408 }
else if (sum_num <= 3) {
409 sum_num_ord = 2 * abs(sum_num - 3);
411 sum_num_ord = (sum_num * 2) - 7;
413 evt_1d_vector.push_back(sum_num_ord);
414 evt_1d_vector.push_back(sum_revo);
415 evt_1d_vector.push_back(sum_num);
416 evt_1d_vector.push_back(time);
417 for (
int k = 0; k < 6; k++) {
418 for (
int l = 0; l < 7; l++) {
419 evt_1d_vector.push_back(cl_2d[k][l]);
422 evt_1d_vector.push_back(ncl);
423 evt_1d_vector.push_back(low_multi);
424 evt_1d_vector.push_back(b2bhabha_v);
425 evt_1d_vector.push_back(b2bhabha_s);
426 evt_1d_vector.push_back(mumu);
427 evt_1d_vector.push_back(prescale);
428 evt_1d_vector.push_back(icn);
429 evt_1d_vector.push_back(icn_over);
430 evt_1d_vector.push_back(etot_type);
431 evt_1d_vector.push_back(etot);
432 evt_1d_vector.push_back(ecl_bst);
433 evt_1d_vector.push_back(b1_type);
434 evt_1d_vector.push_back(b1bhabha);
435 evt_1d_vector.push_back(physics);
436 evt_1d_vector.push_back(time_type);
437 evt_2d_vector.push_back(evt_1d_vector);
438 evt_1d_vector.clear();
441 for (
int k = 0; k < 6; k++) {
499 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
500 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
501 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
502 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
518 int m_caltime = -9999;
520 int tot_ntc = tc_info.size();
524 int evt_revo = -9999;
528 int evt_timing = -9999;
529 int evt_cl_theta[6] = {0};
530 int evt_cl_phi[6] = {0};
531 int evt_cl_time[6] = { -9999};
532 int evt_cl_energy[6] = {0};
533 int evt_cl_1gev[6] = {0};
534 int evt_cl_2gev[6] = {0};
535 int evt_cl_bha[6] = {0};
539 int evt_low_multi = 0;
541 int evt_b2bhabha_v = 0;
543 int evt_b2bhabha_s = 0;
547 int evt_prescale = 0;
551 int evt_icn_over = 0;
553 int evt_etot_type = 0;
561 int evt_b1bhabha = 0;
565 int evt_time_type = 0;
567 int evt_etot_all = 0;
569 int evt_time_min = 0;
571 int evt_time_max = 0;
573 int evt_time_win = 0;
590 int evt_v_size = evt_2d_vector.size();
591 if (evt_v_size != 0) {
593 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
594 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
597 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
598 if (evt_v_size == 0) {
600 sort(tc_info.begin(), tc_info.end(),
601 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
602 evt_revo = win3_revo;
603 evt_win = tc_info[0][3];
604 evt_timing = tc_info[0][1];
605 for (
int k = 0; k < 6; k++) {
609 evt_cl_energy[k] = 0;
630 evt_revo = evt_2d_vector[0][1];
631 evt_win = evt_2d_vector[0][2];
632 evt_timing = evt_2d_vector[0][3];
633 for (
int k = 0; k < 6; k++) {
634 evt_cl_theta[k] = evt_2d_vector[0][ 4 + k * 7];
635 evt_cl_phi[k] = evt_2d_vector[0][ 5 + k * 7];
636 evt_cl_time[k] = evt_2d_vector[0][ 6 + k * 7];
637 evt_cl_energy[k] = evt_2d_vector[0][ 7 + k * 7];
638 evt_cl_1gev[k] = evt_2d_vector[0][ 8 + k * 7];
639 evt_cl_2gev[k] = evt_2d_vector[0][ 9 + k * 7];
640 evt_cl_bha[k] = evt_2d_vector[0][10 + k * 7];
642 evt_ncl = evt_2d_vector[0][46];
643 evt_low_multi = evt_2d_vector[0][47];
644 evt_b2bhabha_v = evt_2d_vector[0][48];
645 evt_b2bhabha_s = evt_2d_vector[0][49];
646 evt_mumu = evt_2d_vector[0][50];
647 evt_prescale = evt_2d_vector[0][51];
648 evt_icn = evt_2d_vector[0][52];
649 evt_icn_over = evt_2d_vector[0][53];
650 evt_etot_type = evt_2d_vector[0][54];
651 evt_etot = evt_2d_vector[0][55];
652 evt_ecl_bst = evt_2d_vector[0][56];
653 evt_b1_type = evt_2d_vector[0][57];
654 evt_b1bhabha = evt_2d_vector[0][58];
655 evt_physics = evt_2d_vector[0][59];
656 evt_time_type = evt_2d_vector[0][60];
659 sort(tc_info.begin(), tc_info.end(),
660 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
662 for (
int ii = 0; ii < tot_ntc; ii++) {
663 m_tcid = tc_info[ii][0];
664 m_time = tc_info[ii][1];
665 m_energy = tc_info[ii][2];
666 m_win = tc_info[ii][3];
668 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
680 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
681 if (m_win == evt_win - 1) {
684 if (m_win == evt_win) {
687 if (m_win == evt_win + 1) {
692 if (etot_i == 0 && etot_f == 0) {
693 evt_etot_all = etot_c;
694 evt_time_min = - evt_timing;
695 evt_time_max = 256 - evt_timing;
697 }
else if (etot_i >= etot_f) {
698 evt_etot_all = etot_c + etot_i;
699 evt_time_min = -128 - evt_timing;
700 evt_time_max = 128 - evt_timing;
703 evt_etot_all = etot_c + etot_f;
704 evt_time_min = - evt_timing;
705 evt_time_max = 256 - evt_timing;
709 for (
int icluster = 0; icluster < 6; icluster++) {
710 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
712 if (cl_tcid == 0) {
continue;}
791 for (
int k = 0; k < 6; k++) {
794 evt_cl_time[k] = -9999;
795 evt_cl_energy[k] = 0;
837 int version_check = (rdat[0] >> 12) & 0xf;
838 if (version_check != 15)
return;
841 unsigned char check_sum = (rdat[nnn - 1] >> 24) & 0xFF;
842 unsigned char data_sum = 0;
843 unsigned char kdat[4] = {0};
844 for (
int j = nnn - 2; j > -1; j--) {
845 kdat[0] = rdat[j] & 0xff;
846 kdat[1] = (rdat[j] >> 8) & 0xff;
847 kdat[2] = (rdat[j] >> 16) & 0xff;
848 kdat[3] = (rdat[j] >> 24) & 0xff;
849 for (
int k = 0; k < 4; k++) {
850 data_sum = data_sum + kdat[k];
854 int flag_checksum = 0;
856 if (check_sum == data_sum) {
863 int l1_revo = rdat[0] & 0x7ff;
869 int summary_data = 0;
871 int summary_revo = 0;
873 bool summary_trg =
false;
886 int win3_revo = -9999;
888 vector<unsigned> sum_data;
889 vector<vector<unsigned>> sum_info;
892 vector<vector<int>> tc_info;
893 vector<vector<int>> tc_info_FE1;
894 vector<vector<int>> tc_info_FE2;
895 vector<vector<int>> tc_info_BE1;
896 vector<vector<int>> tc_info_BE2;
899 while (i < nnn - 2) {
900 summary_data = rdat[i + 1];
901 summary_trg = (summary_data >> 23) & 0x1;
902 summary_revo = (summary_data >> 16) & 0x7f;
903 ntc_win = summary_data & 0x3ff;
909 data_win = window_num;
910 if (window_num == 3) win3_revo = summary_revo;
912 if (summary_trg ==
true) {
913 sum_data.push_back(data_win);
914 sum_data.push_back(summary_revo);
915 for (
int j = 0; j < 9; j++) {
916 sum_data.push_back(rdat[i + j + 2]);
918 sum_info.push_back(sum_data);
922 if (tc_trg ==
true) {
923 for (
int j = 0; j < ntc_win; j++) {
924 tc_id = (rdat[i + j] >> 20) & 0x3FF;
925 tc_t = (rdat[i + j] >> 12) & 0x7F;
926 tc_e = rdat[i + j] & 0xFFF;
927 conv_tc_t = (data_win - 3) * 128 + tc_t;
930 tc_data.push_back(tc_id);
931 tc_data.push_back(conv_tc_t);
932 tc_data.push_back(tc_e);
933 tc_data.push_back(data_win);
936 tc_info_FE1.push_back(tc_data);
938 tc_info_FE2.push_back(tc_data);
940 }
else if (tc_id > 512) {
942 tc_info_BE1.push_back(tc_data);
944 tc_info_BE2.push_back(tc_data);
947 tc_info.push_back(tc_data);
955 if (tc_trg ==
true) {
956 for (
int j = 0; j < ntc_win; j++) {
957 tc_id = (rdat[i + j + 2] >> 20) & 0x3FF;
958 tc_t = (rdat[i + j + 2] >> 12) & 0x7F;
959 conv_tc_t = (data_win - 3) * 128 + tc_t;
960 tc_e = rdat[i + j + 2] & 0xFFF;
963 tc_data.push_back(tc_id);
964 tc_data.push_back(conv_tc_t);
965 tc_data.push_back(tc_e);
966 tc_data.push_back(data_win);
969 tc_info_FE1.push_back(tc_data);
971 tc_info_FE2.push_back(tc_data);
973 }
else if (tc_id > 512) {
975 tc_info_BE1.push_back(tc_data);
977 tc_info_BE2.push_back(tc_data);
980 tc_info.push_back(tc_data);
999 int cl_theta[6] = {0};
1000 int cl_phi[6] = {0};
1001 int cl_time[6] = { -9999};
1002 int cl_energy[6] = {0};
1027 vector<vector<int>> cl_2d;
1029 vector<int> evt_1d_vector;
1030 vector<vector<int>> evt_2d_vector;
1033 int sum_size = sum_info.size();
1034 if (sum_size != 0) {
1035 for (
int j = 0; j < sum_size; j++) {
1036 sum_num = sum_info[j][0];
1037 sum_revo = sum_info[j][1];
1039 ecl_bst = (sum_info[j][2] >> 26) & 0x1;
1042 cl_theta[5] = (sum_info[j][2] >> 19) & 0x7f;
1043 cl_phi[5] = (sum_info[j][2] >> 11) & 0xff;
1044 cl_time[5] = (sum_info[j][2] >> 3) & 0xff;
1045 cl_energy[5] = ((sum_info[j][2] & 0x7) << 9) + ((sum_info[j][3] >> 23) & 0x1ff);
1047 cl_theta[4] = (sum_info[j][3] >> 16) & 0x7f;
1048 cl_phi[4] = (sum_info[j][3] >> 8) & 0xff;
1049 cl_time[4] = (sum_info[j][3]) & 0xff;
1050 cl_energy[4] = (sum_info[j][4] >> 20) & 0xfff;
1052 cl_theta[3] = (sum_info[j][4] >> 13) & 0x7f;
1053 cl_phi[3] = (sum_info[j][4] >> 5) & 0xff;
1054 cl_time[3] = ((sum_info[j][4] & 0x1f) << 3) + ((sum_info[j][5] >> 29) & 0x7);
1055 cl_energy[3] = (sum_info[j][5] >> 17) & 0xfff;
1057 cl_theta[2] = (sum_info[j][5] >> 10) & 0x7f;
1058 cl_phi[2] = (sum_info[j][5] >> 2) & 0xff;
1059 cl_time[2] = ((sum_info[j][5] & 0x3) << 6) + ((sum_info[j][6] >> 26) & 0x3f);
1060 cl_energy[2] = (sum_info[j][6] >> 14) & 0xfff;
1062 cl_theta[1] = (sum_info[j][6] >> 7) & 0x7f;
1063 cl_phi[1] = ((sum_info[j][6] & 0x7f) << 1) + ((sum_info[j][7] >> 31) & 0x1);
1064 cl_time[1] = (sum_info[j][7] >> 23) & 0xff;
1065 cl_energy[1] = (sum_info[j][7] >> 11) & 0xfff;
1067 cl_theta[0] = (sum_info[j][7] >> 4) & 0x7f;
1068 cl_phi[0] = ((sum_info[j][7] & 0xf) << 4) + ((sum_info[j][8] >> 28) & 0xf);
1069 cl_time[0] = (sum_info[j][8] >> 20) & 0xff;
1070 cl_energy[0] = (sum_info[j][8] >> 8) & 0xfff;
1072 ncl = (sum_info[j][8] >> 5) & 0x7;
1074 prescale = (sum_info[j][8] >> 4) & 0x1;
1075 mumu = (sum_info[j][8] >> 3) & 0x1;
1076 b2bhabha_s = (sum_info[j][8] >> 2) & 0x1;
1078 low_multi = (((sum_info[j][2] >> 27) & 0x3) << 12) + ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1080 low_multi = ((sum_info[j][8] & 0x3) << 10) + ((sum_info[j][9] >> 22) & 0x3ff);
1082 b2bhabha_v = (sum_info[j][9] >> 21) & 0x1;
1083 icn_over = (sum_info[j][9] >> 20) & 0x1;
1084 bg_veto = (sum_info[j][9] >> 17) & 0x7;
1085 icn = (sum_info[j][9] >> 10) & 0x7f;
1086 etot_type = (sum_info[j][9] >> 7) & 0x7;
1087 etot = ((sum_info[j][9] & 0x7f) << 6) + ((sum_info[j][10] >> 26) & 0x3f);
1088 b1_type = (sum_info[j][10] >> 12) & 0x3fff;
1089 b1bhabha = (sum_info[j][10] >> 11) & 0x1;
1090 physics = (sum_info[j][10] >> 10) & 0x1;
1091 time_type = (sum_info[j][10] >> 7) & 0x7;
1092 time = (sum_info[j][10]) & 0x7f;
1094 cl_theta[5] = (sum_info[j][2] >> 24) & 0x7f;
1095 cl_phi[5] = (sum_info[j][2] >> 16) & 0xff;
1096 cl_time[5] = (sum_info[j][2] >> 8) & 0xff;
1097 cl_energy[5] = ((sum_info[j][2] & 0xff) << 4) + ((sum_info[j][3] >> 28) & 0xf);
1099 cl_theta[4] = (sum_info[j][3] >> 21) & 0x7f;
1100 cl_phi[4] = (sum_info[j][3] >> 13) & 0xff;
1101 cl_time[4] = (sum_info[j][3] >> 5) & 0xff;
1102 cl_energy[4] = ((sum_info[j][3] & 0x1f) << 7) + ((sum_info[j][4] >> 25) & 0x7f);
1104 cl_theta[3] = (sum_info[j][4] >> 18) & 0x7f;
1105 cl_phi[3] = (sum_info[j][4] >> 10) & 0xff;
1106 cl_time[3] = (sum_info[j][4] >> 2) & 0xff;
1107 cl_energy[3] = ((sum_info[j][4] & 0x3) << 10) + ((sum_info[j][5] >> 22) & 0x3ff);
1109 cl_theta[2] = (sum_info[j][5] >> 15) & 0x7f;
1110 cl_phi[2] = (sum_info[j][5] >> 7) & 0xff;
1111 cl_time[2] = ((sum_info[j][5] & 0x7f) << 1) + ((sum_info[j][6] >> 31) & 0x1);
1112 cl_energy[2] = (sum_info[j][6] >> 19) & 0xfff;
1114 cl_theta[1] = (sum_info[j][6] >> 12) & 0x7f;
1115 cl_phi[1] = (sum_info[j][6] >> 4) & 0xff;
1116 cl_time[1] = ((sum_info[j][6] & 0xf) << 4) + ((sum_info[j][7] >> 28) & 0xf);
1117 cl_energy[1] = (sum_info[j][7] >> 16) & 0xfff;
1119 cl_theta[0] = (sum_info[j][7] >> 9) & 0x7f;
1120 cl_phi[0] = (sum_info[j][7] >> 1) & 0xff;
1121 cl_time[0] = ((sum_info[j][7] & 0x1) << 7) + ((sum_info[j][8] >> 25) & 0x7f);
1122 cl_energy[0] = (sum_info[j][8] >> 13) & 0xfff;
1124 ncl = (sum_info[j][8] >> 10) & 0x7;
1126 low_multi = ((sum_info[j][8] & 0x3ff) << 2) + ((sum_info[j][9] >> 30) & 0x3);
1127 b2bhabha_v = (sum_info[j][9] >> 29) & 0x1;
1128 icn_over = (sum_info[j][9] >> 28) & 0x1;
1129 bg_veto = (sum_info[j][9] >> 25) & 0x7;
1130 icn = (sum_info[j][9] >> 18) & 0x7f;
1131 etot_type = (sum_info[j][9] >> 15) & 0x7;
1132 etot = (sum_info[j][9] >> 2) & 0x1fff;
1134 b1_type = ((sum_info[j][9] & 0x3) << 12) + ((sum_info[j][10] >> 20) & 0xfff);
1135 b1bhabha = (sum_info[j][10] >> 19) & 0x1;
1136 physics = (sum_info[j][10] >> 18) & 0x1;
1137 time_type = (sum_info[j][10] >> 15) & 0x7;
1138 time = (sum_info[j][10] >> 8) & 0x7f;
1172 for (
int k = 0; k < 6; k++) {
1173 cl_1d.push_back(cl_theta[k]);
1174 cl_1d.push_back(cl_phi[k]);
1175 cl_1d.push_back(cl_time[k]);
1176 cl_1d.push_back(cl_energy[k]);
1177 cl_2d.push_back(cl_1d);
1180 sort(cl_2d.begin(), cl_2d.end(),
1181 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[3] > aa2[3];});
1183 evt_1d_vector.push_back(abs(sum_num - 3));
1184 evt_1d_vector.push_back(sum_revo);
1185 evt_1d_vector.push_back(sum_num);
1186 evt_1d_vector.push_back(time);
1187 for (
int k = 0; k < 6; k++) {
1188 evt_1d_vector.push_back(cl_2d[k][0]);
1189 evt_1d_vector.push_back(cl_2d[k][1]);
1190 evt_1d_vector.push_back(cl_2d[k][2]);
1191 evt_1d_vector.push_back(cl_2d[k][3]);
1193 evt_1d_vector.push_back(ncl);
1194 evt_1d_vector.push_back(low_multi);
1195 evt_1d_vector.push_back(b2bhabha_v);
1196 evt_1d_vector.push_back(b2bhabha_s);
1197 evt_1d_vector.push_back(mumu);
1198 evt_1d_vector.push_back(prescale);
1199 evt_1d_vector.push_back(icn);
1200 evt_1d_vector.push_back(icn_over);
1201 evt_1d_vector.push_back(etot_type);
1202 evt_1d_vector.push_back(etot);
1203 evt_1d_vector.push_back(ecl_bst);
1204 evt_1d_vector.push_back(b1_type);
1205 evt_1d_vector.push_back(b1bhabha);
1206 evt_1d_vector.push_back(physics);
1207 evt_1d_vector.push_back(time_type);
1208 evt_2d_vector.push_back(evt_1d_vector);
1209 evt_1d_vector.clear();
1213 for (
int k = 0; k < 6; k++) {
1265 tc_info.insert(tc_info.end(), tc_info_FE1.begin(), tc_info_FE1.end());
1266 tc_info.insert(tc_info.end(), tc_info_FE2.begin(), tc_info_FE2.end());
1267 tc_info.insert(tc_info.end(), tc_info_BE1.begin(), tc_info_BE1.end());
1268 tc_info.insert(tc_info.end(), tc_info_BE2.begin(), tc_info_BE2.end());
1284 int m_caltime = -9999;
1286 int tot_ntc = tc_info.size();
1290 int evt_revo = -9999;
1294 int evt_timing = -9999;
1295 int evt_cl_theta[6] = {0};
1296 int evt_cl_phi[6] = {0};
1297 int evt_cl_time[6] = { -9999};
1298 int evt_cl_energy[6] = {0};
1302 int evt_low_multi = 0;
1304 int evt_b2bhabha_v = 0;
1306 int evt_b2bhabha_s = 0;
1310 int evt_prescale = 0;
1314 int evt_icn_over = 0;
1316 int evt_etot_type = 0;
1320 int evt_ecl_bst = 0;
1322 int evt_b1_type = 0;
1324 int evt_b1bhabha = 0;
1326 int evt_physics = 0;
1328 int evt_time_type = 0;
1330 int evt_etot_all = 0;
1332 int evt_time_min = 0;
1334 int evt_time_max = 0;
1336 int evt_time_win = 0;
1353 int evt_v_size = evt_2d_vector.size();
1354 if (evt_v_size != 0) {
1356 sort(evt_2d_vector.begin(), evt_2d_vector.end(),
1357 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1360 if (tot_ntc != 0 && flag_checksum == 0 && nnn > 7) {
1361 if (evt_v_size == 0) {
1363 sort(tc_info.begin(), tc_info.end(),
1364 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[2] > aa2[2];});
1365 evt_revo = win3_revo;
1366 evt_win = tc_info[0][3];
1367 evt_timing = tc_info[0][1];
1368 for (
int k = 0; k < 6; k++) {
1369 evt_cl_theta[k] = 0;
1372 evt_cl_energy[k] = 0;
1390 evt_revo = evt_2d_vector[0][1];
1391 evt_win = evt_2d_vector[0][2];
1392 evt_timing = evt_2d_vector[0][3];
1393 for (
int k = 0; k < 6; k++) {
1394 evt_cl_theta[k] = evt_2d_vector[0][4 + k * 4];
1395 evt_cl_phi[k] = evt_2d_vector[0][5 + k * 4];
1396 evt_cl_time[k] = evt_2d_vector[0][6 + k * 4];
1397 evt_cl_energy[k] = evt_2d_vector[0][7 + k * 4];
1399 evt_ncl = evt_2d_vector[0][28];
1400 evt_low_multi = evt_2d_vector[0][29];
1401 evt_b2bhabha_v = evt_2d_vector[0][30];
1402 evt_b2bhabha_s = evt_2d_vector[0][31];
1403 evt_mumu = evt_2d_vector[0][32];
1404 evt_prescale = evt_2d_vector[0][33];
1405 evt_icn = evt_2d_vector[0][34];
1406 evt_icn_over = evt_2d_vector[0][35];
1407 evt_etot_type = evt_2d_vector[0][36];
1408 evt_etot = evt_2d_vector[0][37];
1409 evt_ecl_bst = evt_2d_vector[0][38];
1410 evt_b1_type = evt_2d_vector[0][39];
1411 evt_b1bhabha = evt_2d_vector[0][40];
1412 evt_physics = evt_2d_vector[0][41];
1413 evt_time_type = evt_2d_vector[0][42];
1416 sort(tc_info.begin(), tc_info.end(),
1417 [](
const vector<int>& aa1,
const vector<int>& aa2) {return aa1[0] < aa2[0];});
1419 for (
int ii = 0; ii < tot_ntc; ii++) {
1420 m_tcid = tc_info[ii][0];
1421 m_time = tc_info[ii][1];
1422 m_energy = tc_info[ii][2];
1423 m_win = tc_info[ii][3];
1425 m_caltime = m_time - ((evt_win - 3) * 128 + evt_timing);
1437 if (m_win == evt_win || m_win == evt_win + 1) evt_ntc++;
1438 if (m_win == evt_win - 1) {
1441 if (m_win == evt_win) {
1444 if (m_win == evt_win + 1) {
1449 if (etot_i == 0 && etot_f == 0) {
1450 evt_etot_all = etot_c;
1451 evt_time_min = - evt_timing;
1452 evt_time_max = 256 - evt_timing;
1454 }
else if (etot_i >= etot_f) {
1455 evt_etot_all = etot_c + etot_i;
1456 evt_time_min = -128 - evt_timing;
1457 evt_time_max = 128 - evt_timing;
1460 evt_etot_all = etot_c + etot_f;
1461 evt_time_min = - evt_timing;
1462 evt_time_max = 256 - evt_timing;
1466 for (
int icluster = 0; icluster < 6; icluster++) {
1467 if (evt_cl_energy[icluster] == 0 || evt_cl_theta[icluster] == 0 || evt_cl_phi[icluster] == 0) {
continue;}
1469 if (cl_tcid == 0) {
continue;}
1545 for (
int k = 0; k < 6; k++) {
1546 evt_cl_theta[k] = 0;
1548 evt_cl_time[k] = -9999;
1549 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.
virtual void readCOPPEREvent(RawTRG *, int, int)
Read data from TRG copper.
void initialize() override
Initilizes TRGECLUnpackerModuel.
void event() override
Called event by event.
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.