File indexing completed on 2023-03-17 11:19:31
0001 #ifndef RecoLocalTracker_SiPhase2Clusterizer_Phase2TrackerClusterizerSequentialAlgorithm_h
0002 #define RecoLocalTracker_SiPhase2Clusterizer_Phase2TrackerClusterizerSequentialAlgorithm_h
0003
0004 #include "DataFormats/Common/interface/DetSetVector.h"
0005 #include "DataFormats/Common/interface/DetSetVectorNew.h"
0006 #include "DataFormats/Phase2TrackerDigi/interface/Phase2TrackerDigi.h"
0007 #include "DataFormats/Phase2TrackerCluster/interface/Phase2TrackerCluster1D.h"
0008
0009 class Phase2TrackerClusterizerSequentialAlgorithm {
0010 public:
0011 inline void clusterizeDetUnit(const edm::DetSet<Phase2TrackerDigi>&,
0012 Phase2TrackerCluster1DCollectionNew::FastFiller&) const;
0013 };
0014
0015 void Phase2TrackerClusterizerSequentialAlgorithm::clusterizeDetUnit(
0016 const edm::DetSet<Phase2TrackerDigi>& digis, Phase2TrackerCluster1DCollectionNew::FastFiller& clusters) const {
0017 if (digis.empty())
0018 return;
0019 auto di = digis.begin();
0020 unsigned int sizeCluster = 1;
0021 Phase2TrackerDigi firstDigi = *di;
0022 bool HIPbit = firstDigi.overThreshold();
0023 auto previous = firstDigi;
0024 ++di;
0025 for (; di != digis.end(); ++di) {
0026 auto digi = *di;
0027 #ifdef VERIFY_PH2_TK_CLUS
0028 if (!(previous < digi))
0029 std::cout << "not ordered " << previous << ' ' << digi << std::endl;
0030 #endif
0031 if (digi - previous == 1) {
0032 HIPbit |= digi.overThreshold();
0033 ++sizeCluster;
0034 } else {
0035 clusters.push_back(Phase2TrackerCluster1D(firstDigi, sizeCluster, HIPbit));
0036 firstDigi = digi;
0037 HIPbit = digi.overThreshold();
0038 sizeCluster = 1;
0039 }
0040 previous = digi;
0041 }
0042 clusters.push_back(Phase2TrackerCluster1D(firstDigi, sizeCluster, HIPbit));
0043 }
0044
0045 #endif