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