60 #define TRG_SHORT_NAMES
61 #define TRGECL_SHORT_NAMES
63 #include "framework/datastore/StoreArray.h"
64 #include "trg/ecl/TrgEclMaster.h"
65 #include "trg/ecl/TrgEclCluster.h"
67 #include "trg/ecl/dataobjects/TRGECLTrg.h"
68 #include "trg/ecl/dataobjects/TRGECLHit.h"
69 #include "trg/ecl/dataobjects/TRGECLCluster.h"
80 TrgEclMaster::TrgEclMaster():
81 TimeWindow(250.0), OverlapWindow(0.0), _Clustering(1), _Bhabha(0),
82 _EventTiming(1), _NofTopTC(3), _ClusterLimit(6), _Triggerbit{0, 0, 0, 0},
83 _Lowmultibit(0), _PrescaleFactor(0), _PrescaleCounter(0), _mumuThreshold(20),
85 m_taub2bClusterECut1(1.9),
86 m_taub2bClusterECut2(999),
87 m_taub2b2EtotCut(7.0),
88 m_taub2b2CLEEndcapCut(3.0),
89 m_taub2b2CLECut(0.162),
91 _ECLBurstThreshold(200)
118 return "TrgEclMaster";
126 return std::string(
"TrgEclMaster 2.1");
148 {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 30, 35};
150 {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 30, 30};
156 m_3DBhabhaAddAngleCut = {150, 210, 160, 200};
159 m_3DBhabhaVetoInTrackThetaRegion = {3, 15};
160 m_EventTimingQualityThresholds = {5, 6};
167 m_taub2bClusterECut2 = 999;
170 m_taub2b2AngleCut = {120, 240, 140, 220};
172 m_taub2b2CLEEndcapCut = 3.0;
206 for (
int ii = 0; ii < trgeclHitArray.
getEntries(); ii++) {
208 TRGECLHit* aTRGECLHit = trgeclHitArray[ii];
209 int iTCID = (aTRGECLHit->
getTCId() - 1);
214 TCTiming[iTCID].push_back(HitTiming);
215 TCEnergy[iTCID].push_back(HitEnergy);
225 double fluctuation = ((gRandom->Uniform(-1, 0))) * 125;
227 double check_window_start;
229 double check_window_end;
231 for (
int iBin = 0 ; iBin < nBin; iBin ++) {
233 check_window_start = iBin * (
TimeWindow / 3) + fluctuation - 4000;
234 WindowStart = check_window_start;
235 check_window_end = check_window_start +
TimeWindow / 3;
243 for (
int iTCId = 0; iTCId < 576; iTCId++) {
244 const int hitsize =
TCTiming[iTCId].size();
245 for (
int ihit = 0; ihit < hitsize; ihit++) {
246 if (
TCTiming[iTCId][ihit] > check_window_start &&
247 TCTiming[iTCId][ihit] < check_window_end) {
253 if (
HitTCId.size() == 0) {
continue;}
256 for (
int iTCId = 0; iTCId < 576; iTCId++) {
257 const int hitsize =
TCTiming[iTCId].size();
258 for (
int ihit = 0; ihit < hitsize; ihit++) {
259 if (
TCTiming[iTCId][ihit] > WindowStart &&
260 TCTiming[iTCId][ihit] < WindowEnd) {
270 if (noftchit == 0) {
continue;}
272 double eventtiming = 0;
280 int EventTimingQualityFlag =
obj_timing->getEventTimingQualityFlag();
284 std::vector<std::vector<double>> thetaringsum;
285 std::vector<double> phiringsum;
287 thetaringsum.clear();
289 thetaringsum.resize(3, std::vector<double>(36, 0));
290 phiringsum.resize(17, 0);
296 for (
int iii = 0; iii <= 16; iii++) {
297 if (iii > 0 && iii < 15) {E_phys += phiringsum[iii];}
298 E_total += phiringsum[iii];
300 if (E_total == 0) {
continue;}
301 int ELow = 0, EHigh = 0, ELum = 0;
333 std::vector<double> ClusterTiming;
334 std::vector<double> ClusterEnergy;
335 std::vector<int> MaxTCId;
336 ClusterTiming.clear();
337 ClusterEnergy.clear();
340 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
344 double clustertiming = aTRGECLCluster->
getTimeAve();
345 TVector3 clusterposition(aTRGECLCluster->
getPositionX(),
348 ClusterTiming.push_back(clustertiming);
349 ClusterEnergy.push_back(clusterenergy);
350 MaxTCId.push_back(maxTCId);
369 m_taub2bClusterECut2);
372 m_taub2b2CLEEndcapCut,
375 std::vector<double> vct_bhabha;
378 int bhabha3D_veto = 0 ;
379 int bhabha3D_sel = 0;
381 int bhabha3DVetoInTrackFlag = 0;
382 int bhabha3DSelectionThetaFlag = 0;
388 if (b_2Dbhabha && (icn < 4)) {bhabha2D = 1;}
390 if (b_3Dbhabha) {bhabha3D_veto = 1;}
392 if (b_3Dbhabha_sel) {bhabha3D_sel = 1;}
394 if (b_mumu) {mumu = 1;}
395 bhabha3DVetoInTrackFlag =
obj_bhabha->get3DBhabhaVetoInTrackFlag();
396 bhabha3DSelectionThetaFlag =
obj_bhabha->get3DBhabhaSelectionThetaFlag();
403 beambkgtag =
obj_beambkg->GetBeamBkg(thetaringsum);
405 int bhabhaprescale = 0;
416 int Timing = (int)(eventtiming + 0.5);
419 int etot = (int)(E_phys * 1000 + 0.5);
421 if ((etot > 1000 || icn > 3) && !(bhabha2D == 1)) {physics = 1;}
422 std::vector<int> bhabhabit;
424 int bhabhabitsize = vct_bhabha.size();
425 for (
int ibhabha = 0; ibhabha < bhabhabitsize; ibhabha++) {
426 bhabhabit.push_back((
int)vct_bhabha[ibhabha]);
429 int flagoverflow = 0;
430 if (ClusterOverflow > 0) {
435 bhabha2D, physics, bhabhabit, icn, beambkgtag,
437 bhabha3D_sel, mumu, bhabhaprescale, E_burst,
438 EventTimingQualityFlag,
439 bhabha3DVetoInTrackFlag,
440 bhabha3DSelectionThetaFlag,
441 taub2bFlag, 0, taub2b2Flag);
446 m_hitEneNum = trgEcltrgArray.
getEntries() - 1;
450 trgEcltrgArray[m_hitEneNum]->setEventId(m_nEvent);
451 trgEcltrgArray[m_hitEneNum]->setPRS01(phiringsum[0]);
452 trgEcltrgArray[m_hitEneNum]->setPRS02(phiringsum[1]);
453 trgEcltrgArray[m_hitEneNum]->setPRS03(phiringsum[2]);
454 trgEcltrgArray[m_hitEneNum]->setPRS04(phiringsum[3]);
455 trgEcltrgArray[m_hitEneNum]->setPRS05(phiringsum[4]);
456 trgEcltrgArray[m_hitEneNum]->setPRS06(phiringsum[5]);
457 trgEcltrgArray[m_hitEneNum]->setPRS07(phiringsum[6]);
458 trgEcltrgArray[m_hitEneNum]->setPRS08(phiringsum[7]);
459 trgEcltrgArray[m_hitEneNum]->setPRS09(phiringsum[8]);
460 trgEcltrgArray[m_hitEneNum]->setPRS10(phiringsum[9]);
461 trgEcltrgArray[m_hitEneNum]->setPRS11(phiringsum[10]);
462 trgEcltrgArray[m_hitEneNum]->setPRS12(phiringsum[11]);
463 trgEcltrgArray[m_hitEneNum]->setPRS13(phiringsum[12]);
464 trgEcltrgArray[m_hitEneNum]->setPRS14(phiringsum[13]);
465 trgEcltrgArray[m_hitEneNum]->setPRS15(phiringsum[14]);
466 trgEcltrgArray[m_hitEneNum]->setPRS16(phiringsum[15]);
467 trgEcltrgArray[m_hitEneNum]->setPRS17(phiringsum[16]);
469 trgEcltrgArray[m_hitEneNum]->setEtot(E_phys);
470 trgEcltrgArray[m_hitEneNum]->setNofTCHit(noftchit);
472 trgEcltrgArray[m_hitEneNum]->setBhabha01(vct_bhabha[0]);
473 trgEcltrgArray[m_hitEneNum]->setBhabha02(vct_bhabha[1]);
474 trgEcltrgArray[m_hitEneNum]->setBhabha03(vct_bhabha[2]);
475 trgEcltrgArray[m_hitEneNum]->setBhabha04(vct_bhabha[3]);
476 trgEcltrgArray[m_hitEneNum]->setBhabha05(vct_bhabha[4]);
477 trgEcltrgArray[m_hitEneNum]->setBhabha06(vct_bhabha[5]);
478 trgEcltrgArray[m_hitEneNum]->setBhabha07(vct_bhabha[6]);
479 trgEcltrgArray[m_hitEneNum]->setBhabha08(vct_bhabha[7]);
480 trgEcltrgArray[m_hitEneNum]->setBhabha09(vct_bhabha[8]);
481 trgEcltrgArray[m_hitEneNum]->setBhabha10(vct_bhabha[9]);
482 trgEcltrgArray[m_hitEneNum]->setBhabha11(vct_bhabha[10]);
483 trgEcltrgArray[m_hitEneNum]->setBhabha12(vct_bhabha[11]);
484 trgEcltrgArray[m_hitEneNum]->setBhabha13(vct_bhabha[12]);
485 trgEcltrgArray[m_hitEneNum]->setBhabha14(vct_bhabha[13]);
486 trgEcltrgArray[m_hitEneNum]->setBhabha15(vct_bhabha[14]);
487 trgEcltrgArray[m_hitEneNum]->setBhabha16(vct_bhabha[15]);
488 trgEcltrgArray[m_hitEneNum]->setBhabha17(vct_bhabha[16]);
489 trgEcltrgArray[m_hitEneNum]->setBhabha18(vct_bhabha[17]);
491 trgEcltrgArray[m_hitEneNum]->setICN(icn);
492 trgEcltrgArray[m_hitEneNum]->setICNFw(icnfwd);
493 trgEcltrgArray[m_hitEneNum]->setICNBr(icnbr);
494 trgEcltrgArray[m_hitEneNum]->setICNBw(icnbwd);
496 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[0], 0);
497 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[1], 1);
498 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[2], 2);
499 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[3], 3);
501 trgEcltrgArray[m_hitEneNum]->setBhabhaVeto(bhabha2D);
502 trgEcltrgArray[m_hitEneNum]->setBeamBkgVeto(beambkgtag);
503 trgEcltrgArray[m_hitEneNum]->setEventTiming(eventtiming);
505 trgEcltrgArray[m_hitEneNum]->setHit(hit);
506 trgEcltrgArray[m_hitEneNum]->setRevoclk(RevoFAM);
507 trgEcltrgArray[m_hitEneNum]->setTimingSource(TimingSource);
508 trgEcltrgArray[m_hitEneNum]->setPhysics(physics) ;
509 trgEcltrgArray[m_hitEneNum]->set2DBhabha(bhabha2D);
510 trgEcltrgArray[m_hitEneNum]->set3DBhabha(bhabha3D_veto);
511 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSel(bhabha3D_sel);
512 trgEcltrgArray[m_hitEneNum]->setmumuBit(mumu);
513 trgEcltrgArray[m_hitEneNum]->setBhabhaPrescaleBit(bhabhaprescale);
515 trgEcltrgArray[m_hitEneNum]->setELow(ELow) ;
516 trgEcltrgArray[m_hitEneNum]->setEHihg(EHigh);
517 trgEcltrgArray[m_hitEneNum]->setELum(ELum) ;
518 trgEcltrgArray[m_hitEneNum]->setClusterOverflow(ClusterOverflow) ;
519 trgEcltrgArray[m_hitEneNum]->setLowMultiBit(
_Lowmultibit);
554 for (
int ii = 0; ii < trgeclHitArray.
getEntries(); ii++) {
556 TRGECLHit* aTRGECLHit = trgeclHitArray[ii];
557 int iTCID = (aTRGECLHit->
getTCId() - 1);
562 TCTiming[iTCID].push_back(HitTiming);
563 TCEnergy[iTCID].push_back(HitEnergy);
569 double WindowStart = 0;
570 double WindowEnd = 0;
571 double fluctuation = ((gRandom->Uniform(-1, 0))) * 125;
573 int startBin = nBin / 2 - 1;
575 int endBin = nBin / 2 + 1;
585 for (
int iBin = startBin ; iBin <= endBin; iBin ++) {
587 if (iBin == 0) {WindowStart = - 4000 + fluctuation;}
592 for (
int iTCId = 0; iTCId < 576; iTCId++) {
593 const int hitsize =
TCTiming[iTCId].size();
594 for (
int ihit = 0; ihit < hitsize; ihit++) {
595 if (
TCTiming[iTCId][ihit] > WindowStart &&
596 TCTiming[iTCId][ihit] < WindowEnd) {
601 if (totalE == 0) {
continue;}
609 if (max_bin == 0) {WindowStart = - 4000 + fluctuation;}
618 for (
int iTCId = 0; iTCId < 576; iTCId++) {
619 const int hitsize =
TCTiming[iTCId].size();
620 for (
int ihit = 0; ihit < hitsize; ihit++) {
621 if (
TCTiming[iTCId][ihit] > WindowStart &&
622 TCTiming[iTCId][ihit] < WindowEnd) {
632 if (noftchit == 0) {
return;}
634 double eventtiming = 0;
638 obj_timing->setEventTimingQualityThresholds(m_EventTimingQualityThresholds);
643 int EventTimingQualityFlag =
obj_timing->getEventTimingQualityFlag();
647 std::vector<std::vector<double>> thetaringsum;
648 std::vector<double> phiringsum;
650 thetaringsum.clear();
652 thetaringsum.resize(3, std::vector<double>(36, 0));
653 phiringsum.resize(17, 0);
663 for (
int iii = 0; iii <= 16; iii++) {
664 if (iii > 0 && iii < 15) {E_phys += phiringsum[iii];}
668 E_total += phiringsum[iii];
671 if (E_total == 0) {
return;}
672 int ELow = 0, EHigh = 0, ELum = 0;
706 std::vector<double> ClusterTiming;
707 std::vector<double> ClusterEnergy;
708 std::vector<int> MaxTCId;
709 std::vector<int> MaxThetaId;
710 ClusterTiming.clear();
711 ClusterEnergy.clear();
715 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
720 double clustertiming = aTRGECLCluster->
getTimeAve();
721 TVector3 clusterposition(aTRGECLCluster->
getPositionX(),
724 ClusterTiming.push_back(clustertiming);
725 ClusterEnergy.push_back(clusterenergy);
726 MaxTCId.push_back(maxTCId);
727 MaxThetaId.push_back(maxThetaId);
743 obj_bhabha->set3DBhabhaVetoInTrackThetaRegion(m_3DBhabhaVetoInTrackThetaRegion);
747 m_taub2bClusterECut2);
750 m_taub2b2CLEEndcapCut,
753 std::vector<double> vct_bhabha;
756 int bhabha3D_veto = 0 ;
757 int bhabha3D_sel = 0;
759 int bhabha3DVetoInTrackFlag = -1;
760 int bhabha3DSelectionThetaFlag = -1;
766 if (b_2Dbhabha && (icn < 4)) {bhabha2D = 1;}
768 if (b_3Dbhabha) {bhabha3D_veto = 1;}
770 if (b_3Dbhabha_sel) {bhabha3D_sel = 1;}
772 if (b_mumu) {mumu = 1;}
773 int bhabhaprescale = 0;
780 bhabha3DVetoInTrackFlag =
obj_bhabha->get3DBhabhaVetoInTrackFlag();
781 bhabha3DSelectionThetaFlag =
obj_bhabha->get3DBhabhaSelectionThetaFlag();
787 int bhabha_addition =
obj_bhabha->GetBhabhaAddition();
792 beambkgtag =
obj_beambkg->GetBeamBkg(thetaringsum);
794 int bit_hie_bhav = 0;
796 bit_hie_bhav |= (~bhabha_addition & 0x01) & (~bhabha_addition >> 3 & 0x01);
798 bit_hie_bhav |= (~bhabha_addition & 0x01) & (~bhabha_addition >> 2 & 0x01);
800 bit_hie_bhav |= (~bhabha_addition & 0x01) & (~bhabha_addition >> 1 & 0x01);
806 int Timing = (int)(eventtiming + 0.5);
809 int etot = (int)(E_phys * 1000 + 0.5);
813 if ((etot > 1000 || icn > 3) && !(bhabha2D == 1)) {physics = 1;}
814 std::vector<int> bhabhabit;
816 int bhabhabitsize = vct_bhabha.size();
817 for (
int ibhabha = 0; ibhabha < bhabhabitsize; ibhabha++) {
818 bhabhabit.push_back((
int)vct_bhabha[ibhabha]);
821 int flagoverflow = 0;
822 if (ClusterOverflow > 0) {
827 physics, bhabhabit, icn, beambkgtag, flagoverflow,
829 bhabhaprescale, E_burst,
830 EventTimingQualityFlag,
831 bhabha3DVetoInTrackFlag,
832 bhabha3DSelectionThetaFlag,
920 m_hitEneNum = trgEcltrgArray.
getEntries() - 1;
924 trgEcltrgArray[m_hitEneNum]->setEventId(m_nEvent);
925 trgEcltrgArray[m_hitEneNum]->setPRS01(phiringsum[0]);
926 trgEcltrgArray[m_hitEneNum]->setPRS02(phiringsum[1]);
927 trgEcltrgArray[m_hitEneNum]->setPRS03(phiringsum[2]);
928 trgEcltrgArray[m_hitEneNum]->setPRS04(phiringsum[3]);
929 trgEcltrgArray[m_hitEneNum]->setPRS05(phiringsum[4]);
930 trgEcltrgArray[m_hitEneNum]->setPRS06(phiringsum[5]);
931 trgEcltrgArray[m_hitEneNum]->setPRS07(phiringsum[6]);
932 trgEcltrgArray[m_hitEneNum]->setPRS08(phiringsum[7]);
933 trgEcltrgArray[m_hitEneNum]->setPRS09(phiringsum[8]);
934 trgEcltrgArray[m_hitEneNum]->setPRS10(phiringsum[9]);
935 trgEcltrgArray[m_hitEneNum]->setPRS11(phiringsum[10]);
936 trgEcltrgArray[m_hitEneNum]->setPRS12(phiringsum[11]);
937 trgEcltrgArray[m_hitEneNum]->setPRS13(phiringsum[12]);
938 trgEcltrgArray[m_hitEneNum]->setPRS14(phiringsum[13]);
939 trgEcltrgArray[m_hitEneNum]->setPRS15(phiringsum[14]);
940 trgEcltrgArray[m_hitEneNum]->setPRS16(phiringsum[15]);
941 trgEcltrgArray[m_hitEneNum]->setPRS17(phiringsum[16]);
943 trgEcltrgArray[m_hitEneNum]->setEtot(E_phys);
944 trgEcltrgArray[m_hitEneNum]->setNofTCHit(noftchit);
946 trgEcltrgArray[m_hitEneNum]->setBhabha01(vct_bhabha[0]);
947 trgEcltrgArray[m_hitEneNum]->setBhabha02(vct_bhabha[1]);
948 trgEcltrgArray[m_hitEneNum]->setBhabha03(vct_bhabha[2]);
949 trgEcltrgArray[m_hitEneNum]->setBhabha04(vct_bhabha[3]);
950 trgEcltrgArray[m_hitEneNum]->setBhabha05(vct_bhabha[4]);
951 trgEcltrgArray[m_hitEneNum]->setBhabha06(vct_bhabha[5]);
952 trgEcltrgArray[m_hitEneNum]->setBhabha07(vct_bhabha[6]);
953 trgEcltrgArray[m_hitEneNum]->setBhabha08(vct_bhabha[7]);
954 trgEcltrgArray[m_hitEneNum]->setBhabha09(vct_bhabha[8]);
955 trgEcltrgArray[m_hitEneNum]->setBhabha10(vct_bhabha[9]);
956 trgEcltrgArray[m_hitEneNum]->setBhabha11(vct_bhabha[10]);
957 trgEcltrgArray[m_hitEneNum]->setBhabha12(vct_bhabha[11]);
958 trgEcltrgArray[m_hitEneNum]->setBhabha13(vct_bhabha[12]);
959 trgEcltrgArray[m_hitEneNum]->setBhabha14(vct_bhabha[13]);
960 trgEcltrgArray[m_hitEneNum]->setBhabha15(vct_bhabha[14]);
961 trgEcltrgArray[m_hitEneNum]->setBhabha16(vct_bhabha[15]);
962 trgEcltrgArray[m_hitEneNum]->setBhabha17(vct_bhabha[16]);
963 trgEcltrgArray[m_hitEneNum]->setBhabha18(vct_bhabha[17]);
965 trgEcltrgArray[m_hitEneNum]->setICN(icn);
966 trgEcltrgArray[m_hitEneNum]->setICNFw(icnfwd);
967 trgEcltrgArray[m_hitEneNum]->setICNBr(icnbr);
968 trgEcltrgArray[m_hitEneNum]->setICNBw(icnbwd);
970 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[0], 0);
971 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[1], 1);
972 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[2], 2);
973 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[3], 3);
975 trgEcltrgArray[m_hitEneNum]->setBhabhaVeto(bhabha2D);
976 trgEcltrgArray[m_hitEneNum]->setBeamBkgVeto(beambkgtag);
977 trgEcltrgArray[m_hitEneNum]->setEventTiming(eventtiming);
979 trgEcltrgArray[m_hitEneNum]->setHit(hit);
980 trgEcltrgArray[m_hitEneNum]->setRevoclk(RevoFAM);
981 trgEcltrgArray[m_hitEneNum]->setTimingSource(TimingSource);
982 trgEcltrgArray[m_hitEneNum]->setPhysics(physics) ;
983 trgEcltrgArray[m_hitEneNum]->set2DBhabha(bhabha2D);
984 trgEcltrgArray[m_hitEneNum]->set3DBhabha(bhabha3D_veto);
985 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSel(bhabha3D_sel);
986 trgEcltrgArray[m_hitEneNum]->setmumuBit(mumu);
987 trgEcltrgArray[m_hitEneNum]->setBhabhaPrescaleBit(bhabhaprescale);
989 trgEcltrgArray[m_hitEneNum]->setELow(ELow) ;
990 trgEcltrgArray[m_hitEneNum]->setEHihg(EHigh);
991 trgEcltrgArray[m_hitEneNum]->setELum(ELum) ;
992 trgEcltrgArray[m_hitEneNum]->setClusterOverflow(ClusterOverflow) ;
993 trgEcltrgArray[m_hitEneNum]->setLowMultiBit(
_Lowmultibit);
995 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoInTrackFlag(
obj_bhabha->get3DBhabhaVetoInTrackFlag());
996 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTCId(
obj_bhabha->get3DBhabhaVetoClusterTCId(0), 0);
997 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTCId(
obj_bhabha->get3DBhabhaVetoClusterTCId(1), 1);
998 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterEnergy(
obj_bhabha->get3DBhabhaVetoClusterEnergy(0), 0);
999 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterEnergy(
obj_bhabha->get3DBhabhaVetoClusterEnergy(1), 1);
1000 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTiming(
obj_bhabha->get3DBhabhaVetoClusterTiming(0), 0);
1001 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTiming(
obj_bhabha->get3DBhabhaVetoClusterTiming(1), 1);
1002 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterThetaId(
obj_bhabha->get3DBhabhaVetoClusterThetaId(0), 0);
1003 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterThetaId(
obj_bhabha->get3DBhabhaVetoClusterThetaId(1), 1);
1005 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionThetaFlag(
obj_bhabha->get3DBhabhaSelectionThetaFlag());
1006 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTCId(
obj_bhabha->get3DBhabhaSelectionClusterTCId(0), 0);
1007 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTCId(
obj_bhabha->get3DBhabhaSelectionClusterTCId(1), 1);
1008 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterEnergy(
obj_bhabha->get3DBhabhaSelectionClusterEnergy(0), 0);
1009 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterEnergy(
obj_bhabha->get3DBhabhaSelectionClusterEnergy(1), 1);
1010 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTiming(
obj_bhabha->get3DBhabhaSelectionClusterTiming(0), 0);
1011 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTiming(
obj_bhabha->get3DBhabhaSelectionClusterTiming(1), 1);
1012 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterThetaId(
obj_bhabha->get3DBhabhaSelectionClusterThetaId(0), 0);
1013 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterThetaId(
obj_bhabha->get3DBhabhaSelectionClusterThetaId(1), 1);
1015 trgEcltrgArray[m_hitEneNum]->setEventTimingQualityFlag(
obj_timing->getEventTimingQualityFlag());
1016 trgEcltrgArray[m_hitEneNum]->setEventTimingTCId(
obj_timing->getEventTimingTCId());
1017 trgEcltrgArray[m_hitEneNum]->setEventTimingTCThetaId(
obj_timing->getEventTimingTCThetaId());
1018 trgEcltrgArray[m_hitEneNum]->setEventTimingTCEnergy(
obj_timing->getEventTimingTCEnergy());
1020 trgEcltrgArray[m_hitEneNum]->setEtot1to17(E_total);
1021 trgEcltrgArray[m_hitEneNum]->setTaub2bFlag(taub2bFlag);
1022 trgEcltrgArray[m_hitEneNum]->setTaub2bAngleFlag(
obj_bhabha->getTaub2bAngleFlag());
1023 trgEcltrgArray[m_hitEneNum]->setTaub2bEtotFlag(
obj_bhabha->getTaub2bEtotFlag());
1024 trgEcltrgArray[m_hitEneNum]->setTaub2bClusterEFlag(
obj_bhabha->getTaub2bClusterEFlag());
1026 trgEcltrgArray[m_hitEneNum]->setNofCluster1to17(NofCluster1to17);
1028 trgEcltrgArray[m_hitEneNum]->setDataClockWindowStartTime(WindowStart);
1037 std::vector<double> TCHit,
1038 std::vector<double>& phiringsum,
1039 std::vector<std::vector<double>>& thetaringsum)
1055 thetaringsum.resize(3, std::vector<double>(36, 0.));
1056 phiringsum.resize(17);
1057 const int size_hit = TCHit.size();
1058 for (
int iHit = 0; iHit < size_hit; iHit++) {
1059 int iTCId = TCId[iHit] - 1;
1060 if (TCHit[iHit] > 0) {
1063 phiringsum[iTCThetaId] += TCHit[iHit];
1064 if (iTCThetaId < 3) {
1066 if (iTCThetaId != 0) {
1067 thetaringsum[0][iTCPhiId] += TCHit[iHit];
1069 }
else if (iTCThetaId < 15) {
1071 thetaringsum[1][iTCPhiId] += TCHit[iHit];
1074 thetaringsum[2][iTCPhiId] += TCHit[iHit];
1087 double etot,
int bhabha2D,
int physics,
1088 std::vector<int> bhabhatype,
int ICN,
int BGVeto,
1089 int ClusterOverflow,
int bhabha3D,
int lowmultibit,
1090 int bhabha3D_sel,
int mumubit,
int prescale,
int burst,
1091 int EventTimingQualityFlag,
int bhabha3DVetoInTrackFlag,
1092 int bhabha3DSelectionThetaFlag,
1108 int Bhabhatype = bhabha2D;
1120 if (bhabhatype.size() > 14) {
1121 for (
int ibhabha = 0; ibhabha < 13; ibhabha++) {
1123 if (bhabhatype[ibhabha] == 1) {type = 0x01;}
1131 int bit_hit = hit & 0x01;
1132 int bit_Timing = (Timing & 0x7F) ;
1133 int bit_RevoFAM = (RevoFAM & 0x7F) ;
1134 int bit_TimingSource = (TimingSource & 0x07) ;
1135 int bit_physics = (physics & 0x01) ;
1136 int bit_2Dbhabha = (bhabhaveto & 0x01) ;
1137 int bit_bhabhatype = (Bhabhatype & 0x3FFF);
1138 int bit_etot = (((int)etot) & 0x1FFF) ;
1139 int bit_elow = (elow & 0x01);
1140 int bit_ehigh = (ehigh & 0x01) ;
1141 int bit_elum = (elum & 0x01) ;
1142 int bit_ICN = (ICN & 0x7F) ;
1143 int bit_BGVeto = (BGVeto & 0x07) ;
1144 int bit_ClusterOverflow = (ClusterOverflow & 0x01);
1145 int bit_3Dbhabha = (bhabha3D & 0x01);
1147 int bit_lowmulti1 = lowmultibit & 0x0FFF;
1148 int bit_lowmulti2 = (lowmultibit >>= 12) & 0x3;
1149 int bit_3DBhabha_sel = bhabha3D_sel & 0x01;
1150 int bit_mumu = mumubit & 0x01;
1151 int bit_prescale = prescale & 0x01;
1152 int bit_burst = burst & 0x01;
1154 int bit_eventtimingqualityflag = EventTimingQualityFlag & 0x03;
1155 int bit_bhabha3dvetointrackflag = 0;
1156 if (bhabha3D == 1) {
1157 bit_bhabha3dvetointrackflag = bhabha3DVetoInTrackFlag & 0x01;
1159 int bit_bhabha3dselectionthetaflag = 0;
1160 if (bhabha3D_sel == 1) {
1161 bit_bhabha3dselectionthetaflag = bhabha3DSelectionThetaFlag & 0x03;
1163 int bit_taub2bflag = taub2bFlag & 0x01;
1164 int bit_taub2b2flag = taub2b2Flag & 0x01;
1210 _Triggerbit[1] |= ((bit_bhabhatype >> 12) & 0x03);
1234 std::vector<double> clusterenergy)
1256 int _nClust = CenterTCId.size();
1260 int _n2GeV231516 = 0;
1266 int _n500MeV216 = 0;
1267 int _n500MeV611 = 0;
1268 for (
int ic = 0; ic < _nClust; ic++) {
1269 if (clusterenergy[ic] > 0.3) {_n300MeV++;}
1272 int thresh = 15 & lut;
1273 if (thetaid >= 2 && thetaid <= 16) {_nClust216++;}
1274 if (thetaid >= 6 && thetaid <= 11) {
1275 if (clusterenergy[ic] * 100 > 5 * thresh) {
1280 if (clusterenergy[ic] > 0.5 && thetaid >= 2 && thetaid <= 16) {_n500MeV216++;}
1283 if (thetaid >= 4 && thetaid <= 14) {_n2GeV414++;}
1284 if (thetaid == 2 || thetaid == 3 || thetaid == 15 || thetaid == 16) {_n2GeV231516++;}
1285 if (thetaid == 1 || thetaid == 17) {_n2GeV117++;}
1288 if (thetaid >= 4 && thetaid <= 15) {_n1GeV415++;}
1289 if (thetaid == 2 || thetaid == 3 || thetaid == 16) {_n1GeV2316++;}
1290 if (thetaid == 1 || thetaid == 17) {_n1GeV117++;}
1297 int _nPhiPairHigh = 0;
1298 int _nPhiPairLow = 0;
1300 int _nECLBhabha = 0;
1301 for (
int i0 = 0; i0 < _nClust - 1; i0++) {
1302 for (
int i1 = i0 + 1; i1 < _nClust; i1++) {
1306 int energy1 = 15 & lut1;
1307 int energy2 = 15 & lut2;
1310 int phi1 = 511 & lut1;
1311 int phi2 = 511 & lut2;
1318 int dphi = abs(phi1 - phi2);
1319 if (dphi > 180) {dphi = 360 - dphi;}
1320 int thetaSum = theta1 + theta2;
1333 if (dphi > 160. && thetaSum > 160. && thetaSum < 200) {_n3DPair++;}
1363 if (_nClust >= 3 && _n300MeV >=
_n300MeVCluster && _nECLBhabha == 0) {
1366 if (_n2GeV414 > 0) {
1369 if (_n2GeV231516 && _nECLBhabha == 0) {
1372 if (_n2GeV231516 && _nECLBhabha != 0) {
1375 if (_n2GeV117 && _nECLBhabha == 0) {
1378 if (_n2GeV117 && _nECLBhabha != 0) {
1381 if (_n1GeV415 == 1 && _n300MeV == 1) {
1384 if (_n1GeV2316 == 1 && _n300MeV == 1) {
1387 if (_nPhiPairHigh > 0 && _n2GeV == 0) {
1390 if (_nPhiPairLow > 0 && _n2GeV == 0) {
1393 if (_n3DPair > 0 && _n2GeV == 0) {
1399 if (_nClust216 >= 3 && _n500MeV216 > 0 && _nECLBhabha == 0) {
1402 if (_n500MeV611 == 1 && _n300MeV == 1) {
1444 for (
int iii = 0; iii <= 16; iii++) {
1445 if (iii > 0 && iii < 15) {E_phys += phisum[iii];}
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.
double getTimeAve() const
The method to get hit average time.
double getPositionZ() const
Get Energy weighted position Z.
int getMaxThetaId()
The method to set Theta Id of maximum TC in Cluster.
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.
int getMaxTCId() const
The method to get the Maximum(center) TC id.
double getTimeAve() const
The method to get hit average time.
double getEnergyDep() const
The method to get deposited energy.
int getBeamBkgTag() const
The method to get Beam Background tag.
int getTCId() const
The method to get TC id.
A Class of ECL Trigger clustering
A Class of ECL Trigger clustering
bool GetBhabha00(std::vector< double >)
Belle 2D Bhabha veto method.
bool Getmumu()
MuMu selection for calibration.
std::vector< double > GetBhabhaComb()
Output 2D Bhabha combination.
void set3DBhabhaAddAngleCut(const std::vector< double > &i3DBhabhaAddAngleCut)
set 3D Bhabha addtion Angle selection
void setmumuThreshold(int mumuThreshold)
set mumu bit Threshold
void set2DBhabhaThreshold(const std::vector< double > &i2DBhabhaThresholdFWD, const std::vector< double > &i2DBhabhaThresholdBWD)
set 2D Bhabha Energy Threshold
void set3DBhabhaVetoAngle(const std::vector< double > &i3DBhabhaVetoAngle)
set 3D veto Bhabha Energy Angle
bool GetBhabha02()
Belle II 3D Bhabha method for selection.
void set3DBhabhaSelectionAngle(const std::vector< double > &i3DBhabhaSelectionAngle)
set 3D selection Bhabha Energy Angle
void set3DBhabhaSelectionThreshold(const std::vector< double > &i3DBhabhaSelectionThreshold)
set 3D selection Bhabha Energy Threshold
bool GetTaub2b(double)
Taub2b selection.
bool GetBhabha01()
Belle II 3D Bhabha method for veto.
void set3DBhabhaVetoThreshold(const std::vector< double > &i3DBhabhaVetoThreshold)
set 3D veto Bhabha Energy Threshold
void setmumuAngle(const std::vector< double > &imumuAngle)
set mumu bit Angle selection
bool GetTaub2b2(double)
Taub2b selection (tighter selection than Taub2b)
A Class of ECL Trigger clustering
void setICN(const std::vector< int > &)
set ICN for each part(Fw,Br,Bw)
int getICNSub(int)
get ICN in each region(Fw(0), Br(1), Bw(2))
int getICNFwBr(void)
get ICN in Barrel and Forward
int getNofExceedCluster()
get # Cluster in case of exceeding limit
void setClusterLimit(int limit)
Set Limit of Cluster.
int getNofCluster()
0 : center , 1; upper , 2: right , 3: lower , 4: lower right
void setClusteringMethod(int method)
Set.
void setEventId(int eventId)
Set EventId.
int Get3DBhabhaLUT(int)
TC CM Phi
int getTCThetaIdFromTCId(int)
get [TC Theta ID] from [TC ID]
int getTCPhiIdFromTCId(int)
get [TC Phi ID] from [TC ID]
int _Clustering
clutering option
double _ECLBurstThreshold
ECL Burst Bit Threshold.
std::vector< std::vector< double > > TCEnergy
Hit TC Energy.
double m_taub2bEtotCut
tau b2b total energy (TC theta ID =1-17) (GeV)
std::vector< double > TCHitEnergy
Hit TC Energy in time window.
int _PrescaleCounter
Bhabha Prescale Countor.
int _ClusterLimit
The limit number of Cluster.
std::vector< int > m_taub2bAngleCut
tau b2b 2 cluster angle cut (degree)
void simulate02(int)
simulates ECL trigger for Data Analysis
double TimeWindow
Hit TC Energy in time window.
TrgEclTiming * obj_timing
EventTiming object.
double _mumuThreshold
mumu bit Energy Threshold
std::string version(void) const
returns version.
void initialize(int)
initialize
double setTotalEnergy(std::vector< double >)
Set Total Energy.
void setRS(std::vector< int >, std::vector< double >, std::vector< double > &, std::vector< std::vector< double >> &)
ECL bit information for GDL.
TrgEclCluster * obj_cluster
Cluster object.
void makeLowMultiTriggerBit(std::vector< int >, std::vector< double >)
make LowMultiTriggerBit
int _PrescaleFactor
Bhabha Prescale Factor.
int _n300MeVCluster
The number of Cluster exceeding 300 MeV.
std::vector< double > _TotalEnergy
Total Energy Theshold (low, high, lum)
std::vector< double > _mumuAngle
mumu bit Angle
void makeTriggerBit(int, int, int, int, double, int, int, std::vector< int >, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int)
make Trigger bit except for Low Multiplicity related bit
std::vector< double > _3DBhabhaVetoThreshold
3D Veto Bhabha Energy Threshold
double m_taub2b2EtotCut
taub2b2 total energy (TC theta ID =1-17) (GeV)
std::vector< double > _LowMultiThreshold
Low Multiplicity Threshold.
std::vector< double > TCHitTiming
Hit TC Timing in time window.
int _EventTiming
EventTiming option.
std::vector< std::vector< int > > TCBeamBkgTag
Hit TC Beam Background tag.
TrgEclBhabha * obj_bhabha
Bhabha object.
TrgEclBeamBKG * obj_beambkg
Beam Backgroud veto object.
std::vector< double > _3DBhabhaSelectionAngle
3D Selection Bhabha Energy Angle
std::vector< double > _2DBhabhaThresholdBWD
2D Bhabha Energy Threshold
int _Triggerbit[4]
ECL Trigger bit.
std::string name(void) const
returns name.
std::vector< double > _3DBhabhaSelectionThreshold
3D Selection Bhabha Energy Threshold
double OverlapWindow
TRG Decision overlap window.
TrgEclDataBase * obj_database
Beam Backgroud veto object.
void simulate01(int)
simulates ECL trigger for Global Cosmic data
TrgEclMapping * obj_map
Mapping object.
double m_taub2bClusterECut1
taub2b one Cluster energy selection (GeV)
std::vector< int > HitTCId
Hit TC Energy in time window.
virtual ~TrgEclMaster()
TrgEclMaster Destructor.
int _Lowmultibit
Low Multiplicity bit.
std::vector< int > TCHitBeamBkgTag
Hit TC Beam Background tag in time window.
double m_taub2b2CLECut
taub2b2 cluseter energy cut (GeV)
std::vector< double > _2DBhabhaThresholdFWD
2D Bhabha Energy Threshold
std::vector< double > _3DBhabhaVetoAngle
3D Veto Bhabha Energy Angle
std::vector< std::vector< double > > TCTiming
Hit TC Timing.
A Class of ECL Trigger clustering
void Setup(const std::vector< int > &, const std::vector< double > &, const std::vector< double > &)
SetUp.
void SetNofTopTC(int NtopTC)
Set # of considered TC in Energy weighted timing method.
double GetEventTiming(int)
Get Evnet-timing.
int GetTimingSource()
Get Timing Source.
Abstract base class for different kinds of events.