241 std::vector<int> TCFire;
242 std::vector<double> TCFireEnergy;
243 std::vector<double> TCFireTiming;
244 std::vector<std::vector<double>> TCFirePosition;
247 TCFireEnergy.clear();
248 TCFireTiming.clear();
249 TCFirePosition.clear();
251 TCFire.resize(432, 0);
252 TCFireEnergy.resize(432, 0.);
253 TCFireTiming.resize(432, 0.);
254 TCFirePosition.resize(432, std::vector<double>(3, 0.));
256 const int hit_size =
m_TCId.size();
257 for (
int ihit = 0 ; ihit < hit_size ; ihit++) {
271 int tc_upper_right = 0;
273 int tc_lower_right = 0;
275 int tc_lower_left = 0;
277 int tc_upper_left = 0;
279 for (
int iii = 0 ; iii < 432 ; iii++) {
281 if (TCFire[iii] == 0) {
continue; }
294 if (!(tc_upper != 0 || tc_left != 0)) {
295 if (!(tc_lower != 0 && tc_lower_left != 0)) {
300 double maxTCEnergy = 0;
301 for (
int iTC = 0; iTC < 9; iTC++) {
311 B2ERROR(
"maxTCID is out of barrel region : maxTCID = " << maxTCid);
317 int indexNeighboringTC[8] = {0};
320 indexNeighboringTC[0] = maxTCid + 420 - 81;
321 indexNeighboringTC[1] = maxTCid + 419 - 81;
322 indexNeighboringTC[2] = maxTCid - 1 - 81;
323 indexNeighboringTC[3] = maxTCid + 11 - 81;
324 indexNeighboringTC[4] = maxTCid + 12 - 81;
325 indexNeighboringTC[5] = maxTCid + 13 - 81;
326 indexNeighboringTC[6] = maxTCid + 1 - 81;
327 indexNeighboringTC[7] = maxTCid + 421 - 81;
328 }
else if (maxTCid < 501) {
329 indexNeighboringTC[0] = maxTCid - 12 - 81;
330 indexNeighboringTC[1] = maxTCid - 13 - 81;
331 indexNeighboringTC[2] = maxTCid - 1 - 81;
332 indexNeighboringTC[3] = maxTCid + 11 - 81;
333 indexNeighboringTC[4] = maxTCid + 12 - 81;
334 indexNeighboringTC[5] = maxTCid + 13 - 81;
335 indexNeighboringTC[6] = maxTCid + 1 - 81;
336 indexNeighboringTC[7] = maxTCid - 11 - 81;
338 indexNeighboringTC[0] = maxTCid - 12 - 81;
339 indexNeighboringTC[1] = maxTCid - 13 - 81;
340 indexNeighboringTC[2] = maxTCid - 1 - 81;
341 indexNeighboringTC[3] = maxTCid - 421 - 81;
342 indexNeighboringTC[4] = maxTCid - 420 - 81;
343 indexNeighboringTC[5] = maxTCid - 419 - 81;
344 indexNeighboringTC[6] = maxTCid + 1 - 81;
345 indexNeighboringTC[7] = maxTCid - 11 - 81;
348 for (
int jjj = 0; jjj < 8; jjj++) {
349 if (indexNeighboringTC[jjj] <= -1 ||
350 indexNeighboringTC[jjj] >= (
int) TCFire.size()) {
351 indexNeighboringTC[jjj] = -1;
355 if ((maxTCid - 81) % 12 == 0) {
357 indexNeighboringTC[1] = -1;
358 indexNeighboringTC[2] = -1;
359 indexNeighboringTC[3] = -1;
360 }
else if ((maxTCid - 81) % 12 == 11) {
362 indexNeighboringTC[5] = -1;
363 indexNeighboringTC[6] = -1;
364 indexNeighboringTC[7] = -1;
367 for (
int jjj = 0; jjj < 8; jjj++) {
368 if (indexNeighboringTC[jjj] >= 0) {
376 for (
int iNearTC = 1; iNearTC < 9; iNearTC ++) {
377 for (
int jNearTC = 1; jNearTC < 9; jNearTC ++) {
379 if (iNearTC == jNearTC) {
continue;}
387 double clusterenergy = 0;
388 double clustertiming = 0;
389 double clusterpositionX = 0;
390 double clusterpositionY = 0;
391 double clusterpositionZ = 0;
392 int noftcincluster = 0;
393 for (
int iNearTC = 0; iNearTC < 9; iNearTC ++) {
395 else {noftcincluster++;}
405 clustertiming /= clusterenergy;
407 clusterpositionX /= clusterenergy;
408 clusterpositionY /= clusterenergy;
409 clusterpositionZ /= clusterenergy;
411 clustertiming = TCFireTiming[maxTCId - 81];
412 clusterpositionX = TCFirePosition[maxTCId - 81][0];
413 clusterpositionY = TCFirePosition[maxTCId - 81][1];
414 clusterpositionZ = TCFirePosition[maxTCId - 81][2];
416 if (clustertiming == 0 && clusterenergy == 0) {
continue;}
438 std::vector<int> TCFire;
439 std::vector<double> TCFireEnergy;
440 std::vector<double> TCFireTiming;
441 std::vector<std::vector<double>> TCFirePosition;
443 std::vector<double> TempClusterEnergy;
444 std::vector<double> TempClusterTiming;
445 std::vector<double> TempClusterPositionX;
446 std::vector<double> TempClusterPositionY;
447 std::vector<double> TempClusterPositionZ;
448 std::vector<double> Sort1D;
449 std::vector<std::vector<double>> Sort2D;
451 std::vector<int> TempNofTCinCluster;
452 std::vector<int> TempMaxTCId;
454 int TempICNTCId = 0;;
456 TempClusterEnergy.clear();
457 TempClusterTiming.clear();
458 TempClusterPositionX.clear();
459 TempClusterPositionY.clear();
460 TempClusterPositionZ.clear();
461 TempNofTCinCluster.clear();
468 TCFireEnergy.clear();
469 TCFireTiming.clear();
470 TCFirePosition.clear();
472 TCFire.resize(96, 0);
473 TCFireEnergy.resize(96, 0.);
474 TCFireTiming.resize(96, 0.);
476 TCFirePosition.resize(96, std::vector<double>(3, 0.));
479 const int hit_size =
m_TCId.size();
480 for (
int ihit = 0 ; ihit < hit_size ; ihit++) {
481 if (
m_TCId[ihit] > 80) {
continue;}
505 int iTCId0 =
m_TCId[ihit] - 1;
507 if (iTCId0 % 5 == 0) {
508 kkk = (iTCId0 / 5) * 2;
509 TCFire[kkk] =
m_TCId[ihit];
510 TCFire[kkk + 1] =
m_TCId[ihit];
513 switch (iTCId0 % 5) {
515 TCFire[32 + 2 * kkk] =
m_TCId[ihit];
break;
517 TCFire[64 + 2 * kkk] =
m_TCId[ihit];
break;
519 TCFire[64 + 2 * kkk + 1] =
m_TCId[ihit];
break;
521 TCFire[32 + 2 * kkk + 1] =
m_TCId[ihit];
break;
528 for (
int iii = 0 ; iii < 96 ; iii++) {
535 for (
int iinit = 0; iinit < 9; iinit ++)
537 if (TCFire[iii] == 0)
552 }
else if (iii == 30) {
583 }
else if (iii < 64) {
595 }
else if (iii == 33) {
609 else if (iii == 62) {
621 }
else if (iii == 63) {
668 }
else if (iii == 95) {
701 TempICNTCId = TCFire[iii];
705 double maxTCEnergy = 0;
706 for (
int iTC = 0; iTC < 9; iTC++) {
723 kkk = 64 + 1 + 2 * kkk;
725 kkk = 32 + 1 + 2 * kkk;
740 }
else if (kkk == 30) {
764 }
else if (kkk < 64) {
776 }
else if (kkk == 33) {
790 else if (kkk == 62) {
802 }
else if (kkk == 63) {
846 }
else if (kkk == 95) {
871 for (
int iNearTC = 1; iNearTC < 9; iNearTC ++) {
872 for (
int jNearTC = 1; jNearTC < 9; jNearTC ++) {
874 if (iNearTC == jNearTC)
continue;
882 double clusterenergy = 0;
883 double clustertiming = 0;
884 double clusterpositionX = 0;
885 double clusterpositionY = 0;
886 double clusterpositionZ = 0;
887 int noftcincluster = 0;
888 for (
int iNearTC = 0; iNearTC < 9; iNearTC ++) {
890 else {noftcincluster++;}
902 clustertiming /= clusterenergy;
904 clusterpositionX /= clusterenergy;
905 clusterpositionY /= clusterenergy;
906 clusterpositionZ /= clusterenergy;
908 clustertiming = TCFireTiming[maxTCId - 1];
909 clusterpositionX = TCFirePosition[maxTCId - 1][0];
910 clusterpositionY = TCFirePosition[maxTCId - 1][1];
911 clusterpositionZ = TCFirePosition[maxTCId - 1][2];
913 if (clustertiming == 0 && clusterenergy == 0) {
continue;}
915 TempClusterEnergy.push_back(clusterenergy);
916 TempClusterTiming.push_back(clustertiming);
917 TempClusterPositionX.push_back(clusterpositionX);
918 TempClusterPositionY.push_back(clusterpositionY);
919 TempClusterPositionZ.push_back(clusterpositionZ);
920 TempNofTCinCluster.push_back(noftcincluster);
921 TempMaxTCId.push_back(maxTCId);
923 Sort1D.push_back(TempICNTCId);
924 Sort1D.push_back(clusterenergy);
925 Sort1D.push_back(clustertiming);
926 Sort1D.push_back(clusterpositionX);
927 Sort1D.push_back(clusterpositionY);
928 Sort1D.push_back(clusterpositionZ);
929 Sort1D.push_back(noftcincluster);
930 Sort1D.push_back(maxTCId);
932 Sort2D.push_back(Sort1D);
941 sort(Sort2D.begin(), Sort2D.end(),
942 [](
const vector<double>& aa1,
const vector<double>& aa2) {return aa1[0] < aa2[0];});
944 const int clustersize = Sort2D.size();
945 for (
int jtc = 0; jtc < clustersize; jtc++) {
963 std::vector<int> TCFire;
964 std::vector<double> TCFireEnergy;
965 std::vector<double> TCFireTiming;
966 std::vector<std::vector<double>> TCFirePosition;
969 std::vector<double> TempClusterEnergy;
970 std::vector<double> TempClusterTiming;
971 std::vector<double> TempClusterPositionX;
972 std::vector<double> TempClusterPositionY;
973 std::vector<double> TempClusterPositionZ;
974 std::vector<int> TempNofTCinCluster;
975 std::vector<int> TempMaxTCId;
977 std::vector<double> Sort1D;
978 std::vector<std::vector<double>> Sort2D;
982 TempClusterEnergy.clear();
983 TempClusterTiming.clear();
984 TempClusterPositionX.clear();
985 TempClusterPositionY.clear();
986 TempClusterPositionZ.clear();
987 TempNofTCinCluster.clear();
993 TCFireEnergy.clear();
994 TCFireTiming.clear();
995 TCFirePosition.clear();
997 TCFire.resize(64, 0);
998 TCFireEnergy.resize(64, 0.);
999 TCFireTiming.resize(64, 0.);
1000 TCFirePosition.resize(64, std::vector<double>(3, 0.));
1002 const int hit_size =
m_TCId.size();
1003 for (
int ihit = 0 ; ihit < hit_size ; ihit++) {
1004 if (
m_TCId[ihit] < 513) {
continue;}
1027 int iTCId0 =
m_TCId[ihit] - 1;
1029 if ((iTCId0 - 512) % 4 == 2) {
1030 kkk = (iTCId0 - 512) / 2 - 1;
1032 if ((iTCId0 - 512) % 4 == 1) {
1033 kkk = ((iTCId0 - 512) + 1) / 2;
1035 if ((iTCId0 - 512) % 4 == 3) {
1036 kkk = 32 + ((iTCId0 - 512) - 3) / 2;
1038 if ((iTCId0 - 512) % 4 == 0) {
1039 kkk = 33 + ((iTCId0 - 512)) / 2;
1042 TCFire[kkk] = iTCId0 + 1;
1047 for (
int iii = 0 ; iii < 64 ; iii ++) {
1049 if (TCFire[iii] == 0) {
continue; }
1051 for (
int iinit = 0; iinit < 9; iinit ++) {
m_TempCluster[iinit] = 0;}
1063 }
else if (iii == 31) {
1095 }
else if (iii == 63) {
1121 TempICNTCId = TCFire[iii];
1125 double maxTCEnergy = 0;
1126 for (
int iTC = 0; iTC < 9; iTC++) {
1159 }
else if (kkk == 31) {
1191 }
else if (kkk == 63) {
1216 for (
int iNearTC = 1; iNearTC < 9; iNearTC ++) {
1217 for (
int jNearTC = 1; jNearTC < 9; jNearTC ++) {
1219 if (iNearTC == jNearTC) {
continue;}
1227 double clusterenergy = 0;
1228 double clustertiming = 0;
1229 double clusterpositionX = 0;
1230 double clusterpositionY = 0;
1231 double clusterpositionZ = 0;
1232 int noftcincluster = 0;
1233 for (
int iNearTC = 0; iNearTC < 9; iNearTC ++) {
1235 else {noftcincluster++;}
1237 clusterenergy += TCFireEnergy[
m_TempCluster[iNearTC] - 513];
1249 clustertiming /= clusterenergy;
1251 clusterpositionX /= clusterenergy;
1252 clusterpositionY /= clusterenergy;
1253 clusterpositionZ /= clusterenergy;
1255 clustertiming = TCFireTiming[maxTCId - 513];
1256 clusterpositionX = TCFirePosition[maxTCId - 513][0];
1257 clusterpositionY = TCFirePosition[maxTCId - 513][1];
1258 clusterpositionZ = TCFirePosition[maxTCId - 513][2];
1261 if (clustertiming == 0 && clusterenergy == 0) {
continue;}
1262 TempClusterEnergy.push_back(clusterenergy);
1263 TempClusterTiming.push_back(clustertiming);
1264 TempClusterPositionX.push_back(clusterpositionX);
1265 TempClusterPositionY.push_back(clusterpositionY);
1266 TempClusterPositionZ.push_back(clusterpositionZ);
1267 TempNofTCinCluster.push_back(noftcincluster);
1268 TempMaxTCId.push_back(maxTCId);
1271 Sort1D.push_back(TempICNTCId);
1272 Sort1D.push_back(clusterenergy);
1273 Sort1D.push_back(clustertiming);
1274 Sort1D.push_back(clusterpositionX);
1275 Sort1D.push_back(clusterpositionY);
1276 Sort1D.push_back(clusterpositionZ);
1277 Sort1D.push_back(noftcincluster);
1278 Sort1D.push_back(maxTCId);
1280 Sort2D.push_back(Sort1D);
1288 sort(Sort2D.begin(), Sort2D.end(),
1289 [](
const vector<double>& aa1,
const vector<double>& aa2) {return aa1[0] < aa2[0];});
1291 const int clustersize = Sort2D.size();
1292 for (
int jtc = 0; jtc < clustersize; jtc++) {
1378 std::vector<int> TCFire,
1380 int& tc_upper_right,
1382 int& tc_lower_right,
1389 int offset_upper = 0;
1390 int offset_lower = 0;
1395 }
else if (iii <= 419) {
1402 offset_lower = -432;
1406 if (iii % 12 == 0) {
1408 tc_upper = TCFire[iii - 12 + offset_upper];
1412 tc_lower = TCFire[iii + 12 + offset_lower];
1413 tc_lower_left = TCFire[iii + 13 + offset_lower];
1414 tc_left = TCFire[iii + 1];
1415 tc_upper_left = TCFire[iii - 11 + offset_upper];
1416 }
else if (iii % 12 == 11) {
1418 tc_upper = TCFire[iii - 12 + offset_upper];
1419 tc_upper_right = TCFire[iii - 13 + offset_upper];
1420 tc_right = TCFire[iii - 1];
1421 tc_lower_right = TCFire[iii + 11 + offset_lower];
1422 tc_lower = TCFire[iii + 12 + offset_lower];
1427 tc_upper = TCFire[iii - 12 + offset_upper];
1428 tc_upper_right = TCFire[iii - 13 + offset_upper];
1429 tc_right = TCFire[iii - 1];
1430 tc_lower_right = TCFire[iii + 11 + offset_lower];
1431 tc_lower = TCFire[iii + 12 + offset_lower];
1432 tc_lower_left = TCFire[iii + 13 + offset_lower];
1433 tc_left = TCFire[iii + 1];
1434 tc_upper_left = TCFire[iii - 11 + offset_upper];
1606 std::vector<int> TCFire;
1611 TCFire.resize(64, 0);
1615 const int hit_size =
m_TCId.size();
1616 for (
int ihit = 0 ; ihit < hit_size ; ihit++) {
1617 if (
m_TCId[ihit] < 513) {
continue;}
1636 int iTCId0 =
m_TCId[ihit] - 1;
1638 if ((iTCId0 - 512) % 4 == 2) {
1639 kkk = (iTCId0 - 512) / 2 - 1;
1641 if ((iTCId0 - 512) % 4 == 1) {
1642 kkk = ((iTCId0 - 512) + 1) / 2;
1644 if ((iTCId0 - 512) % 4 == 3) {
1645 kkk = 32 + ((iTCId0 - 512) - 3) / 2;
1647 if ((iTCId0 - 512) % 4 == 0) {
1648 kkk = 33 + ((iTCId0 - 512)) / 2;
1651 TCFire[kkk] = iTCId0 + 1;
1656 for (
int iii = 0 ; iii < 64 ; iii ++) {
1658 if (TCFire[iii] == 0) {
continue; }
1660 for (
int iinit = 0; iinit < 9; iinit ++) {
m_TempCluster[iinit] = 0;}
1672 }
else if (iii == 31) {
1704 }
else if (iii == 63) {
1731 int phiid =
m_TCMap->getTCPhiIdFromTCId(TCFire[iii]);
1733 if (phiid == 32 || (phiid > 0 && phiid < 10)) {
1736 if (phiid > 7 && phiid < 18) {
1739 if (phiid > 15 && phiid < 26) {
1742 if ((phiid > 22 && phiid < 33) || phiid == 1) {