19 clusterInput_(clusterInput),
74 for(
const auto& tower : towers)
76 int iEta = tower.hwEta();
77 int iPhi = tower.hwPhi();
82 int hwEtEm = tower.hwEtEm();
83 int hwEtHad = tower.hwEtHad();
97 bool fg = (tower.hwQual() & (0x1<<3));
104 for(
auto& cluster : clusters)
106 if( cluster.isValid() )
109 int iEta = cluster.hwEta();
110 int iPhi = cluster.hwPhi();
139 towerEtNW = towerNW.
hwEtEm();
140 towerEtN = towerN .
hwEtEm();
141 towerEtNE = towerNE.
hwEtEm();
142 towerEtE = towerE .
hwEtEm();
143 towerEtSE = towerSE.
hwEtEm();
144 towerEtS = towerS .
hwEtEm();
145 towerEtSW = towerSW.
hwEtEm();
146 towerEtW = towerW .
hwEtEm();
147 towerEtNN = towerNN.
hwEtEm();
148 towerEtSS = towerSS.
hwEtEm();
152 towerEtNW = towerNW.
hwPt();
153 towerEtN = towerN .
hwPt();
154 towerEtNE = towerNE.
hwPt();
155 towerEtE = towerE .
hwPt();
156 towerEtSE = towerSE.
hwPt();
157 towerEtS = towerS .
hwPt();
158 towerEtSW = towerSW.
hwPt();
159 towerEtW = towerW .
hwPt();
160 towerEtNN = towerNN.
hwPt();
161 towerEtSS = towerSS.
hwPt();
229 for(
auto& cluster : clusters)
232 int iEta = cluster.hwEta();
233 int iPhi = cluster.hwPhi();
235 for(
int deta = -1; deta < 2; ++deta )
237 for(
int dphi = -4; dphi < 5; ++dphi )
239 int iEtaNeigh = caloNav.
offsetIEta(iEta, deta);
240 int iPhiNeigh = caloNav.
offsetIPhi(iPhi, dphi);
243 if (mask[8-(dphi+4)][deta+1] == 0)
continue;
244 else if (mask[8-(dphi+4)][deta+1] == 1) filter = (clusterNeigh.
hwPt() > cluster.hwPt());
245 else if (mask[8-(dphi+4)][deta+1] == 2) filter = (clusterNeigh.
hwPt() >= cluster.hwPt());
268 for(
auto& cluster : clusters)
270 if( cluster.isValid() )
272 int iEta = cluster.hwEta();
273 int iPhi = cluster.hwPhi();
303 towerEtNW = towerNW.
hwEtEm();
304 towerEtN = towerN .
hwEtEm();
305 towerEtNE = towerNE.
hwEtEm();
306 towerEtE = towerE .
hwEtEm();
307 towerEtSE = towerSE.
hwEtEm();
308 towerEtS = towerS .
hwEtEm();
309 towerEtSW = towerSW.
hwEtEm();
310 towerEtW = towerW .
hwEtEm();
311 towerEtNN = towerNN.
hwEtEm();
312 towerEtSS = towerSS.
hwEtEm();
316 towerEtNW = towerNW.
hwPt();
317 towerEtN = towerN .
hwPt();
318 towerEtNE = towerNE.
hwPt();
319 towerEtE = towerE .
hwPt();
320 towerEtSE = towerSE.
hwPt();
321 towerEtS = towerS .
hwPt();
322 towerEtSW = towerSW.
hwPt();
323 towerEtW = towerW .
hwPt();
324 towerEtNN = towerNN.
hwPt();
325 towerEtSS = towerSS.
hwPt();
342 int towerEtEmNW = towerNW.
hwEtEm();
343 int towerEtEmN = towerN .
hwEtEm();
344 int towerEtEmNE = towerNE.
hwEtEm();
345 int towerEtEmE = towerE .
hwEtEm();
346 int towerEtEmSE = towerSE.
hwEtEm();
347 int towerEtEmS = towerS .
hwEtEm();
348 int towerEtEmSW = towerSW.
hwEtEm();
349 int towerEtEmW = towerW .
hwEtEm();
350 int towerEtEmNN = towerNN.
hwEtEm();
351 int towerEtEmSS = towerSS.
hwEtEm();
353 int towerEtHadNW = towerNW.
hwEtHad();
354 int towerEtHadN = towerN .
hwEtHad();
355 int towerEtHadNE = towerNE.
hwEtHad();
356 int towerEtHadE = towerE .
hwEtHad();
357 int towerEtHadSE = towerSE.
hwEtHad();
358 int towerEtHadS = towerS .
hwEtHad();
359 int towerEtHadSW = towerSW.
hwEtHad();
360 int towerEtHadW = towerW .
hwEtHad();
361 int towerEtHadNN = towerNN.
hwEtHad();
362 int towerEtHadSS = towerSS.
hwEtHad();
432 if(EtEtaRight>EtEtaLeft) fgEta = 2;
433 else if(EtEtaLeft>EtEtaRight) fgEta = 1;
446 if(EtDown>EtUp) fgPhi = 2;
447 else if(EtUp>EtDown) fgPhi = 1;
449 cluster.setFgEta(fgEta);
450 cluster.setFgPhi(fgPhi);
463 bool hOverEBit =
true;
467 bool denomZeroFlag = ((qual&0x1) > 0);
468 bool eOverHFlag = ((qual&0x2) > 0);
470 if (denomZeroFlag && !eOverHFlag)
472 if (denomZeroFlag && eOverHFlag)
474 if (!denomZeroFlag && !eOverHFlag)
476 if (!denomZeroFlag && eOverHFlag){
bool idHoverE(const l1t::CaloTower tow)
void filtering(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters)
static int offsetIEta(int iEta, int offset)
Stage2Layer2ClusterAlgorithmFirmwareImp1(CaloParamsHelper const *params, ClusterInput clusterInput)
int egHOverEcutBarrel() const
double egSeedThreshold() const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
void setFgECAL(int fgECAL)
static int offsetIPhi(int iPhi, int offset)
void refining(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters)
Abs< T >::type abs(const T &t)
double egHcalThreshold() const
double egNeighbourThreshold() const
void setHOverE(int hOverE)
CaloParamsHelper const * params_
int egHOverEcutEndcap() const
~Stage2Layer2ClusterAlgorithmFirmwareImp1() override
double towerLsbSum() const
ClusterInput clusterInput_
void clustering(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters)
void processEvent(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters) override