16 return (a->row() < b->row());
23 const std::vector<Ref_Phase2TrackerDigi_>&
input,
29 std::map<unsigned int, std::vector<Ref_Phase2TrackerDigi_> > mapHitsByColumn;
32 typename std::vector<Ref_Phase2TrackerDigi_>::const_iterator inputIterator;
33 inputIterator = input.begin();
34 while (inputIterator != input.end()) {
35 mapHitsByColumn[(**inputIterator).column()].push_back(*inputIterator);
40 std::map<std::pair<unsigned int, unsigned int>, std::vector<Ref_Phase2TrackerDigi_> > map1DCluByColRow;
43 typename std::map<unsigned int, std::vector<Ref_Phase2TrackerDigi_> >::iterator mapIterHbC;
44 mapIterHbC = mapHitsByColumn.begin();
45 while (mapIterHbC != mapHitsByColumn.end()) {
48 typename std::vector<Ref_Phase2TrackerDigi_>::iterator inputIterator;
49 inputIterator = mapIterHbC->second.begin();
52 while (inputIterator != mapIterHbC->second.end()) {
53 std::vector<Ref_Phase2TrackerDigi_>
temp;
54 temp.push_back(*inputIterator);
55 inputIterator = mapIterHbC->second.erase(inputIterator);
56 typename std::vector<Ref_Phase2TrackerDigi_>::iterator inputIterator2;
57 inputIterator2 = inputIterator;
60 while (inputIterator2 != mapIterHbC->second.end()) {
62 if ((temp.back()->column() == (**inputIterator2).column()) &&
63 ((**inputIterator2).row() - temp.back()->row() == 1)) {
64 temp.push_back(*inputIterator2);
65 inputIterator2 = mapIterHbC->second.erase(inputIterator2);
72 std::sort(temp.begin(), temp.end(), CompareClusters);
75 map1DCluByColRow.insert(std::make_pair(std::make_pair(mapIterHbC->first, temp.at(0)->row()), temp));
77 inputIterator = inputIterator2;
86 typename std::map<std::pair<unsigned int, unsigned int>, std::vector<Ref_Phase2TrackerDigi_> >::iterator
88 typename std::map<std::pair<unsigned int, unsigned int>, std::vector<Ref_Phase2TrackerDigi_> >::iterator
90 mapIter1DCbCR0 = map1DCluByColRow.begin();
91 unsigned int lastCol = mapIter1DCbCR0->first.first;
93 while (mapIter1DCbCR0 != map1DCluByColRow.end()) {
95 std::vector<Ref_Phase2TrackerDigi_> candCluster;
96 candCluster.insert(candCluster.end(), mapIter1DCbCR0->second.begin(), mapIter1DCbCR0->second.end());
100 mapIter1DCbCR1 = map1DCluByColRow.begin();
102 while (mapIter1DCbCR1 != map1DCluByColRow.end()) {
104 if (mapIter1DCbCR1 == mapIter1DCbCR0) {
110 if (
std::abs((
int)(mapIter1DCbCR1->first.first) - (
int)lastCol) != 1) {
118 lastCol = mapIter1DCbCR1->first.first;
122 unsigned int iRow0 = mapIter1DCbCR0->first.second;
123 unsigned int iRow1 = mapIter1DCbCR1->first.second;
126 unsigned int jRow0 = mapIter1DCbCR0->second.back()->row();
127 unsigned int jRow1 = mapIter1DCbCR1->second.back()->row();
130 if ((iRow1 >= iRow0 && iRow1 <= jRow0) || (jRow1 >= iRow0 && jRow1 <= jRow0)) {
132 candCluster.insert(candCluster.end(), mapIter1DCbCR1->second.begin(), mapIter1DCbCR1->second.end());
133 map1DCluByColRow.erase(mapIter1DCbCR1++);
139 map1DCluByColRow.erase(mapIter1DCbCR0++);
143 std::sort(candCluster.begin(), candCluster.end(), CompareClusters);
151 if (
std::abs(static_cast<int>(candCluster.at(0)->row() - candCluster.back()->row())) <
154 output.push_back(candCluster);
158 map1DCluByColRow.erase(mapIter1DCbCR0++);
162 std::sort(candCluster.begin(), candCluster.end(), CompareClusters);
164 if (
std::abs(static_cast<int>(candCluster.at(0)->row() - candCluster.back()->row())) <
167 output.push_back(candCluster);
static bool CompareClusters(const T &a, const T &b)
Cluster max width.
void Cluster(std::vector< std::vector< T > > &output, const std::vector< T > &input, bool isPS) const override
Clustering operations.
static std::string const input
Abs< T >::type abs(const T &t)