File indexing completed on 2023-03-17 11:20:55
0001
0002
0003
0004
0005
0006
0007
0008 #include "RecoMuon/TrackerSeedGenerator/interface/RedundantSeedCleaner.h"
0009
0010
0011
0012
0013
0014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0015 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
0016 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0017 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
0018 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
0019 #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeed.h"
0020 #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeedCollection.h"
0021
0022 using namespace edm;
0023 using namespace reco;
0024
0025
0026
0027
0028
0029 void RedundantSeedCleaner::define(std::vector<TrajectorySeed>& coll) {
0030 std::vector<TrajectorySeed> triplets;
0031
0032
0033 for (TrajectorySeedCollection::iterator itr = coll.begin(); itr != coll.end(); ++itr) {
0034
0035 if (itr->nHits() == 3)
0036 triplets.push_back(*itr);
0037 }
0038
0039
0040 if (!triplets.empty())
0041 clean(triplets, coll);
0042 }
0043
0044
0045
0046
0047
0048 void RedundantSeedCleaner::clean(const std::vector<TrajectorySeed>& seedTr, std::vector<TrajectorySeed>& seed) {
0049
0050 std::vector<TrajectorySeed> result;
0051
0052 std::vector<bool> maskPairs = std::vector<bool>(seed.size(), true);
0053 int iPair = 0;
0054
0055 for (TrajectorySeedCollection::iterator s1 = seed.begin(); s1 != seed.end(); ++s1) {
0056
0057
0058 for (TrajectorySeedCollection::const_iterator s2 = seedTr.begin(); s2 != seedTr.end(); ++s2) {
0059
0060 if (s2->nHits() == 0)
0061 continue;
0062
0063
0064 int shared = 0;
0065
0066 for (auto const& h2 : s2->recHits()) {
0067 for (auto const& h1 : s1->recHits()) {
0068 if (h2.sharesInput(&h1, TrackingRecHit::all))
0069 shared++;
0070 if (s1->nHits() != 3)
0071 LogDebug(theCategory) << shared << " shared hits counter if 2 erease the seed.";
0072 }
0073 }
0074
0075 if (shared == 2 && s1->nHits() != 3) {
0076 maskPairs[iPair] = false;
0077 }
0078
0079 }
0080 ++iPair;
0081 }
0082
0083 iPair = 0;
0084
0085 for (TrajectorySeedCollection::iterator s1 = seed.begin(); s1 != seed.end(); ++s1) {
0086 if (maskPairs[iPair])
0087 result.push_back(*s1);
0088 ++iPair;
0089 }
0090
0091
0092 seed.swap(result);
0093 }