![]() |
![]() |
00001 #ifndef PhysicsTools_CandUtils_CandCombinerBase_h 00002 #define PhysicsTools_CandUtils_CandCombinerBase_h 00003 00008 #include "DataFormats/Candidate/interface/OverlapChecker.h" 00009 #include "DataFormats/Candidate/interface/NamedCompositeCandidate.h" 00010 #include <vector> 00011 #include <string> 00012 00013 class NamedCandCombinerBase { 00014 public: 00015 typedef std::vector<std::string> string_coll; 00017 NamedCandCombinerBase(std::string name); 00019 NamedCandCombinerBase(std::string name, int, int); 00021 NamedCandCombinerBase(std::string name, int, int, int); 00023 NamedCandCombinerBase(std::string name, int, int, int, int); 00025 NamedCandCombinerBase(std::string name, bool checkCharge, const std::vector <int> &); 00027 virtual ~NamedCandCombinerBase(); 00029 std::auto_ptr<reco::NamedCompositeCandidateCollection> 00030 combine(const std::vector<reco::CandidatePtrVector> &, string_coll const &) const; 00032 std::auto_ptr<reco::NamedCompositeCandidateCollection> 00033 combine(const reco::CandidatePtrVector &, 00034 string_coll const &) const; 00036 std::auto_ptr<reco::NamedCompositeCandidateCollection> 00037 combine(const reco::CandidatePtrVector &, 00038 const reco::CandidatePtrVector &, 00039 string_coll const &) const; 00041 std::auto_ptr<reco::NamedCompositeCandidateCollection> 00042 combine(const reco::CandidatePtrVector &, 00043 const reco::CandidatePtrVector &, 00044 const reco::CandidatePtrVector &, 00045 string_coll const &) const; 00047 std::auto_ptr<reco::NamedCompositeCandidateCollection> 00048 combine(const reco::CandidatePtrVector &, 00049 const reco::CandidatePtrVector &, 00050 const reco::CandidatePtrVector &, 00051 const reco::CandidatePtrVector &, 00052 string_coll const &) const; 00053 00054 private: 00056 bool preselect(const reco::Candidate &, const reco::Candidate &) const; 00058 void combine(reco::NamedCompositeCandidate &, 00059 const reco::CandidatePtr &, 00060 const reco::CandidatePtr &, 00061 std::string, 00062 std::string ) const; 00064 typedef std::vector<std::pair<std::pair<reco::CandidatePtr, size_t>, 00065 std::vector<reco::CandidatePtrVector>::const_iterator> > CandStack; 00066 typedef std::vector<int> ChargeStack; 00068 void combine(size_t collectionIndex, CandStack &, ChargeStack &, 00069 string_coll const & names, 00070 std::vector<reco::CandidatePtrVector>::const_iterator begin, 00071 std::vector<reco::CandidatePtrVector>::const_iterator end, 00072 std::auto_ptr<reco::NamedCompositeCandidateCollection> & comps 00073 ) const; 00075 virtual bool select(const reco::Candidate &) const = 0; 00077 virtual bool selectPair(const reco::Candidate & c1, const reco::Candidate & c2) const = 0; 00079 virtual void setup(reco::NamedCompositeCandidate &) const = 0; 00081 virtual void addDaughter(reco::NamedCompositeCandidate & cmp, const reco::CandidatePtr & c, std::string name) const = 0; 00083 bool checkCharge_; 00085 std::vector<int> dauCharge_; 00087 OverlapChecker overlap_; 00089 std::string name_; 00090 }; 00091 00092 #endif