File indexing completed on 2023-03-17 11:16:33
0001 #ifndef PhysicsTools_PatUtils_DuplicatedElectronRemover_h
0002 #define PhysicsTools_PatUtils_DuplicatedElectronRemover_h
0003
0004 #include "PhysicsTools/PatUtils/interface/GenericDuplicateRemover.h"
0005
0006 #include "DataFormats/EgammaCandidates/interface/GsfElectronFwd.h"
0007 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0008 #include "DataFormats/Common/interface/View.h"
0009
0010 #include <memory>
0011 #include <vector>
0012
0013 namespace pat {
0014
0015
0016
0017
0018
0019
0020
0021 class DuplicatedElectronRemover {
0022 public:
0023 struct SameSuperclusterOrTrack {
0024 template <typename T1, typename T2>
0025 bool operator()(const T1 &t1, const T2 &t2) const {
0026 return ((t1.superCluster() == t2.superCluster()) || (t1.gsfTrack() == t2.gsfTrack()));
0027 }
0028 };
0029
0030 struct BestEoverP {
0031 template <typename T1, typename T2>
0032 bool operator()(const T1 &t1, const T2 &t2) const {
0033 float diff1 = fabs(t1.eSuperClusterOverP() - 1);
0034 float diff2 = fabs(t2.eSuperClusterOverP() - 1);
0035 return diff1 <= diff2;
0036 }
0037 };
0038
0039
0040
0041 std::unique_ptr<std::vector<size_t> > duplicatesToRemove(const std::vector<reco::GsfElectron> &electrons) const;
0042
0043
0044
0045 std::unique_ptr<std::vector<size_t> > duplicatesToRemove(const edm::View<reco::GsfElectron> &electrons) const;
0046
0047
0048 template <typename Collection>
0049 std::unique_ptr<std::vector<size_t> > duplicatesToRemove(const Collection &electrons) const;
0050
0051 private:
0052 };
0053 }
0054
0055
0056 template <typename Collection>
0057 std::unique_ptr<std::vector<size_t> > pat::DuplicatedElectronRemover::duplicatesToRemove(
0058 const Collection &electrons) const {
0059 pat::GenericDuplicateRemover<SameSuperclusterOrTrack, BestEoverP> dups;
0060 return dups.duplicates(electrons);
0061 }
0062 #endif