00001 #ifndef Analysis_AnalysisFilters_interface_PVSelector_h 00002 #define Analysis_AnalysisFilters_interface_PVSelector_h 00003 00004 #include "FWCore/Common/interface/EventBase.h" 00005 #include "DataFormats/Common/interface/Handle.h" 00006 00007 #include "PhysicsTools/SelectorUtils/interface/EventSelector.h" 00008 #include "PhysicsTools/SelectorUtils/interface/PVObjectSelector.h" 00009 00010 00011 // make a selector for this selection 00012 class PVSelector : public Selector<edm::EventBase> { 00013 public: 00014 00015 PVSelector() {} 00016 00017 PVSelector( edm::ParameterSet const & params ) : 00018 pvSrc_ (params.getParameter<edm::InputTag>("pvSrc") ), 00019 pvSel_ (params) 00020 { 00021 push_back("NPV", params.getParameter<int>("NPV") ); 00022 set("NPV"); 00023 retInternal_ = getBitTemplate(); 00024 indexNPV_ = index_type(&bits_, "NPV"); 00025 } 00026 00027 bool operator() ( edm::EventBase const & event, pat::strbitset & ret ) { 00028 ret.set(false); 00029 event.getByLabel(pvSrc_, h_primVtx); 00030 00031 // check if there is a good primary vertex 00032 00033 if ( h_primVtx->size() < 1 ) return false; 00034 00035 // Loop over PV's and count those that pass 00036 int npv = 0; 00037 for ( std::vector<reco::Vertex>::const_iterator ibegin = h_primVtx->begin(), 00038 iend = h_primVtx->end(), i = ibegin; i != iend; ++i ) { 00039 reco::Vertex const & pv = *i; 00040 bool ipass = pvSel_(pv); 00041 if ( ipass ) { 00042 ++npv; 00043 } 00044 } 00045 00046 // Set the strbitset 00047 if ( npv >= cut(indexNPV_, int() ) || ignoreCut(indexNPV_) ) { 00048 passCut(ret, indexNPV_); 00049 } 00050 00051 // Check if there is anything to ignore 00052 setIgnored(ret); 00053 00054 // Return status 00055 bool pass = (bool)ret; 00056 return pass; 00057 } 00058 00059 using EventSelector::operator(); 00060 00061 edm::Handle<std::vector<reco::Vertex> > const & vertices() const { return h_primVtx; } 00062 00063 private: 00064 edm::InputTag pvSrc_; 00065 PVObjectSelector pvSel_; 00066 edm::Handle<std::vector<reco::Vertex> > h_primVtx; 00067 index_type indexNPV_; 00068 }; 00069 00070 #endif