File indexing completed on 2024-04-06 12:24:03
0001 #ifndef PhysicsTools_PatUtils_interface_EventHypothesisTools_h
0002 #define PhysicsTools_PatUtils_interface_EventHypothesisTools_h
0003
0004 #include "DataFormats/PatCandidates/interface/EventHypothesis.h"
0005 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0006
0007 #include <memory>
0008 #include <vector>
0009
0010 namespace pat {
0011 namespace eventhypothesis {
0012
0013
0014 class AndFilter : public ParticleFilter {
0015 public:
0016 AndFilter() : filters_(2) {}
0017 AndFilter(ParticleFilter *f1, ParticleFilter *f2);
0018 ~AndFilter() override {}
0019 AndFilter &operator&=(ParticleFilter *filter) {
0020 filters_.emplace_back(filter);
0021 return *this;
0022 }
0023 bool operator()(const CandRefType &cand, const std::string &role) const override;
0024
0025 private:
0026 std::vector<std::unique_ptr<ParticleFilter>> filters_;
0027 };
0028
0029
0030 class OrFilter : public ParticleFilter {
0031 public:
0032 OrFilter() : filters_(2) {}
0033 OrFilter(ParticleFilter *f1, ParticleFilter *f2);
0034 ~OrFilter() override {}
0035 OrFilter &operator&=(ParticleFilter *filter) {
0036 filters_.emplace_back(filter);
0037 return *this;
0038 }
0039 bool operator()(const CandRefType &cand, const std::string &role) const override;
0040
0041 private:
0042 std::vector<std::unique_ptr<ParticleFilter>> filters_;
0043 };
0044
0045 class ByPdgId : public ParticleFilter {
0046 public:
0047 explicit ByPdgId(int32_t pdgCode, bool alsoAntiparticle = true);
0048 ~ByPdgId() override {}
0049 bool operator()(const CandRefType &cand, const std::string &role) const override;
0050
0051 private:
0052 int32_t pdgCode_;
0053 bool antiparticle_;
0054 };
0055
0056 class ByString : public ParticleFilter {
0057 public:
0058 ByString(const std::string &cut);
0059 ~ByString() override {}
0060 bool operator()(const CandRefType &cand, const std::string &role) const override;
0061
0062 private:
0063 StringCutObjectSelector<reco::Candidate> sel_;
0064 };
0065
0066 }
0067 }
0068
0069 #endif