CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/CommonTools/UtilAlgos/interface/ObjectPairFilter.h

Go to the documentation of this file.
00001 #ifndef RecoAlgos_ObjectPairFilter_h
00002 #define RecoAlgos_ObjectPairFilter_h
00003 
00015 #include "FWCore/Framework/interface/EDFilter.h"
00016 #include "FWCore/Framework/interface/Event.h"
00017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00018 #include "FWCore/Utilities/interface/InputTag.h"
00019 #include "CommonTools/UtilAlgos/interface/ParameterAdapter.h"
00020 #include <vector>
00021 #include <algorithm>
00022 
00023 template<typename C, typename S>
00024 class ObjectPairFilter : public edm::EDFilter {
00025 public:
00027   explicit ObjectPairFilter( const edm::ParameterSet & cfg ) :
00028     select_( reco::modules::make<S>( cfg ) ),
00029     src_( cfg.template getParameter<edm::InputTag>( "src" ) ),
00030     minNumber_( 1 ) {
00031     std::vector<std::string> ints = cfg.template getParameterNamesForType<unsigned int>();
00032     const std::string minNumber( "minNumber" );
00033     bool foundMinNumber = std::find( ints.begin(), ints.end(), minNumber ) != ints.end();
00034     if ( foundMinNumber )
00035       minNumber_ = cfg.template getParameter<unsigned int>( minNumber );
00036   }
00037  
00038 private:
00040   bool filter( edm::Event& evt, const edm::EventSetup& ) {
00041     edm::Handle<C> source;
00042     evt.getByLabel( src_, source );
00043     size_t n = 0;
00044     for( typename C::const_iterator i = source->begin(); i != source->end(); ++ i )
00045       for( typename C::const_iterator j = i + 1; j != source->end(); ++ j ) {
00046         if ( select_( * i, * j ) ) n ++;
00047         if ( n >= minNumber_ ) return true;
00048       }
00049     return false;
00050   }
00052   S select_;
00054   edm::InputTag src_;
00056   unsigned int minNumber_;
00057 };
00058 
00059 #endif