Go to the documentation of this file.00001 #ifndef MCMatchSelector_h
00002 #define MCMatchSelector_h
00003
00004
00005
00006
00007
00008
00009 #include <set>
00010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00011
00012 namespace reco {
00013 template<typename T1, typename T2>
00014 class MCMatchSelector {
00015 public:
00016 MCMatchSelector(const edm::ParameterSet& cfg) :
00017 checkCharge_(cfg.getParameter<bool>("checkCharge")) {
00018 std::vector<int> ids =
00019 cfg.getParameter< std::vector<int> >("mcPdgId");
00020 for ( std::vector<int>::const_iterator i=ids.begin();
00021 i!=ids.end(); ++i ) ids_.insert(*i);
00022 std::vector<int> status =
00023 cfg.getParameter< std::vector<int> >("mcStatus");
00024 for ( std::vector<int>::const_iterator i=status.begin();
00025 i!=status.end(); ++i ) status_.insert(*i);
00026 }
00028 bool operator()( const T1 & c, const T2 & mc ) const {
00029 if ( checkCharge_ && c.charge() != mc.charge() ) return false;
00030 if ( !ids_.empty() ) {
00031 if ( ids_.find(abs(mc.pdgId()))==ids_.end() ) return false;
00032 }
00033 if ( status_.empty() ) return true;
00034 return status_.find(mc.status())!=status_.end();
00035 }
00036 private:
00037 bool checkCharge_;
00038 std::set<int> ids_;
00039 std::set<int> status_;
00040 };
00041 }
00042
00043 #endif