Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:24:06

0001 #include "PhysicsTools/PatUtils/interface/DuplicatedElectronRemover.h"
0002 
0003 #include <algorithm>
0004 
0005 std::unique_ptr<std::vector<size_t> > pat::DuplicatedElectronRemover::duplicatesToRemove(
0006     const std::vector<reco::GsfElectron> &electrons) const {
0007   return duplicatesToRemove<std::vector<reco::GsfElectron> >(electrons);
0008 }
0009 
0010 std::unique_ptr<std::vector<size_t> > pat::DuplicatedElectronRemover::duplicatesToRemove(
0011     const edm::View<reco::GsfElectron> &electrons) const {
0012   return duplicatesToRemove<edm::View<reco::GsfElectron> >(electrons);
0013 }
0014 
0015 /*
0016 std::unique_ptr< std::vector<size_t> >
0017 pat::DuplicatedElectronRemover::duplicatesToRemove(const std::vector<reco::GsfElectron> &electrons) 
0018 {
0019     using namespace std;
0020 
0021     size_t size = electrons.size();
0022 
0023     vector<bool> bad(size, false);
0024 
0025     for (size_t ie = 0; ie < size; ++ie) {
0026         if (bad[ie]) continue; // if already marked bad
0027 
0028         reco::GsfTrackRef thistrack  = electrons[ie].gsfTrack();
0029         reco::SuperClusterRef thissc = electrons[ie].superCluster();
0030 
0031         for (size_t je = ie+1; je < size; ++je) {
0032             if (bad[je]) continue; // if already marked bad
0033 
0034             if ( ( thistrack == electrons[je].gsfTrack()) ||
0035                     (thissc  == electrons[je].superCluster()) ) {
0036                 // we have a match, arbitrate and mark one for removal
0037                 // keep the one with E/P closer to unity
0038                 float diff1 = fabs(electrons[ie].eSuperClusterOverP()-1);
0039                 float diff2 = fabs(electrons[je].eSuperClusterOverP()-1);
0040 
0041                 if (diff1<diff2) {
0042                     bad[je] = true;
0043                 } else {
0044                     bad[ie] = true;
0045                 }
0046             }
0047         }
0048     }
0049 
0050     auto ret = std::make_unique<std::vector<size_t>>();
0051 
0052     for (size_t i = 0; i < size; ++i) {
0053         if (bad[i]) ret->push_back(i);
0054     }
0055 
0056     return ret;
0057 }
0058 */