CMS 3D CMS Logo

RedundantSeedCleaner.cc

Go to the documentation of this file.
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 

Generated on Tue Jun 9 17:44:34 2009 for CMSSW by  doxygen 1.5.4