-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
ElectronMVAEstimator.cc
127 lines (102 loc) · 4.13 KB
/
ElectronMVAEstimator.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "RecoEgamma/ElectronIdentification/interface/ElectronMVAEstimator.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"
#include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
#include "DataFormats/GsfTrackReco/interface/GsfTrackFwd.h"
#include "RecoEgamma/EgammaTools/interface/GBRForestTools.h"
ElectronMVAEstimator::ElectronMVAEstimator():
cfg_{}
{}
ElectronMVAEstimator::ElectronMVAEstimator(const std::string& fileName):
cfg_{}
{
// Taken from Daniele (his mail from the 30/11)
// tmvaReader.BookMVA("BDTSimpleCat","../Training/weights_Root527b_3Depth_DanVarConvRej_2PtBins_10Pt_800TPrune5_Min100Events_NoBjets_half/TMVA_BDTSimpleCat.weights.xm");
// training of the 7/12 with Nvtx added
gbr_.push_back( GBRForestTools::createGBRForest(fileName) );
}
ElectronMVAEstimator::ElectronMVAEstimator(const Configuration & cfg):cfg_(cfg)
{
for(const auto& weightsfile : cfg_.vweightsfiles) {
gbr_.push_back( GBRForestTools::createGBRForest(weightsfile) );
}
}
double ElectronMVAEstimator::mva(const reco::GsfElectron& myElectron, int nvertices ) const {
float vars[18];
vars[0] = myElectron.fbrem();
vars[1] = std::abs(myElectron.deltaEtaSuperClusterTrackAtVtx());
vars[2] = std::abs(myElectron.deltaPhiSuperClusterTrackAtVtx());
vars[3] = myElectron.sigmaIetaIeta();
vars[4] = myElectron.hcalOverEcal();
vars[5] = myElectron.eSuperClusterOverP();
vars[6] = (myElectron.e5x5()) !=0. ? 1.-(myElectron.e1x5()/myElectron.e5x5()) : -1. ;
vars[7] = myElectron.eEleClusterOverPout();
vars[8] = std::abs(myElectron.deltaEtaEleClusterTrackAtCalo());
bool validKF= false;
reco::TrackRef myTrackRef = myElectron.closestCtfTrackRef();
validKF = (myTrackRef.isNonnull() && myTrackRef.isAvailable());
vars[9] = (validKF) ? myTrackRef->normalizedChi2() : 0 ;
vars[10] = (validKF) ? myTrackRef->hitPattern().trackerLayersWithMeasurement() : -1.;
vars[11] = myElectron.gsfTrack()->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
vars[12] = std::abs(myElectron.convDist());
vars[13] = std::abs(myElectron.convDcot());
vars[14] = nvertices;
vars[15] = myElectron.eta();
vars[16] = myElectron.pt();
vars[17] = myElectron.ecalDrivenSeed();
bindVariables(vars);
//0 pt < 10 && abs(eta)<=1.485
//1 pt >= 10 && abs(eta)<=1.485
//2 pt < 10 && abs(eta)> 1.485
//3 pt >= 10 && abs(eta)> 1.485
const unsigned index = (unsigned)(myElectron.pt() >= 10) + 2*(unsigned)(std::abs(myElectron.eta()) > 1.485);
double result = gbr_[index]->GetAdaBoostClassifier(vars);
//
// std::cout << "fbrem" << vars[0] << std::endl;
// std::cout << "detain"<< vars[1] << std::endl;
// std::cout << "dphiin"<< vars[2] << std::endl;
// std::cout << "sieie"<< vars[3] << std::endl;
// std::cout << "hoe"<< vars[4] << std::endl;
// std::cout << "eop"<< vars[5] << std::endl;
// std::cout << "e1x5e5x5"<< vars[6] << std::endl;
// std::cout << "eleopout"<< vars[7] << std::endl;
// std::cout << "detaeleout"<< vars[8] << std::endl;
// std::cout << "kfchi2"<< vars[9] << std::endl;
// std::cout << "kfhits"<< vars[10] << std::endl;
// std::cout << "mishits"<<vars[11] << std::endl;
// std::cout << "dist"<< vars[12] << std::endl;
// std::cout << "dcot"<< vars[13] << std::endl;
// std::cout << "nvtx"<< vars[14] << std::endl;
// std::cout << "eta"<< vars[15] << std::endl;
// std::cout << "pt"<< vars[16] << std::endl;
// std::cout << "ecalseed"<< vars[17] << std::endl;
//
// std::cout << " MVA " << result << std::endl;
return result;
}
void ElectronMVAEstimator::bindVariables(float vars[18]) const {
if(vars[0] < -1.)
vars[1] = -1.;
if(vars[1] > 0.06)
vars[1] = 0.06;
if(vars[2] > 0.6)
vars[2] = 0.6;
if(vars[5] > 20.)
vars[5] = 20.;
if(vars[7] > 20.)
vars[7] = 20;
if(vars[8] > 0.2)
vars[8] = 0.2;
if(vars[9] < 0.)
vars[9] = 0.;
if(vars[9] > 15.)
vars[9] = 15.;
if(vars[6] < -1.)
vars[6] = -1;
if(vars[6] > 2.)
vars[6] = 2.;
if(vars[12] > 15.)
vars[12] = 15.;
if(vars[13] > 3.)
vars[13] = 3.;
}