10#include <trg/grl/modules/trggrl/TRGGRLMatchModule.h>
11#include <trg/grl/dataobjects/TRGGRLMATCH.h>
12#include <trg/grl/dataobjects/TRGGRLMATCHKLM.h>
13#include <trg/grl/dataobjects/TRGGRLPHOTON.h>
14#include <trg/cdc/dataobjects/CDCTriggerTrack.h>
15#include <trg/ecl/dataobjects/TRGECLCluster.h>
16#include <trg/klm/dataobjects/KLMTrgSummary.h>
17#include <trg/cdc/dataobjects/CDCTriggerSegmentHit.h>
18#include <trg/grl/dataobjects/TRGGRLInfo.h>
19#include <trg/grl/dataobjects/TRGGRLShortTrack.h>
20#include <trg/grl/dataobjects/TRGGRLInnerTrack.h>
23#include <framework/datastore/StoreArray.h>
24#include <framework/datastore/StoreObjPtr.h>
27#include <framework/logging/Logger.h>
28#include <framework/core/ModuleParamList.templateDetails.h>
46 setDescription(
"match CDC trigger tracks and ECL trigger clusters");
52 addParam(
"DrMatch",
m_dr_threshold,
"the threshold of dr between track and cluster if they are matched successfully", 25.);
53 addParam(
"DzMatch",
m_dz_threshold,
"the threshold of dz between track and cluster if they are matched successfully", 30.);
54 addParam(
"DphidMatch",
m_dphi_d_threshold,
"the threshold of dphi_d between track and cluster if they are matched successfully", 2);
57 "the threshold of dphi (in degree) between track and KLM sector if they are matched successfully", 32.5);
58 addParam(
"2DtrackCollection",
m_2d_tracklist,
"the 2d track list used in the match", std::string(
"TRGCDC2DFinderTracks"));
59 addParam(
"3DtrackCollection",
m_3d_tracklist,
"the 3d track list used in the match", std::string(
"TRGCDCNeuroTracks"));
60 addParam(
"TRGECLClusterCollection",
m_clusterlist,
"the cluster list used in the match", std::string(
"TRGECLClusters"));
66 std::string(
"TRGKLMMatchTracks"));
70 "Name of the StoreArray holding the information of tracks and clusters from cdc ecl klm.",
71 std::string(
"TRGGRLObjects"));
73 std::string(
"TRGGRLShortTracks"));
75 std::string(
"TRGGRLInnerTracks"));
86 B2DEBUG(100,
"TRGGRLMatchModule processing");
136 for (
int p = 0; p < 137; p++) {
188 for (
int i = 0; i < 36; i++) {
195 for (
int i = 0; i < 4; i++) {
204 int klmtrack_ind_phi_map[8] = {};
205 for (
int i = 0; i < track2Dlist.
getEntries(); i++) {
207 double dr_tmp = 99999.;
208 int dphi_d_tmp = 100;
209 double dphi_klm_tmp = 100;
210 int cluster_ind = -1;
211 int cluster_ind_phi = -1;
212 int klmtrack_ind_phi = -1;
217 for (
int j = 0; j < clusterlist.
getEntries(); j++) {
219 double _cluster_x = clusterlist[j]->getPositionX();
220 double _cluster_y = clusterlist[j]->getPositionY();
221 double _cluster_z = clusterlist[j]->getPositionZ();
222 double _cluster_theta =
atan(_cluster_z / (
sqrt(_cluster_x * _cluster_x + _cluster_y * _cluster_y)));
223 _cluster_theta = 0.5 * M_PI - _cluster_theta;
224 if (_cluster_theta < M_PI * 35.0 / 180.0 || _cluster_theta > M_PI * 126.0 / 180.0)
continue;
226 double ds_ct[2] = {99999., 99999.};
231 if (dr_tmp > ds_ct[0]) {
235 if (dphi_d_tmp > dphi_d) {
248 clusterlist[cluster_ind]->addRelationTo(track2Dlist[i]);
255 matphi->
set_e(clusterlist[cluster_ind_phi]->getEnergyDep());
257 clusterlist[cluster_ind_phi]->addRelationTo(track2Dlist[i]);
260 if (dphi_klm_tmp < m_dphi_klm_threshold * M_PI / 180.0 && klmtrack_ind_phi > -1 && klmtrack_ind_phi < 8) {
261 if (klmtrack_ind_phi_map[klmtrack_ind_phi] == 0) {
266 klmtrack_ind_phi_map[klmtrack_ind_phi] = 1;
274 for (
int i = 0; i < track3Dlist.
getEntries(); i++) {
276 double dr_tmp = 99999.;
277 double dz_tmp = 99999.;
278 int cluster_ind = -1;
279 for (
int j = 0; j < clusterlist.
getEntries(); j++) {
281 double _cluster_x = clusterlist[j]->getPositionX();
282 double _cluster_y = clusterlist[j]->getPositionY();
283 double _cluster_z = clusterlist[j]->getPositionZ();
284 double _cluster_theta =
atan(_cluster_z / (
sqrt(_cluster_x * _cluster_x + _cluster_y * _cluster_y)));
285 _cluster_theta = 0.5 * M_PI - _cluster_theta;
286 if (_cluster_theta < M_PI * 35.0 / 180.0 || _cluster_theta > M_PI * 126.0 / 180.0)
continue;
288 double ds_ct[2] = {99999., 99999.};
290 if (dr_tmp > ds_ct[0]) {
302 clusterlist[cluster_ind]->addRelationTo(track3Dlist[i]);
307 for (
int j = 0; j < clusterlist.
getEntries(); j++) {
310 photon->
set_e(clusterlist[j]->getEnergyDep());
320 std::vector<bool> map_veto(64, 0);
345 double _r = 1.0 / _track->getOmega() ;
346 double _phi = _track->getPhi0() ;
352 double _R =
sqrt(_cluster_x * _cluster_x + _cluster_y * _cluster_y);
357 if (_R > abs(2 * _r)) {
360 double theta0 = _phi - asin(_R / (2 * _r));
362 double ex_x0 = _R * cos(theta0), ex_y0 = _R * sin(theta0);
363 ds[0] =
sqrt((ex_x0 - _cluster_x) * (ex_x0 - _cluster_x) + (ex_y0 - _cluster_y) * (ex_y0 - _cluster_y));
367 double _z0 = _track->getZ0();
368 double _slope = _track->getCotTheta();
369 double _ex_z = _z0 + _slope * 2 * _r * asin(_R / (2 * _r));
370 ds[1] = fabs(_cluster_z - _ex_z);
377 std::vector<bool>& phimap, std::vector<bool>& phimap_i)
381 double _r = 1.0 / _track->getOmega() ;
382 double _phi = _track->getPhi0() ;
385 double phi_p = acos(126.0 / (2 * fabs(_r)));
387 if (_r > 0) {charge = 1;}
388 else if (_r < 0) {charge = -1;}
391 double phi_CDC = 0.0;
393 phi_CDC = _phi + phi_p - 0.5 * M_PI;
394 }
else if (charge == -1) {
395 phi_CDC = _phi - phi_p + 0.5 * M_PI;
400 if (phi_CDC > 2 * M_PI) {phi_CDC = phi_CDC - 2 * M_PI;}
401 else if (phi_CDC < 0) {phi_CDC = phi_CDC + 2 * M_PI;}
402 if (_phi > 2 * M_PI) {_phi = _phi - 2 * M_PI;}
403 else if (_phi < 0) {_phi = _phi + 2 * M_PI;}
410 double phi_ECL = 0.0;
411 if (_cluster_x >= 0 && _cluster_y >= 0) {phi_ECL =
atan(_cluster_y / _cluster_x);}
412 else if (_cluster_x < 0 && _cluster_y >= 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + M_PI;}
413 else if (_cluster_x < 0 && _cluster_y < 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + M_PI;}
414 else if (_cluster_x >= 0 && _cluster_y < 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + 2 * M_PI;}
416 int phi_ECL_d = 0, phi_CDC_d = 0, phi_i_d = 0;
418 for (
int i = 0; i < 36; i++) {
419 if (phi_ECL > i * M_PI / 18 && phi_ECL < (i + 1)*M_PI / 18) {phi_ECL_d = i;}
420 if (_phi > i * M_PI / 18 && _phi < (i + 1)*M_PI / 18) {phi_i_d = i;}
421 if (phi_CDC > i * M_PI / 18 && phi_CDC < (i + 1)*M_PI / 18) {phi_CDC_d = i;}
424 phimap[phi_CDC_d] =
true;
425 phimap_i[phi_i_d] =
true;
427 if (abs(phi_ECL_d - phi_CDC_d) == 0 || abs(phi_ECL_d - phi_CDC_d) == 36) {dphi_d = 0;}
428 else if (abs(phi_ECL_d - phi_CDC_d) == 1 || abs(phi_ECL_d - phi_CDC_d) == 35) {dphi_d = 1;}
429 else if (abs(phi_ECL_d - phi_CDC_d) == 2 || abs(phi_ECL_d - phi_CDC_d) == 34) {dphi_d = 2;}
430 else if (abs(phi_ECL_d - phi_CDC_d) == 3 || abs(phi_ECL_d - phi_CDC_d) == 33) {dphi_d = 3;}
431 else if (abs(phi_ECL_d - phi_CDC_d) == 4 || abs(phi_ECL_d - phi_CDC_d) == 32) {dphi_d = 4;}
432 else if (abs(phi_ECL_d - phi_CDC_d) == 5 || abs(phi_ECL_d - phi_CDC_d) == 31) {dphi_d = 5;}
433 else if (abs(phi_ECL_d - phi_CDC_d) == 6 || abs(phi_ECL_d - phi_CDC_d) == 30) {dphi_d = 6;}
434 else if (abs(phi_ECL_d - phi_CDC_d) == 7 || abs(phi_ECL_d - phi_CDC_d) == 29) {dphi_d = 7;}
435 else if (abs(phi_ECL_d - phi_CDC_d) == 8 || abs(phi_ECL_d - phi_CDC_d) == 28) {dphi_d = 8;}
436 else if (abs(phi_ECL_d - phi_CDC_d) == 9 || abs(phi_ECL_d - phi_CDC_d) == 27) {dphi_d = 9;}
437 else if (abs(phi_ECL_d - phi_CDC_d) == 10 || abs(phi_ECL_d - phi_CDC_d) == 26) {dphi_d = 10;}
438 else if (abs(phi_ECL_d - phi_CDC_d) == 11 || abs(phi_ECL_d - phi_CDC_d) == 25) {dphi_d = 11;}
439 else if (abs(phi_ECL_d - phi_CDC_d) == 12 || abs(phi_ECL_d - phi_CDC_d) == 24) {dphi_d = 12;}
440 else if (abs(phi_ECL_d - phi_CDC_d) == 13 || abs(phi_ECL_d - phi_CDC_d) == 23) {dphi_d = 13;}
441 else if (abs(phi_ECL_d - phi_CDC_d) == 14 || abs(phi_ECL_d - phi_CDC_d) == 22) {dphi_d = 14;}
442 else if (abs(phi_ECL_d - phi_CDC_d) == 15 || abs(phi_ECL_d - phi_CDC_d) == 21) {dphi_d = 15;}
443 else if (abs(phi_ECL_d - phi_CDC_d) == 16 || abs(phi_ECL_d - phi_CDC_d) == 20) {dphi_d = 16;}
444 else if (abs(phi_ECL_d - phi_CDC_d) == 17 || abs(phi_ECL_d - phi_CDC_d) == 19) {dphi_d = 17;}
445 else if (abs(phi_ECL_d - phi_CDC_d) == 18) {dphi_d = 18;}
454 double _r = 1.0 / _track->getOmega() ;
455 double _phi = _track->getPhi0() ;
458 double phi_p = acos(176.0 / (2 * fabs(_r)));
460 if (_r > 0) {charge = 1;}
461 else if (_r < 0) {charge = -1;}
464 double phi_CDC = 0.0;
466 phi_CDC = _phi + phi_p - 0.5 * M_PI;
467 }
else if (charge == -1) {
468 phi_CDC = _phi - phi_p + 0.5 * M_PI;
473 if (phi_CDC > 2 * M_PI) {phi_CDC = phi_CDC - 2 * M_PI;}
474 else if (phi_CDC < 0) {phi_CDC = phi_CDC + 2 * M_PI;}
477 int _sector_mask_fw = _klmtrgsummary->getSector_mask_Forward_Barrel();
478 int _sector_mask_bw = _klmtrgsummary->getSector_mask_Backward_Barrel();
479 int _sector_mask = _sector_mask_fw | _sector_mask_bw;
480 for (
int _sector = 0; _sector < 8; _sector++) {
481 if (_sector_mask & (1 << _sector)) {
482 double _sector_central = 0.25 * M_PI * _sector;
484 if (fabs(phi_CDC - _sector_central) < M_PI) { dphi_temp = fabs(phi_CDC - _sector_central); }
485 else { dphi_temp = 2 * M_PI - fabs(phi_CDC - _sector_central); }
486 if (dphi_temp < dphi) {
502 double _cluster_theta =
atan(_cluster_z / (
sqrt(_cluster_x * _cluster_x + _cluster_y * _cluster_y)));
503 _cluster_theta = 0.5 * M_PI - _cluster_theta;
505 if (_cluster_theta < M_PI * 35.0 / 180.0 || _cluster_theta > M_PI * 126.0 / 180.0) {barrel =
false;}
509 double phi_ECL = 0.0;
510 if (_cluster_x >= 0 && _cluster_y >= 0) {phi_ECL =
atan(_cluster_y / _cluster_x);}
511 else if (_cluster_x < 0 && _cluster_y >= 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + M_PI;}
512 else if (_cluster_x < 0 && _cluster_y < 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + M_PI;}
513 else if (_cluster_x >= 0 && _cluster_y < 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + 2 * M_PI;}
517 for (
int i = 0; i < 36; i++) {
518 if (phi_ECL > i * M_PI / 18 && phi_ECL < (i + 1)*M_PI / 18) {phi_ECL_d = i;}
521 int index = phi_ECL_d, index_p = phi_ECL_d + 1, index_m = phi_ECL_d - 1;
522 if (index_p > 35) {index_p = index_p - 36;}
523 if (index_m < 0) {index_m = index_m + 36;}
525 if (!phimap[index] && !phimap[index_p] && !phimap[index_m] && _cluster_e >= e_threshold && barrel) {
return true;}
526 else if (!barrel) {
return true;}
547 patt.push_back({ 0, 0, 0, 0});
548 patt.push_back({ 0, -1, 0, 0});
549 patt.push_back({ 0, -1, 1, 0});
550 patt.push_back({ 0, -1, -1, 0});
551 patt.push_back({ 0, -2, 0, 0});
552 patt.push_back({ 0, -2, 1, 0});
553 patt.push_back({ 0, -2, 2, 0});
554 patt.push_back({ 0, -2, 3, 0});
555 patt.push_back({ 0, -3, 1, 0});
556 patt.push_back({ 0, -3, 2, 0});
557 patt.push_back({ 0, -3, 3, 0});
558 patt.push_back({ 0, -4, 2, 0});
559 patt.push_back({ 0, -4, 3, 0});
560 patt.push_back({ 0, 0, 0, 1});
561 patt.push_back({ 0, 0, 1, 1});
562 patt.push_back({ 0, -1, 0, 1});
563 patt.push_back({ 0, -1, 1, 1});
564 patt.push_back({ 0, -1, 2, 1});
565 patt.push_back({ 0, -2, 2, 1});
566 patt.push_back({ 0, -2, 3, 1});
567 patt.push_back({ 0, -3, 2, 1});
568 patt.push_back({ 0, -3, 3, 1});
569 patt.push_back({ 0, 0, 0, -1});
570 patt.push_back({ 0, 0, -1, -1});
571 patt.push_back({ 0, -1, 0, -1});
572 patt.push_back({ 0, -1, -1, -1});
573 patt.push_back({ 0, -2, 0, -1});
574 patt.push_back({ 0, -2, 1, -1});
575 patt.push_back({ 0, -3, 1, -1});
576 patt.push_back({ 0, -3, 2, -1});
577 patt.push_back({ -1, -1, 0, 0});
578 patt.push_back({ -1, -1, 1, 0});
579 patt.push_back({ -1, -2, 0, 0});
580 patt.push_back({ -1, -2, 1, 0});
581 patt.push_back({ -1, -3, 1, 0});
582 patt.push_back({ -1, -3, 2, 0});
583 patt.push_back({ -1, -3, 3, 0});
584 patt.push_back({ -1, -4, 2, 0});
585 patt.push_back({ -1, -4, 3, 0});
586 patt.push_back({ 1, 0, 1, 0});
587 patt.push_back({ 1, 0, 0, 0});
588 patt.push_back({ 1, 0, -1, 0});
589 patt.push_back({ 1, -1, 0, 0});
590 patt.push_back({ 1, -1, 1, 0});
591 patt.push_back({ 1, -2, 2, 0});
592 patt.push_back({ 1, -2, 3, 0});
593 patt.push_back({ 1, -3, 2, 0});
594 patt.push_back({ 1, -3, 3, 0});
595 patt.push_back({ -1, -1, 0, 1});
596 patt.push_back({ -1, -1, 1, 1});
597 patt.push_back({ -1, -2, 0, 1});
598 patt.push_back({ -1, -2, 1, 1});
599 patt.push_back({ -1, -2, 2, 1});
600 patt.push_back({ -1, -3, 1, 1});
601 patt.push_back({ -1, -3, 2, 1});
602 patt.push_back({ -1, -3, 3, 1});
603 patt.push_back({ -1, -4, 2, 1});
604 patt.push_back({ -1, -4, 3, 1});
605 patt.push_back({ 1, 0, -1, -1});
606 patt.push_back({ 1, 0, 0, -1});
607 patt.push_back({ 1, -1, -1, -1});
608 patt.push_back({ 1, -1, 0, -1});
609 patt.push_back({ 1, -1, 1, -1});
610 patt.push_back({ 1, -2, 1, -1});
611 patt.push_back({ 1, -2, 2, -1});
612 patt.push_back({ 1, -3, 1, -1});
613 patt.push_back({ 1, -3, 2, -1});
614 patt.push_back({ -1, -1, 1, 2});
615 patt.push_back({ -1, -1, 2, 2});
616 patt.push_back({ -1, -2, 1, 2});
617 patt.push_back({ -1, -2, 2, 2});
618 patt.push_back({ -1, -2, 3, 2});
619 patt.push_back({ -1, -3, 2, 2});
620 patt.push_back({ -1, -3, 3, 2});
621 patt.push_back({ -1, -3, 4, 2});
622 patt.push_back({ 1, 0, -1, -2});
623 patt.push_back({ 1, 0, 0, -2});
624 patt.push_back({ 1, -1, 1, -2});
625 patt.push_back({ 1, -1, 0, -2});
626 patt.push_back({ 1, -1, -1, -2});
627 patt.push_back({ 1, -2, 0, -2});
628 patt.push_back({ 1, -2, 1, -2});
629 patt.push_back({ -2, -2, 0, 1});
630 patt.push_back({ -2, -2, 1, 1});
631 patt.push_back({ -2, -3, 1, 1});
632 patt.push_back({ -2, -3, 2, 1});
633 patt.push_back({ -2, -4, 2, 1});
634 patt.push_back({ -2, -4, 3, 1});
635 patt.push_back({ -2, -5, 3, 1});
636 patt.push_back({ 2, 1, 0, -1});
637 patt.push_back({ 2, 0, 1, -1});
638 patt.push_back({ 2, 0, 0, -1});
639 patt.push_back({ 2, 0, -1, -1});
640 patt.push_back({ 2, -1, 1, -1});
641 patt.push_back({ 2, -1, 0, -1});
642 patt.push_back({ 2, -2, 2, -1});
643 patt.push_back({ 2, -2, 1, -1});
644 patt.push_back({ -2, -2, 1, 2});
645 patt.push_back({ -2, -2, 2, 2});
646 patt.push_back({ -2, -3, 1, 2});
647 patt.push_back({ -2, -3, 2, 2});
648 patt.push_back({ -2, -3, 3, 2});
649 patt.push_back({ -2, -4, 2, 2});
650 patt.push_back({ -2, -4, 3, 2});
651 patt.push_back({ -2, -4, 4, 2});
652 patt.push_back({ 2, 1, 0, -2});
653 patt.push_back({ 2, 1, -1, -2});
654 patt.push_back({ 2, 0, 1, -2});
655 patt.push_back({ 2, 0, 0, -2});
656 patt.push_back({ 2, 0, -1, -2});
657 patt.push_back({ 2, 0, -2, -2});
658 patt.push_back({ 2, -1, 2, -2});
659 patt.push_back({ 2, -1, 1, -2});
660 patt.push_back({ 2, -1, 0, -2});
661 patt.push_back({ 2, -1, -1, -2});
662 patt.push_back({ 2, -2, 0, -2});
663 patt.push_back({ 2, -2, 1, -2});
664 patt.push_back({ -2, -2, 1, 3});
665 patt.push_back({ -2, -2, 2, 3});
666 patt.push_back({ -2, -3, 2, 3});
667 patt.push_back({ -2, -3, 3, 3});
668 patt.push_back({ -2, -3, 4, 3});
669 patt.push_back({ -2, -4, 3, 3});
670 patt.push_back({ -2, -4, 4, 3});
671 patt.push_back({ 2, 1, -1, -3});
672 patt.push_back({ 2, 0, -1, -3});
673 patt.push_back({ 2, 0, -2, -3});
674 patt.push_back({ 2, -1, 0, -3});
675 patt.push_back({ 2, -2, 0, -3});
676 patt.push_back({ 2, -2, 1, -3});
677 patt.push_back({ -2, -2, 2, 4});
678 patt.push_back({ -2, -3, 3, 4});
679 patt.push_back({ -2, -3, 4, 4});
680 patt.push_back({ -2, -4, 4, 4});
681 patt.push_back({ 2, -1, 0, 4});
682 patt.push_back({ 2, -1, -1, 4});
683 patt.push_back({ 2, -2, 0, 4});
689 for (
int i = 0; i < track2Dlist.
getEntries(); i++) {
690 int _w = (int)(2271.7 * track2Dlist[i]->getOmega()) ;
691 if (_w >= 33) { _w = 33;}
692 else if (_w <= -33) { _w = -33;}
693 int _phi = (int)((track2Dlist[i]->getPhi0() + 2 * M_PI) / (M_PI / 32.0));
696 if (_w > 0) {charge = 1;}
697 else if (_w < 0) {charge = -1;}
704 if (_w >= 0 && _w <= 8) { L = _phi; }
705 else if (_w >= 9 && _w <= 15) {
706 if (charge < 0) { L = _phi + 1; }
708 }
else if (_w >= 16 && _w <= 24) {
709 if (charge < 0) { L = _phi + 2; }
711 }
else if (_w >= 25 && _w <= 27) {
712 if (charge < 0) { L = _phi + 3; }
714 }
else if (_w >= 28 && _w <= 30) {
715 if (charge < 0) { L = _phi + 3; }
716 else { L = _phi + 1; }
717 }
else if (_w >= 31 && _w <= 32) {
718 if (charge < 0) { L = _phi + 4; }
719 else { L = _phi + 1; }
721 if (charge < 0) { L = _phi + 5; }
722 else { L = _phi + 1; }
727 if (_w >= 0 && _w <= 8) {
R = _phi; }
728 else if (_w >= 9 && _w <= 15) {
729 if (charge < 0) {
R = _phi; }
730 else {
R = _phi - 1; }
731 }
else if (_w >= 16 && _w <= 24) {
732 if (charge < 0) {
R = _phi; }
733 else {
R = _phi - 2; }
734 }
else if (_w >= 25 && _w <= 27) {
735 if (charge < 0) {
R = _phi; }
736 else {
R = _phi - 3; }
737 }
else if (_w >= 28 && _w <= 30) {
738 if (charge < 0) {
R = _phi + 1; }
739 else {
R = _phi - 3; }
740 }
else if (_w >= 21 && _w <= 32) {
741 if (charge < 0) {
R = _phi + 1; }
742 else {
R = _phi - 4; }
744 if (charge < 0) {
R = _phi + 1; }
745 else {
R = _phi - 5; }
749 for (
int j =
R - 1; j < L + 2; j++) {
750 map_veto[
N64(j)] =
true;
757 std::vector<bool>& ecl_phimap, std::vector<bool>& ecl_phimap_fwd, std::vector<bool>& ecl_phimap_bwd,
758 std::vector<bool>& ecl_sectormap_fwd, std::vector<bool>& ecl_sectormap_bwd)
760 bool ecl_phimap_loose_fwd[36];
761 bool ecl_phimap_loose_bwd[36];
762 for (
int i = 0; i < 36; i++) {
763 ecl_phimap_loose_fwd[i] =
false;
764 ecl_phimap_loose_bwd[i] =
false;
767 for (
int iclst = 0; iclst < clusterlist.
getEntries(); iclst++) {
769 double _cluster_x = clusterlist[iclst]->getPositionX();
770 double _cluster_y = clusterlist[iclst]->getPositionY();
773 double phi_ECL = 0.0;
774 if (_cluster_x >= 0 && _cluster_y >= 0) {phi_ECL =
atan(_cluster_y / _cluster_x);}
775 else if (_cluster_x < 0 && _cluster_y >= 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + M_PI;}
776 else if (_cluster_x < 0 && _cluster_y < 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + M_PI;}
777 else if (_cluster_x >= 0 && _cluster_y < 0) {phi_ECL =
atan(_cluster_y / _cluster_x) + 2 * M_PI;}
781 for (
int i = 0; i < 36; i++) {
782 if (phi_ECL > i * M_PI / 18 && phi_ECL < (i + 1)*M_PI / 18) {phi_ECL_d = i;}
786 int _cluster_thetaid = clusterlist[iclst]->getMaxThetaId();
787 if (_cluster_thetaid < 4 || _cluster_thetaid > 15) ecl_phimap[phi_ECL_d] =
true;
788 if (_cluster_thetaid < 4) ecl_phimap_fwd[phi_ECL_d] =
true;
789 if (_cluster_thetaid > 15) ecl_phimap_bwd[phi_ECL_d] =
true;
790 if (_cluster_thetaid < 5) ecl_phimap_loose_fwd[phi_ECL_d] =
true;
791 if (_cluster_thetaid > 14) ecl_phimap_loose_bwd[phi_ECL_d] =
true;
795 ecl_sectormap_fwd[0] = ecl_phimap_loose_fwd[35] or ecl_phimap_loose_fwd[0] or ecl_phimap_loose_fwd[1] or ecl_phimap_loose_fwd[2] or
796 ecl_phimap_loose_fwd[3] or ecl_phimap_loose_fwd[4] or ecl_phimap_loose_fwd[5] or ecl_phimap_loose_fwd[6] or
797 ecl_phimap_loose_fwd[7] or ecl_phimap_loose_fwd[8] or ecl_phimap_loose_fwd[9];
798 ecl_sectormap_fwd[1] = ecl_phimap_loose_fwd[8] or ecl_phimap_loose_fwd[9] or ecl_phimap_loose_fwd[10] or ecl_phimap_loose_fwd[11]
800 ecl_phimap_loose_fwd[12] or ecl_phimap_loose_fwd[13] or ecl_phimap_loose_fwd[14] or ecl_phimap_loose_fwd[15] or
801 ecl_phimap_loose_fwd[16] or ecl_phimap_loose_fwd[17] or ecl_phimap_loose_fwd[18] or ecl_phimap_loose_fwd[19];
802 ecl_sectormap_fwd[2] = ecl_phimap_loose_fwd[18] or ecl_phimap_loose_fwd[19] or ecl_phimap_loose_fwd[20]
803 or ecl_phimap_loose_fwd[21] or
804 ecl_phimap_loose_fwd[22] or ecl_phimap_loose_fwd[23] or ecl_phimap_loose_fwd[24] or ecl_phimap_loose_fwd[25] or
805 ecl_phimap_loose_fwd[26] or ecl_phimap_loose_fwd[27] or ecl_phimap_loose_fwd[28];
806 ecl_sectormap_fwd[3] = ecl_phimap_loose_fwd[26] or ecl_phimap_loose_fwd[27] or ecl_phimap_loose_fwd[28]
807 or ecl_phimap_loose_fwd[29] or
808 ecl_phimap_loose_fwd[30] or ecl_phimap_loose_fwd[31] or ecl_phimap_loose_fwd[32] or ecl_phimap_loose_fwd[33] or
809 ecl_phimap_loose_fwd[34] or ecl_phimap_loose_fwd[35] or ecl_phimap_loose_fwd[0];
811 ecl_sectormap_bwd[0] = ecl_phimap_loose_bwd[35] or ecl_phimap_loose_bwd[0] or ecl_phimap_loose_bwd[1] or ecl_phimap_loose_bwd[2] or
812 ecl_phimap_loose_bwd[3] or ecl_phimap_loose_bwd[4] or ecl_phimap_loose_bwd[5] or ecl_phimap_loose_bwd[6] or
813 ecl_phimap_loose_bwd[7] or ecl_phimap_loose_bwd[8] or ecl_phimap_loose_bwd[9];
814 ecl_sectormap_bwd[1] = ecl_phimap_loose_bwd[8] or ecl_phimap_loose_bwd[9] or ecl_phimap_loose_bwd[10] or ecl_phimap_loose_bwd[11]
816 ecl_phimap_loose_bwd[12] or ecl_phimap_loose_bwd[13] or ecl_phimap_loose_bwd[14] or ecl_phimap_loose_bwd[15] or
817 ecl_phimap_loose_bwd[16] or ecl_phimap_loose_bwd[17] or ecl_phimap_loose_bwd[18] or ecl_phimap_loose_bwd[19];
818 ecl_sectormap_bwd[2] = ecl_phimap_loose_bwd[18] or ecl_phimap_loose_bwd[19] or ecl_phimap_loose_bwd[20]
819 or ecl_phimap_loose_bwd[21] or
820 ecl_phimap_loose_bwd[22] or ecl_phimap_loose_bwd[23] or ecl_phimap_loose_bwd[24] or ecl_phimap_loose_bwd[25] or
821 ecl_phimap_loose_bwd[26] or ecl_phimap_loose_bwd[27] or ecl_phimap_loose_bwd[28];
822 ecl_sectormap_bwd[3] = ecl_phimap_loose_bwd[26] or ecl_phimap_loose_bwd[27] or ecl_phimap_loose_bwd[28]
823 or ecl_phimap_loose_bwd[29] or
824 ecl_phimap_loose_bwd[30] or ecl_phimap_loose_bwd[31] or ecl_phimap_loose_bwd[32] or ecl_phimap_loose_bwd[33] or
825 ecl_phimap_loose_bwd[34] or ecl_phimap_loose_bwd[35] or ecl_phimap_loose_bwd[0];
830 std::vector<bool>& _eklm_sectormap, std::vector<bool>& _eklm_sectormap_fwd, std::vector<bool>& _eklm_sectormap_bwd)
833 int _sector_mask_fw = _klmtrgsummary->getSector_mask_Forward_Endcap();
834 int _sector_mask_bw = _klmtrgsummary->getSector_mask_Backward_Endcap();
836 for (
int _sector = 0; _sector < 4; _sector++) {
838 if (_sector_mask_bw & (1 << _sector)) _eklm_sectormap_bwd[_sector] =
true;
841 if (_sector_mask_fw & (1 << 0)) _eklm_sectormap_fwd[1] =
true;
842 if (_sector_mask_fw & (1 << 1)) _eklm_sectormap_fwd[0] =
true;
843 if (_sector_mask_fw & (1 << 2)) _eklm_sectormap_fwd[3] =
true;
844 if (_sector_mask_fw & (1 << 3)) _eklm_sectormap_fwd[2] =
true;
846 for (
int _sector = 0; _sector < 4; _sector++) {
847 _eklm_sectormap[_sector] = (_eklm_sectormap_fwd[_sector] || _eklm_sectormap_bwd[_sector]);
853 std::vector<bool> phimap_i,
854 std::vector<bool> ecl_phimap_fwd,
855 std::vector<bool> ecl_phimap_bwd,
856 std::vector<bool> klm_sectormap_fwd,
857 std::vector<bool> klm_sectormap_bwd,
858 std::vector< std::vector<int> >& pattern_base0, std::vector< std::vector<int> >& pattern_base2,
862 std::vector<bool> SL0(64, 0);
863 std::vector<bool> SL1(64, 0);
864 std::vector<bool> SL2(64, 0);
865 std::vector<bool> SL3(64, 0);
866 std::vector<bool> SL4(64, 0);
867 std::vector<bool> ST0(64, 0);
868 std::vector<bool> ST0_36b(36, 0);
869 std::vector<bool> ST2(64, 0);
870 std::vector<int> patt_ID(64, -1);
872 std::vector<bool> st_ec1(64, 0);
873 std::vector<bool> st_ec1_36b(36, 0);
874 std::vector<bool> st_ec1_4b(4, 0);
875 std::vector<bool> st_ec2(64, 0);
876 std::vector<bool> st_ec2_36b(36, 0);
877 std::vector<bool> st_ec2_4b(4, 0);
880 for (
int i = 0; i < tslist.
getEntries(); i++) {
881 int id = tslist[i]->getSegmentID();
883 if (
id >= 0 * 32 &&
id < 5 * 32) {sl = 0;
id -= 0;}
884 else if (
id >= 5 * 32 &&
id < 10 * 32) {sl = 1;
id -= 5 * 32;}
885 else if (
id >= 10 * 32 &&
id < 16 * 32) {sl = 2;
id -= 10 * 32;}
886 else if (
id >= 16 * 32 &&
id < 23 * 32) {sl = 3;
id -= 16 * 32;}
887 else if (
id >= 23 * 32 &&
id < 31 * 32) {sl = 4;
id -= 23 * 32;}
891 int X = (int)(
id / 5), Y =
id % 5;
892 if (Y == 0 || Y == 1) { SL0[2 * X] =
true; }
893 else if (Y == 3 || Y == 4) { SL0[2 * X + 1] =
true; }
894 else { SL0[2 * X] =
true; SL0[2 * X + 1] =
true; }
895 }
else if (sl == 1) {
896 int X = (int)(
id / 5), Y =
id % 5;
897 if (Y == 0 || Y == 1) { SL1[2 * X] =
true; }
898 else if (Y == 3 || Y == 4) { SL1[2 * X + 1] =
true; }
899 else { SL1[2 * X] =
true; SL1[2 * X + 1] =
true; }
900 }
else if (sl == 2) {
901 int X = (int)(
id / 3);
903 }
else if (sl == 3) {
904 int X = (int)(
id / 7), Y =
id % 7;
905 if (Y == 0 || Y == 1 || Y == 2) { SL3[2 * X] =
true; }
906 else if (Y == 4 || Y == 5 || Y == 6) { SL3[2 * X + 1] =
true; }
907 else { SL3[2 * X] =
true; SL3[2 * X + 1] =
true; }
908 }
else if (sl == 4) {
909 int X = (int)(
id / 4);
916 for (
int i = 0; i < 64; i++) {
917 if (map_veto[i]) {SL0[i] =
false; SL1[i] =
false; SL2[i] =
false;}
935 std::vector< std::vector<int> > stlist_buf(0);
938 for (
int i = 0; i < 64; i++) {
945 stlist_buf.push_back({0, 0, 0, 0, 0, 0});
947 if (!SL2[i])
continue;
948 bool SL2_already_found =
false;
950 for (
int p = 0; p < 137; p++) {
953 if (p == 4)
continue;
954 if (p == 5)
continue;
955 if (p == 17)
continue;
956 if (p == 26)
continue;
957 if (p == 38)
continue;
958 if (p == 41)
continue;
959 if (p == 42)
continue;
960 if (p == 47)
continue;
961 if (p == 50)
continue;
962 if (p == 60)
continue;
963 if (p == 63)
continue;
964 if (p == 64)
continue;
965 if (p == 74)
continue;
966 if (p == 93)
continue;
967 if (p == 94)
continue;
968 if (p == 95)
continue;
969 if (p == 96)
continue;
970 if (p == 104)
continue;
971 if (p == 113)
continue;
972 if (p == 114)
continue;
973 if (p == 115)
continue;
974 if (p == 123)
continue;
975 if (p == 134)
continue;
976 if (p == 135)
continue;
977 if (p == 136)
continue;
979 int x0 = pattern_base2[p][0];
980 int x1 = pattern_base2[p][1];
981 int x3 = pattern_base2[p][2];
982 int x4 = pattern_base2[p][3];
985 if (SL2[i] && SL0[
N64(i + x0)] && SL1[
N64(i + x1)] && SL3[
N64(i + x3)] && SL4[
N64(i + x4)] && !SL2_already_found) {
992 SL2_already_found =
true;
996 if (SL2_already_found)
break;
1000 if (SL2_already_found) {
1001 stlist_buf[i][0] = 1;
1002 stlist_buf[i][1] = ID0;
1003 stlist_buf[i][2] = ID1;
1004 stlist_buf[i][3] = ID2;
1005 stlist_buf[i][4] = ID3;
1006 stlist_buf[i][5] = ID4;
1011 for (
int i = 0; i < 64; i++) {
1013 if (!SL0[i])
continue;
1014 bool SL0_already_found =
false;
1016 for (
int p = 0; p < 137; p++) {
1019 if (p == 4)
continue;
1020 if (p == 5)
continue;
1021 if (p == 17)
continue;
1022 if (p == 26)
continue;
1023 if (p == 38)
continue;
1024 if (p == 41)
continue;
1025 if (p == 42)
continue;
1026 if (p == 47)
continue;
1027 if (p == 50)
continue;
1028 if (p == 60)
continue;
1029 if (p == 63)
continue;
1030 if (p == 64)
continue;
1031 if (p == 74)
continue;
1032 if (p == 93)
continue;
1033 if (p == 94)
continue;
1034 if (p == 95)
continue;
1035 if (p == 96)
continue;
1036 if (p == 104)
continue;
1037 if (p == 113)
continue;
1038 if (p == 114)
continue;
1039 if (p == 115)
continue;
1040 if (p == 123)
continue;
1041 if (p == 134)
continue;
1042 if (p == 135)
continue;
1043 if (p == 136)
continue;
1045 int y1 = pattern_base0[p][0];
1046 int y2 = pattern_base0[p][1];
1047 int y3 = pattern_base0[p][2];
1048 int y4 = pattern_base0[p][3];
1050 if (SL0[i] && SL1[
N64(i + y1)] && SL2[
N64(i + y2)] && SL3[
N64(i + y3)] && SL4[
N64(i + y4)] && !SL0_already_found) {
1052 if (patt_ID[i] < 0) { patt_ID[i] = p; }
1053 SL0_already_found =
true;
1057 if (SL0_already_found)
break;
1064 for (
int i = 0; i < 64; i++) {
1065 if (patt_ID[i] == -1)
continue;
1067 int ec = 0, l = 0, r = 0;
1070 for (
int e = l; e <= r; e++) { st_ec1[
N64(i + e)] =
true; }
1073 for (
int e = l; e <= r; e++) { st_ec2[
N64(i + e)] =
true; }
1078 for (
int i = 0; i < 4; i++) {
1079 ST0_36b[0 + 9 * i] = ST0[0 + 16 * i] or ST0[1 + 16 * i];
1080 ST0_36b[1 + 9 * i] = ST0[1 + 16 * i] or ST0[2 + 16 * i] or ST0[3 + 16 * i];
1081 ST0_36b[2 + 9 * i] = ST0[3 + 16 * i] or ST0[4 + 16 * i] or ST0[5 + 16 * i];
1082 ST0_36b[3 + 9 * i] = ST0[5 + 16 * i] or ST0[6 + 16 * i] or ST0[7 + 16 * i];
1083 ST0_36b[4 + 9 * i] = ST0[7 + 16 * i] or ST0[8 + 16 * i];
1084 ST0_36b[5 + 9 * i] = ST0[8 + 16 * i] or ST0[9 + 16 * i] or ST0[10 + 16 * i];
1085 ST0_36b[6 + 9 * i] = ST0[10 + 16 * i] or ST0[11 + 16 * i] or ST0[12 + 16 * i];
1086 ST0_36b[7 + 9 * i] = ST0[12 + 16 * i] or ST0[13 + 16 * i] or ST0[14 + 16 * i];
1087 ST0_36b[8 + 9 * i] = ST0[14 + 16 * i] or ST0[15 + 16 * i];
1088 st_ec1_36b[0 + 9 * i] = st_ec1[0 + 16 * i] or st_ec1[1 + 16 * i];
1089 st_ec1_36b[1 + 9 * i] = st_ec1[1 + 16 * i] or st_ec1[2 + 16 * i] or st_ec1[3 + 16 * i];
1090 st_ec1_36b[2 + 9 * i] = st_ec1[3 + 16 * i] or st_ec1[4 + 16 * i] or st_ec1[5 + 16 * i];
1091 st_ec1_36b[3 + 9 * i] = st_ec1[5 + 16 * i] or st_ec1[6 + 16 * i] or st_ec1[7 + 16 * i];
1092 st_ec1_36b[4 + 9 * i] = st_ec1[7 + 16 * i] or st_ec1[8 + 16 * i];
1093 st_ec1_36b[5 + 9 * i] = st_ec1[8 + 16 * i] or st_ec1[9 + 16 * i] or st_ec1[10 + 16 * i];
1094 st_ec1_36b[6 + 9 * i] = st_ec1[10 + 16 * i] or st_ec1[11 + 16 * i] or st_ec1[12 + 16 * i];
1095 st_ec1_36b[7 + 9 * i] = st_ec1[12 + 16 * i] or st_ec1[13 + 16 * i] or st_ec1[14 + 16 * i];
1096 st_ec1_36b[8 + 9 * i] = st_ec1[14 + 16 * i] or st_ec1[15 + 16 * i];
1098 st_ec2_36b[0 + 9 * i] = st_ec2[0 + 16 * i] or st_ec2[1 + 16 * i];
1099 st_ec2_36b[1 + 9 * i] = st_ec2[1 + 16 * i] or st_ec2[2 + 16 * i] or st_ec2[3 + 16 * i];
1100 st_ec2_36b[2 + 9 * i] = st_ec2[3 + 16 * i] or st_ec2[4 + 16 * i] or st_ec2[5 + 16 * i];
1101 st_ec2_36b[3 + 9 * i] = st_ec2[5 + 16 * i] or st_ec2[6 + 16 * i] or st_ec2[7 + 16 * i];
1102 st_ec2_36b[4 + 9 * i] = st_ec2[7 + 16 * i] or st_ec2[8 + 16 * i];
1103 st_ec2_36b[5 + 9 * i] = st_ec2[8 + 16 * i] or st_ec2[9 + 16 * i] or st_ec2[10 + 16 * i];
1104 st_ec2_36b[6 + 9 * i] = st_ec2[10 + 16 * i] or st_ec2[11 + 16 * i] or st_ec2[12 + 16 * i];
1105 st_ec2_36b[7 + 9 * i] = st_ec2[12 + 16 * i] or st_ec2[13 + 16 * i] or st_ec2[14 + 16 * i];
1106 st_ec2_36b[8 + 9 * i] = st_ec2[14 + 16 * i] or st_ec2[15 + 16 * i];
1109 st_ec1_4b[0] = st_ec1_36b[35] or st_ec1_36b[0] or st_ec1_36b[1] or st_ec1_36b[2] or st_ec1_36b[3] or st_ec1_36b[4] or st_ec1_36b[5]
1110 or st_ec1_36b[6] or st_ec1_36b[7] or st_ec1_36b[8] or st_ec1_36b[9];
1111 st_ec1_4b[1] = st_ec1_36b[8] or st_ec1_36b[9] or st_ec1_36b[10] or st_ec1_36b[11] or st_ec1_36b[12] or st_ec1_36b[13]
1112 or st_ec1_36b[14] or st_ec1_36b[15] or st_ec1_36b[16] or st_ec1_36b[17] or st_ec1_36b[18] or st_ec1_36b[19];
1113 st_ec1_4b[2] = st_ec1_36b[18] or st_ec1_36b[19] or st_ec1_36b[20] or st_ec1_36b[21] or st_ec1_36b[22] or st_ec1_36b[23]
1114 or st_ec1_36b[24] or st_ec1_36b[25] or st_ec1_36b[26] or st_ec1_36b[27] or st_ec1_36b[28];
1115 st_ec1_4b[3] = st_ec1_36b[26] or st_ec1_36b[27] or st_ec1_36b[28] or st_ec1_36b[29] or st_ec1_36b[30] or st_ec1_36b[31]
1116 or st_ec1_36b[32] or st_ec1_36b[33] or st_ec1_36b[34] or st_ec1_36b[35] or st_ec1_36b[0];
1117 st_ec2_4b[0] = st_ec2_36b[35] or st_ec2_36b[0] or st_ec2_36b[1] or st_ec2_36b[2] or st_ec2_36b[3] or st_ec2_36b[4] or st_ec2_36b[5]
1118 or st_ec2_36b[6] or st_ec2_36b[7] or st_ec2_36b[8] or st_ec2_36b[9];
1119 st_ec2_4b[1] = st_ec2_36b[8] or st_ec2_36b[9] or st_ec2_36b[10] or st_ec2_36b[11] or st_ec2_36b[12] or st_ec2_36b[13]
1120 or st_ec2_36b[14] or st_ec2_36b[15] or st_ec2_36b[16] or st_ec2_36b[17] or st_ec2_36b[18] or st_ec2_36b[19];
1121 st_ec2_4b[2] = st_ec2_36b[18] or st_ec2_36b[19] or st_ec2_36b[20] or st_ec2_36b[21] or st_ec2_36b[22] or st_ec2_36b[23]
1122 or st_ec2_36b[24] or st_ec2_36b[25] or st_ec2_36b[26] or st_ec2_36b[27] or st_ec2_36b[28];
1123 st_ec2_4b[3] = st_ec2_36b[26] or st_ec2_36b[27] or st_ec2_36b[28] or st_ec2_36b[29] or st_ec2_36b[30] or st_ec2_36b[31]
1124 or st_ec2_36b[32] or st_ec2_36b[33] or st_ec2_36b[34] or st_ec2_36b[35] or st_ec2_36b[0];
1150 for (
int i = 0; i < 64; i++) {
1154 int L = i - 1,
R = i + 1;
1155 while (ST2[
N64(L)]) {
1156 ST2[
N64(L)] =
false;
1159 while (ST2[
N64(
R)]) {
1160 ST2[
N64(
R)] =
false;
1166 int index =
N64((L +
R) / 2);
1168 st->set_TS_ID(0, stlist_buf[index][1]);
1169 st->set_TS_ID(1, stlist_buf[index][2]);
1170 st->set_TS_ID(2, stlist_buf[index][3]);
1171 st->set_TS_ID(3, stlist_buf[index][4]);
1172 st->set_TS_ID(4, stlist_buf[index][5]);
1175 for (
int i = 0; i < 64; i++) {
1176 if (st_ec1[i]) N_ST_fwd++;
1178 for (
int i = 0; i < 64; i++) {
1179 if (st_ec2[i]) N_ST_bwd++;
1183 for (
int i = 0; i < 36; i++) {
1184 s2s3 = (ST0_36b[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)])) or s2s3;
1185 s2s5 = (ST0_36b[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)]
1186 or ST0_36b[
N36(i + 16)] or ST0_36b[
N36(i + 20)])) or s2s5;
1187 s2so = (ST0_36b[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)]
1188 or ST0_36b[
N36(i + 16)] or ST0_36b[
N36(i + 20)]
1189 or ST0_36b[
N36(i + 15)] or ST0_36b[
N36(i + 21)]
1190 or ST0_36b[
N36(i + 14)] or ST0_36b[
N36(i + 22)]
1191 or ST0_36b[
N36(i + 13)] or ST0_36b[
N36(i + 23)]
1192 or ST0_36b[
N36(i + 12)] or ST0_36b[
N36(i + 24)]
1193 or ST0_36b[
N36(i + 11)] or ST0_36b[
N36(i + 25)]
1194 or ST0_36b[
N36(i + 10)] or ST0_36b[
N36(i + 26)]
1195 or ST0_36b[
N36(i + 9)] or ST0_36b[
N36(i + 27)])) or s2so ;
1196 s2s30 = (ST0_36b[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)]
1197 or ST0_36b[
N36(i + 16)] or ST0_36b[
N36(i + 20)]
1198 or ST0_36b[
N36(i + 15)] or ST0_36b[
N36(i + 21)]
1199 or ST0_36b[
N36(i + 14)] or ST0_36b[
N36(i + 22)]
1200 or ST0_36b[
N36(i + 13)] or ST0_36b[
N36(i + 23)]
1201 or ST0_36b[
N36(i + 12)] or ST0_36b[
N36(i + 24)]
1202 or ST0_36b[
N36(i + 11)] or ST0_36b[
N36(i + 25)]
1203 or ST0_36b[
N36(i + 10)] or ST0_36b[
N36(i + 26)]
1204 or ST0_36b[
N36(i + 9)] or ST0_36b[
N36(i + 27)]
1205 or ST0_36b[
N36(i + 8)] or ST0_36b[
N36(i + 28)]
1206 or ST0_36b[
N36(i + 7)] or ST0_36b[
N36(i + 29)]
1207 or ST0_36b[
N36(i + 6)] or ST0_36b[
N36(i + 30)]
1208 or ST0_36b[
N36(i + 5)] or ST0_36b[
N36(i + 31)]
1209 or ST0_36b[
N36(i + 4)] or ST0_36b[
N36(i + 32)]
1210 or ST0_36b[
N36(i + 3)] or ST0_36b[
N36(i + 33)])) or s2s30 ;
1213 s2f3 = (phimap_i[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)])) or s2f3;
1214 s2f5 = (phimap_i[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)]
1215 or ST0_36b[
N36(i + 16)] or ST0_36b[
N36(i + 20)])) or s2f5;
1216 s2fo = (phimap_i[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)]
1217 or ST0_36b[
N36(i + 16)] or ST0_36b[
N36(i + 20)]
1218 or ST0_36b[
N36(i + 15)] or ST0_36b[
N36(i + 21)]
1219 or ST0_36b[
N36(i + 14)] or ST0_36b[
N36(i + 22)]
1220 or ST0_36b[
N36(i + 13)] or ST0_36b[
N36(i + 23)]
1221 or ST0_36b[
N36(i + 12)] or ST0_36b[
N36(i + 24)]
1222 or ST0_36b[
N36(i + 11)] or ST0_36b[
N36(i + 25)]
1223 or ST0_36b[
N36(i + 10)] or ST0_36b[
N36(i + 26)]
1224 or ST0_36b[
N36(i + 9)] or ST0_36b[
N36(i + 27)])) or s2fo ;
1225 s2f30 = (phimap_i[i] and (ST0_36b[
N36(i + 18)] or ST0_36b[
N36(i + 17)] or ST0_36b[
N36(i + 19)]
1226 or ST0_36b[
N36(i + 16)] or ST0_36b[
N36(i + 20)]
1227 or ST0_36b[
N36(i + 15)] or ST0_36b[
N36(i + 21)]
1228 or ST0_36b[
N36(i + 14)] or ST0_36b[
N36(i + 22)]
1229 or ST0_36b[
N36(i + 13)] or ST0_36b[
N36(i + 23)]
1230 or ST0_36b[
N36(i + 12)] or ST0_36b[
N36(i + 24)]
1231 or ST0_36b[
N36(i + 11)] or ST0_36b[
N36(i + 25)]
1232 or ST0_36b[
N36(i + 10)] or ST0_36b[
N36(i + 26)]
1233 or ST0_36b[
N36(i + 9)] or ST0_36b[
N36(i + 27)]
1234 or ST0_36b[
N36(i + 8)] or ST0_36b[
N36(i + 28)]
1235 or ST0_36b[
N36(i + 7)] or ST0_36b[
N36(i + 29)]
1236 or ST0_36b[
N36(i + 6)] or ST0_36b[
N36(i + 30)]
1237 or ST0_36b[
N36(i + 5)] or ST0_36b[
N36(i + 31)]
1238 or ST0_36b[
N36(i + 4)] or ST0_36b[
N36(i + 32)]
1239 or ST0_36b[
N36(i + 3)] or ST0_36b[
N36(i + 33)])) or s2f30 ;
1244 for (
int i = 0; i < 36; i++) {
1245 if (ecl_phimap_fwd[i] and st_ec1_36b[i])secl_fwd++;
1247 for (
int i = 0; i < 36; i++) {
1248 if (ecl_phimap_bwd[i] and st_ec2_36b[i])secl_bwd++;
1250 secl = secl_fwd + secl_bwd;
1253 for (
int i = 0; i < 4; i++) {
1254 if (klm_sectormap_fwd[i] and st_ec1_4b[i])sklm_fwd++;
1256 for (
int i = 0; i < 4; i++) {
1257 if (klm_sectormap_bwd[i] and st_ec2_4b[i])sklm_bwd++;
1259 sklm = sklm_fwd + sklm_bwd;
1262 trgInfo->setNshorttrk(N_ST);
1263 trgInfo->setNshorttrk_fwd(N_ST_fwd);
1264 trgInfo->setNshorttrk_bwd(N_ST_bwd);
1265 trgInfo->sets2s3(s2s3);
1266 trgInfo->sets2s5(s2s5);
1267 trgInfo->sets2so(s2so);
1268 trgInfo->sets2s30(s2s30);
1269 trgInfo->sets2f3(s2f3);
1270 trgInfo->sets2f5(s2f5);
1271 trgInfo->sets2fo(s2fo);
1272 trgInfo->sets2f30(s2f30);
1273 trgInfo->setbwdsb(0);
1274 trgInfo->setbwdnb(0);
1275 trgInfo->setfwdsb(0);
1276 trgInfo->setfwdnb(0);
1277 trgInfo->setbrlfb(0);
1278 trgInfo->setbrlnb(0);
1279 trgInfo->setNsecl(secl);
1280 trgInfo->setNsecl_fwd(secl_fwd);
1281 trgInfo->setNsecl_bwd(secl_bwd);
1282 trgInfo->setNsklm(sklm);
1283 trgInfo->setNsklm_fwd(sklm_fwd);
1284 trgInfo->setNsklm_bwd(sklm_bwd);
1316 std::vector<bool> phimap_i,
1317 std::vector<bool> ecl_phimap,
1318 std::vector<bool> klm_sectormap,
1322 std::vector<bool> SL0(64, 0);
1323 std::vector<bool> SL1(64, 0);
1324 std::vector<bool> SL2(64, 0);
1325 std::vector<bool> IT0(64, 0);
1326 std::vector<bool> IT0_36b(36, 0);
1327 std::vector<bool> IT0_4b(4, 0);
1330 for (
int i = 0; i < tslist.
getEntries(); i++) {
1331 int id = tslist[i]->getSegmentID();
1333 if (
id >= 0 * 32 &&
id < 5 * 32) {sl = 0;
id -= 0;}
1334 else if (
id >= 5 * 32 &&
id < 10 * 32) {sl = 1;
id -= 5 * 32;}
1335 else if (
id >= 10 * 32 &&
id < 16 * 32) {sl = 2;
id -= 10 * 32;}
1339 int X = (int)(
id / 5), Y =
id % 5;
1340 if (Y == 0 || Y == 1) { SL0[2 * X] =
true; }
1341 else if (Y == 3 || Y == 4) { SL0[2 * X + 1] =
true; }
1342 else { SL0[2 * X] =
true; SL0[2 * X + 1] =
true; }
1343 }
else if (sl == 1) {
1344 int X = (int)(
id / 5), Y =
id % 5;
1345 if (Y == 0 || Y == 1) { SL1[2 * X] =
true; }
1346 else if (Y == 3 || Y == 4) { SL1[2 * X + 1] =
true; }
1347 else { SL1[2 * X] =
true; SL1[2 * X + 1] =
true; }
1348 }
else if (sl == 2) {
1349 int X = (int)(
id / 3);
1356 for (
int i = 0; i < 64; i++) {
1358 if (j1 < 0) j1 = j1 + 64;
1360 if (j2 < 0) j2 = j2 + 64;
1362 if (j3 < 0) j3 = j3 + 64;
1364 if (j4 < 0) j4 = j4 + 64;
1367 if (j6 > 63)j6 = j6 - 64;
1369 if (j7 > 63)j7 = j7 - 64;
1372 (SL1[j1] || SL1[j2] || SL1[j3] || SL1[j4] || SL1[j5]) &&
1373 (SL2[j3] || SL2[j4] || SL2[j5] || SL2[j6] || SL2[j7])
1382 for (
int i = 0; i < 4; i++) {
1383 IT0_36b[0 + 9 * i] = IT0[0 + 16 * i] or IT0[1 + 16 * i];
1384 IT0_36b[1 + 9 * i] = IT0[1 + 16 * i] or IT0[2 + 16 * i] or IT0[3 + 16 * i];
1385 IT0_36b[2 + 9 * i] = IT0[3 + 16 * i] or IT0[4 + 16 * i] or IT0[5 + 16 * i];
1386 IT0_36b[3 + 9 * i] = IT0[5 + 16 * i] or IT0[6 + 16 * i] or IT0[7 + 16 * i];
1387 IT0_36b[4 + 9 * i] = IT0[7 + 16 * i] or IT0[8 + 16 * i];
1388 IT0_36b[5 + 9 * i] = IT0[8 + 16 * i] or IT0[9 + 16 * i] or IT0[10 + 16 * i];
1389 IT0_36b[6 + 9 * i] = IT0[10 + 16 * i] or IT0[11 + 16 * i] or IT0[12 + 16 * i];
1390 IT0_36b[7 + 9 * i] = IT0[12 + 16 * i] or IT0[13 + 16 * i] or IT0[14 + 16 * i];
1391 IT0_36b[8 + 9 * i] = IT0[14 + 16 * i] or IT0[15 + 16 * i];
1395 IT0_4b[0] = IT0_36b[35] or IT0_36b[0] or IT0_36b[1] or IT0_36b[2] or IT0_36b[3] or IT0_36b[4] or IT0_36b[5] or IT0_36b[6]
1396 or IT0_36b[7] or IT0_36b[8] or IT0_36b[9];
1397 IT0_4b[1] = IT0_36b[8] or IT0_36b[9] or IT0_36b[10] or IT0_36b[11] or IT0_36b[12] or IT0_36b[13] or IT0_36b[14] or IT0_36b[15]
1398 or IT0_36b[16] or IT0_36b[17] or IT0_36b[18] or IT0_36b[19];
1399 IT0_4b[2] = IT0_36b[18] or IT0_36b[19] or IT0_36b[20] or IT0_36b[21] or IT0_36b[22] or IT0_36b[23] or IT0_36b[24] or IT0_36b[25]
1400 or IT0_36b[26] or IT0_36b[27] or IT0_36b[28];
1401 IT0_4b[3] = IT0_36b[26] or IT0_36b[27] or IT0_36b[28] or IT0_36b[29] or IT0_36b[30] or IT0_36b[31] or IT0_36b[32] or IT0_36b[33]
1402 or IT0_36b[34] or IT0_36b[36] or IT0_36b[0];
1412 for (
int i = 0; i < 64; i++) {
1419 for (
int i = 0; i < 36; i++) {
1420 i2fo = (phimap_i[i] and (IT0_36b[
N36(i + 18)] or IT0_36b[
N36(i + 17)] or IT0_36b[
N36(i + 19)]
1421 or IT0_36b[
N36(i + 16)] or IT0_36b[
N36(i + 20)]
1422 or IT0_36b[
N36(i + 15)] or IT0_36b[
N36(i + 21)]
1423 or IT0_36b[
N36(i + 14)] or IT0_36b[
N36(i + 22)]
1424 or IT0_36b[
N36(i + 13)] or IT0_36b[
N36(i + 23)]
1425 or IT0_36b[
N36(i + 12)] or IT0_36b[
N36(i + 24)]
1426 or IT0_36b[
N36(i + 11)] or IT0_36b[
N36(i + 25)]
1427 or IT0_36b[
N36(i + 10)] or IT0_36b[
N36(i + 26)]
1428 or IT0_36b[
N36(i + 9)] or IT0_36b[
N36(i + 27)])) or i2fo ;
1431 for (
int i = 0; i < 36; i++) {
1432 i2io = (IT0_36b[i] and (IT0_36b[
N36(i + 18)] or IT0_36b[
N36(i + 17)] or IT0_36b[
N36(i + 19)]
1433 or IT0_36b[
N36(i + 16)] or IT0_36b[
N36(i + 20)]
1434 or IT0_36b[
N36(i + 15)] or IT0_36b[
N36(i + 21)]
1435 or IT0_36b[
N36(i + 14)] or IT0_36b[
N36(i + 22)]
1436 or IT0_36b[
N36(i + 13)] or IT0_36b[
N36(i + 23)]
1437 or IT0_36b[
N36(i + 12)] or IT0_36b[
N36(i + 24)]
1438 or IT0_36b[
N36(i + 11)] or IT0_36b[
N36(i + 25)]
1439 or IT0_36b[
N36(i + 10)] or IT0_36b[
N36(i + 26)]
1440 or IT0_36b[
N36(i + 9)] or IT0_36b[
N36(i + 27)])) or i2io ;
1444 bool IT0_36b_temp[44] = {
false};
1445 for (
int i = 4; i < 40; i++) {
1446 IT0_36b_temp[i] = IT0_36b[i - 4];
1448 IT0_36b_temp[0] = IT0_36b[32];
1449 IT0_36b_temp[1] = IT0_36b[33];
1450 IT0_36b_temp[2] = IT0_36b[34];
1451 IT0_36b_temp[3] = IT0_36b[35];
1452 IT0_36b_temp[40] = IT0_36b[0];
1453 IT0_36b_temp[41] = IT0_36b[1];
1454 IT0_36b_temp[42] = IT0_36b[2];
1455 IT0_36b_temp[43] = IT0_36b[3];
1457 for (
int i = 4; i < 40; i++) {
1458 if (ecl_phimap[i - 4] and (IT0_36b_temp[i - 4] or IT0_36b_temp[i - 3] or IT0_36b_temp[i - 2] or IT0_36b_temp[i - 1]
1459 or IT0_36b_temp[i] or IT0_36b_temp[i + 1] or IT0_36b_temp[i + 2] or IT0_36b_temp[i + 3] or IT0_36b_temp[i + 4])) {
1472 for (
int i = 0; i < 4; i++) {
1473 if (klm_sectormap[i] and IT0_4b[i])iklm++;
1476 trgInfo->setNinnertrk(N_IT);
1477 trgInfo->seti2fo(i2fo);
1478 trgInfo->seti2io(i2io);
1479 trgInfo->setNiecl(iecl);
1480 trgInfo->setNiklm(iklm);
1514void TRGGRLMatchModule::matching_eecl_eklm(std::vector<bool> _eecl_sectormap_fw,
1515 std::vector<bool> _eecl_sectormap_bw,
1516 std::vector<bool> _eklm_sectormap_fw,
1517 std::vector<bool> _eklm_sectormap_bw,
1521 for (
int i = 0; i < 4; i++) {
1522 if (_eklm_sectormap_fw[i] && _eecl_sectormap_fw[i])ieclklm++;
1523 if (_eklm_sectormap_bw[i] && _eecl_sectormap_bw[i])ieclklm++;
1526 trgInfo->setNeecleklm(ieclklm);
1533 if (pattern == 6) {ec = 1; l = 0; r = 1;}
1534 if (pattern == 7) {ec = 1; l = 0; r = 1;}
1535 if (pattern == 8) {ec = 1; l = 0; r = 1;}
1536 if (pattern == 9) {ec = 1; l = 0; r = 2;}
1537 if (pattern == 10) {ec = 1; l = 0; r = 2;}
1538 if (pattern == 11) {ec = 1; l = 0; r = 1;}
1539 if (pattern == 12) {ec = 1; l = 0; r = 2;}
1540 if (pattern == 18) {ec = 1; l = 0; r = 2;}
1541 if (pattern == 19) {ec = 1; l = 0; r = 2;}
1542 if (pattern == 20) {ec = 1; l = 0; r = 4;}
1543 if (pattern == 21) {ec = 1; l = 0; r = 4;}
1544 if (pattern == 28) {ec = 1; l = -4; r = 0;}
1545 if (pattern == 29) {ec = 1; l = -3; r = 0;}
1546 if (pattern == 34) {ec = 1; l = 0; r = 1;}
1547 if (pattern == 35) {ec = 1; l = 0; r = 3;}
1548 if (pattern == 36) {ec = 1; l = 1; r = 3;}
1549 if (pattern == 37) {ec = 1; l = 0; r = 3;}
1550 if (pattern == 44) {ec = 1; l = -4; r = 0;}
1551 if (pattern == 45) {ec = 1; l = -2; r = 0;}
1552 if (pattern == 46) {ec = 1; l = -3; r = 0;}
1553 if (pattern == 54) {ec = 1; l = 1; r = 7;}
1554 if (pattern == 55) {ec = 1; l = 1; r = 6;}
1555 if (pattern == 56) {ec = 1; l = 1; r = 5;}
1556 if (pattern == 57) {ec = 1; l = 1; r = 5;}
1557 if (pattern == 64) {ec = 1; l = -6; r = -1;}
1558 if (pattern == 73) {ec = 1; l = 3; r = 13;}
1559 if (pattern == 81) {ec = 1; l = -10; r = -3;}
1560 if (pattern == 86) {ec = 1; l = 3; r = 12;}
1561 if (pattern == 87) {ec = 1; l = 3; r = 6;}
1562 if (pattern == 100) {ec = 1; l = 7; r = 20;}
1563 if (pattern == 101) {ec = 1; l = 5; r = 20;}
1564 if (pattern == 102) {ec = 1; l = 5; r = 20;}
1565 if (pattern == 103) {ec = 1; l = 4; r = 14;}
1566 if (pattern == 111) {ec = 1; l = -12; r = -5;}
1567 if (pattern == 112) {ec = 1; l = -18; r = -5;}
1568 if (pattern == 116) {ec = 1; l = -11; r = -6;}
1569 if (pattern == 120) {ec = 1; l = 7; r = 21;}
1570 if (pattern == 121) {ec = 1; l = 7; r = 14;}
1571 if (pattern == 122) {ec = 1; l = 7; r = 21;}
1572 if (pattern == 127) {ec = 1; l = -21; r = -8;}
1573 if (pattern == 128) {ec = 1; l = -15; r = -7;}
1574 if (pattern == 129) {ec = 1; l = -12; r = -7;}
1575 if (pattern == 132) {ec = 1; l = 10; r = 18;}
1576 if (pattern == 133) {ec = 1; l = 8; r = 18;}
1578 if (pattern == 0) {ec = 2; l = -3; r = 1;}
1579 if (pattern == 1) {ec = 2; l = -3; r = 1;}
1580 if (pattern == 3) {ec = 2; l = -3; r = 0;}
1581 if (pattern == 13) {ec = 2; l = 0; r = 3;}
1582 if (pattern == 14) {ec = 2; l = 0; r = 4;}
1583 if (pattern == 15) {ec = 2; l = 0; r = 5;}
1584 if (pattern == 22) {ec = 2; l = -4; r = -1;}
1585 if (pattern == 23) {ec = 2; l = -5; r = -1;}
1586 if (pattern == 24) {ec = 2; l = -3; r = 0;}
1587 if (pattern == 25) {ec = 2; l = -4; r = 0;}
1588 if (pattern == 30) {ec = 2; l = 1; r = 5;}
1589 if (pattern == 39) {ec = 2; l = -2; r = 0;}
1590 if (pattern == 40) {ec = 2; l = -2; r = 0;}
1591 if (pattern == 48) {ec = 2; l = 2; r = 6;}
1592 if (pattern == 49) {ec = 2; l = 3; r = 8;}
1593 if (pattern == 58) {ec = 2; l = -9; r = -3;}
1594 if (pattern == 59) {ec = 2; l = -9; r = -3;}
1595 if (pattern == 67) {ec = 2; l = 5; r = 11;}
1596 if (pattern == 75) {ec = 2; l = -13; r = -6;}
1597 if (pattern == 82) {ec = 2; l = 5; r = 9;}
1598 if (pattern == 83) {ec = 2; l = 5; r = 9;}
1599 if (pattern == 89) {ec = 2; l = -10; r = -4;}
1600 if (pattern == 92) {ec = 2; l = -10; r = -4;}
1601 if (pattern == 97) {ec = 2; l = 7; r = 19;}
1602 if (pattern == 105) {ec = 2; l = -16; r = -10;}
1603 if (pattern == 106) {ec = 2; l = -17; r = -7;}
1604 if (pattern == 109) {ec = 2; l = -17; r = -6;}
1605 if (pattern == 111) {ec = 2; l = -16; r = -7;}
1606 if (pattern == 117) {ec = 2; l = 9; r = 19;}
1607 if (pattern == 118) {ec = 2; l = 9; r = 19;}
1608 if (pattern == 124) {ec = 2; l = -17; r = -8;}
1609 if (pattern == 125) {ec = 2; l = -17; r = -8;}
1610 if (pattern == 126) {ec = 2; l = -17; r = -8;}
Track created by the CDC trigger.
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...
void addRelationTo(const RelationsInterface< BASE > *object, float weight=1.0, const std::string &namedRelation="") const
Add a relation from this object to another object (with caching).
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
bool create(bool replace=false)
Create a default object in the data store.
Accessor to arrays stored in the data store.
T * appendNew()
Construct a new T object at the end of the array.
int getEntries() const
Get the number of objects in the array.
bool registerRelationTo(const StoreArray< TO > &toArray, DataStore::EDurability durability=DataStore::c_Event, DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut, const std::string &namedRelation="") const
Register a relation to the given StoreArray.
Type-safe access to single objects in the data store.
double getPositionZ() const
Get Energy weighted position Z.
double getEnergyDep() const
The method to get deposited energy.
double getPositionX() const
The method to get hit average time Get Energy weighted position X.
double getPositionY() const
Get Energy weighted position Y.
a class for neutral ECL cluster in TRGGRL
void set_TS_ID(int i, int id)
set TS ID of SL i
a class for CDC2D-KLM Matching in TRGGRL
void set_sector(int sector)
set the klm sector id
void set_dphi(double dphi)
set the dphi
a class for CDC2D-ECL Matching in TRGGRL
void set_dphi_d(double dphi_d)
set the dphi_d
void setDeltaZ(double deltaz)
set the Delta Z
void set_e(double e)
set the cluster energy
void setDeltaR(double deltar)
set the Delta R
std::string m_klmtrgsummarylist
the KLM track list
std::vector< bool > eklm_sectormap
8 bits phi map of KLM clusters at endcap
StoreObjPtr< TRGGRLInfo > m_TRGGRLInfo
output for TRGGRLInfo
std::string m_2dmatch_tracklist
the distance in phi direction between track and cluster
int m_fastSimulationMode
Switch for the fast simulation.
int N36(int x)
Force an int to be witnin 0 to 35.
int m_simulationMode
Mode for TRGGRL simulation.
std::string m_grlitCollectionName
GRL inner track list.
int m_firmwareSimulationMode
Switch for the firmware simulation. 0:do nothing, 1:do everything.
double m_dr_threshold
max value of dr to be identified as match
int m_dphi_d_threshold
max value of dphi_d to be identified as match, 1 digit = 10 degrees
std::vector< std::vector< int > > patterns_base2
Short tracking patterns based on SL2.
virtual void initialize() override
Initialize the parameters.
std::string m_phimatch_tracklist
the matched 2d track list by phi matching
std::vector< std::vector< int > > patterns_base0
Short tracking patterns based on SL0.
std::vector< bool > track_phimap_i
36 bits phi map of all 2D tracks
bool photon_cluster(TRGECLCluster *cluster, std::vector< bool > track_phimap, double e_threshold)
determine photon from isolated cluster
std::vector< bool > eecl_phimap
36 bits phi map of ECL clusters at endcap
virtual void event() override
Event processor.
void make_veto_map(StoreArray< CDCTriggerTrack > track2Dlist, std::vector< bool > &map_veto)
Make the full track phi veto map for short tracking.
std::vector< bool > eklm_sectormap_fwd
8 bits sector map of KLM clusters at forward endcap
virtual void endRun() override
End-of-run action.
void calculationdistance(CDCTriggerTrack *track, TRGECLCluster *cluster, double *ds, int _match3D)
calculate dr and dz between track and cluster
void calculationphiangle(CDCTriggerTrack *track, TRGECLCluster *cluster, int &dphi_d, std::vector< bool > &track_phimap, std::vector< bool > &track_phimap_i)
calculate dphi_d between track and cluster
virtual void terminate() override
Termination action.
virtual ~TRGGRLMatchModule()
Destructor.
double m_dz_threshold
max value of dz to be identified as match
void short_tracking(StoreArray< CDCTriggerSegmentHit > tslist, std::vector< bool > map_veto, std::vector< bool > phimap_i, std::vector< bool > ecl_phimap_fwd, std::vector< bool > ecl_phimap_bwd, std::vector< bool > klm_sectormap_fwd, std::vector< bool > klm_sectormap_bwd, std::vector< std::vector< int > > &pattern_base0, std::vector< std::vector< int > > &pattern_base2, StoreArray< TRGGRLShortTrack > grlst, StoreObjPtr< TRGGRLInfo > trgInfo)
Short tracking logic.
std::vector< bool > eecl_sectormap_fwd
8 bits sector map of ECL clusters at forward endcap
std::string m_2d_tracklist
the 2D finder track list
virtual void beginRun() override
Called when entering a new run.
void extrapolation(int pattern, int &l, int &r, int &ec)
Short track extrapolation (to endcap) function.
std::string m_grlstCollectionName
GRL short track list.
std::string m_klmmatch_tracklist
the matched 2d track list by KLM matching
double m_dphi_klm_threshold
max value of dphi (CDC track to KLM sector) to be identified as match (in degrees)
std::string m_TrgGrlInformationName
Name of the StoreArray holding projects information from grl.
int N64(int x)
Force an int to be witnin 0 to 63.
TRGGRLMatchModule()
Constructor: Sets the description, the properties and the parameters of the module.
std::vector< bool > track_phimap
36 bits phi map of all 2D tracks
void make_eecl_map(StoreArray< TRGECLCluster > clusterlist, std::vector< bool > &ecl_phimap, std::vector< bool > &ecl_phimap_fwd, std::vector< bool > &ecl_phimap_bwd, std::vector< bool > &ecl_sectormap_fwd, std::vector< bool > &ecl_sectormap_bwd)
Make the ecl endcap phi map for inner/short track matching.
void sectormatching_klm(CDCTriggerTrack *track, StoreObjPtr< KLMTrgSummary > klmtrgsummary, double &dphi, int &klmtrack_ind_phi)
calculate dphi between 2D track and KLM track
std::string m_grlphotonlist
Non-matched cluster list at GRL.
std::vector< bool > eecl_phimap_bwd
36 bits phi map of ECL clusters at backward endcap
std::vector< bool > eecl_phimap_fwd
36 bits phi map of ECL clusters at forward endcap
void fill_pattern_base2(std::vector< std::vector< int > > &patt)
Fill the patterns in short tracking logic.
std::string m_3d_tracklist
the 3D NN track list
double m_e_threshold
min value of isolated cluster energy
std::vector< bool > eklm_sectormap_bwd
8 bits sector map of KLM clusters at backward endcap
std::string m_clusterlist
the ecl cluster list
std::string m_hitCollectionName
Track Segment list.
std::vector< bool > eecl_sectormap_bwd
8 bits sector map of ECL clusters at backward endcap
void make_eklm_map(StoreObjPtr< KLMTrgSummary > klmtrgsummary, std::vector< bool > &eklm_sectormap, std::vector< bool > &eklm_sectormap_fwd, std::vector< bool > &eklm_sectormap_bwd)
Make the klm endcap phi map for inner/short track matching.
std::string m_3dmatch_tracklist
the matched 3d track list
A class to represent a matching candidate in TRGGRL A matching candidate consists of a TRGCDCTrack an...
a class for neutral ECL cluster in TRGGRL
void set_e(double e)
set energy
a class for neutral ECL cluster in TRGGRL
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
double atan(double a)
atan for double
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.