CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_3/src/PhysicsTools/PatUtils/interface/EventHypothesisTools.h

Go to the documentation of this file.
00001 #ifndef PhysicsTools_PatUtils_interface_EventHypothesisTools_h
00002 #define PhysicsTools_PatUtils_interface_EventHypothesisTools_h
00003 
00004 #include "boost/ptr_container/ptr_vector.hpp"
00005 #include "DataFormats/PatCandidates/interface/EventHypothesis.h"
00006 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
00007 
00008 namespace pat { namespace eventhypothesis {
00009 
00011             class AndFilter : public ParticleFilter {
00012                 public:
00013                     AndFilter() : filters_(2) {}
00014                     AndFilter(ParticleFilter *f1, ParticleFilter *f2) ;
00015                     virtual ~AndFilter() {}
00016                     AndFilter & operator&=(ParticleFilter *filter) { filters_.push_back(filter); return *this; }
00017                     virtual bool operator()(const CandRefType &cand, const std::string &role) const ;
00018                 private:
00019                     boost::ptr_vector<ParticleFilter> filters_;
00020             };
00021 
00023             class OrFilter : public ParticleFilter {
00024                 public:
00025                     OrFilter() : filters_(2) {}
00026                     OrFilter(ParticleFilter *f1, ParticleFilter *f2) ;
00027                     virtual ~OrFilter() {}
00028                     OrFilter & operator&=(ParticleFilter *filter) { filters_.push_back(filter); return *this; }
00029                     virtual bool operator()(const CandRefType &cand, const std::string &role) const ;
00030                 private:
00031                     boost::ptr_vector<ParticleFilter> filters_;
00032             };
00033 
00034             class ByPdgId : public ParticleFilter {
00035                 public:
00036                     explicit ByPdgId(int32_t pdgCode, bool alsoAntiparticle=true) ;
00037                     virtual ~ByPdgId() {}
00038                     virtual bool operator()(const CandRefType &cand, const std::string &role) const ;
00039                 private:
00040                     int32_t pdgCode_;
00041                     bool    antiparticle_;
00042             };
00043 
00044             class ByString : public ParticleFilter {
00045                 public:
00046                     ByString(const std::string &cut) ; // not putting the explicit on purpose, I want to see what happens
00047                     virtual ~ByString() {}
00048                     virtual bool operator()(const CandRefType &cand, const std::string &role) const ;
00049                 private:
00050                     StringCutObjectSelector<reco::Candidate> sel_;
00051                     
00052             };
00053 
00054 
00055 
00056 } }
00057 
00058 #endif