ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/DGele/PhysicsTools/PatUtils/src/DuplicatedElectronRemover.cc
Revision: 1.1.1.1 (vendor branch)
Committed: Tue Oct 20 17:15:14 2009 UTC (15 years, 6 months ago) by dgele
Content type: text/plain
Branch: ANA
CVS Tags: start
Changes since 1.1: +0 -0 lines
Log Message:
version CMSSW_2_2_10

File Contents

# User Rev Content
1 dgele 1.1 #include "PhysicsTools/PatUtils/interface/DuplicatedElectronRemover.h"
2    
3     #include <algorithm>
4    
5    
6     std::auto_ptr< std::vector<size_t> >
7     pat::DuplicatedElectronRemover::duplicatesToRemove(const std::vector<reco::GsfElectron> &electrons) const {
8     return duplicatesToRemove< std::vector<reco::GsfElectron> >(electrons);
9     }
10    
11     std::auto_ptr< std::vector<size_t> >
12     pat::DuplicatedElectronRemover::duplicatesToRemove(const edm::View<reco::GsfElectron> &electrons) const {
13     return duplicatesToRemove< edm::View<reco::GsfElectron> >(electrons);
14     }
15    
16    
17    
18    
19     /*
20     std::auto_ptr< std::vector<size_t> >
21     pat::DuplicatedElectronRemover::duplicatesToRemove(const std::vector<reco::GsfElectron> &electrons)
22     {
23     using namespace std;
24    
25     size_t size = electrons.size();
26    
27     vector<bool> bad(size, false);
28    
29     for (size_t ie = 0; ie < size; ++ie) {
30     if (bad[ie]) continue; // if already marked bad
31    
32     reco::GsfTrackRef thistrack = electrons[ie].gsfTrack();
33     reco::SuperClusterRef thissc = electrons[ie].superCluster();
34    
35     for (size_t je = ie+1; je < size; ++je) {
36     if (bad[je]) continue; // if already marked bad
37    
38     if ( ( thistrack == electrons[je].gsfTrack()) ||
39     (thissc == electrons[je].superCluster()) ) {
40     // we have a match, arbitrate and mark one for removal
41     // keep the one with E/P closer to unity
42     float diff1 = fabs(electrons[ie].eSuperClusterOverP()-1);
43     float diff2 = fabs(electrons[je].eSuperClusterOverP()-1);
44    
45     if (diff1<diff2) {
46     bad[je] = true;
47     } else {
48     bad[ie] = true;
49     }
50     }
51     }
52     }
53    
54     auto_ptr< vector<size_t> > ret(new vector<size_t>());
55    
56     for (size_t i = 0; i < size; ++i) {
57     if (bad[i]) ret->push_back(i);
58     }
59    
60     return ret;
61     }
62     */