51 #define TRG_SHORT_NAMES
52 #define TRGECLCLUSTER_SHORT_NAMES
53 #include <framework/gearbox/Unit.h>
54 #include "framework/datastore/StoreArray.h"
56 #include <trg/ecl/TrgEclBhabha.h>
58 #include "trg/ecl/dataobjects/TRGECLCluster.h"
65 TrgEclBhabha::TrgEclBhabha():
67 m_3DBhabhaVetoInTrackThetaRegion(3, 15)
86 m_3DBhabhaAddAngleCut.clear();
88 _2DBhabhaThresholdFWD = {40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 30, 35};
89 _2DBhabhaThresholdBWD = {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 30, 30};
95 m_3DBhabhaAddAngleCut = {150, 210, 160, 200};
97 m_3DBhabhaVetoInTrackFlag = -10;
98 m_3DBhabhaVetoClusterTCIds.clear();
99 m_3DBhabhaVetoClusterEnergies.clear();
100 m_3DBhabhaVetoClusterTimings.clear();
101 m_3DBhabhaVetoClusterThetaIds.clear();
103 m_3DBhabhaVetoInTrackFlag = -10;
119 bool BtoBflag =
false;
122 vector<int> k011 = {3, 1, 2, 3 };
123 vector<int> k012 = {2, 16, 17};
125 vector<int> k021 = {1, 3};
126 vector<int> k022 = {1, 15};
128 vector<int> k03 = {2, 2, 3};
130 vector<int> k04 = {1, 4};
132 vector<int> k051 = {1, 4 };
133 vector<int> k052 = {2, 14, 15};
135 vector<int> k061 = {1, 5};
136 vector<int> k062 = {2, 14, 15};
138 vector<int> k071 = {2, 4, 5};
139 vector<int> k072 = {1, 14};
141 vector<int> k081 = {1, 5};
142 vector<int> k082 = {2, 13, 14};
144 vector<int> k091 = {1, 5 };
145 vector<int> k092 = {2, 12, 13};
147 vector<int> k101 = {2, 5, 6};
148 vector<int> k102 = {1, 13};
150 vector<int> k111 = {2, 5, 6};
151 vector<int> k112 = {1, 12};
153 vector<int> k121 = {2, 6, 7};
154 vector<int> k122 = {1, 12};
156 vector<int> k131 = {2, 6, 7};
157 vector<int> k132 = {1, 11};
159 vector<int> k141 = {2, 7, 8};
160 vector<int> k142 = {1, 11};
163 vector<int> k151 = {1, 8};
164 vector<int> k152 = {2, 10, 11};
166 vector<int> k161 = {2, 8, 9};
167 vector<int> k162 = {2, 9, 10};
173 vector<int> kLOM1 = {2, 2, 3 };
174 vector<int> kLOM2 = {2, 16, 17};
178 for (
int iii = 1; iii <= k011[0]; iii++) {
BhabhaComb[0] += PhiRingSum[k011[iii] - 1];}
179 for (
int iii = 1; iii <= k012[0]; iii++) {
BhabhaComb[1] += PhiRingSum[k012[iii] - 1];}
180 for (
int iii = 1; iii <= k021[0]; iii++) {
BhabhaComb[2] += PhiRingSum[k021[iii] - 1]; }
181 for (
int iii = 1; iii <= k022[0]; iii++) {
BhabhaComb[3] += PhiRingSum[k022[iii] - 1]; }
182 for (
int iii = 1; iii <= k03[0]; iii++) {
BhabhaComb[4] += PhiRingSum[k03[iii] - 1]; }
183 for (
int iii = 1; iii <= k04[0]; iii++) {
BhabhaComb[5] += PhiRingSum[k04[iii] - 1]; }
184 for (
int iii = 1; iii <= k051[0]; iii++) {
BhabhaComb[6] += PhiRingSum[k051[iii] - 1]; }
185 for (
int iii = 1; iii <= k052[0]; iii++) {
BhabhaComb[7] += PhiRingSum[k052[iii] - 1]; }
186 for (
int iii = 1; iii <= k061[0]; iii++) {
BhabhaComb[8] += PhiRingSum[k061[iii] - 1]; }
187 for (
int iii = 1; iii <= k062[0]; iii++) {
BhabhaComb[9] += PhiRingSum[k062[iii] - 1]; }
188 for (
int iii = 1; iii <= k071[0]; iii++) {
BhabhaComb[10] += PhiRingSum[k071[iii] - 1]; }
189 for (
int iii = 1; iii <= k072[0]; iii++) {
BhabhaComb[11] += PhiRingSum[k072[iii] - 1]; }
190 for (
int iii = 1; iii <= k081[0]; iii++) {
BhabhaComb[12] += PhiRingSum[k081[iii] - 1]; }
191 for (
int iii = 1; iii <= k082[0]; iii++) {
BhabhaComb[13] += PhiRingSum[k082[iii] - 1]; }
192 for (
int iii = 1; iii <= k091[0]; iii++) {
BhabhaComb[14] += PhiRingSum[k091[iii] - 1]; }
193 for (
int iii = 1; iii <= k092[0]; iii++) {
BhabhaComb[15] += PhiRingSum[k092[iii] - 1]; }
194 for (
int iii = 1; iii <= k101[0]; iii++) {
BhabhaComb[16] += PhiRingSum[k101[iii] - 1]; }
195 for (
int iii = 1; iii <= k102[0]; iii++) {
BhabhaComb[17] += PhiRingSum[k102[iii] - 1]; }
196 for (
int iii = 1; iii <= k111[0]; iii++) {
BhabhaComb[18] += PhiRingSum[k111[iii] - 1]; }
197 for (
int iii = 1; iii <= k112[0]; iii++) {
BhabhaComb[19] += PhiRingSum[k112[iii] - 1]; }
198 for (
int iii = 1; iii <= k121[0]; iii++) {
BhabhaComb[20] += PhiRingSum[k121[iii] - 1]; }
199 for (
int iii = 1; iii <= k122[0]; iii++) {
BhabhaComb[21] += PhiRingSum[k122[iii] - 1]; }
200 for (
int iii = 1; iii <= k131[0]; iii++) {
BhabhaComb[22] += PhiRingSum[k131[iii] - 1]; }
201 for (
int iii = 1; iii <= k132[0]; iii++) {
BhabhaComb[23] += PhiRingSum[k132[iii] - 1]; }
202 for (
int iii = 1; iii <= k141[0]; iii++) {
BhabhaComb[24] += PhiRingSum[k141[iii] - 1]; }
203 for (
int iii = 1; iii <= k142[0]; iii++) {
BhabhaComb[25] += PhiRingSum[k142[iii] - 1]; }
204 for (
int iii = 1; iii <= k151[0]; iii++) {
BhabhaComb[26] += PhiRingSum[k151[iii] - 1]; }
205 for (
int iii = 1; iii <= k152[0]; iii++) {
BhabhaComb[27] += PhiRingSum[k152[iii] - 1]; }
206 for (
int iii = 1; iii <= k161[0]; iii++) {
BhabhaComb[28] += PhiRingSum[k161[iii] - 1]; }
207 for (
int iii = 1; iii <= k162[0]; iii++) {
BhabhaComb[29] += PhiRingSum[k162[iii] - 1]; }
208 for (
int iii = 1; iii <= kLOM1[0]; iii++) {
BhabhaComb[30] += PhiRingSum[kLOM1[iii] - 1];}
209 for (
int iii = 1; iii <= kLOM2[0]; iii++) {
BhabhaComb[31] += PhiRingSum[kLOM2[iii] - 1];}
320 m_3DBhabhaVetoInTrackFlag = -1;
321 m_3DBhabhaVetoClusterTCIds.clear();
322 m_3DBhabhaVetoClusterEnergies.clear();
323 m_3DBhabhaVetoClusterTimings.clear();
324 m_3DBhabhaVetoClusterThetaIds.clear();
327 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
332 double clustertiming = aTRGECLCluster->
getTimeAve();
333 TVector3 clusterposition(aTRGECLCluster->
getPositionX(),
350 bool BhabhaFlag =
false;
351 for (
int icluster = 0; icluster < ncluster ; icluster++) {
352 for (
int jcluster = icluster + 1; jcluster < ncluster; jcluster ++) {
353 bool BtoBFlag =
false;
355 if (icluster == jcluster) {
continue;}
384 m_3DBhabhaVetoClusterTCIds.push_back(
MaxTCId[cl_idx1]);
385 m_3DBhabhaVetoClusterTCIds.push_back(
MaxTCId[cl_idx2]);
386 m_3DBhabhaVetoClusterEnergies.push_back(
ClusterEnergy[cl_idx1]);
387 m_3DBhabhaVetoClusterEnergies.push_back(
ClusterEnergy[cl_idx2]);
388 m_3DBhabhaVetoClusterTimings.push_back(
ClusterTiming[cl_idx1]);
389 m_3DBhabhaVetoClusterTimings.push_back(
ClusterTiming[cl_idx2]);
392 m_3DBhabhaVetoClusterThetaIds.push_back(cl_thetaid1);
393 m_3DBhabhaVetoClusterThetaIds.push_back(cl_thetaid2);
395 if (cl_thetaid1 >= m_3DBhabhaVetoInTrackThetaRegion[0] &&
396 cl_thetaid1 <= m_3DBhabhaVetoInTrackThetaRegion[1] &&
397 cl_thetaid2 >= m_3DBhabhaVetoInTrackThetaRegion[0] &&
398 cl_thetaid2 <= m_3DBhabhaVetoInTrackThetaRegion[1]) {
399 m_3DBhabhaVetoInTrackFlag = 1;
401 m_3DBhabhaVetoInTrackFlag = 0;
419 m_3DBhabhaSelectionThetaFlag = -1;
422 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
427 double clustertiming = aTRGECLCluster->
getTimeAve();
428 TVector3 clusterposition(aTRGECLCluster->
getPositionX(),
445 bool BhabhaFlag =
false;
446 for (
int icluster = 0; icluster < ncluster ; icluster++) {
447 for (
int jcluster = icluster + 1; jcluster < ncluster; ++jcluster) {
448 bool BtoBFlag =
false;
450 if (icluster == jcluster) {
continue;}
480 m_3DBhabhaSelectionClusterTCIds.push_back(
MaxTCId[cl_idx1]);
481 m_3DBhabhaSelectionClusterTCIds.push_back(
MaxTCId[cl_idx2]);
482 m_3DBhabhaSelectionClusterEnergies.push_back(
ClusterEnergy[cl_idx1]);
483 m_3DBhabhaSelectionClusterEnergies.push_back(
ClusterEnergy[cl_idx2]);
484 m_3DBhabhaSelectionClusterTimings.push_back(
ClusterTiming[cl_idx1]);
485 m_3DBhabhaSelectionClusterTimings.push_back(
ClusterTiming[cl_idx2]);
488 m_3DBhabhaSelectionClusterThetaIds.push_back(cl_thetaid1);
489 m_3DBhabhaSelectionClusterThetaIds.push_back(cl_thetaid2);
491 int cl_thetaid0 = (cl_thetaid1 < cl_thetaid2) ? cl_thetaid1 : cl_thetaid2;
492 if (cl_thetaid0 <= 0 || cl_thetaid0 >= 18) {
493 m_3DBhabhaSelectionThetaFlag = -2;
495 if (cl_thetaid0 == 1) { m_3DBhabhaSelectionThetaFlag = 0; }
496 else if (cl_thetaid0 == 2) { m_3DBhabhaSelectionThetaFlag = 1; }
497 else if (cl_thetaid0 == 3) { m_3DBhabhaSelectionThetaFlag = 2; }
498 else { m_3DBhabhaSelectionThetaFlag = 3; }
509 bool BtoBFlag =
false;
510 bool BhabhaFlag =
false;
520 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
525 double clustertiming = aTRGECLCluster->
getTimeAve();
526 TVector3 clusterposition(aTRGECLCluster->
getPositionX(),
543 for (
int icluster = 0; icluster < ncluster ; icluster++) {
544 for (
int jcluster = icluster + 1; jcluster < ncluster; jcluster ++) {
546 if (icluster == jcluster) {
continue;}
565 if (BtoBFlag) {BhabhaFlag =
true;}
584 m_Taub2bAngleFlag = 0;
585 m_Taub2bEtotFlag = 0;
586 m_Taub2bClusterEFlag = 0;
588 if (E_total1to17 < m_Taub2bEtotCut) {
589 m_Taub2bEtotFlag = 1;
593 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
603 for (
int icluster = 0; icluster < ncluster ; icluster++) {
604 for (
int jcluster = icluster + 1; jcluster < ncluster; jcluster ++) {
606 if (icluster == jcluster) {
continue;}
619 if (dphi > m_Taub2bAngleCut[0] &&
620 dphi < m_Taub2bAngleCut[1] &&
621 thetaSum > m_Taub2bAngleCut[2] &&
622 thetaSum < m_Taub2bAngleCut[3]) {
629 m_Taub2bClusterEFlag++;
635 bool Taub2bFlag =
false;
636 if (m_Taub2bAngleFlag > 0 &&
637 m_Taub2bEtotFlag > 0 &&
638 m_Taub2bClusterEFlag > 0) {
647 int TrgEclBhabha::GetBhabhaAddition(
void)
650 std::vector<int> MaxThetaId;
652 int bit_bhabha_addition = 0;
655 for (
int ii = 0; ii < trgeclClusterArray.
getEntries(); ii++) {
660 MaxThetaId.push_back(maxThetaId);
662 int NofCluster1to17 = MaxThetaId.size();
664 if (NofCluster1to17 == 1) {
665 if (MaxThetaId[0] <= 3) {
666 bit_bhabha_addition |= 0x01;
668 }
else if (NofCluster1to17 == 2) {
681 if ((dphi > m_3DBhabhaAddAngleCut[0] &&
682 dphi < m_3DBhabhaAddAngleCut[1]) &&
683 (thetaSum > m_3DBhabhaAddAngleCut[2] &&
684 thetaSum < m_3DBhabhaAddAngleCut[3])) {
685 bit_bhabha_addition |= 0x02;
687 if ((dphi > m_3DBhabhaAddAngleCut[0] &&
688 dphi < m_3DBhabhaAddAngleCut[1]) ||
689 (thetaSum > m_3DBhabhaAddAngleCut[2] &&
690 thetaSum < m_3DBhabhaAddAngleCut[3])) {
691 bit_bhabha_addition |= 0x04;
694 int lowe_MaxThetaId = 0;
695 if (energy1 < energy2) {
696 lowe_MaxThetaId = MaxThetaId[0];
698 lowe_MaxThetaId = MaxThetaId[1];
700 if (lowe_MaxThetaId <= 3 ||
701 lowe_MaxThetaId >= 16) {
702 bit_bhabha_addition |= 0x08;
707 return bit_bhabha_addition;
725 int phi1 = 511 & lut1;
726 int phi2 = 511 & lut2;
731 dphi = abs(phi1 - phi2);
732 if (dphi > 180) {dphi = 360 - dphi;}
733 thetaSum = theta1 + theta2;
Accessor to arrays stored in the data store.
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.
bool GetBhabha00(std::vector< double >)
Belle 2D Bhabha veto method.
bool Getmumu()
MuMu selection for calibration.
std::vector< double > MaxTCId
Max TC Id.
void get2CLETP(int, int, int &, int &, int &, int &)
2 cluster energies, phi difference and theta sum
std::vector< TVector3 > ClusterPosition
Cluster Timing.
double _mumuThreshold
mumu bit Energy Threshold
TrgEclDataBase * _database
Object of Trigger ECL DataBase.
std::vector< double > _mumuAngle
mumu bit Angle
std::vector< double > _3DBhabhaVetoThreshold
3D Veto Bhabha Energy Threshold
std::vector< double > ClusterTiming
Cluster Timing.
bool GetBhabha02()
Belle II 3D Bhabha method for selection.
std::vector< double > _3DBhabhaSelectionAngle
3D Selection Bhabha Energy Angle
std::vector< double > _2DBhabhaThresholdBWD
2D Bhabha Energy Threshold
std::vector< double > BhabhaComb
Bhabha Combination.
std::vector< double > _3DBhabhaSelectionThreshold
3D Selection Bhabha Energy Threshold
bool GetTaub2b(double)
Taub2b selection.
bool GetBhabha01()
Belle II 3D Bhabha method for veto.
virtual ~TrgEclBhabha()
Constructor.
std::vector< double > ClusterEnergy
Cluster Energy.
TrgEclMapping * _TCMap
Object of TC Mapping.
std::vector< double > _2DBhabhaThresholdFWD
2D Bhabha Energy Threshold
std::vector< double > _3DBhabhaVetoAngle
3D Veto Bhabha Energy Angle
int Get3DBhabhaLUT(int)
TC CM Phi
int getTCThetaIdFromTCId(int)
get [TC Theta ID] from [TC ID]
Abstract base class for different kinds of events.