19 clusterInput_(clusterInput),
43 seedThreshold_ = floor(params_->egSeedThreshold()/params_->towerLsbE());
44 clusterThreshold_ = floor(params_->egNeighbourThreshold()/params_->towerLsbE());
46 else if (clusterInput_==EH)
48 seedThreshold_ = floor(params_->egSeedThreshold()/params_->towerLsbSum());
49 clusterThreshold_ = floor(params_->egNeighbourThreshold()/params_->towerLsbSum());
53 seedThreshold_ = floor(params_->egSeedThreshold()/params_->towerLsbH());
54 clusterThreshold_ = floor(params_->egNeighbourThreshold()/params_->towerLsbH());
57 hcalThreshold_ = floor(params_->egHcalThreshold()/params_->towerLsbH());
59 clustering(towers, clusters);
60 filtering (towers, clusters);
61 sharing (towers, clusters);
62 refining (towers, clusters);
73 for(
const auto& tower : towers)
75 int iEta = tower.hwEta();
76 int iPhi = tower.hwPhi();
78 if(clusterInput_==E) hwEt = tower.hwEtEm();
79 else if(clusterInput_==EH) hwEt = tower.hwEtEm() + tower.hwEtHad();
80 else if(clusterInput_==
H) hwEt = tower.hwEtHad();
81 int hwEtEm = tower.hwEtEm();
82 int hwEtHad = tower.hwEtHad();
84 if(hwEt>=seedThreshold_)
94 int hwEtHadTh = (tower.hwEtHad()>=hcalThreshold_ ? tower.hwEtHad() : 0);
95 int hOverE = (tower.hwEtEm()>0 ? (hwEtHadTh<<9)/tower.hwEtEm() : 511);
96 if(hOverE>511) hOverE = 511;
99 bool fg = (tower.hwQual() & (0x1<<2));
106 for(
auto& cluster : clusters)
108 if( cluster.isValid() )
111 int iEta = cluster.hwEta();
112 int iPhi = cluster.hwPhi();
141 towerEtNW = towerNW.
hwEtEm();
142 towerEtN = towerN .
hwEtEm();
143 towerEtNE = towerNE.
hwEtEm();
144 towerEtE = towerE .
hwEtEm();
145 towerEtSE = towerSE.
hwEtEm();
146 towerEtS = towerS .
hwEtEm();
147 towerEtSW = towerSW.
hwEtEm();
148 towerEtW = towerW .
hwEtEm();
149 towerEtNN = towerNN.
hwEtEm();
150 towerEtSS = towerSS.
hwEtEm();
152 else if(clusterInput_==EH)
165 else if(clusterInput_==
H)
181 if(towerEtN < clusterThreshold_)
189 if(towerEtS < clusterThreshold_)
214 for(
auto& cluster : clusters)
217 int iEta = cluster.hwEta();
218 int iPhi = cluster.hwPhi();
242 towerEtN = towerN .
hwEtEm();
243 towerEtS = towerS .
hwEtEm();
245 else if(clusterInput_==EH)
250 else if(clusterInput_==
H)
316 for(
auto& cluster : clusters)
318 if( cluster.isValid() )
320 int iEta = cluster.hwEta();
321 int iPhi = cluster.hwPhi();
361 bool filterNNWW = (clusterNNWW.
hwPt() >= cluster.hwPt());
362 bool filterNNW = (clusterNNW .
hwPt() >= cluster.hwPt());
363 bool filterNN = (clusterNN .
hwPt() > cluster.hwPt());
364 bool filterNNE = (clusterNNE .
hwPt() > cluster.hwPt());
365 bool filterNNEE = (clusterNNEE.
hwPt() > cluster.hwPt());
366 bool filterNEE = (clusterNEE .
hwPt() > cluster.hwPt());
367 bool filterEE = (clusterEE .
hwPt() > cluster.hwPt());
368 bool filterSEE = (clusterSEE .
hwPt() > cluster.hwPt());
369 bool filterSSEE = (clusterSSEE.
hwPt() > cluster.hwPt());
370 bool filterSSE = (clusterSSE .
hwPt() > cluster.hwPt());
371 bool filterSS = (clusterSS .
hwPt() >= cluster.hwPt());
372 bool filterSSW = (clusterSSW .
hwPt() >= cluster.hwPt());
373 bool filterSSWW = (clusterSSWW.
hwPt() >= cluster.hwPt());
374 bool filterSWW = (clusterSWW .
hwPt() >= cluster.hwPt());
375 bool filterWW = (clusterWW .
hwPt() >= cluster.hwPt());
376 bool filterNWW = (clusterNWW .
hwPt() >= cluster.hwPt());
377 bool filterNNNW = (clusterNNNW.
hwPt() >= cluster.hwPt());
378 bool filterNNN = (clusterNNN .
hwPt() > cluster.hwPt());
379 bool filterNNNE = (clusterNNNE.
hwPt() > cluster.hwPt());
380 bool filterSSSW = (clusterSSSW.
hwPt() >= cluster.hwPt());
381 bool filterSSS = (clusterSSS .
hwPt() >= cluster.hwPt());
382 bool filterSSSE = (clusterSSSE.
hwPt() > cluster.hwPt());
383 bool filterNNNN = (clusterNNNN.
hwPt() > cluster.hwPt());
384 bool filterSSSS = (clusterSSSS.
hwPt() >= cluster.hwPt());
387 filterNNWW = (clusterNNWW.
hwPt() > cluster.hwPt());
388 filterNNW = (clusterNNW .
hwPt() > cluster.hwPt());
389 filterNN = (clusterNN .
hwPt() >= cluster.hwPt());
390 filterNNE = (clusterNNE .
hwPt() >= cluster.hwPt());
391 filterNNEE = (clusterNNEE.
hwPt() >= cluster.hwPt());
392 filterNEE = (clusterNEE .
hwPt() >= cluster.hwPt());
393 filterEE = (clusterEE .
hwPt() >= cluster.hwPt());
394 filterSEE = (clusterSEE .
hwPt() >= cluster.hwPt());
395 filterSSEE = (clusterSSEE.
hwPt() >= cluster.hwPt());
396 filterSSE = (clusterSSE .
hwPt() >= cluster.hwPt());
397 filterSS = (clusterSS .
hwPt() > cluster.hwPt());
398 filterSSW = (clusterSSW .
hwPt() > cluster.hwPt());
399 filterSSWW = (clusterSSWW.
hwPt() > cluster.hwPt());
400 filterSWW = (clusterSWW .
hwPt() > cluster.hwPt());
401 filterWW = (clusterWW .
hwPt() > cluster.hwPt());
402 filterNWW = (clusterNWW .
hwPt() > cluster.hwPt());
403 filterNNNW = (clusterNNNW.
hwPt() > cluster.hwPt());
404 filterNNN = (clusterNNN .
hwPt() >= cluster.hwPt());
405 filterNNNE = (clusterNNNE.
hwPt() >= cluster.hwPt());
406 filterSSSW = (clusterSSSW.
hwPt() > cluster.hwPt());
407 filterSSS = (clusterSSS .
hwPt() > cluster.hwPt());
408 filterSSSE = (clusterSSSE.
hwPt() >= cluster.hwPt());
409 filterNNNN = (clusterNNNN.
hwPt() >= cluster.hwPt());
410 filterSSSS = (clusterSSSS.
hwPt() > cluster.hwPt());
414 filterNNWW = (clusterNNWW.
hwPt() > cluster.hwPt());
415 filterNNW = (clusterNNW .
hwPt() > cluster.hwPt());
416 filterNN = (clusterNN .
hwPt() > cluster.hwPt());
417 filterNNE = (clusterNNE .
hwPt() > cluster.hwPt());
418 filterNNEE = (clusterNNEE.
hwPt() > cluster.hwPt());
419 filterNEE = (clusterNEE .
hwPt() > cluster.hwPt());
420 filterEE = (clusterEE .
hwPt() > cluster.hwPt());
421 filterSEE = (clusterSEE .
hwPt() > cluster.hwPt());
422 filterSSEE = (clusterSSEE.
hwPt() > cluster.hwPt());
423 filterSSE = (clusterSSE .
hwPt() > cluster.hwPt());
424 filterSS = (clusterSS .
hwPt() >= cluster.hwPt());
425 filterSSW = (clusterSSW .
hwPt() >= cluster.hwPt());
426 filterSSWW = (clusterSSWW.
hwPt() > cluster.hwPt());
427 filterSWW = (clusterSWW .
hwPt() > cluster.hwPt());
428 filterWW = (clusterWW .
hwPt() > cluster.hwPt());
429 filterNWW = (clusterNWW .
hwPt() > cluster.hwPt());
430 filterNNNW = (clusterNNNW.
hwPt() > cluster.hwPt());
431 filterNNN = (clusterNNN .
hwPt() > cluster.hwPt());
432 filterNNNE = (clusterNNNE.
hwPt() > cluster.hwPt());
433 filterSSSW = (clusterSSSW.
hwPt() >= cluster.hwPt());
434 filterSSS = (clusterSSS .
hwPt() >= cluster.hwPt());
435 filterSSSE = (clusterSSSE.
hwPt() > cluster.hwPt());
436 filterNNNN = (clusterNNNN.
hwPt() > cluster.hwPt());
437 filterSSSS = (clusterSSSS.
hwPt() >= cluster.hwPt());
441 filterNNWW = (clusterNNWW.
hwPt() > cluster.hwPt());
442 filterNNW = (clusterNNW .
hwPt() > cluster.hwPt());
443 filterNN = (clusterNN .
hwPt() > cluster.hwPt());
444 filterNNE = (clusterNNE .
hwPt() > cluster.hwPt());
445 filterNNEE = (clusterNNEE.
hwPt() > cluster.hwPt());
446 filterNEE = (clusterNEE .
hwPt() > cluster.hwPt());
447 filterEE = (clusterEE .
hwPt() > cluster.hwPt());
448 filterSEE = (clusterSEE .
hwPt() > cluster.hwPt());
449 filterSSEE = (clusterSSEE.
hwPt() > cluster.hwPt());
450 filterSSE = (clusterSSE .
hwPt() >= cluster.hwPt());
451 filterSS = (clusterSS .
hwPt() >= cluster.hwPt());
452 filterSSW = (clusterSSW .
hwPt() > cluster.hwPt());
453 filterSSWW = (clusterSSWW.
hwPt() > cluster.hwPt());
454 filterSWW = (clusterSWW .
hwPt() > cluster.hwPt());
455 filterWW = (clusterWW .
hwPt() > cluster.hwPt());
456 filterNWW = (clusterNWW .
hwPt() > cluster.hwPt());
457 filterNNNW = (clusterNNNW.
hwPt() > cluster.hwPt());
458 filterNNN = (clusterNNN .
hwPt() > cluster.hwPt());
459 filterNNNE = (clusterNNNE.
hwPt() > cluster.hwPt());
460 filterSSSW = (clusterSSSW.
hwPt() > cluster.hwPt());
461 filterSSS = (clusterSSS .
hwPt() >= cluster.hwPt());
462 filterSSSE = (clusterSSSE.
hwPt() >= cluster.hwPt());
463 filterNNNN = (clusterNNNN.
hwPt() > cluster.hwPt());
464 filterSSSS = (clusterSSSS.
hwPt() >= cluster.hwPt());
507 towerEtNW = towerNW .
hwEtEm();
508 towerEtNE = towerNE .
hwEtEm();
509 towerEtSE = towerSE .
hwEtEm();
510 towerEtSW = towerSW .
hwEtEm();
511 towerEtNN = towerNN .
hwEtEm();
512 towerEtNNE = towerNNE.
hwEtEm();
513 towerEtNNW = towerNNW.
hwEtEm();
514 towerEtSS = towerSS .
hwEtEm();
515 towerEtSSE = towerSSE.
hwEtEm();
516 towerEtSSW = towerSSW.
hwEtEm();
517 towerEtNNN = towerNNN.
hwEtEm();
518 towerEtSSS = towerSSS.
hwEtEm();
520 else if(clusterInput_==EH)
535 else if(clusterInput_==
H)
537 towerEtNW = towerNW .
hwEtHad();
538 towerEtNE = towerNE .
hwEtHad();
539 towerEtSE = towerSE .
hwEtHad();
540 towerEtSW = towerSW .
hwEtHad();
541 towerEtNN = towerNN .
hwEtHad();
542 towerEtNNE = towerNNE.
hwEtHad();
543 towerEtNNW = towerNNW.
hwEtHad();
544 towerEtSS = towerSS .
hwEtHad();
545 towerEtSSE = towerSSE.
hwEtHad();
546 towerEtSSW = towerSSW.
hwEtHad();
547 towerEtNNN = towerNNN.
hwEtHad();
548 towerEtSSS = towerSSS.
hwEtHad();
553 if(filterNNWW || filterNNW || filterNN || filterWW || filterNWW || (filterNNNW && towerEtNNW>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_NW,
false);
554 if(filterNNW || filterNN || filterNNE || (filterNNN && towerEtNN>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_N ,
false);
555 if(filterNN || filterNNE || filterNNEE || filterNEE || filterEE || (filterNNNE && towerEtNNE>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_NE,
false);
556 if(filterNEE || filterEE || filterSEE || (filterNNE && towerEtNE>=clusterThreshold_) || (filterSSE && towerEtSE>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_E ,
false);
557 if(filterEE || filterSEE || filterSSEE || filterSSE || filterSS || (filterSSSE && towerEtSSE>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_SE,
false);
558 if(filterSSE || filterSS || filterSSW || (filterSSS && towerEtSS>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_S ,
false);
559 if(filterSS || filterSSW || filterSSWW || filterSWW || filterWW || (filterSSSW && towerEtSSW>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_SW,
false);
560 if(filterSWW || filterWW || filterNWW || (filterNNW && towerEtNW>=clusterThreshold_) || (filterSSW && towerEtSW>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_W ,
false);
561 if(filterNNW || filterNNE || filterNNNW || filterNNN || filterNNNE || (filterNNNN && towerEtNNN>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_NN,
false);
562 if(filterSSW || filterSSE || filterSSSW || filterSSS || filterSSSE || (filterSSSS && towerEtSSS>=clusterThreshold_)) cluster.setClusterFlag(
CaloCluster::INCLUDE_SS,
false);
577 for(
auto& cluster : clusters)
579 if( cluster.isValid() )
581 int iEta = cluster.hwEta();
582 int iPhi = cluster.hwPhi();
612 towerEtNW = towerNW.
hwEtEm();
613 towerEtN = towerN .
hwEtEm();
614 towerEtNE = towerNE.
hwEtEm();
615 towerEtE = towerE .
hwEtEm();
616 towerEtSE = towerSE.
hwEtEm();
617 towerEtS = towerS .
hwEtEm();
618 towerEtSW = towerSW.
hwEtEm();
619 towerEtW = towerW .
hwEtEm();
620 towerEtNN = towerNN.
hwEtEm();
621 towerEtSS = towerSS.
hwEtEm();
623 else if(clusterInput_==EH)
636 else if(clusterInput_==
H)
650 int towerEtEmNW = towerNW.
hwEtEm();
651 int towerEtEmN = towerN .
hwEtEm();
652 int towerEtEmNE = towerNE.
hwEtEm();
653 int towerEtEmE = towerE .
hwEtEm();
654 int towerEtEmSE = towerSE.
hwEtEm();
655 int towerEtEmS = towerS .
hwEtEm();
656 int towerEtEmSW = towerSW.
hwEtEm();
657 int towerEtEmW = towerW .
hwEtEm();
658 int towerEtEmNN = towerNN.
hwEtEm();
659 int towerEtEmSS = towerSS.
hwEtEm();
661 int towerEtHadNW = towerNW.
hwEtHad();
662 int towerEtHadN = towerN .
hwEtHad();
663 int towerEtHadNE = towerNE.
hwEtHad();
664 int towerEtHadE = towerE .
hwEtHad();
665 int towerEtHadSE = towerSE.
hwEtHad();
666 int towerEtHadS = towerS .
hwEtHad();
667 int towerEtHadSW = towerSW.
hwEtHad();
668 int towerEtHadW = towerW .
hwEtHad();
669 int towerEtHadNN = towerNN.
hwEtHad();
670 int towerEtHadSS = towerSS.
hwEtHad();
756 if(EtEtaRight!=0 || EtEtaLeft!=0)
772 if(EtDown>EtUp) fgPhi = 2;
773 else if(EtUp>EtDown) fgPhi = 1;
775 cluster.setFgEta(fgEta);
776 cluster.setFgPhi(fgPhi);
void filtering(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters)
static int offsetIEta(int iEta, int offset)
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)
void setHOverE(int hOverE)
virtual ~Stage2Layer2ClusterAlgorithmFirmwareImp1()
void clustering(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters)
void sharing(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters)
Stage2Layer2ClusterAlgorithmFirmwareImp1(CaloParamsHelper *params, ClusterInput clusterInput)
virtual void processEvent(const std::vector< l1t::CaloTower > &towers, std::vector< l1t::CaloCluster > &clusters)