File indexing completed on 2024-04-06 12:22:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "L1Trigger/TrackTrigger/interface/TTClusterAlgorithm_neighbor.h"
0011
0012
0013
0014 template <>
0015 void TTClusterAlgorithm_neighbor<Ref_Phase2TrackerDigi_>::Cluster(
0016 std::vector<std::vector<Ref_Phase2TrackerDigi_> >& output, const std::vector<Ref_Phase2TrackerDigi_>& input) const {
0017
0018 output.clear();
0019
0020
0021
0022 std::vector<bool> used(input.size(), false);
0023
0024 for (unsigned int i = 0; i < input.size(); i++) {
0025 if (used[i])
0026 continue;
0027
0028 std::vector<Ref_Phase2TrackerDigi_> cluster;
0029 cluster.push_back(input[i]);
0030 used[i] = true;
0031 if (i < input.size() - 1) {
0032 addNeighbors(cluster, input, i + 1, used);
0033 }
0034 output.push_back(cluster);
0035 }
0036 }
0037
0038
0039
0040 template <>
0041 bool TTClusterAlgorithm_neighbor<Ref_Phase2TrackerDigi_>::isANeighbor(const Ref_Phase2TrackerDigi_& center,
0042 const Ref_Phase2TrackerDigi_& mayNeigh) const {
0043 unsigned int rowdist = std::abs((int)(center->row()) - (int)(mayNeigh->row()));
0044 unsigned int coldist = std::abs((int)(center->column()) - (int)(mayNeigh->column()));
0045 return rowdist <= 1 && coldist <= 1;
0046 }
0047
0048
0049
0050 template <>
0051 void TTClusterAlgorithm_neighbor<Ref_Phase2TrackerDigi_>::addNeighbors(std::vector<Ref_Phase2TrackerDigi_>& cluster,
0052 const std::vector<Ref_Phase2TrackerDigi_>& input,
0053 unsigned int startVal,
0054 std::vector<bool>& used) const {
0055
0056
0057 cluster.reserve(input.size());
0058 typename std::vector<Ref_Phase2TrackerDigi_>::iterator clusIter;
0059
0060
0061 for (clusIter = cluster.begin(); clusIter < cluster.end(); clusIter++) {
0062
0063 for (unsigned int i = startVal; i < input.size(); i++) {
0064
0065 if (isANeighbor(*clusIter, input[i])) {
0066 cluster.push_back(input[i]);
0067 used[i] = true;
0068 }
0069 }
0070 }
0071 }