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

# Content
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 */