59 #define TRG_SHORT_NAMES
60 #define TRGECL_SHORT_NAMES
62 #include "framework/datastore/StoreArray.h"
63 #include "trg/ecl/TrgEclMaster.h"
64 #include "trg/ecl/TrgEclCluster.h"
66 #include "trg/ecl/dataobjects/TRGECLTrg.h"
67 #include "trg/ecl/dataobjects/TRGECLHit.h"
68 #include "trg/ecl/dataobjects/TRGECLCluster.h"
79 TrgEclMaster::TrgEclMaster():
80 TimeWindow(250.0), OverlapWindow(0.0), _Clustering(1), _Bhabha(0),
81 _EventTiming(1), _NofTopTC(3), _ClusterLimit(6), _Lowmultibit(0),
82 _PrescaleFactor(0), _PrescaleCounter(0), _mumuThreshold(20),
83 _n300MeVCluster(1), _ECLBurstThreshold(200)
112 m_3DBhabhaAddAngleCut.clear();
119 _2DBhabhaThresholdFWD = {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 30, 35};
120 _2DBhabhaThresholdBWD = {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 30, 30};
126 m_3DBhabhaAddAngleCut = {150, 210, 160, 200};
129 m_3DBhabhaVetoInTrackThetaRegion = {3, 15};
130 m_EventTimingQualityThresholds = {5, 6};
135 m_taub2bClusterECut2 = 999;
165 return "TrgEclMaster";
173 return std::string(
"TrgEclMaster 2.1");
228 for (
int ii = 0; ii < trgeclHitArray.
getEntries(); ii++) {
230 TRGECLHit* aTRGECLHit = trgeclHitArray[ii];
231 int iTCID = (aTRGECLHit->
getTCId() - 1);
236 TCTiming[iTCID].push_back(HitTiming);
237 TCEnergy[iTCID].push_back(HitEnergy);
247 double fluctuation = ((gRandom->Uniform(-1, 0))) * 125;
249 double check_window_start;
251 double check_window_end;
253 for (
int iBin = 0 ; iBin < nBin; iBin ++) {
255 check_window_start = iBin * (
TimeWindow / 3) + fluctuation - 4000;
256 WindowStart = check_window_start;
257 check_window_end = check_window_start +
TimeWindow / 3;
265 for (
int iTCId = 0; iTCId < 576; iTCId++) {
266 const int hitsize =
TCTiming[iTCId].size();
267 for (
int ihit = 0; ihit < hitsize; ihit++) {
268 if (
TCTiming[iTCId][ihit] > check_window_start &&
269 TCTiming[iTCId][ihit] < check_window_end) {
275 if (
HitTCId.size() == 0) {
continue;}
278 for (
int iTCId = 0; iTCId < 576; iTCId++) {
279 const int hitsize =
TCTiming[iTCId].size();
280 for (
int ihit = 0; ihit < hitsize; ihit++) {
281 if (
TCTiming[iTCId][ihit] > WindowStart &&
282 TCTiming[iTCId][ihit] < WindowEnd) {
292 if (noftchit == 0) {
continue;}
294 double eventtiming = 0;
302 int EventTimingQualityFlag =
obj_timing->getEventTimingQualityFlag();
306 std::vector<std::vector<double>> thetaringsum;
307 std::vector<double> phiringsum;
309 thetaringsum.clear();
311 thetaringsum.resize(3, std::vector<double>(36, 0));
312 phiringsum.resize(17, 0);
318 for (
int iii = 0; iii <= 16; iii++) {
319 if (iii > 0 && iii < 15) {E_phys += phiringsum[iii];}
320 E_total += phiringsum[iii];
322 if (E_total == 0) {
continue;}
323 int ELow = 0, EHigh = 0, ELum = 0;
355 std::vector<double> ClusterTiming;
356 std::vector<double> ClusterEnergy;
357 std::vector<int> MaxTCId;
358 ClusterTiming.clear();
359 ClusterEnergy.clear();
362 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
366 double clustertiming = aTRGECLCluster->
getTimeAve();
367 TVector3 clusterposition(aTRGECLCluster->
getPositionX(),
370 ClusterTiming.push_back(clustertiming);
371 ClusterEnergy.push_back(clusterenergy);
372 MaxTCId.push_back(maxTCId);
391 m_taub2bClusterECut2);
393 std::vector<double> vct_bhabha;
396 int bhabha3D_veto = 0 ;
397 int bhabha3D_sel = 0;
399 int bhabha3DVetoInTrackFlag = 0;
400 int bhabha3DSelectionThetaFlag = 0;
405 if (b_2Dbhabha && (icn < 4)) {bhabha2D = 1;}
407 if (b_3Dbhabha) {bhabha3D_veto = 1;}
409 if (b_3Dbhabha_sel) {bhabha3D_sel = 1;}
411 if (b_mumu) {mumu = 1;}
412 bhabha3DVetoInTrackFlag =
obj_bhabha->get3DBhabhaVetoInTrackFlag();
413 bhabha3DSelectionThetaFlag =
obj_bhabha->get3DBhabhaSelectionThetaFlag();
419 beambkgtag =
obj_beambkg->GetBeamBkg(thetaringsum);
421 int bhabhaprescale = 0;
432 int Timing = (int)(eventtiming + 0.5);
435 int etot = (int)(E_phys * 1000 + 0.5);
437 if ((etot > 1000 || icn > 3) && !(bhabha2D == 1)) {physics = 1;}
438 std::vector<int> bhabhabit;
440 int bhabhabitsize = vct_bhabha.size();
441 for (
int ibhabha = 0; ibhabha < bhabhabitsize; ibhabha++) {
442 bhabhabit.push_back((
int)vct_bhabha[ibhabha]);
445 int flagoverflow = 0;
446 if (ClusterOverflow > 0) {
451 bhabha2D, physics, bhabhabit, icn, beambkgtag,
453 bhabha3D_sel, mumu, bhabhaprescale, E_burst,
454 EventTimingQualityFlag,
455 bhabha3DVetoInTrackFlag,
456 bhabha3DSelectionThetaFlag,
462 m_hitEneNum = trgEcltrgArray.
getEntries() - 1;
466 trgEcltrgArray[m_hitEneNum]->setEventId(m_nEvent);
467 trgEcltrgArray[m_hitEneNum]->setPRS01(phiringsum[0]);
468 trgEcltrgArray[m_hitEneNum]->setPRS02(phiringsum[1]);
469 trgEcltrgArray[m_hitEneNum]->setPRS03(phiringsum[2]);
470 trgEcltrgArray[m_hitEneNum]->setPRS04(phiringsum[3]);
471 trgEcltrgArray[m_hitEneNum]->setPRS05(phiringsum[4]);
472 trgEcltrgArray[m_hitEneNum]->setPRS06(phiringsum[5]);
473 trgEcltrgArray[m_hitEneNum]->setPRS07(phiringsum[6]);
474 trgEcltrgArray[m_hitEneNum]->setPRS08(phiringsum[7]);
475 trgEcltrgArray[m_hitEneNum]->setPRS09(phiringsum[8]);
476 trgEcltrgArray[m_hitEneNum]->setPRS10(phiringsum[9]);
477 trgEcltrgArray[m_hitEneNum]->setPRS11(phiringsum[10]);
478 trgEcltrgArray[m_hitEneNum]->setPRS12(phiringsum[11]);
479 trgEcltrgArray[m_hitEneNum]->setPRS13(phiringsum[12]);
480 trgEcltrgArray[m_hitEneNum]->setPRS14(phiringsum[13]);
481 trgEcltrgArray[m_hitEneNum]->setPRS15(phiringsum[14]);
482 trgEcltrgArray[m_hitEneNum]->setPRS16(phiringsum[15]);
483 trgEcltrgArray[m_hitEneNum]->setPRS17(phiringsum[16]);
485 trgEcltrgArray[m_hitEneNum]->setEtot(E_phys);
486 trgEcltrgArray[m_hitEneNum]->setNofTCHit(noftchit);
488 trgEcltrgArray[m_hitEneNum]->setBhabha01(vct_bhabha[0]);
489 trgEcltrgArray[m_hitEneNum]->setBhabha02(vct_bhabha[1]);
490 trgEcltrgArray[m_hitEneNum]->setBhabha03(vct_bhabha[2]);
491 trgEcltrgArray[m_hitEneNum]->setBhabha04(vct_bhabha[3]);
492 trgEcltrgArray[m_hitEneNum]->setBhabha05(vct_bhabha[4]);
493 trgEcltrgArray[m_hitEneNum]->setBhabha06(vct_bhabha[5]);
494 trgEcltrgArray[m_hitEneNum]->setBhabha07(vct_bhabha[6]);
495 trgEcltrgArray[m_hitEneNum]->setBhabha08(vct_bhabha[7]);
496 trgEcltrgArray[m_hitEneNum]->setBhabha09(vct_bhabha[8]);
497 trgEcltrgArray[m_hitEneNum]->setBhabha10(vct_bhabha[9]);
498 trgEcltrgArray[m_hitEneNum]->setBhabha11(vct_bhabha[10]);
499 trgEcltrgArray[m_hitEneNum]->setBhabha12(vct_bhabha[11]);
500 trgEcltrgArray[m_hitEneNum]->setBhabha13(vct_bhabha[12]);
501 trgEcltrgArray[m_hitEneNum]->setBhabha14(vct_bhabha[13]);
502 trgEcltrgArray[m_hitEneNum]->setBhabha15(vct_bhabha[14]);
503 trgEcltrgArray[m_hitEneNum]->setBhabha16(vct_bhabha[15]);
504 trgEcltrgArray[m_hitEneNum]->setBhabha17(vct_bhabha[16]);
505 trgEcltrgArray[m_hitEneNum]->setBhabha18(vct_bhabha[17]);
507 trgEcltrgArray[m_hitEneNum]->setICN(icn);
508 trgEcltrgArray[m_hitEneNum]->setICNFw(icnfwd);
509 trgEcltrgArray[m_hitEneNum]->setICNBr(icnbr);
510 trgEcltrgArray[m_hitEneNum]->setICNBw(icnbwd);
512 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[0], 0);
513 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[1], 1);
514 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[2], 2);
515 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[3], 3);
517 trgEcltrgArray[m_hitEneNum]->setBhabhaVeto(bhabha2D);
518 trgEcltrgArray[m_hitEneNum]->setBeamBkgVeto(beambkgtag);
519 trgEcltrgArray[m_hitEneNum]->setEventTiming(eventtiming);
521 trgEcltrgArray[m_hitEneNum]->setHit(hit);
522 trgEcltrgArray[m_hitEneNum]->setRevoclk(RevoFAM);
523 trgEcltrgArray[m_hitEneNum]->setTimingSource(TimingSource);
524 trgEcltrgArray[m_hitEneNum]->setPhysics(physics) ;
525 trgEcltrgArray[m_hitEneNum]->set2DBhabha(bhabha2D);
526 trgEcltrgArray[m_hitEneNum]->set3DBhabha(bhabha3D_veto);
527 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSel(bhabha3D_sel);
528 trgEcltrgArray[m_hitEneNum]->setmumuBit(mumu);
529 trgEcltrgArray[m_hitEneNum]->setBhabhaPrescaleBit(bhabhaprescale);
531 trgEcltrgArray[m_hitEneNum]->setELow(ELow) ;
532 trgEcltrgArray[m_hitEneNum]->setEHihg(EHigh);
533 trgEcltrgArray[m_hitEneNum]->setELum(ELum) ;
534 trgEcltrgArray[m_hitEneNum]->setClusterOverflow(ClusterOverflow) ;
535 trgEcltrgArray[m_hitEneNum]->setLowMultiBit(
_Lowmultibit);
570 for (
int ii = 0; ii < trgeclHitArray.
getEntries(); ii++) {
572 TRGECLHit* aTRGECLHit = trgeclHitArray[ii];
573 int iTCID = (aTRGECLHit->
getTCId() - 1);
578 TCTiming[iTCID].push_back(HitTiming);
579 TCEnergy[iTCID].push_back(HitEnergy);
585 double WindowStart = 0;
586 double WindowEnd = 0;
587 double fluctuation = ((gRandom->Uniform(-1, 0))) * 125;
589 int startBin = nBin / 2 - 1;
591 int endBin = nBin / 2 + 1;
601 for (
int iBin = startBin ; iBin <= endBin; iBin ++) {
603 if (iBin == 0) {WindowStart = - 4000 + fluctuation;}
608 for (
int iTCId = 0; iTCId < 576; iTCId++) {
609 const int hitsize =
TCTiming[iTCId].size();
610 for (
int ihit = 0; ihit < hitsize; ihit++) {
611 if (
TCTiming[iTCId][ihit] > WindowStart &&
612 TCTiming[iTCId][ihit] < WindowEnd) {
617 if (totalE == 0) {
continue;}
625 if (max_bin == 0) {WindowStart = - 4000 + fluctuation;}
633 for (
int iTCId = 0; iTCId < 576; iTCId++) {
634 const int hitsize =
TCTiming[iTCId].size();
635 for (
int ihit = 0; ihit < hitsize; ihit++) {
636 if (
TCTiming[iTCId][ihit] > WindowStart &&
637 TCTiming[iTCId][ihit] < WindowEnd) {
647 if (noftchit == 0) {
return;}
649 double eventtiming = 0;
653 obj_timing->setEventTimingQualityThresholds(m_EventTimingQualityThresholds);
658 int EventTimingQualityFlag =
obj_timing->getEventTimingQualityFlag();
662 std::vector<std::vector<double>> thetaringsum;
663 std::vector<double> phiringsum;
665 thetaringsum.clear();
667 thetaringsum.resize(3, std::vector<double>(36, 0));
668 phiringsum.resize(17, 0);
678 for (
int iii = 0; iii <= 16; iii++) {
679 if (iii > 0 && iii < 15) {E_phys += phiringsum[iii];}
683 E_total += phiringsum[iii];
685 if (E_total == 0) {
return;}
686 int ELow = 0, EHigh = 0, ELum = 0;
720 std::vector<double> ClusterTiming;
721 std::vector<double> ClusterEnergy;
722 std::vector<int> MaxTCId;
723 std::vector<int> MaxThetaId;
724 ClusterTiming.clear();
725 ClusterEnergy.clear();
729 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
734 double clustertiming = aTRGECLCluster->
getTimeAve();
735 TVector3 clusterposition(aTRGECLCluster->
getPositionX(),
738 ClusterTiming.push_back(clustertiming);
739 ClusterEnergy.push_back(clusterenergy);
740 MaxTCId.push_back(maxTCId);
741 MaxThetaId.push_back(maxThetaId);
757 obj_bhabha->set3DBhabhaVetoInTrackThetaRegion(m_3DBhabhaVetoInTrackThetaRegion);
761 m_taub2bClusterECut2);
763 std::vector<double> vct_bhabha;
766 int bhabha3D_veto = 0 ;
767 int bhabha3D_sel = 0;
769 int bhabha3DVetoInTrackFlag = -1;
770 int bhabha3DSelectionThetaFlag = -1;
775 if (b_2Dbhabha && (icn < 4)) {bhabha2D = 1;}
777 if (b_3Dbhabha) {bhabha3D_veto = 1;}
779 if (b_3Dbhabha_sel) {bhabha3D_sel = 1;}
781 if (b_mumu) {mumu = 1;}
782 int bhabhaprescale = 0;
789 bhabha3DVetoInTrackFlag =
obj_bhabha->get3DBhabhaVetoInTrackFlag();
790 bhabha3DSelectionThetaFlag =
obj_bhabha->get3DBhabhaSelectionThetaFlag();
795 int bhabha_addition =
obj_bhabha->GetBhabhaAddition();
800 beambkgtag =
obj_beambkg->GetBeamBkg(thetaringsum);
802 int bit_hie_bhav = 0;
804 bit_hie_bhav |= (~bhabha_addition & 0x01) & (~bhabha_addition >> 3 & 0x01);
806 bit_hie_bhav |= (~bhabha_addition & 0x01) & (~bhabha_addition >> 2 & 0x01);
808 bit_hie_bhav |= (~bhabha_addition & 0x01) & (~bhabha_addition >> 1 & 0x01);
814 int Timing = (int)(eventtiming + 0.5);
817 int etot = (int)(E_phys * 1000 + 0.5);
821 if ((etot > 1000 || icn > 3) && !(bhabha2D == 1)) {physics = 1;}
822 std::vector<int> bhabhabit;
824 int bhabhabitsize = vct_bhabha.size();
825 for (
int ibhabha = 0; ibhabha < bhabhabitsize; ibhabha++) {
826 bhabhabit.push_back((
int)vct_bhabha[ibhabha]);
829 int flagoverflow = 0;
830 if (ClusterOverflow > 0) {
835 physics, bhabhabit, icn, beambkgtag, flagoverflow,
837 bhabhaprescale, E_burst,
838 EventTimingQualityFlag,
839 bhabha3DVetoInTrackFlag,
840 bhabha3DSelectionThetaFlag,
927 m_hitEneNum = trgEcltrgArray.
getEntries() - 1;
931 trgEcltrgArray[m_hitEneNum]->setEventId(m_nEvent);
932 trgEcltrgArray[m_hitEneNum]->setPRS01(phiringsum[0]);
933 trgEcltrgArray[m_hitEneNum]->setPRS02(phiringsum[1]);
934 trgEcltrgArray[m_hitEneNum]->setPRS03(phiringsum[2]);
935 trgEcltrgArray[m_hitEneNum]->setPRS04(phiringsum[3]);
936 trgEcltrgArray[m_hitEneNum]->setPRS05(phiringsum[4]);
937 trgEcltrgArray[m_hitEneNum]->setPRS06(phiringsum[5]);
938 trgEcltrgArray[m_hitEneNum]->setPRS07(phiringsum[6]);
939 trgEcltrgArray[m_hitEneNum]->setPRS08(phiringsum[7]);
940 trgEcltrgArray[m_hitEneNum]->setPRS09(phiringsum[8]);
941 trgEcltrgArray[m_hitEneNum]->setPRS10(phiringsum[9]);
942 trgEcltrgArray[m_hitEneNum]->setPRS11(phiringsum[10]);
943 trgEcltrgArray[m_hitEneNum]->setPRS12(phiringsum[11]);
944 trgEcltrgArray[m_hitEneNum]->setPRS13(phiringsum[12]);
945 trgEcltrgArray[m_hitEneNum]->setPRS14(phiringsum[13]);
946 trgEcltrgArray[m_hitEneNum]->setPRS15(phiringsum[14]);
947 trgEcltrgArray[m_hitEneNum]->setPRS16(phiringsum[15]);
948 trgEcltrgArray[m_hitEneNum]->setPRS17(phiringsum[16]);
950 trgEcltrgArray[m_hitEneNum]->setEtot(E_phys);
951 trgEcltrgArray[m_hitEneNum]->setNofTCHit(noftchit);
953 trgEcltrgArray[m_hitEneNum]->setBhabha01(vct_bhabha[0]);
954 trgEcltrgArray[m_hitEneNum]->setBhabha02(vct_bhabha[1]);
955 trgEcltrgArray[m_hitEneNum]->setBhabha03(vct_bhabha[2]);
956 trgEcltrgArray[m_hitEneNum]->setBhabha04(vct_bhabha[3]);
957 trgEcltrgArray[m_hitEneNum]->setBhabha05(vct_bhabha[4]);
958 trgEcltrgArray[m_hitEneNum]->setBhabha06(vct_bhabha[5]);
959 trgEcltrgArray[m_hitEneNum]->setBhabha07(vct_bhabha[6]);
960 trgEcltrgArray[m_hitEneNum]->setBhabha08(vct_bhabha[7]);
961 trgEcltrgArray[m_hitEneNum]->setBhabha09(vct_bhabha[8]);
962 trgEcltrgArray[m_hitEneNum]->setBhabha10(vct_bhabha[9]);
963 trgEcltrgArray[m_hitEneNum]->setBhabha11(vct_bhabha[10]);
964 trgEcltrgArray[m_hitEneNum]->setBhabha12(vct_bhabha[11]);
965 trgEcltrgArray[m_hitEneNum]->setBhabha13(vct_bhabha[12]);
966 trgEcltrgArray[m_hitEneNum]->setBhabha14(vct_bhabha[13]);
967 trgEcltrgArray[m_hitEneNum]->setBhabha15(vct_bhabha[14]);
968 trgEcltrgArray[m_hitEneNum]->setBhabha16(vct_bhabha[15]);
969 trgEcltrgArray[m_hitEneNum]->setBhabha17(vct_bhabha[16]);
970 trgEcltrgArray[m_hitEneNum]->setBhabha18(vct_bhabha[17]);
972 trgEcltrgArray[m_hitEneNum]->setICN(icn);
973 trgEcltrgArray[m_hitEneNum]->setICNFw(icnfwd);
974 trgEcltrgArray[m_hitEneNum]->setICNBr(icnbr);
975 trgEcltrgArray[m_hitEneNum]->setICNBw(icnbwd);
977 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[0], 0);
978 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[1], 1);
979 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[2], 2);
980 trgEcltrgArray[m_hitEneNum]->setECLtoGDL(
_Triggerbit[3], 3);
982 trgEcltrgArray[m_hitEneNum]->setBhabhaVeto(bhabha2D);
983 trgEcltrgArray[m_hitEneNum]->setBeamBkgVeto(beambkgtag);
984 trgEcltrgArray[m_hitEneNum]->setEventTiming(eventtiming);
986 trgEcltrgArray[m_hitEneNum]->setHit(hit);
987 trgEcltrgArray[m_hitEneNum]->setRevoclk(RevoFAM);
988 trgEcltrgArray[m_hitEneNum]->setTimingSource(TimingSource);
989 trgEcltrgArray[m_hitEneNum]->setPhysics(physics) ;
990 trgEcltrgArray[m_hitEneNum]->set2DBhabha(bhabha2D);
991 trgEcltrgArray[m_hitEneNum]->set3DBhabha(bhabha3D_veto);
992 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSel(bhabha3D_sel);
993 trgEcltrgArray[m_hitEneNum]->setmumuBit(mumu);
994 trgEcltrgArray[m_hitEneNum]->setBhabhaPrescaleBit(bhabhaprescale);
996 trgEcltrgArray[m_hitEneNum]->setELow(ELow) ;
997 trgEcltrgArray[m_hitEneNum]->setEHihg(EHigh);
998 trgEcltrgArray[m_hitEneNum]->setELum(ELum) ;
999 trgEcltrgArray[m_hitEneNum]->setClusterOverflow(ClusterOverflow) ;
1000 trgEcltrgArray[m_hitEneNum]->setLowMultiBit(
_Lowmultibit);
1002 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoInTrackFlag(
obj_bhabha->get3DBhabhaVetoInTrackFlag());
1003 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTCId(
obj_bhabha->get3DBhabhaVetoClusterTCId(0), 0);
1004 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTCId(
obj_bhabha->get3DBhabhaVetoClusterTCId(1), 1);
1005 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterEnergy(
obj_bhabha->get3DBhabhaVetoClusterEnergy(0), 0);
1006 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterEnergy(
obj_bhabha->get3DBhabhaVetoClusterEnergy(1), 1);
1007 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTiming(
obj_bhabha->get3DBhabhaVetoClusterTiming(0), 0);
1008 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterTiming(
obj_bhabha->get3DBhabhaVetoClusterTiming(1), 1);
1009 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterThetaId(
obj_bhabha->get3DBhabhaVetoClusterThetaId(0), 0);
1010 trgEcltrgArray[m_hitEneNum]->set3DBhabhaVetoClusterThetaId(
obj_bhabha->get3DBhabhaVetoClusterThetaId(1), 1);
1012 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionThetaFlag(
obj_bhabha->get3DBhabhaSelectionThetaFlag());
1013 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTCId(
obj_bhabha->get3DBhabhaSelectionClusterTCId(0), 0);
1014 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTCId(
obj_bhabha->get3DBhabhaSelectionClusterTCId(1), 1);
1015 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterEnergy(
obj_bhabha->get3DBhabhaSelectionClusterEnergy(0), 0);
1016 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterEnergy(
obj_bhabha->get3DBhabhaSelectionClusterEnergy(1), 1);
1017 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTiming(
obj_bhabha->get3DBhabhaSelectionClusterTiming(0), 0);
1018 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterTiming(
obj_bhabha->get3DBhabhaSelectionClusterTiming(1), 1);
1019 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterThetaId(
obj_bhabha->get3DBhabhaSelectionClusterThetaId(0), 0);
1020 trgEcltrgArray[m_hitEneNum]->set3DBhabhaSelectionClusterThetaId(
obj_bhabha->get3DBhabhaSelectionClusterThetaId(1), 1);
1022 trgEcltrgArray[m_hitEneNum]->setEventTimingQualityFlag(
obj_timing->getEventTimingQualityFlag());
1023 trgEcltrgArray[m_hitEneNum]->setEventTimingTCId(
obj_timing->getEventTimingTCId());
1024 trgEcltrgArray[m_hitEneNum]->setEventTimingTCThetaId(
obj_timing->getEventTimingTCThetaId());
1025 trgEcltrgArray[m_hitEneNum]->setEventTimingTCEnergy(
obj_timing->getEventTimingTCEnergy());
1027 trgEcltrgArray[m_hitEneNum]->setEtot1to17(E_total);
1028 trgEcltrgArray[m_hitEneNum]->setTaub2bFlag(taub2bFlag);
1029 trgEcltrgArray[m_hitEneNum]->setTaub2bAngleFlag(
obj_bhabha->getTaub2bAngleFlag());
1030 trgEcltrgArray[m_hitEneNum]->setTaub2bEtotFlag(
obj_bhabha->getTaub2bEtotFlag());
1031 trgEcltrgArray[m_hitEneNum]->setTaub2bClusterEFlag(
obj_bhabha->getTaub2bClusterEFlag());
1033 trgEcltrgArray[m_hitEneNum]->setNofCluster1to17(NofCluster1to17);
1035 trgEcltrgArray[m_hitEneNum]->setDataClockWindowStartTime(WindowStart);
1044 std::vector<double> TCHit,
1045 std::vector<double>& phiringsum,
1046 std::vector<std::vector<double>>& thetaringsum)
1062 thetaringsum.resize(3, std::vector<double>(36, 0.));
1063 phiringsum.resize(17);
1064 const int size_hit = TCHit.size();
1065 for (
int iHit = 0; iHit < size_hit; iHit++) {
1066 int iTCId = TCId[iHit] - 1;
1067 if (TCHit[iHit] > 0) {
1070 phiringsum[iTCThetaId] += TCHit[iHit];
1071 if (iTCThetaId < 3) {
1073 if (iTCThetaId != 0) {
1074 thetaringsum[0][iTCPhiId] += TCHit[iHit];
1076 }
else if (iTCThetaId < 15) {
1078 thetaringsum[1][iTCPhiId] += TCHit[iHit];
1081 thetaringsum[2][iTCPhiId] += TCHit[iHit];
1094 double etot,
int bhabha2D,
int physics,
1095 std::vector<int> bhabhatype,
int ICN,
int BGVeto,
1096 int ClusterOverflow,
int bhabha3D,
int lowmultibit,
1097 int bhabha3D_sel,
int mumubit,
int prescale,
int burst,
1098 int EventTimingQualityFlag,
int bhabha3DVetoInTrackFlag,
1099 int bhabha3DSelectionThetaFlag,
1114 int Bhabhatype = bhabha2D;
1126 if (bhabhatype.size() > 14) {
1127 for (
int ibhabha = 0; ibhabha < 13; ibhabha++) {
1129 if (bhabhatype[ibhabha] == 1) {type = 0x01;}
1137 int bit_hit = hit & 0x01;
1138 int bit_Timing = (Timing & 0x7F) ;
1139 int bit_RevoFAM = (RevoFAM & 0x7F) ;
1140 int bit_TimingSource = (TimingSource & 0x07) ;
1141 int bit_physics = (physics & 0x01) ;
1142 int bit_2Dbhabha = (bhabhaveto & 0x01) ;
1143 int bit_bhabhatype = (Bhabhatype & 0x3FFF);
1144 int bit_etot = (((int)etot) & 0x1FFF) ;
1145 int bit_elow = (elow & 0x01);
1146 int bit_ehigh = (ehigh & 0x01) ;
1147 int bit_elum = (elum & 0x01) ;
1148 int bit_ICN = (ICN & 0x7F) ;
1149 int bit_BGVeto = (BGVeto & 0x07) ;
1150 int bit_ClusterOverflow = (ClusterOverflow & 0x01);
1151 int bit_3Dbhabha = (bhabha3D & 0x01);
1153 int bit_lowmulti1 = lowmultibit & 0x0FFF;
1154 int bit_lowmulti2 = (lowmultibit >>= 12) & 0x3;
1155 int bit_3DBhabha_sel = bhabha3D_sel & 0x01;
1156 int bit_mumu = mumubit & 0x01;
1157 int bit_prescale = prescale & 0x01;
1158 int bit_burst = burst & 0x01;
1160 int bit_eventtimingqualityflag = EventTimingQualityFlag & 0x03;
1161 int bit_bhabha3dvetointrackflag = 0;
1162 if (bhabha3D == 1) {
1163 bit_bhabha3dvetointrackflag = bhabha3DVetoInTrackFlag & 0x01;
1165 int bit_bhabha3dselectionthetaflag = 0;
1166 if (bhabha3D_sel == 1) {
1167 bit_bhabha3dselectionthetaflag = bhabha3DSelectionThetaFlag & 0x03;
1169 int bit_taub2bflag = taub2bFlag & 0x01;
1213 _Triggerbit[1] |= ((bit_bhabhatype >> 12) & 0x03);
1237 std::vector<double> clusterenergy)
1259 int _nClust = CenterTCId.size();
1263 int _n2GeV231516 = 0;
1269 int _n500MeV216 = 0;
1270 int _n500MeV611 = 0;
1271 for (
int ic = 0; ic < _nClust; ic++) {
1272 if (clusterenergy[ic] > 0.3) {_n300MeV++;}
1275 int thresh = 15 & lut;
1276 if (thetaid >= 2 && thetaid <= 16) {_nClust216++;}
1277 if (thetaid >= 6 && thetaid <= 11) {
1278 if (clusterenergy[ic] * 100 > 5 * thresh) {
1283 if (clusterenergy[ic] > 0.5 && thetaid >= 2 && thetaid <= 16) {_n500MeV216++;}
1286 if (thetaid >= 4 && thetaid <= 14) {_n2GeV414++;}
1287 if (thetaid == 2 || thetaid == 3 || thetaid == 15 || thetaid == 16) {_n2GeV231516++;}
1288 if (thetaid == 1 || thetaid == 17) {_n2GeV117++;}
1291 if (thetaid >= 4 && thetaid <= 15) {_n1GeV415++;}
1292 if (thetaid == 2 || thetaid == 3 || thetaid == 16) {_n1GeV2316++;}
1293 if (thetaid == 1 || thetaid == 17) {_n1GeV117++;}
1300 int _nPhiPairHigh = 0;
1301 int _nPhiPairLow = 0;
1303 int _nECLBhabha = 0;
1304 for (
int i0 = 0; i0 < _nClust - 1; i0++) {
1305 for (
int i1 = i0 + 1; i1 < _nClust; i1++) {
1309 int energy1 = 15 & lut1;
1310 int energy2 = 15 & lut2;
1313 int phi1 = 511 & lut1;
1314 int phi2 = 511 & lut2;
1321 int dphi = abs(phi1 - phi2);
1322 if (dphi > 180) {dphi = 360 - dphi;}
1323 int thetaSum = theta1 + theta2;
1336 if (dphi > 160. && thetaSum > 160. && thetaSum < 200) {_n3DPair++;}
1366 if (_nClust >= 3 && _n300MeV >=
_n300MeVCluster && _nECLBhabha == 0) {
1369 if (_n2GeV414 > 0) {
1372 if (_n2GeV231516 && _nECLBhabha == 0) {
1375 if (_n2GeV231516 && _nECLBhabha != 0) {
1378 if (_n2GeV117 && _nECLBhabha == 0) {
1381 if (_n2GeV117 && _nECLBhabha != 0) {
1384 if (_n1GeV415 == 1 && _n300MeV == 1) {
1387 if (_n1GeV2316 == 1 && _n300MeV == 1) {
1390 if (_nPhiPairHigh > 0 && _n2GeV == 0) {
1393 if (_nPhiPairLow > 0 && _n2GeV == 0) {
1396 if (_n3DPair > 0 && _n2GeV == 0) {
1402 if (_nClust216 >= 3 && _n500MeV216 > 0 && _nECLBhabha == 0) {
1405 if (_n500MeV611 == 1 && _n300MeV == 1) {
1447 for (
int iii = 0; iii <= 16; iii++) {
1448 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
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.
TrgEclMaster(void)
TrgEclMaster Constructor.
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
static TrgEclMaster * getTrgEclMaster(void)
get pointer of TrgEclMaster object
std::vector< double > _3DBhabhaVetoThreshold
3D Veto Bhabha Energy Threshold
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.
static TrgEclMaster * _ecl
ecl object
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
tau b2b 1 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.
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.
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)
make Trigger bit except for Low Multiplicity related bit
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.