![]() |
![]() |
00001 00008 #include "RecoMuon/TrackerSeedGenerator/interface/RedundantSeedCleaner.h" 00009 00010 //------------------------------- 00011 // Collaborating Class Headers -- 00012 //------------------------------- 00013 00014 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00015 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h" 00016 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h" 00017 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h" 00018 #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeed.h" 00019 #include "DataFormats/MuonSeed/interface/L3MuonTrajectorySeedCollection.h" 00020 00021 using namespace edm; 00022 using namespace reco; 00023 00024 // 00025 // definition of vectors 00026 // 00027 00028 void RedundantSeedCleaner::define(std::vector<TrajectorySeed> & coll) 00029 { 00030 00031 std::vector<TrajectorySeed> triplets; 00032 00033 //search for triplest 00034 for(TrajectorySeedCollection::iterator itr =coll.begin(); itr != coll.end(); ++itr){ 00035 //fill vector of triplets 00036 if(itr->nHits()==3) triplets.push_back(*itr); 00037 00038 } 00039 00040 // clean from shared input 00041 if (!triplets.empty()) clean(triplets,coll); 00042 } 00043 00044 // 00045 // the sharedHits cleaner 00046 // 00047 00048 void RedundantSeedCleaner::clean(const std::vector<TrajectorySeed> & seedTr, std::vector<TrajectorySeed> & seed) 00049 { 00050 00051 // loop over triplets 00052 std::vector<TrajectorySeed> result; 00053 00054 std::vector<bool> maskPairs = std::vector<bool>(seed.size(),true); 00055 int iPair = 0; 00056 00057 for(TrajectorySeedCollection::iterator s1 =seed.begin(); s1 != seed.end(); ++s1){ 00058 //rechits from seed 00059 00060 TrajectorySeed::range r1 = s1->recHits(); 00061 00062 for(TrajectorySeedCollection::const_iterator s2 = seedTr.begin(); s2 != seedTr.end(); ++s2){ 00063 //empty 00064 if(s2->nHits()==0) continue ; 00065 00066 TrajectorySeed::range r2 = s2->recHits(); 00067 TrajectorySeed::const_iterator h2 = r2.first; 00068 00069 //number of shared hits; 00070 int shared = 0; 00071 00072 for(;h2 < r2.second;h2++){ 00073 for(TrajectorySeed::const_iterator h1 = r1.first; h1 < r1.second;h1++){ 00074 if(h2->sharesInput(&(*h1),TrackingRecHit::all)) shared++; 00075 if(s1->nHits()!=3) LogDebug(theCategory)<< shared<< " shared hits counter if 2 erease the seed."; 00076 } 00077 } 00078 00079 if(shared ==2 && s1->nHits()!=3) { 00080 maskPairs[iPair] = false; 00081 } 00082 00083 }//end triplets loop 00084 ++iPair; 00085 }// end pairs loop 00086 00087 iPair = 0; 00088 //remove pairs in triplets 00089 for(TrajectorySeedCollection::iterator s1 = seed.begin(); s1 != seed.end(); ++s1){ 00090 if (maskPairs[iPair]) result.push_back(*s1); 00091 ++iPair; 00092 } 00093 00094 // cleaned collection 00095 seed.swap(result); 00096 } 00097