ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/ElectronIDMVA.cc
Revision: 1.30
Committed: Fri Oct 26 19:07:05 2012 UTC (12 years, 6 months ago) by sixie
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_029c, Mit_029b, Mit_029a, HEAD
Changes since 1.29: +145 -27 lines
Error occurred while calculating annotation data.
Log Message:
update our MVAValue(const Electron *ele, const Vertex *vertex,Bool_t printDebug) function to perform the same calculations as the official EGamma class. I think this will break the MVA used for the 2011 HWW analysis, but I kept the old code in comments - so it can be revived if necessary.

File Contents

# Content
1 #include "MitPhysics/Utils/interface/ElectronIDMVA.h"
2 #include "MitPhysics/Utils/interface/ElectronTools.h"
3 #include "MitPhysics/Utils/interface/IsolationTools.h"
4 #include "MitAna/DataTree/interface/StableData.h"
5 #include <TFile.h>
6 #include <TRandom3.h>
7 #include "TMVA/Tools.h"
8 #include "TMVA/Reader.h"
9
10
11 ClassImp(mithep::ElectronIDMVA)
12
13 using namespace mithep;
14
15 //--------------------------------------------------------------------------------------------------
16 ElectronIDMVA::ElectronIDMVA() :
17 fMethodname("BDTG method"),
18 fIsInitialized(kFALSE),
19 fMVAType(ElectronIDMVA::kUninitialized),
20 fUseBinnedVersion(kTRUE),
21 fNMVABins(0),
22 fTheRhoType(RhoUtilities::DEFAULT)
23 {
24 // Constructor.
25 }
26
27
28 //--------------------------------------------------------------------------------------------------
29 ElectronIDMVA::~ElectronIDMVA()
30 {
31 for(UInt_t i=0; i<fTMVAReader.size(); ++i) {
32 if (fTMVAReader[i]) delete fTMVAReader[i];
33 }
34 }
35
36 //--------------------------------------------------------------------------------------------------
37 void ElectronIDMVA::Initialize( std::string methodName,
38 std::string weightsfile,
39 ElectronIDMVA::MVAType type,
40 RhoUtilities::RhoType theRhoType)
41 {
42
43 std::vector<std::string> tempWeightFileVector;
44 tempWeightFileVector.push_back(weightsfile);
45 Initialize(methodName,type,kFALSE,tempWeightFileVector,theRhoType);
46 }
47
48 //--------------------------------------------------------------------------------------------------
49 void ElectronIDMVA::Initialize( TString methodName,
50 TString Subdet0Pt10To20Weights ,
51 TString Subdet1Pt10To20Weights ,
52 TString Subdet2Pt10To20Weights,
53 TString Subdet0Pt20ToInfWeights,
54 TString Subdet1Pt20ToInfWeights,
55 TString Subdet2Pt20ToInfWeights,
56 ElectronIDMVA::MVAType type,
57 RhoUtilities::RhoType theRhoType) {
58
59 std::vector<std::string> tempWeightFileVector;
60 tempWeightFileVector.push_back(std::string(Subdet0Pt10To20Weights.Data()));
61 tempWeightFileVector.push_back(std::string(Subdet1Pt10To20Weights.Data()));
62 tempWeightFileVector.push_back(std::string(Subdet2Pt10To20Weights.Data()));
63 tempWeightFileVector.push_back(std::string(Subdet0Pt20ToInfWeights.Data()));
64 tempWeightFileVector.push_back(std::string(Subdet1Pt20ToInfWeights.Data()));
65 tempWeightFileVector.push_back(std::string(Subdet2Pt20ToInfWeights.Data()));
66 Initialize(std::string(methodName.Data()),type,kTRUE,tempWeightFileVector,theRhoType);
67
68 }
69
70
71 //--------------------------------------------------------------------------------------------------
72 void ElectronIDMVA::Initialize( std::string methodName,
73 ElectronIDMVA::MVAType type,
74 Bool_t useBinnedVersion,
75 std::vector<std::string> weightsfiles,
76 RhoUtilities::RhoType theRhoType
77
78 ) {
79
80 //clean up first
81 for (uint i=0;i<fTMVAReader.size(); ++i) {
82 if (fTMVAReader[i]) delete fTMVAReader[i];
83 }
84 fTMVAReader.clear();
85
86 //initialize
87 fIsInitialized = kTRUE;
88 fMethodname = methodName;
89 fMVAType = type;
90 fUseBinnedVersion = useBinnedVersion;
91 fTheRhoType = theRhoType;
92
93 //Define expected number of bins
94 UInt_t ExpectedNBins = 0;
95 if (!fUseBinnedVersion) {
96 ExpectedNBins = 1;
97 } else if (type == kBaseline
98 ||type == kNoIPInfo
99 ||type == kWithIPInfo
100 ||type == kIDIsoCombined) {
101 ExpectedNBins = 6;
102 } else if (type == kIDEGamma2012TrigV0 ||
103 type == kIDEGamma2012NonTrigV0 ||
104 type == kIDEGamma2012NonTrigV1 ||
105 type == kIDHWW2012TrigV0 ||
106 type == kIDIsoCombinedHWW2012TrigV4
107
108 ) {
109 ExpectedNBins = 6;
110 } else if (type == kIsoRingsV0) {
111 ExpectedNBins = 4;
112 }
113 fNMVABins = ExpectedNBins;
114
115 //Check number of weight files given
116 if (fNMVABins != weightsfiles.size() ) {
117 std::cout << "Error: Expected Number of bins = " << fNMVABins << " does not equal to weightsfiles.size() = "
118 << weightsfiles.size() << std::endl;
119 assert(fNMVABins == weightsfiles.size());
120 }
121
122
123 for(UInt_t i=0; i<fNMVABins; ++i) {
124 TMVA::Reader *tmpTMVAReader = new TMVA::Reader( "!Color:!Silent:Error" );
125 tmpTMVAReader->SetVerbose(kTRUE);
126
127 if (type == kBaseline) {
128 tmpTMVAReader->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
129 tmpTMVAReader->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
130 tmpTMVAReader->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
131 tmpTMVAReader->AddVariable( "FBrem", &fMVAVar_EleFBrem );
132 tmpTMVAReader->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
133 tmpTMVAReader->AddVariable( "NBrem", &fMVAVar_EleNBrem );
134 tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
135 }
136 if (type == kNoIPInfo) {
137 tmpTMVAReader->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
138 tmpTMVAReader->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
139 tmpTMVAReader->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
140 tmpTMVAReader->AddVariable( "FBrem", &fMVAVar_EleFBrem );
141 tmpTMVAReader->AddVariable( "EOverP", &fMVAVar_EleEOverP );
142 tmpTMVAReader->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
143 tmpTMVAReader->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
144 tmpTMVAReader->AddVariable( "NBrem", &fMVAVar_EleNBrem );
145 tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
146 tmpTMVAReader->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
147 }
148 if (type == kWithIPInfo) {
149 tmpTMVAReader->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
150 tmpTMVAReader->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
151 tmpTMVAReader->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
152 tmpTMVAReader->AddVariable( "D0", &fMVAVar_EleD0 );
153 tmpTMVAReader->AddVariable( "FBrem", &fMVAVar_EleFBrem );
154 tmpTMVAReader->AddVariable( "EOverP", &fMVAVar_EleEOverP );
155 tmpTMVAReader->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
156 tmpTMVAReader->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
157 tmpTMVAReader->AddVariable( "NBrem", &fMVAVar_EleNBrem );
158 tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
159 tmpTMVAReader->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
160 tmpTMVAReader->AddVariable( "IP3d", &fMVAVar_EleIP3d );
161 tmpTMVAReader->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig );
162 }
163 if (type == kIDIsoCombined) {
164 tmpTMVAReader->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
165 tmpTMVAReader->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
166 tmpTMVAReader->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
167 tmpTMVAReader->AddVariable( "D0", &fMVAVar_EleD0 );
168 tmpTMVAReader->AddVariable( "FBrem", &fMVAVar_EleFBrem );
169 tmpTMVAReader->AddVariable( "EOverP", &fMVAVar_EleEOverP );
170 tmpTMVAReader->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
171 tmpTMVAReader->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
172 tmpTMVAReader->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
173 tmpTMVAReader->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
174 tmpTMVAReader->AddVariable( "IP3d", &fMVAVar_EleIP3d );
175 tmpTMVAReader->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig );
176
177 tmpTMVAReader->AddVariable( "GsfTrackChi2OverNdof", &fMVAVar_EleGsfTrackChi2OverNdof );
178 tmpTMVAReader->AddVariable( "dEtaCalo", &fMVAVar_EledEtaCalo );
179 tmpTMVAReader->AddVariable( "dPhiCalo", &fMVAVar_EledPhiCalo );
180 tmpTMVAReader->AddVariable( "R9", &fMVAVar_EleR9 );
181 tmpTMVAReader->AddVariable( "SCEtaWidth", &fMVAVar_EleSCEtaWidth );
182 tmpTMVAReader->AddVariable( "SCPhiWidth", &fMVAVar_EleSCPhiWidth );
183 tmpTMVAReader->AddVariable( "CovIEtaIPhi", &fMVAVar_EleCovIEtaIPhi );
184 if (i == 2 || i == 5) {
185 tmpTMVAReader->AddVariable( "PreShowerOverRaw", &fMVAVar_ElePreShowerOverRaw );
186 }
187 tmpTMVAReader->AddVariable( "ChargedIso03", &fMVAVar_EleChargedIso03OverPt );
188 tmpTMVAReader->AddVariable( "NeutralHadronIso03", &fMVAVar_EleNeutralHadronIso03OverPt );
189 tmpTMVAReader->AddVariable( "GammaIso03", &fMVAVar_EleGammaIso03OverPt );
190 tmpTMVAReader->AddVariable( "ChargedIso04", &fMVAVar_EleChargedIso04OverPt );
191 tmpTMVAReader->AddVariable( "NeutralHadronIso04", &fMVAVar_EleNeutralHadronIso04OverPt );
192 tmpTMVAReader->AddVariable( "GammaIso04", &fMVAVar_EleGammaIso04OverPt );
193
194 }
195
196 if (type == kIDEGamma2012TrigV0 || type == kIDHWW2012TrigV0) {
197 // Pure tracking variables
198 tmpTMVAReader->AddVariable("fbrem", &fMVAVar_EleFBrem);
199 tmpTMVAReader->AddVariable("kfchi2", &fMVAVar_EleKFTrkChiSqr);
200 tmpTMVAReader->AddVariable("kfhits", &fMVAVar_EleKFTrkNLayers); //Don't have this in (BAMBU <= 025)
201 if(type == kIDEGamma2012TrigV0)
202 tmpTMVAReader->AddVariable("kfhitsall", &fMVAVar_EleKFTrkNHits);
203 tmpTMVAReader->AddVariable("gsfchi2", &fMVAVar_EleGsfTrackChi2OverNdof);
204 tmpTMVAReader->AddVariable("deta", &fMVAVar_EleDEtaIn);
205 tmpTMVAReader->AddVariable("dphi", &fMVAVar_EleDPhiIn);
206 tmpTMVAReader->AddVariable("detacalo", &fMVAVar_EledEtaCalo);
207 tmpTMVAReader->AddVariable("see", &fMVAVar_EleSigmaIEtaIEta);
208 tmpTMVAReader->AddVariable("spp", &fMVAVar_EleSigmaIPhiIPhi);
209 tmpTMVAReader->AddVariable("etawidth", &fMVAVar_EleSCEtaWidth);
210 tmpTMVAReader->AddVariable("phiwidth", &fMVAVar_EleSCPhiWidth);
211 tmpTMVAReader->AddVariable("e1x5e5x5", &fMVAVar_EleE1x5OverE5x5);
212 tmpTMVAReader->AddVariable("R9", &fMVAVar_EleR9);
213 tmpTMVAReader->AddVariable("HoE", &fMVAVar_EleHoverE);
214 tmpTMVAReader->AddVariable("EoP", &fMVAVar_EleEOverP);
215 tmpTMVAReader->AddVariable("IoEmIoP", &fMVAVar_EleOneOverEMinusOneOverP);
216 tmpTMVAReader->AddVariable("eleEoPout", &fMVAVar_EleEEleClusterOverPout); //Don't have this in (BAMBU <= 025)
217 if(type == kIDEGamma2012TrigV0)
218 tmpTMVAReader->AddVariable("EoPout", &fMVAVar_EleESeedClusterOverPout);
219 if (i == 2 || i == 5) {
220 tmpTMVAReader->AddVariable( "PreShowerOverRaw", &fMVAVar_ElePreShowerOverRaw );
221 }
222 tmpTMVAReader->AddVariable( "d0", &fMVAVar_EleD0);
223 tmpTMVAReader->AddVariable( "ip3d", &fMVAVar_EleIP3d);
224
225 tmpTMVAReader->AddSpectator("eta", &fMVAVar_EleEta);
226 tmpTMVAReader->AddSpectator("pt", &fMVAVar_ElePt);
227 }
228
229 if (type == kIDEGamma2012NonTrigV0 ) {
230 // Pure tracking variables
231 tmpTMVAReader->AddVariable("fbrem", &fMVAVar_EleFBrem);
232 tmpTMVAReader->AddVariable("kfchi2", &fMVAVar_EleKFTrkChiSqr);
233 tmpTMVAReader->AddVariable("kfhitsall", &fMVAVar_EleKFTrkNHits);
234 tmpTMVAReader->AddVariable("gsfchi2", &fMVAVar_EleGsfTrackChi2OverNdof);
235 tmpTMVAReader->AddVariable("deta", &fMVAVar_EleDEtaIn);
236 tmpTMVAReader->AddVariable("dphi", &fMVAVar_EleDPhiIn);
237 tmpTMVAReader->AddVariable("detacalo", &fMVAVar_EledEtaCalo);
238 tmpTMVAReader->AddVariable("see", &fMVAVar_EleSigmaIEtaIEta);
239 tmpTMVAReader->AddVariable("spp", &fMVAVar_EleSigmaIPhiIPhi);
240 tmpTMVAReader->AddVariable("etawidth", &fMVAVar_EleSCEtaWidth);
241 tmpTMVAReader->AddVariable("phiwidth", &fMVAVar_EleSCPhiWidth);
242 tmpTMVAReader->AddVariable("e1x5e5x5", &fMVAVar_EleE1x5OverE5x5);
243 tmpTMVAReader->AddVariable("R9", &fMVAVar_EleR9);
244 tmpTMVAReader->AddVariable("HoE", &fMVAVar_EleHoverE);
245 tmpTMVAReader->AddVariable("EoP", &fMVAVar_EleEOverP);
246 tmpTMVAReader->AddVariable("IoEmIoP", &fMVAVar_EleOneOverEMinusOneOverP);
247 tmpTMVAReader->AddVariable("EoPout", &fMVAVar_EleESeedClusterOverPout);
248 if (i==2 || i==5) {
249 tmpTMVAReader->AddVariable("PreShowerOverRaw",&fMVAVar_ElePreShowerOverRaw);
250 }
251 tmpTMVAReader->AddSpectator("eta", &fMVAVar_EleEta);
252 tmpTMVAReader->AddSpectator("pt", &fMVAVar_ElePt);
253 }
254
255 if (type == kIDEGamma2012NonTrigV1 ) {
256 // Pure tracking variables
257 tmpTMVAReader->AddVariable("fbrem", &fMVAVar_EleFBrem);
258 tmpTMVAReader->AddVariable("kfchi2", &fMVAVar_EleKFTrkChiSqr);
259 tmpTMVAReader->AddVariable("kfhits", &fMVAVar_EleKFTrkNLayers);
260 tmpTMVAReader->AddVariable("gsfchi2", &fMVAVar_EleGsfTrackChi2OverNdof);
261 tmpTMVAReader->AddVariable("deta", &fMVAVar_EleDEtaIn);
262 tmpTMVAReader->AddVariable("dphi", &fMVAVar_EleDPhiIn);
263 tmpTMVAReader->AddVariable("detacalo", &fMVAVar_EledEtaCalo);
264 tmpTMVAReader->AddVariable("see", &fMVAVar_EleSigmaIEtaIEta);
265 tmpTMVAReader->AddVariable("spp", &fMVAVar_EleSigmaIPhiIPhi);
266 tmpTMVAReader->AddVariable("etawidth", &fMVAVar_EleSCEtaWidth);
267 tmpTMVAReader->AddVariable("phiwidth", &fMVAVar_EleSCPhiWidth);
268 tmpTMVAReader->AddVariable("e1x5e5x5", &fMVAVar_EleE1x5OverE5x5);
269 tmpTMVAReader->AddVariable("R9", &fMVAVar_EleR9);
270 tmpTMVAReader->AddVariable("HoE", &fMVAVar_EleHoverE);
271 tmpTMVAReader->AddVariable("EoP", &fMVAVar_EleEOverP);
272 tmpTMVAReader->AddVariable("IoEmIoP", &fMVAVar_EleOneOverEMinusOneOverP);
273 tmpTMVAReader->AddVariable("eleEoPout", &fMVAVar_EleEEleClusterOverPout);
274 if (i==2 || i==5) {
275 tmpTMVAReader->AddVariable("PreShowerOverRaw",&fMVAVar_ElePreShowerOverRaw);
276 }
277 tmpTMVAReader->AddSpectator("eta", &fMVAVar_EleEta);
278 tmpTMVAReader->AddSpectator("pt", &fMVAVar_ElePt);
279 }
280
281 if (type == kIsoRingsV0) {
282 tmpTMVAReader->AddVariable( "ChargedIso_DR0p0To0p1", &fMVAVar_ChargedIso_DR0p0To0p1 );
283 tmpTMVAReader->AddVariable( "ChargedIso_DR0p1To0p2", &fMVAVar_ChargedIso_DR0p1To0p2 );
284 tmpTMVAReader->AddVariable( "ChargedIso_DR0p2To0p3", &fMVAVar_ChargedIso_DR0p2To0p3 );
285 tmpTMVAReader->AddVariable( "ChargedIso_DR0p3To0p4", &fMVAVar_ChargedIso_DR0p3To0p4 );
286 tmpTMVAReader->AddVariable( "ChargedIso_DR0p4To0p5", &fMVAVar_ChargedIso_DR0p4To0p5 );
287 tmpTMVAReader->AddVariable( "GammaIso_DR0p0To0p1", &fMVAVar_GammaIso_DR0p0To0p1 );
288 tmpTMVAReader->AddVariable( "GammaIso_DR0p1To0p2", &fMVAVar_GammaIso_DR0p1To0p2 );
289 tmpTMVAReader->AddVariable( "GammaIso_DR0p2To0p3", &fMVAVar_GammaIso_DR0p2To0p3 );
290 tmpTMVAReader->AddVariable( "GammaIso_DR0p3To0p4", &fMVAVar_GammaIso_DR0p3To0p4 );
291 tmpTMVAReader->AddVariable( "GammaIso_DR0p4To0p5", &fMVAVar_GammaIso_DR0p4To0p5 );
292 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p0To0p1", &fMVAVar_NeutralHadronIso_DR0p0To0p1 );
293 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p1To0p2", &fMVAVar_NeutralHadronIso_DR0p1To0p2 );
294 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p2To0p3", &fMVAVar_NeutralHadronIso_DR0p2To0p3 );
295 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p3To0p4", &fMVAVar_NeutralHadronIso_DR0p3To0p4 );
296 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p4To0p5", &fMVAVar_NeutralHadronIso_DR0p4To0p5 );
297 tmpTMVAReader->AddSpectator( "eta", &fMVAVar_EleEta );
298 tmpTMVAReader->AddSpectator( "pt" , &fMVAVar_ElePt );
299 }
300
301 if (type == kIDIsoCombinedHWW2012TrigV4) {
302
303 // Pure tracking variables
304 tmpTMVAReader->AddVariable("fbrem", &fMVAVar_EleFBrem);
305 tmpTMVAReader->AddVariable("kfchi2", &fMVAVar_EleKFTrkChiSqr);
306 tmpTMVAReader->AddVariable("kflayers", &fMVAVar_EleKFTrkNLayers);
307 tmpTMVAReader->AddVariable("gsfchi2", &fMVAVar_EleGsfTrackChi2OverNdof);
308
309 // Geometrical matchings
310 tmpTMVAReader->AddVariable("deta", &fMVAVar_EleDEtaIn);
311 tmpTMVAReader->AddVariable("dphi", &fMVAVar_EleDPhiIn);
312 tmpTMVAReader->AddVariable("detacalo", &fMVAVar_EledEtaCalo);
313
314 // Pure ECAL -> shower shapes
315 tmpTMVAReader->AddVariable("see", &fMVAVar_EleSigmaIEtaIEta);
316 tmpTMVAReader->AddVariable("spp", &fMVAVar_EleSigmaIPhiIPhi);
317 tmpTMVAReader->AddVariable("etawidth", &fMVAVar_EleSCEtaWidth);
318 tmpTMVAReader->AddVariable("phiwidth", &fMVAVar_EleSCPhiWidth);
319 tmpTMVAReader->AddVariable("OneMinusSeedE1x5OverE5x5", &fMVAVar_EleOneMinusE1x5OverE5x5);
320 tmpTMVAReader->AddVariable("R9", &fMVAVar_EleR9);
321
322 // Energy matching
323 tmpTMVAReader->AddVariable("HoE", &fMVAVar_EleHoverE);
324 tmpTMVAReader->AddVariable("EoP", &fMVAVar_EleEOverP);
325 tmpTMVAReader->AddVariable("IoEmIoP", &fMVAVar_EleOneOverEMinusOneOverP);
326 tmpTMVAReader->AddVariable("EEleoPout", &fMVAVar_EleEEleClusterOverPout);
327 if(i == 2 || i == 5) {
328 tmpTMVAReader->AddVariable("PreShowerOverRaw",&fMVAVar_ElePreShowerOverRaw);
329 }
330
331 // IP
332 tmpTMVAReader->AddVariable("d0", &fMVAVar_EleD0);
333 tmpTMVAReader->AddVariable("ip3d", &fMVAVar_EleIP3d);
334
335 //isolation variables
336 tmpTMVAReader->AddVariable( "ChargedIso_DR0p0To0p1", &fMVAVar_ChargedIso_DR0p0To0p1 );
337 tmpTMVAReader->AddVariable( "ChargedIso_DR0p1To0p2", &fMVAVar_ChargedIso_DR0p1To0p2 );
338 tmpTMVAReader->AddVariable( "ChargedIso_DR0p2To0p3", &fMVAVar_ChargedIso_DR0p2To0p3 );
339 tmpTMVAReader->AddVariable( "ChargedIso_DR0p3To0p4", &fMVAVar_ChargedIso_DR0p3To0p4 );
340 tmpTMVAReader->AddVariable( "ChargedIso_DR0p4To0p5", &fMVAVar_ChargedIso_DR0p4To0p5 );
341 tmpTMVAReader->AddVariable( "GammaIso_DR0p0To0p1", &fMVAVar_GammaIso_DR0p0To0p1 );
342 tmpTMVAReader->AddVariable( "GammaIso_DR0p1To0p2", &fMVAVar_GammaIso_DR0p1To0p2 );
343 tmpTMVAReader->AddVariable( "GammaIso_DR0p2To0p3", &fMVAVar_GammaIso_DR0p2To0p3 );
344 tmpTMVAReader->AddVariable( "GammaIso_DR0p3To0p4", &fMVAVar_GammaIso_DR0p3To0p4 );
345 tmpTMVAReader->AddVariable( "GammaIso_DR0p4To0p5", &fMVAVar_GammaIso_DR0p4To0p5 );
346 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p0To0p1", &fMVAVar_NeutralHadronIso_DR0p0To0p1 );
347 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p1To0p2", &fMVAVar_NeutralHadronIso_DR0p1To0p2 );
348 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p2To0p3", &fMVAVar_NeutralHadronIso_DR0p2To0p3 );
349 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p3To0p4", &fMVAVar_NeutralHadronIso_DR0p3To0p4 );
350 tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p4To0p5", &fMVAVar_NeutralHadronIso_DR0p4To0p5 );
351 tmpTMVAReader->AddVariable( "rho", &fMVAVar_Rho );
352
353 //spectators
354 tmpTMVAReader->AddSpectator("eta", &fMVAVar_EleEta);
355 tmpTMVAReader->AddSpectator("pt", &fMVAVar_ElePt);
356
357 }
358
359
360 tmpTMVAReader->BookMVA(fMethodname , weightsfiles[i] );
361 std::cout << "MVABin " << i << " : MethodName = " << fMethodname
362 << " , type == " << type << " , "
363 << "Load weights file : " << weightsfiles[i]
364 << std::endl;
365 fTMVAReader.push_back(tmpTMVAReader);
366
367 }
368 std::cout << "Electron ID MVA Completed\n";
369 }
370
371
372 //--------------------------------------------------------------------------------------------------
373 UInt_t ElectronIDMVA::GetMVABin( double eta, double pt) const {
374
375 //Default is to return the first bin
376 uint bin = 0;
377
378 //return the first bin if not using binned version
379 if (!fUseBinnedVersion) return 0;
380
381 if (fMVAType == ElectronIDMVA::kBaseline
382 ||fMVAType == ElectronIDMVA::kNoIPInfo
383 ||fMVAType == ElectronIDMVA::kWithIPInfo
384 ||fMVAType == ElectronIDMVA::kIDIsoCombined) {
385 if (pt < 20 && fabs(eta) < 1.0) bin = 0;
386 if (pt < 20 && fabs(eta) >= 1.0 && fabs(eta) < 1.479) bin = 1;
387 if (pt < 20 && fabs(eta) >= 1.479) bin = 2;
388 if (pt >= 20 && fabs(eta) < 1.0) bin = 3;
389 if (pt >= 20 && fabs(eta) >= 1.0 && fabs(eta) < 1.479) bin = 4;
390 if (pt >= 20 && fabs(eta) >= 1.479) bin = 5;
391 }
392
393 if (fMVAType == ElectronIDMVA::kIsoRingsV0) {
394 if (pt < 10 && fabs(eta) < 1.479) bin = 0;
395 if (pt < 10 && fabs(eta) >= 1.479) bin = 1;
396 if (pt >= 10 && fabs(eta) < 1.479) bin = 2;
397 if (pt >= 10 && fabs(eta) >= 1.479) bin = 3;
398 }
399
400 if (fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
401 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1) {
402 bin = 0;
403 if (pt < 10 && fabs(eta) < 0.8) bin = 0;
404 if (pt < 10 && fabs(eta) >= 0.8 && fabs(eta) < 1.479 ) bin = 1;
405 if (pt < 10 && fabs(eta) >= 1.479) bin = 2;
406 if (pt >= 10 && fabs(eta) < 0.8) bin = 3;
407 if (pt >= 10 && fabs(eta) >= 0.8 && fabs(eta) < 1.479 ) bin = 4;
408 if (pt >= 10 && fabs(eta) >= 1.479) bin = 5;
409 }
410
411 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
412 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0 ||
413 fMVAType == ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4
414 ) {
415 bin = 0;
416 if (pt < 20 && fabs(eta) < 0.8) bin = 0;
417 if (pt < 20 && fabs(eta) >= 0.8 && fabs(eta) < 1.479 ) bin = 1;
418 if (pt < 20 && fabs(eta) >= 1.479) bin = 2;
419 if (pt >= 20 && fabs(eta) < 0.8) bin = 3;
420 if (pt >= 20 && fabs(eta) >= 0.8 && fabs(eta) < 1.479 ) bin = 4;
421 if (pt >= 20 && fabs(eta) >= 1.479) bin = 5;
422 }
423
424 return bin;
425 }
426
427
428
429 //--------------------------------------------------------------------------------------------------
430 Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleEta,
431 Double_t EleSigmaIEtaIEta,
432 Double_t EleDEtaIn,
433 Double_t EleDPhiIn,
434 Double_t EleHoverE,
435 Double_t EleD0,
436 Double_t EleDZ,
437 Double_t EleFBrem,
438 Double_t EleEOverP,
439 Double_t EleESeedClusterOverPout,
440 Double_t EleSigmaIPhiIPhi,
441 Double_t EleNBrem,
442 Double_t EleOneOverEMinusOneOverP,
443 Double_t EleESeedClusterOverPIn,
444 Double_t EleIP3d,
445 Double_t EleIP3dSig
446 ) {
447
448 if (!fIsInitialized) {
449 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
450 return -9999;
451 }
452
453 //set all input variables
454 fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
455 fMVAVar_EleDEtaIn = EleDEtaIn;
456 fMVAVar_EleDPhiIn = EleDPhiIn;
457 fMVAVar_EleHoverE = EleHoverE;
458 fMVAVar_EleD0 = EleD0;
459 fMVAVar_EleDZ = EleDZ;
460 fMVAVar_EleFBrem = EleFBrem;
461 fMVAVar_EleEOverP = EleEOverP;
462 fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
463 fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
464 fMVAVar_EleNBrem = EleNBrem;
465 fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
466 fMVAVar_EleESeedClusterOverPIn = EleESeedClusterOverPIn;
467 fMVAVar_EleIP3d = EleIP3d;
468 fMVAVar_EleIP3dSig = EleIP3dSig;
469
470 Double_t mva = -9999;
471 TMVA::Reader *reader = 0;
472 reader = fTMVAReader[GetMVABin( EleEta, ElePt)];
473
474 mva = reader->EvaluateMVA( fMethodname );
475
476 return mva;
477 }
478
479 //--------------------------------------------------------------------------------------------------
480 Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleEta, Double_t PileupEnergyDensity,
481 Double_t EleSigmaIEtaIEta,
482 Double_t EleDEtaIn,
483 Double_t EleDPhiIn,
484 Double_t EleHoverE,
485 Double_t EleD0,
486 Double_t EleDZ,
487 Double_t EleFBrem,
488 Double_t EleEOverP,
489 Double_t EleESeedClusterOverPout,
490 Double_t EleSigmaIPhiIPhi,
491 Double_t EleNBrem,
492 Double_t EleOneOverEMinusOneOverP,
493 Double_t EleESeedClusterOverPIn,
494 Double_t EleIP3d,
495 Double_t EleIP3dSig,
496 Double_t EleGsfTrackChi2OverNdof,
497 Double_t EledEtaCalo,
498 Double_t EledPhiCalo,
499 Double_t EleR9,
500 Double_t EleSCEtaWidth,
501 Double_t EleSCPhiWidth,
502 Double_t EleCovIEtaIPhi,
503 Double_t ElePreShowerOverRaw,
504 Double_t EleChargedIso03,
505 Double_t EleNeutralHadronIso03,
506 Double_t EleGammaIso03,
507 Double_t EleChargedIso04,
508 Double_t EleNeutralHadronIso04,
509 Double_t EleGammaIso04,
510 Bool_t printDebug
511 ) {
512
513 if (!fIsInitialized) {
514 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
515 return -9999;
516 }
517
518 Double_t Rho = 0;
519 if (!(TMath::IsNaN(PileupEnergyDensity) || isinf(PileupEnergyDensity))) Rho = PileupEnergyDensity;
520
521 //set all input variables
522 fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
523 fMVAVar_EleDEtaIn = EleDEtaIn;
524 fMVAVar_EleDPhiIn = EleDPhiIn;
525 fMVAVar_EleHoverE = EleHoverE;
526 fMVAVar_EleD0 = EleD0;
527 fMVAVar_EleDZ = EleDZ;
528 fMVAVar_EleFBrem = EleFBrem;
529 fMVAVar_EleEOverP = EleEOverP;
530 fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
531 fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
532 fMVAVar_EleNBrem = EleNBrem;
533 fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
534 fMVAVar_EleESeedClusterOverPIn = EleESeedClusterOverPIn;
535 fMVAVar_EleIP3d = EleIP3d;
536 fMVAVar_EleIP3dSig = EleIP3dSig;
537 fMVAVar_EleGsfTrackChi2OverNdof = EleGsfTrackChi2OverNdof;
538 fMVAVar_EledEtaCalo = EledEtaCalo;
539 fMVAVar_EledPhiCalo = EledPhiCalo;
540 fMVAVar_EleR9 = EleR9;
541 fMVAVar_EleSCEtaWidth = EleSCEtaWidth;
542 fMVAVar_EleSCPhiWidth = EleSCPhiWidth;
543 fMVAVar_EleCovIEtaIPhi = EleCovIEtaIPhi;
544 fMVAVar_ElePreShowerOverRaw = ElePreShowerOverRaw;
545 fMVAVar_EleChargedIso03OverPt
546 = (EleChargedIso03
547 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso03, EleEta)) / ElePt;
548 fMVAVar_EleNeutralHadronIso03OverPt
549 = (EleNeutralHadronIso03
550 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso03, EleEta)
551 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,EleEta)) / ElePt;
552 fMVAVar_EleGammaIso03OverPt
553 = (EleGammaIso03
554 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso03, EleEta)
555 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip03,EleEta))/ElePt;
556 fMVAVar_EleChargedIso04OverPt
557 = (EleChargedIso04
558 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso04, EleEta))/ElePt;
559 fMVAVar_EleNeutralHadronIso04OverPt
560 = (EleNeutralHadronIso04
561 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso04, EleEta)
562 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,EleEta))/ElePt;
563 fMVAVar_EleGammaIso04OverPt
564 = (EleGammaIso04
565 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso04, EleEta)
566 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip04,EleEta))/ElePt;
567
568
569
570
571 Double_t mva = -9999;
572 TMVA::Reader *reader = 0;
573 reader = fTMVAReader[GetMVABin( EleEta, ElePt)];
574 mva = reader->EvaluateMVA( fMethodname );
575
576 if (printDebug == kTRUE) {
577 std::cout << "Debug Electron MVA: "
578 << ElePt << " " << EleEta << " " << " --> MVABin " << GetMVABin( EleEta, ElePt) << " : "
579 << fMVAVar_EleSigmaIEtaIEta << " "
580 << fMVAVar_EleDEtaIn << " "
581 << fMVAVar_EleDPhiIn << " "
582 << fMVAVar_EleHoverE << " "
583 << fMVAVar_EleD0 << " "
584 << fMVAVar_EleDZ << " "
585 << fMVAVar_EleFBrem << " "
586 << fMVAVar_EleEOverP << " "
587 << fMVAVar_EleESeedClusterOverPout << " "
588 << fMVAVar_EleSigmaIPhiIPhi << " "
589 << fMVAVar_EleNBrem << " "
590 << fMVAVar_EleOneOverEMinusOneOverP << " "
591 << fMVAVar_EleESeedClusterOverPIn << " "
592 << fMVAVar_EleIP3d << " "
593 << fMVAVar_EleIP3dSig << " "
594 << fMVAVar_EleGsfTrackChi2OverNdof << " "
595 << fMVAVar_EledEtaCalo << " "
596 << fMVAVar_EledPhiCalo << " "
597 << fMVAVar_EleR9 << " "
598 << fMVAVar_EleSCEtaWidth << " "
599 << fMVAVar_EleSCPhiWidth << " "
600 << fMVAVar_EleCovIEtaIPhi << " "
601 << fMVAVar_ElePreShowerOverRaw << " "
602 << fMVAVar_EleChargedIso03OverPt << " "
603 << fMVAVar_EleNeutralHadronIso03OverPt << " "
604 << fMVAVar_EleGammaIso03OverPt << " "
605 << fMVAVar_EleChargedIso04OverPt << " "
606 << fMVAVar_EleNeutralHadronIso04OverPt << " "
607 << fMVAVar_EleGammaIso04OverPt << " "
608 << " === : === "
609 << mva
610 << std::endl;
611 }
612
613 return mva;
614 }
615
616 Double_t ElectronIDMVA::MVAValue_IsoRings( Double_t ElePt,
617 Double_t EleSCEta,
618 Double_t ChargedIso_DR0p0To0p1,
619 Double_t ChargedIso_DR0p1To0p2,
620 Double_t ChargedIso_DR0p2To0p3,
621 Double_t ChargedIso_DR0p3To0p4,
622 Double_t ChargedIso_DR0p4To0p5,
623 Double_t GammaIso_DR0p0To0p1,
624 Double_t GammaIso_DR0p1To0p2,
625 Double_t GammaIso_DR0p2To0p3,
626 Double_t GammaIso_DR0p3To0p4,
627 Double_t GammaIso_DR0p4To0p5,
628 Double_t NeutralHadronIso_DR0p0To0p1,
629 Double_t NeutralHadronIso_DR0p1To0p2,
630 Double_t NeutralHadronIso_DR0p2To0p3,
631 Double_t NeutralHadronIso_DR0p3To0p4,
632 Double_t NeutralHadronIso_DR0p4To0p5,
633 Bool_t printDebug) {
634
635 if (fMVAType != ElectronIDMVA::kIsoRingsV0) {
636 std::cout << "Error: This function is only supported for MVAType == kIsoRingsV0.\n" << std::endl;
637 assert(kFALSE);
638 }
639
640 fMVAVar_ElePt = ElePt;
641 fMVAVar_EleEta = EleSCEta;
642 fMVAVar_ChargedIso_DR0p0To0p1 = ChargedIso_DR0p0To0p1;
643 fMVAVar_ChargedIso_DR0p1To0p2 = ChargedIso_DR0p1To0p2;
644 fMVAVar_ChargedIso_DR0p2To0p3 = ChargedIso_DR0p2To0p3;
645 fMVAVar_ChargedIso_DR0p3To0p4 = ChargedIso_DR0p3To0p4;
646 fMVAVar_ChargedIso_DR0p4To0p5 = ChargedIso_DR0p4To0p5;
647 fMVAVar_GammaIso_DR0p0To0p1 = GammaIso_DR0p0To0p1;
648 fMVAVar_GammaIso_DR0p1To0p2 = GammaIso_DR0p1To0p2;
649 fMVAVar_GammaIso_DR0p2To0p3 = GammaIso_DR0p2To0p3;
650 fMVAVar_GammaIso_DR0p3To0p4 = GammaIso_DR0p3To0p4;
651 fMVAVar_GammaIso_DR0p4To0p5 = GammaIso_DR0p4To0p5;
652 fMVAVar_NeutralHadronIso_DR0p0To0p1 = NeutralHadronIso_DR0p0To0p1;
653 fMVAVar_NeutralHadronIso_DR0p1To0p2 = NeutralHadronIso_DR0p1To0p2;
654 fMVAVar_NeutralHadronIso_DR0p2To0p3 = NeutralHadronIso_DR0p2To0p3;
655 fMVAVar_NeutralHadronIso_DR0p3To0p4 = NeutralHadronIso_DR0p3To0p4;
656 fMVAVar_NeutralHadronIso_DR0p4To0p5 = NeutralHadronIso_DR0p4To0p5;
657
658 Double_t mva = -9999;
659 TMVA::Reader *reader = 0;
660
661 if (printDebug == kTRUE) {
662 std::cout <<" -> BIN: " << fMVAVar_EleEta << " " << fMVAVar_ElePt << " : " << GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt) << std::endl;
663 }
664 reader = fTMVAReader[GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt)];
665 mva = reader->EvaluateMVA( fMethodname );
666
667 if (printDebug == kTRUE) {
668
669 std::cout << "Debug Electron MVA-ISO: ";
670 std::cout << fMVAVar_ChargedIso_DR0p0To0p1 << " "
671 << fMVAVar_ChargedIso_DR0p1To0p2 << " "
672 << fMVAVar_ChargedIso_DR0p2To0p3 << " "
673 << fMVAVar_ChargedIso_DR0p3To0p4 << " "
674 << fMVAVar_ChargedIso_DR0p4To0p5 << " "
675 << fMVAVar_GammaIso_DR0p0To0p1 << " "
676 << fMVAVar_GammaIso_DR0p1To0p2 << " "
677 << fMVAVar_GammaIso_DR0p2To0p3 << " "
678 << fMVAVar_GammaIso_DR0p3To0p4 << " "
679 << fMVAVar_GammaIso_DR0p4To0p5 << " "
680 << fMVAVar_NeutralHadronIso_DR0p0To0p1 << " "
681 << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
682 << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
683 << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
684 << fMVAVar_NeutralHadronIso_DR0p4To0p5 << " "
685 << std::endl;
686 std::cout << "MVA: " << mva << " "
687 << std::endl;
688 }
689 return mva;
690 }
691
692 Double_t ElectronIDMVA::MVAValue_IDNonTrig( Double_t ElePt,
693 Double_t EleSCEta,
694 Double_t EleFBrem,
695 Double_t EleKFTrkChiSqr,
696 Double_t EleKFTrkNHits,
697 Double_t EleGsfTrackChi2OverNdof,
698 Double_t EleDEtaIn,
699 Double_t EleDPhiIn,
700 Double_t EledEtaCalo,
701 Double_t EleSigmaIEtaIEta,
702 Double_t EleSigmaIPhiIPhi,
703 Double_t EleSCEtaWidth,
704 Double_t EleSCPhiWidth,
705 Double_t EleE1x5OverE5x5,
706 Double_t EleR9,
707 Double_t EleHoverE,
708 Double_t EleEOverP,
709 Double_t EleOneOverEMinusOneOverP,
710 Double_t EleESeedClusterOverPout,
711 Double_t ElePreShowerOverRaw,
712 Bool_t printDebug) {
713
714 if (fMVAType != ElectronIDMVA::kIDEGamma2012NonTrigV0) {
715 std::cout << "Error: This function is only supported for MVAType == kIDEGamma2012NonTrigV0.\n" << std::endl;
716 assert(kFALSE);
717 }
718
719 fMVAVar_ElePt = ElePt;
720 fMVAVar_EleEta = EleSCEta;
721 fMVAVar_EleFBrem = EleFBrem;
722 fMVAVar_EleKFTrkChiSqr = EleKFTrkChiSqr;
723 fMVAVar_EleKFTrkNHits = EleKFTrkNHits;
724 fMVAVar_EleGsfTrackChi2OverNdof = EleGsfTrackChi2OverNdof;
725 fMVAVar_EleDEtaIn = EleDEtaIn;
726 fMVAVar_EleDPhiIn = EleDPhiIn;
727 fMVAVar_EledEtaCalo = EledEtaCalo;
728 fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
729 fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
730 fMVAVar_EleSCEtaWidth = EleSCEtaWidth;
731 fMVAVar_EleSCPhiWidth = EleSCPhiWidth;
732 fMVAVar_EleE1x5OverE5x5 = EleE1x5OverE5x5;
733 fMVAVar_EleR9 = EleR9;
734 fMVAVar_EleHoverE = EleHoverE;
735 fMVAVar_EleEOverP = EleEOverP;
736 fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
737 fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
738 fMVAVar_ElePreShowerOverRaw = ElePreShowerOverRaw;
739
740 Double_t mva = -9999;
741 TMVA::Reader *reader = 0;
742
743 if (printDebug == kTRUE) {
744 std::cout <<" -> BIN: " << fMVAVar_EleEta << " " << fMVAVar_ElePt << " : " << GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt) << std::endl;
745 }
746 reader = fTMVAReader[GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt)];
747 mva = reader->EvaluateMVA( fMethodname );
748
749 if (printDebug == kTRUE) {
750 std::cout << "Debug Electron MVA: ";
751 std::cout << " fbrem " << fMVAVar_EleFBrem
752 << " kfchi2 " << fMVAVar_EleKFTrkChiSqr
753 << " kfhits " << fMVAVar_EleKFTrkNLayers
754 << " kfhitsall " << fMVAVar_EleKFTrkNHits
755 << " gsfchi2 " << fMVAVar_EleGsfTrackChi2OverNdof
756 << " deta " << fMVAVar_EleDEtaIn
757 << " dphi " << fMVAVar_EleDPhiIn
758 << " detacalo " << fMVAVar_EledEtaCalo
759 << " see " << fMVAVar_EleSigmaIEtaIEta
760 << " spp " << fMVAVar_EleSigmaIPhiIPhi
761 << " etawidth " << fMVAVar_EleSCEtaWidth
762 << " phiwidth " << fMVAVar_EleSCPhiWidth
763 << " e1x5e5x5 " << fMVAVar_EleE1x5OverE5x5
764 << " R9 " << fMVAVar_EleR9
765 << " HoE " << fMVAVar_EleHoverE
766 << " EoP " << fMVAVar_EleEOverP
767 << " IoEmIoP " << fMVAVar_EleOneOverEMinusOneOverP
768 << " eleEoPout " << fMVAVar_EleESeedClusterOverPout
769 << " EoPout " << fMVAVar_EleESeedClusterOverPout
770 << " d0 " << fMVAVar_EleD0
771 << " ip3d " << fMVAVar_EleIP3d
772 << " eta " << fMVAVar_EleEta
773 << " pt " << fMVAVar_ElePt << std::endl;
774 std::cout << "MVA: " << mva << " "
775 << std::endl;
776 }
777 return mva;
778 }
779
780 //--------------------------------------------------------------------------------------------------
781 Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
782 const PFCandidateCol *PFCands,
783 const PileupEnergyDensityCol *PileupEnergyDensity,
784 Double_t intRadius,
785 Bool_t printDebug) {
786
787 if (!fIsInitialized) {
788 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
789 return -9999;
790 }
791
792 Double_t Rho = 0;
793 switch(fTheRhoType) {
794 case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
795 Rho = PileupEnergyDensity->At(0)->Rho();
796 break;
797 case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
798 Rho = PileupEnergyDensity->At(0)->RhoLowEta();
799 break;
800 case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
801 Rho = PileupEnergyDensity->At(0)->RhoRandom();
802 break;
803 case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
804 Rho = PileupEnergyDensity->At(0)->RhoRandomLowEta();
805 break;
806 case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
807 Rho = PileupEnergyDensity->At(0)->RhoKt6PFJets();
808 break;
809 default:
810 // use the old default
811 Rho = PileupEnergyDensity->At(0)->Rho();
812 break;
813 }
814
815 //set all input variables
816 fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
817 fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
818 fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
819 fMVAVar_EleHoverE = ele->HadronicOverEm();
820 fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
821 fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
822 fMVAVar_EleFBrem = ele->FBrem();
823 fMVAVar_EleEOverP = ele->ESuperClusterOverP();
824 fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
825 if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
826 else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
827 fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
828 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->BestTrk()->P();
829 fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
830 fMVAVar_EleIP3d = ele->Ip3dPV();
831 fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
832 fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
833 fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
834 fMVAVar_EledPhiCalo = ele->DeltaPhiSeedClusterTrackAtCalo();
835 fMVAVar_EleR9 = ele->SCluster()->R9();
836 fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
837 fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
838 fMVAVar_EleCovIEtaIPhi = ele->SCluster()->Seed()->CoviEtaiPhi();
839 fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
840 fMVAVar_EleChargedIso03OverPt
841 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 99999, 0.3, intRadius)
842 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso03, ele->SCluster()->Eta())) / ele->Pt();
843 fMVAVar_EleNeutralHadronIso03OverPt
844 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.3, intRadius, PFCandidate::eNeutralHadron)
845 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso03, ele->SCluster()->Eta())
846 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,ele->SCluster()->Eta())) / ele->Pt();
847 fMVAVar_EleGammaIso03OverPt
848 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.3, intRadius, PFCandidate::eGamma)
849 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso03, ele->SCluster()->Eta())
850 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip03,ele->SCluster()->Eta())) / ele->Pt();
851 fMVAVar_EleChargedIso04OverPt
852 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 99999, 0.4, intRadius)
853 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso04, ele->SCluster()->Eta())) / ele->Pt();
854 fMVAVar_EleNeutralHadronIso04OverPt
855 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.4, intRadius, PFCandidate::eNeutralHadron)
856 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso04, ele->SCluster()->Eta())
857 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,ele->SCluster()->Eta())) / ele->Pt() ;
858 fMVAVar_EleGammaIso04OverPt
859 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.4, intRadius, PFCandidate::eGamma)
860 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso04, ele->SCluster()->Eta())
861 + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip04,ele->SCluster()->Eta())) / ele->Pt();
862
863 //Additional vars
864 fMVAVar_EleEEleClusterOverPout = ele->EEleClusterOverPout();
865 if (ele->TrackerTrk()) {
866 fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
867 fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
868 } else {
869 fMVAVar_EleKFTrkChiSqr = -1;
870 fMVAVar_EleKFTrkNHits = 0;
871 }
872 fMVAVar_EleE1x5OverE5x5 = ele->SCluster()->Seed()->E1x5() / ele->SCluster()->Seed()->E5x5();
873
874
875 Double_t mva = -9999;
876 TMVA::Reader *reader = 0;
877 reader = fTMVAReader[GetMVABin( ele->SCluster()->Eta(), ele->Pt())];
878 mva = reader->EvaluateMVA( fMethodname );
879
880 if (printDebug == kTRUE) {
881 std::cout << "Debug Electron MVA: "
882 << ele->Pt() << " " << ele->Eta() << " " << ele->Phi() << " : "
883 << ele->Pt() << " " << ele->SCluster()->AbsEta() << " --> MVABin " << GetMVABin( ele->SCluster()->Eta(), ele->Pt()) << " : "
884 << fMVAVar_EleSigmaIEtaIEta << " "
885 << fMVAVar_EleDEtaIn << " "
886 << fMVAVar_EleDPhiIn << " "
887 << fMVAVar_EleHoverE << " "
888 << fMVAVar_EleD0 << " "
889 << fMVAVar_EleDZ << " "
890 << fMVAVar_EleFBrem << " "
891 << fMVAVar_EleEOverP << " "
892 << fMVAVar_EleESeedClusterOverPout << " "
893 << fMVAVar_EleSigmaIPhiIPhi << " "
894 << fMVAVar_EleNBrem << " "
895 << fMVAVar_EleOneOverEMinusOneOverP << " "
896 << fMVAVar_EleESeedClusterOverPIn << " "
897 << fMVAVar_EleIP3d << " "
898 << fMVAVar_EleIP3dSig << " "
899 << fMVAVar_EleGsfTrackChi2OverNdof << " "
900 << fMVAVar_EledEtaCalo << " "
901 << fMVAVar_EledPhiCalo << " "
902 << fMVAVar_EleR9 << " "
903 << fMVAVar_EleSCEtaWidth << " "
904 << fMVAVar_EleSCPhiWidth << " "
905 << fMVAVar_EleCovIEtaIPhi << " "
906 << fMVAVar_ElePreShowerOverRaw << " "
907 << fMVAVar_EleKFTrkChiSqr << " "
908 << fMVAVar_EleKFTrkNHits << " "
909 << fMVAVar_EleE1x5OverE5x5 << " "
910 << " ::: "
911
912 << " === : === "
913 << mva << " "
914 << std::endl;
915
916 }
917
918 return mva;
919 }
920
921 //--------------------------------------------------------------------------------------------------
922 Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
923 Bool_t printDebug) {
924
925 if (!fIsInitialized) {
926 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
927 return -9999;
928 }
929
930 //set all input variables
931 fMVAVar_ElePt = ele->Pt();
932 fMVAVar_EleEta = ele->SCluster()->Eta();
933 fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
934
935 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
936 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
937 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
938 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0
939 ) {
940 fMVAVar_EleDEtaIn = TMath::Min(fabs(double(ele->DeltaEtaSuperClusterTrackAtVtx())),0.06); ;
941 fMVAVar_EleDPhiIn = TMath::Min(fabs(double(ele->DeltaPhiSuperClusterTrackAtVtx())),0.6);
942 fMVAVar_EleFBrem = TMath::Max(double(ele->FBrem()),-1.0);
943 fMVAVar_EleEOverP = TMath::Min(double(ele->ESuperClusterOverP()), 20.0);
944 fMVAVar_EleESeedClusterOverPout = TMath::Min(double(ele->ESeedClusterOverPout()),20.0);
945 fMVAVar_EleEEleClusterOverPout = TMath::Min(double(ele->EEleClusterOverPout()),20.0);
946 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->P();
947 fMVAVar_EleGsfTrackChi2OverNdof = TMath::Min(double( ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof()),200.0);
948 fMVAVar_EledEtaCalo = TMath::Min(fabs(double(ele->DeltaEtaSeedClusterTrackAtCalo())),0.2);
949 fMVAVar_EleR9 = TMath::Min(double(ele->SCluster()->R9()), 5.0);
950 }
951 else if (fMVAType == ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4) {
952 fMVAVar_EleDEtaIn = TMath::Min(fabs(double(ele->DeltaEtaSuperClusterTrackAtVtx())),0.06); ;
953 fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
954 fMVAVar_EleFBrem = TMath::Max(double(ele->FBrem()),-1.0);
955 fMVAVar_EleEOverP = TMath::Min(double(ele->ESuperClusterOverP()), 20.0);
956 fMVAVar_EleESeedClusterOverPout = TMath::Min(double(ele->ESeedClusterOverPout()),20.0);
957 fMVAVar_EleEEleClusterOverPout = TMath::Min(double(ele->EEleClusterOverPout()),20.0);
958 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->PIn();
959 fMVAVar_EleGsfTrackChi2OverNdof = TMath::Min(double( ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof()),200.0);
960 fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
961 fMVAVar_EleR9 = TMath::Min(double(ele->SCluster()->R9()), 5.0);
962 }
963 else {
964 fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
965 fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
966 fMVAVar_EleFBrem = ele->FBrem();
967 fMVAVar_EleEOverP = ele->ESuperClusterOverP();
968 fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
969 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->BestTrk()->P();
970 fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
971 fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
972 fMVAVar_EleR9 = ele->SCluster()->R9();
973 }
974
975 fMVAVar_EleHoverE = ele->HadronicOverEm();
976 fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
977 fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
978 if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
979 else {
980 if (fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ) {
981 fMVAVar_EleSigmaIPhiIPhi = 0;
982 } else {
983 fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
984 }
985 }
986
987 fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
988 fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
989 fMVAVar_EleIP3d = ele->Ip3dPV();
990 fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
991 fMVAVar_EledPhiCalo = ele->DeltaPhiSeedClusterTrackAtCalo();
992 fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
993 fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
994 fMVAVar_EleCovIEtaIPhi = ele->SCluster()->Seed()->CoviEtaiPhi();
995 fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
996
997 //Additional vars
998 if (ele->TrackerTrk()) {
999 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1000 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1001 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1002 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0 ||
1003 fMVAType == ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4
1004 ) {
1005 fMVAVar_EleKFTrkChiSqr = TMath::Min(double(ele->TrackerTrk()->RChi2()),10.0);
1006 } else {
1007 fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
1008 }
1009 fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
1010 fMVAVar_EleKFTrkNLayers = ele->CTFTrkNLayersWithMeasurement();
1011 } else {
1012 fMVAVar_EleKFTrkChiSqr = 0;
1013 fMVAVar_EleKFTrkNHits = -1;
1014 fMVAVar_EleKFTrkNLayers = -1;
1015 }
1016
1017 if( ele->SCluster()->Seed()->E5x5() > 0.0 ) {
1018 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1019 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1020 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1021 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0 ||
1022 fMVAType == ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4
1023 ) {
1024 fMVAVar_EleE1x5OverE5x5 = TMath::Min(TMath::Max(1 - double(ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5()) , -1.0),2.0);
1025 fMVAVar_EleOneMinusE1x5OverE5x5 = TMath::Min(TMath::Max(1 - double(ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5()) , -1.0),2.0);
1026 } else {
1027 fMVAVar_EleE1x5OverE5x5 = ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5();
1028 }
1029 } else {
1030 fMVAVar_EleE1x5OverE5x5 = -1.0;
1031 }
1032
1033 //Do Binding of MVA input variables
1034 if ( fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0
1035 || fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0
1036 || fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1
1037 || fMVAType == ElectronIDMVA::kIsoRingsV0
1038 || fMVAType == ElectronIDMVA::kIDHWW2012TrigV0
1039 ) {
1040 bindVariables();
1041 }
1042
1043
1044 //***********************************************************************
1045 // Si [Oct 26 , 2012]
1046 // Code Below was used for the 2011 HWW analysis
1047 // But we deprecate it now
1048 //***********************************************************************
1049 // fMVAVar_ElePt = ele->Pt();
1050 // fMVAVar_EleEta = ele->Eta();
1051
1052 // //set all input variables
1053 // fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
1054 // fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
1055 // fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
1056 // fMVAVar_EleHoverE = ele->HadronicOverEm();
1057 // fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
1058 // fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
1059 // fMVAVar_EleFBrem = ele->FBrem();
1060 // fMVAVar_EleEOverP = ele->ESuperClusterOverP();
1061 // fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
1062 // if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
1063 // else fMVAVar_EleSigmaIPhiIPhi = 0;
1064 // fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
1065 // fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->BestTrk()->P();
1066 // fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
1067 // fMVAVar_EleIP3d = ele->Ip3dPV();
1068 // fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
1069
1070 // fMVAVar_EleEEleClusterOverPout = ele->EEleClusterOverPout();
1071 // if (ele->TrackerTrk()) {
1072 // fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
1073 // fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
1074 // fMVAVar_EleKFTrkNLayers = ele->CTFTrkNLayersWithMeasurement();
1075 // } else {
1076 // fMVAVar_EleKFTrkChiSqr = -1;
1077 // fMVAVar_EleKFTrkNHits = 0;
1078 // fMVAVar_EleKFTrkNLayers = 0;
1079 // }
1080 // fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
1081 // fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
1082 // fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
1083 // fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
1084 // fMVAVar_EleE1x5OverE5x5 = ele->SCluster()->Seed()->E1x5() / ele->SCluster()->Seed()->E5x5();
1085 // fMVAVar_EleR9 = ele->SCluster()->R9();
1086 // fMVAVar_EleHoverE = ele->HadronicOverEm();
1087 // fMVAVar_EleEOverP = ele->ESuperClusterOverP();
1088 // fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->BestTrk()->P();
1089 // fMVAVar_EleR9 = ele->SCluster()->R9();
1090 // fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
1091
1092
1093 Double_t mva = -9999;
1094 TMVA::Reader *reader = 0;
1095 reader = fTMVAReader[GetMVABin( ele->SCluster()->Eta(), ele->Pt())];
1096 mva = reader->EvaluateMVA( fMethodname );
1097
1098 if (printDebug == kTRUE) {
1099 std::cout << "Debug Electron MVA: "
1100 << ele->Pt() << " " << ele->Eta() << " " << ele->Phi() << " : "
1101 << ele->Pt() << " " << ele->SCluster()->AbsEta() << " --> MVABin " << GetMVABin( ele->SCluster()->Eta(), ele->Pt()) << " : "
1102 << fMVAVar_EleSigmaIEtaIEta << " "
1103 << fMVAVar_EleDEtaIn << " "
1104 << fMVAVar_EleDPhiIn << " "
1105 << fMVAVar_EleHoverE << " "
1106 << fMVAVar_EleD0 << " "
1107 << fMVAVar_EleDZ << " "
1108 << fMVAVar_EleFBrem << " "
1109 << fMVAVar_EleEOverP << " "
1110 << fMVAVar_EleESeedClusterOverPout << " "
1111 << fMVAVar_EleSigmaIPhiIPhi << " "
1112 << fMVAVar_EleNBrem << " "
1113 << fMVAVar_EleOneOverEMinusOneOverP << " "
1114 << fMVAVar_EleESeedClusterOverPIn << " "
1115 << fMVAVar_EleIP3d << " "
1116 << fMVAVar_EleIP3dSig << " "
1117 << fMVAVar_EleGsfTrackChi2OverNdof << " "
1118 << fMVAVar_EledEtaCalo << " "
1119 << fMVAVar_EledPhiCalo << " "
1120 << fMVAVar_EleR9 << " "
1121 << fMVAVar_EleSCEtaWidth << " "
1122 << fMVAVar_EleSCPhiWidth << " "
1123 << fMVAVar_EleCovIEtaIPhi << " "
1124 << fMVAVar_ElePreShowerOverRaw << " "
1125 << fMVAVar_EleKFTrkChiSqr << " "
1126 << fMVAVar_EleKFTrkNHits << " "
1127 << fMVAVar_EleE1x5OverE5x5 << " "
1128 << " === : === "
1129 << mva << " "
1130 << std::endl;
1131
1132 }
1133
1134
1135
1136 return mva;
1137 }
1138
1139
1140 //--------------------------------------------------------------------------------------------------
1141 //MVA Includes Isolation with removal of other leptons
1142 //
1143 Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
1144 const PFCandidateCol *PFCands,
1145 const PileupEnergyDensityCol *PileupEnergyDensity,
1146 ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaTarget,
1147 const ElectronCol *goodElectrons,
1148 const MuonCol *goodMuons,
1149 Bool_t printDebug) {
1150
1151 if (!fIsInitialized) {
1152 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
1153 return -9999;
1154 }
1155
1156 Double_t Rho = 0;
1157 switch(fTheRhoType) {
1158 case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
1159 Rho = PileupEnergyDensity->At(0)->Rho();
1160 break;
1161 case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
1162 Rho = PileupEnergyDensity->At(0)->RhoLowEta();
1163 break;
1164 case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
1165 Rho = PileupEnergyDensity->At(0)->RhoRandom();
1166 break;
1167 case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
1168 Rho = PileupEnergyDensity->At(0)->RhoRandomLowEta();
1169 break;
1170 case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
1171 Rho = PileupEnergyDensity->At(0)->RhoKt6PFJets();
1172 break;
1173 default:
1174 // use the old default
1175 Rho = PileupEnergyDensity->At(0)->Rho();
1176 break;
1177 }
1178
1179 //set all input variables
1180 fMVAVar_ElePt = ele->Pt();
1181 fMVAVar_EleEta = ele->SCluster()->Eta();
1182 fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
1183
1184 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1185 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1186 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1187 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0) {
1188 fMVAVar_EleDEtaIn = TMath::Min(fabs(double(ele->DeltaEtaSuperClusterTrackAtVtx())),0.06); ;
1189 fMVAVar_EleDPhiIn = TMath::Min(fabs(double(ele->DeltaPhiSuperClusterTrackAtVtx())),0.6);
1190 fMVAVar_EleFBrem = TMath::Max(double(ele->FBrem()),-1.0);
1191 fMVAVar_EleEOverP = TMath::Min(double(ele->ESuperClusterOverP()), 20.0);
1192 fMVAVar_EleESeedClusterOverPout = TMath::Min(double(ele->ESeedClusterOverPout()),20.0);
1193 fMVAVar_EleEEleClusterOverPout = TMath::Min(double(ele->EEleClusterOverPout()),20.0);
1194 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->P();
1195 fMVAVar_EleGsfTrackChi2OverNdof = TMath::Min(double( ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof()),200.0);
1196 fMVAVar_EledEtaCalo = TMath::Min(fabs(double(ele->DeltaEtaSeedClusterTrackAtCalo())),0.2);
1197 fMVAVar_EleR9 = TMath::Min(double(ele->SCluster()->R9()), 5.0);
1198 } else {
1199 fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
1200 fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
1201 fMVAVar_EleFBrem = ele->FBrem();
1202 fMVAVar_EleEOverP = ele->ESuperClusterOverP();
1203 fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
1204 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->BestTrk()->P();
1205 fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
1206 fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
1207 fMVAVar_EleR9 = ele->SCluster()->R9();
1208 }
1209
1210 fMVAVar_EleHoverE = ele->HadronicOverEm();
1211 fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
1212 fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
1213 if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
1214 else {
1215 if (fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1) {
1216 fMVAVar_EleSigmaIPhiIPhi = 0;
1217 } else {
1218 fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
1219 }
1220 }
1221
1222 fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
1223 fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
1224 fMVAVar_EleIP3d = ele->Ip3dPV();
1225 fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
1226 fMVAVar_EledPhiCalo = ele->DeltaPhiSeedClusterTrackAtCalo();
1227 fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
1228 fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
1229 fMVAVar_EleCovIEtaIPhi = ele->SCluster()->Seed()->CoviEtaiPhi();
1230 fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
1231
1232 //Additional vars
1233 if (ele->TrackerTrk()) {
1234 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1235 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1236 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1237 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0 ) {
1238 fMVAVar_EleKFTrkChiSqr = TMath::Min(double(ele->TrackerTrk()->RChi2()),10.0);
1239 } else {
1240 fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
1241 }
1242 fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
1243 fMVAVar_EleKFTrkNLayers = ele->CTFTrkNLayersWithMeasurement();
1244 } else {
1245 fMVAVar_EleKFTrkChiSqr = 0;
1246 fMVAVar_EleKFTrkNHits = -1;
1247 fMVAVar_EleKFTrkNLayers = -1;
1248 }
1249
1250 if( ele->SCluster()->Seed()->E5x5() > 0.0 ) {
1251 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1252 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1253 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1254 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0 ) {
1255 fMVAVar_EleE1x5OverE5x5 = TMath::Min(TMath::Max(1 - double(ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5()) , -1.0),2.0);
1256 } else {
1257 fMVAVar_EleE1x5OverE5x5 = ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5();
1258 }
1259 } else {
1260 fMVAVar_EleE1x5OverE5x5 = -1.0;
1261 }
1262
1263
1264 Double_t tmpChargedIso_DR0p0To0p1 = 0;
1265 Double_t tmpChargedIso_DR0p1To0p2 = 0;
1266 Double_t tmpChargedIso_DR0p2To0p3 = 0;
1267 Double_t tmpChargedIso_DR0p3To0p4 = 0;
1268 Double_t tmpChargedIso_DR0p4To0p5 = 0;
1269 Double_t tmpGammaIso_DR0p0To0p1 = 0;
1270 Double_t tmpGammaIso_DR0p1To0p2 = 0;
1271 Double_t tmpGammaIso_DR0p2To0p3 = 0;
1272 Double_t tmpGammaIso_DR0p3To0p4 = 0;
1273 Double_t tmpGammaIso_DR0p4To0p5 = 0;
1274 Double_t tmpNeutralHadronIso_DR0p0To0p1 = 0;
1275 Double_t tmpNeutralHadronIso_DR0p1To0p2 = 0;
1276 Double_t tmpNeutralHadronIso_DR0p2To0p3 = 0;
1277 Double_t tmpNeutralHadronIso_DR0p3To0p4 = 0;
1278 Double_t tmpNeutralHadronIso_DR0p4To0p5 = 0;
1279
1280 for (UInt_t p=0; p<PFCands->GetEntries();p++) {
1281 const PFCandidate *pf = PFCands->At(p);
1282
1283 //exclude the electron itself
1284 if(pf->GsfTrk() && ele->GsfTrk() &&
1285 pf->GsfTrk() == ele->GsfTrk()) continue;
1286 if(pf->TrackerTrk() && ele->TrackerTrk() &&
1287 pf->TrackerTrk() == ele->TrackerTrk()) continue;
1288
1289 //************************************************************
1290 // New Isolation Calculations
1291 //************************************************************
1292 Double_t dr = MathUtils::DeltaR(ele->Mom(), pf->Mom());
1293
1294 if (dr < 1.0) {
1295 Bool_t IsLeptonFootprint = kFALSE;
1296 //************************************************************
1297 // Lepton Footprint Removal
1298 //************************************************************
1299 if(goodElectrons) {
1300 for (UInt_t q=0; q < goodElectrons->GetEntries() ; ++q) {
1301 //if pf candidate matches an electron passing ID cuts, then veto it
1302 if(pf->GsfTrk() && goodElectrons->At(q)->GsfTrk() &&
1303 pf->GsfTrk() == goodElectrons->At(q)->GsfTrk()) IsLeptonFootprint = kTRUE;
1304 if(pf->TrackerTrk() && goodElectrons->At(q)->TrackerTrk() &&
1305 pf->TrackerTrk() == goodElectrons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
1306 //if pf candidate lies in veto regions of electron passing ID cuts, then veto it
1307 if(pf->BestTrk() && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479
1308 && MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.015) IsLeptonFootprint = kTRUE;
1309 if(pf->PFType() == PFCandidate::eGamma && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479 &&
1310 MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.08) IsLeptonFootprint = kTRUE;
1311 }
1312 }
1313 if(goodMuons) {
1314 for (UInt_t q=0; q < goodMuons->GetEntries() ; ++q) {
1315 //if pf candidate matches an muon passing ID cuts, then veto it
1316 if(pf->TrackerTrk() && goodMuons->At(q)->TrackerTrk() &&
1317 pf->TrackerTrk() == goodMuons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
1318 //if pf candidate lies in veto regions of muon passing ID cuts, then veto it
1319 if(pf->BestTrk() && MathUtils::DeltaR(goodMuons->At(q)->Mom(), pf->Mom()) < 0.01) IsLeptonFootprint = kTRUE;
1320 }
1321 }
1322
1323 if (!IsLeptonFootprint) {
1324 Bool_t passVeto = kTRUE;
1325 //Charged
1326 if(pf->BestTrk()) {
1327 if (!(fabs(pf->BestTrk()->DzCorrected(*vertex) - ele->BestTrk()->DzCorrected(*vertex)) < 0.2)) passVeto = kFALSE;
1328 //************************************************************
1329 // Veto any PFmuon, or PFEle
1330 if (pf->PFType() == PFCandidate::eElectron || pf->PFType() == PFCandidate::eMuon) passVeto = kFALSE;
1331 //************************************************************
1332 //************************************************************
1333 // Footprint Veto
1334 if (fabs(ele->SCluster()->Eta()) >= 1.479 && dr < 0.015) passVeto = kFALSE;
1335 //************************************************************
1336 if (passVeto) {
1337 if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
1338 if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
1339 if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
1340 if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
1341 if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
1342 } //pass veto
1343
1344 }
1345 //Gamma
1346 else if (pf->PFType() == PFCandidate::eGamma) {
1347 //************************************************************
1348 // Footprint Veto
1349 if (fabs(ele->SCluster()->Eta()) >= 1.479) {
1350 if (dr < 0.08) passVeto = kFALSE;
1351 }
1352 //************************************************************
1353
1354 if (passVeto) {
1355 if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
1356 if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
1357 if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
1358 if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
1359 if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
1360 }
1361 }
1362 //NeutralHadron
1363 else {
1364 if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
1365 if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
1366 if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
1367 if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
1368 if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
1369 }
1370 } //not lepton footprint
1371 } //in 1.0 dr cone
1372 } //loop over PF candidates
1373
1374 fMVAVar_ChargedIso_DR0p0To0p1 = TMath::Min((tmpChargedIso_DR0p0To0p1)/ele->Pt(), 2.5);
1375 fMVAVar_ChargedIso_DR0p1To0p2 = TMath::Min((tmpChargedIso_DR0p1To0p2)/ele->Pt(), 2.5);
1376 fMVAVar_ChargedIso_DR0p2To0p3 = TMath::Min((tmpChargedIso_DR0p2To0p3)/ele->Pt(), 2.5);
1377 fMVAVar_ChargedIso_DR0p3To0p4 = TMath::Min((tmpChargedIso_DR0p3To0p4)/ele->Pt(), 2.5);
1378 fMVAVar_ChargedIso_DR0p4To0p5 = TMath::Min((tmpChargedIso_DR0p4To0p5)/ele->Pt(), 2.5);
1379 fMVAVar_GammaIso_DR0p0To0p1 = TMath::Max(TMath::Min((tmpGammaIso_DR0p0To0p1 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p0To0p1, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1380 fMVAVar_GammaIso_DR0p1To0p2 = TMath::Max(TMath::Min((tmpGammaIso_DR0p1To0p2 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p1To0p2, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1381 fMVAVar_GammaIso_DR0p2To0p3 = TMath::Max(TMath::Min((tmpGammaIso_DR0p2To0p3 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p2To0p3, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1382 fMVAVar_GammaIso_DR0p3To0p4 = TMath::Max(TMath::Min((tmpGammaIso_DR0p3To0p4 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p3To0p4, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1383 fMVAVar_GammaIso_DR0p4To0p5 = TMath::Max(TMath::Min((tmpGammaIso_DR0p4To0p5 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoDR0p4To0p5, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1384 fMVAVar_NeutralHadronIso_DR0p0To0p1 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p0To0p1 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p0To0p1, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1385 fMVAVar_NeutralHadronIso_DR0p1To0p2 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p1To0p2 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p1To0p2, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1386 fMVAVar_NeutralHadronIso_DR0p2To0p3 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p2To0p3 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p2To0p3, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1387 fMVAVar_NeutralHadronIso_DR0p3To0p4 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p3To0p4 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p3To0p4, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1388 fMVAVar_NeutralHadronIso_DR0p4To0p5 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p4To0p5 - Rho*ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIsoDR0p4To0p5, ele->SCluster()->Eta(), EffectiveAreaTarget))/ele->Pt(), 2.5), 0.0);
1389
1390 //Do Binding of MVA input variables
1391 if ( fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0
1392 || fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0
1393 || fMVAType == ElectronIDMVA::kIsoRingsV0
1394 || fMVAType == ElectronIDMVA::kIDHWW2012TrigV0) {
1395 bindVariables();
1396 }
1397
1398 Double_t mva = -9999;
1399 TMVA::Reader *reader = 0;
1400
1401 reader = fTMVAReader[GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt)];
1402 mva = reader->EvaluateMVA( fMethodname );
1403
1404 if (printDebug == kTRUE) {
1405
1406 std::cout << "Debug Electron MVA-ID: "
1407 << fMVAVar_ElePt<< " " << fMVAVar_EleEta << " "
1408 << " --> MVABin " << GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt) << " : "
1409 << " fbrem " << fMVAVar_EleFBrem
1410 << " kfchi2 " << fMVAVar_EleKFTrkChiSqr
1411 << " kfhits " << fMVAVar_EleKFTrkNLayers
1412 << " kfhitsall " << fMVAVar_EleKFTrkNHits
1413 << " gsfchi2 " << fMVAVar_EleGsfTrackChi2OverNdof
1414 << " deta " << fMVAVar_EleDEtaIn
1415 << " dphi " << fMVAVar_EleDPhiIn
1416 << " detacalo " << fMVAVar_EledEtaCalo
1417 << " see " << fMVAVar_EleSigmaIEtaIEta
1418 << " spp " << fMVAVar_EleSigmaIPhiIPhi
1419 << " etawidth " << fMVAVar_EleSCEtaWidth
1420 << " phiwidth " << fMVAVar_EleSCPhiWidth
1421 << " e1x5e5x5 " << fMVAVar_EleE1x5OverE5x5
1422 << " R9 " << fMVAVar_EleR9
1423 << " HoE " << fMVAVar_EleHoverE
1424 << " EoP " << fMVAVar_EleEOverP
1425 << " IoEmIoP " << fMVAVar_EleOneOverEMinusOneOverP
1426 << " eleEoPout " << fMVAVar_EleEEleClusterOverPout
1427 << " EoPout " << fMVAVar_EleESeedClusterOverPout
1428 << " PreShowerOverRaw" << fMVAVar_ElePreShowerOverRaw
1429 << " d0 " << fMVAVar_EleD0
1430 << " ip3d " << fMVAVar_EleIP3d
1431 << " eta " << fMVAVar_EleEta
1432 << " pt " << fMVAVar_ElePt
1433 << " === : === "
1434 << mva << " "
1435 << std::endl;
1436 std::cout << "Debug Electron MVA-ISO: "
1437 << fMVAVar_ChargedIso_DR0p0To0p1 << " "
1438 << fMVAVar_ChargedIso_DR0p1To0p2 << " "
1439 << fMVAVar_ChargedIso_DR0p2To0p3 << " "
1440 << fMVAVar_ChargedIso_DR0p3To0p4 << " "
1441 << fMVAVar_ChargedIso_DR0p4To0p5 << " "
1442 << fMVAVar_GammaIso_DR0p0To0p1 << " "
1443 << fMVAVar_GammaIso_DR0p1To0p2 << " "
1444 << fMVAVar_GammaIso_DR0p2To0p3 << " "
1445 << fMVAVar_GammaIso_DR0p3To0p4 << " "
1446 << fMVAVar_GammaIso_DR0p4To0p5 << " "
1447 << fMVAVar_NeutralHadronIso_DR0p0To0p1 << " "
1448 << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
1449 << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
1450 << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
1451 << fMVAVar_NeutralHadronIso_DR0p4To0p5 << " "
1452 << std::endl;
1453 }
1454
1455 return mva;
1456 }
1457
1458
1459 //--------------------------------------------------------------------------------------------------
1460 //MVA Includes Isolation
1461 //
1462 Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
1463 const VertexCol *primaryVertices,
1464 const PFCandidateCol *PFCands,
1465 const PileupEnergyDensityCol *PileupEnergyDensity,
1466 ElectronTools::EElectronEffectiveAreaTarget EffectiveAreaTarget,
1467 Bool_t printDebug) {
1468
1469 if (!fIsInitialized) {
1470 std::cout << "Error: ElectronIDMVA not properly initialized.\n";
1471 return -9999;
1472 }
1473
1474 Double_t Rho = 0;
1475 switch(fTheRhoType) {
1476 case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
1477 Rho = PileupEnergyDensity->At(0)->Rho();
1478 break;
1479 case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
1480 Rho = PileupEnergyDensity->At(0)->RhoLowEta();
1481 break;
1482 case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
1483 Rho = PileupEnergyDensity->At(0)->RhoRandom();
1484 break;
1485 case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
1486 Rho = PileupEnergyDensity->At(0)->RhoRandomLowEta();
1487 break;
1488 case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
1489 Rho = PileupEnergyDensity->At(0)->RhoKt6PFJets();
1490 break;
1491 default:
1492 // use the old default
1493 Rho = PileupEnergyDensity->At(0)->Rho();
1494 break;
1495 }
1496
1497 //set all input variables
1498 fMVAVar_ElePt = ele->Pt();
1499 fMVAVar_EleEta = ele->SCluster()->Eta();
1500 fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
1501
1502 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1503 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1504 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1505 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0
1506 ) {
1507 fMVAVar_EleDEtaIn = TMath::Min(fabs(double(ele->DeltaEtaSuperClusterTrackAtVtx())),0.06); ;
1508 fMVAVar_EleDPhiIn = TMath::Min(fabs(double(ele->DeltaPhiSuperClusterTrackAtVtx())),0.6);
1509 fMVAVar_EleFBrem = TMath::Max(double(ele->FBrem()),-1.0);
1510 fMVAVar_EleEOverP = TMath::Min(double(ele->ESuperClusterOverP()), 20.0);
1511 fMVAVar_EleESeedClusterOverPout = TMath::Min(double(ele->ESeedClusterOverPout()),20.0);
1512 fMVAVar_EleEEleClusterOverPout = TMath::Min(double(ele->EEleClusterOverPout()),20.0);
1513 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->P();
1514 fMVAVar_EleGsfTrackChi2OverNdof = TMath::Min(double( ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof()),200.0);
1515 fMVAVar_EledEtaCalo = TMath::Min(fabs(double(ele->DeltaEtaSeedClusterTrackAtCalo())),0.2);
1516 fMVAVar_EleR9 = TMath::Min(double(ele->SCluster()->R9()), 5.0);
1517 }
1518 else if (fMVAType == ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4) {
1519 fMVAVar_EleDEtaIn = TMath::Min(fabs(double(ele->DeltaEtaSuperClusterTrackAtVtx())),0.06); ;
1520 fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
1521 fMVAVar_EleFBrem = TMath::Max(double(ele->FBrem()),-1.0);
1522 fMVAVar_EleEOverP = TMath::Min(double(ele->ESuperClusterOverP()), 20.0);
1523 fMVAVar_EleESeedClusterOverPout = TMath::Min(double(ele->ESeedClusterOverPout()),20.0);
1524 fMVAVar_EleEEleClusterOverPout = TMath::Min(double(ele->EEleClusterOverPout()),20.0);
1525 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->PIn();
1526 fMVAVar_EleGsfTrackChi2OverNdof = TMath::Min(double( ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof()),200.0);
1527 fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
1528 fMVAVar_EleR9 = TMath::Min(double(ele->SCluster()->R9()), 5.0);
1529 }
1530 else {
1531 fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
1532 fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
1533 fMVAVar_EleFBrem = ele->FBrem();
1534 fMVAVar_EleEOverP = ele->ESuperClusterOverP();
1535 fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
1536 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->EcalEnergy())) - 1.0 / ele->BestTrk()->P();
1537 fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
1538 fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
1539 fMVAVar_EleR9 = ele->SCluster()->R9();
1540 }
1541
1542 fMVAVar_EleHoverE = ele->HadronicOverEm();
1543 fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
1544 fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
1545 if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
1546 else {
1547 if (fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ) {
1548 fMVAVar_EleSigmaIPhiIPhi = 0;
1549 } else {
1550 fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
1551 }
1552 }
1553
1554 fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
1555 fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
1556 fMVAVar_EleIP3d = ele->Ip3dPV();
1557 fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
1558 fMVAVar_EledPhiCalo = ele->DeltaPhiSeedClusterTrackAtCalo();
1559 fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
1560 fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
1561 fMVAVar_EleCovIEtaIPhi = ele->SCluster()->Seed()->CoviEtaiPhi();
1562 fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
1563
1564 //Additional vars
1565 if (ele->TrackerTrk()) {
1566 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1567 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1568 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1569 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0 ||
1570 fMVAType == ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4
1571 ) {
1572 fMVAVar_EleKFTrkChiSqr = TMath::Min(double(ele->TrackerTrk()->RChi2()),10.0);
1573 } else {
1574 fMVAVar_EleKFTrkChiSqr = ele->TrackerTrk()->RChi2();
1575 }
1576 fMVAVar_EleKFTrkNHits = ele->TrackerTrk()->NHits();
1577 fMVAVar_EleKFTrkNLayers = ele->CTFTrkNLayersWithMeasurement();
1578 } else {
1579 fMVAVar_EleKFTrkChiSqr = 0;
1580 fMVAVar_EleKFTrkNHits = -1;
1581 fMVAVar_EleKFTrkNLayers = -1;
1582 }
1583
1584 if( ele->SCluster()->Seed()->E5x5() > 0.0 ) {
1585 if (fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0 ||
1586 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0 ||
1587 fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV1 ||
1588 fMVAType == ElectronIDMVA::kIDHWW2012TrigV0 ||
1589 fMVAType == ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4
1590 ) {
1591 fMVAVar_EleE1x5OverE5x5 = TMath::Min(TMath::Max(1 - double(ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5()) , -1.0),2.0);
1592 fMVAVar_EleOneMinusE1x5OverE5x5 = TMath::Min(TMath::Max(1 - double(ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5()) , -1.0),2.0);
1593 } else {
1594 fMVAVar_EleE1x5OverE5x5 = ele->SCluster()->Seed()->E1x5()/ele->SCluster()->Seed()->E5x5();
1595 }
1596 } else {
1597 fMVAVar_EleE1x5OverE5x5 = -1.0;
1598 }
1599
1600
1601 Double_t tmpChargedIso_DR0p0To0p1 = 0;
1602 Double_t tmpChargedIso_DR0p1To0p2 = 0;
1603 Double_t tmpChargedIso_DR0p2To0p3 = 0;
1604 Double_t tmpChargedIso_DR0p3To0p4 = 0;
1605 Double_t tmpChargedIso_DR0p4To0p5 = 0;
1606 Double_t tmpGammaIso_DR0p0To0p1 = 0;
1607 Double_t tmpGammaIso_DR0p1To0p2 = 0;
1608 Double_t tmpGammaIso_DR0p2To0p3 = 0;
1609 Double_t tmpGammaIso_DR0p3To0p4 = 0;
1610 Double_t tmpGammaIso_DR0p4To0p5 = 0;
1611 Double_t tmpNeutralHadronIso_DR0p0To0p1 = 0;
1612 Double_t tmpNeutralHadronIso_DR0p1To0p2 = 0;
1613 Double_t tmpNeutralHadronIso_DR0p2To0p3 = 0;
1614 Double_t tmpNeutralHadronIso_DR0p3To0p4 = 0;
1615 Double_t tmpNeutralHadronIso_DR0p4To0p5 = 0;
1616
1617 for (UInt_t p=0; p<PFCands->GetEntries();p++) {
1618 const PFCandidate *pf = PFCands->At(p);
1619
1620 //************************************************************
1621 // New Isolation Calculations
1622 //************************************************************
1623 Double_t dr = MathUtils::DeltaR(ele->Mom(), pf->Mom());
1624
1625 if (dr < 0.5) {
1626
1627 Bool_t passVeto = kTRUE;
1628 //Charged
1629 if(pf->BestTrk()) {
1630
1631 //*************************************************
1632 //Use only PFNoPU
1633 //*************************************************
1634 Bool_t isPFNoPU = kFALSE;
1635 if(pf->PFType() == PFCandidate::eHadron) {
1636 if(pf->HasTrackerTrk() &&
1637 primaryVertices->At(0)->HasTrack(pf->TrackerTrk()) &&
1638 primaryVertices->At(0)->TrackWeight(pf->TrackerTrk()) > 0) {
1639 isPFNoPU = kTRUE;
1640 } else {
1641
1642 Bool_t vertexFound = kFALSE;
1643 const Vertex *closestVtx = 0;
1644 Double_t dzmin = 10000;
1645
1646 // loop over vertices
1647 for(UInt_t j = 0; j < primaryVertices->GetEntries(); j++) {
1648 const Vertex *vtx = primaryVertices->At(j);
1649 assert(vtx);
1650
1651 if(pf->HasTrackerTrk() &&
1652 vtx->HasTrack(pf->TrackerTrk()) &&
1653 vtx->TrackWeight(pf->TrackerTrk()) > 0) {
1654 vertexFound = kTRUE;
1655 closestVtx = vtx;
1656 break;
1657 }
1658 Double_t dz = fabs(pf->SourceVertex().Z() - vtx->Z());
1659 if(dz < dzmin) {
1660 closestVtx = vtx;
1661 dzmin = dz;
1662 }
1663 }
1664
1665 Bool_t fCheckClosestZVertex = kTRUE; //we use option 1
1666 if(fCheckClosestZVertex) {
1667 // Fallback: if track is not associated with any vertex,
1668 // associate it with the vertex closest in z
1669 if(vertexFound || closestVtx != vertex) {
1670 isPFNoPU = kFALSE;
1671 } else {
1672 isPFNoPU = kTRUE;
1673 }
1674 } else {
1675 if(vertexFound && closestVtx != vertex) {
1676 isPFNoPU = kFALSE;
1677 } else {
1678 isPFNoPU = kTRUE;
1679 }
1680 }
1681 } //hadron & trk stuff
1682 } else { // hadron
1683 //
1684 isPFNoPU = kTRUE;
1685 }
1686 if (!isPFNoPU) continue;
1687
1688 //************************************************************
1689 // Veto any PFmuon, or PFEle
1690 if (pf->PFType() == PFCandidate::eElectron || pf->PFType() == PFCandidate::eMuon) passVeto = kFALSE;
1691 //************************************************************
1692 //************************************************************
1693 // Footprint Veto
1694 if (fabs(ele->SCluster()->Eta()) >= 1.479 && dr < 0.015) passVeto = kFALSE;
1695 //************************************************************
1696 if (passVeto) {
1697 if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
1698 if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
1699 if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
1700 if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
1701 if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
1702 } //pass veto
1703
1704 }
1705 //Gamma
1706 else if (pf->PFType() == PFCandidate::eGamma) {
1707 //************************************************************
1708 // Footprint Veto
1709 if (fabs(ele->SCluster()->Eta()) > 1.479) {
1710 if (dr < 0.08) passVeto = kFALSE;
1711 }
1712 //************************************************************
1713
1714 if (passVeto) {
1715 if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
1716 if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
1717 if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
1718 if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
1719 if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
1720 }
1721 }
1722 //NeutralHadron
1723 else {
1724 if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
1725 if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
1726 if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
1727 if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
1728 if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
1729 }
1730 } //in 1.0 dr cone
1731 } //loop over PF candidates
1732
1733 fMVAVar_ChargedIso_DR0p0To0p1 = tmpChargedIso_DR0p0To0p1/ele->Pt();
1734 fMVAVar_ChargedIso_DR0p1To0p2 = tmpChargedIso_DR0p1To0p2/ele->Pt();
1735 fMVAVar_ChargedIso_DR0p2To0p3 = tmpChargedIso_DR0p2To0p3/ele->Pt();
1736 fMVAVar_ChargedIso_DR0p3To0p4 = tmpChargedIso_DR0p3To0p4/ele->Pt();
1737 fMVAVar_ChargedIso_DR0p4To0p5 = tmpChargedIso_DR0p4To0p5/ele->Pt();
1738 fMVAVar_GammaIso_DR0p0To0p1 = tmpGammaIso_DR0p0To0p1/ele->Pt();
1739 fMVAVar_GammaIso_DR0p1To0p2 = tmpGammaIso_DR0p1To0p2/ele->Pt();
1740 fMVAVar_GammaIso_DR0p2To0p3 = tmpGammaIso_DR0p2To0p3/ele->Pt();
1741 fMVAVar_GammaIso_DR0p3To0p4 = tmpGammaIso_DR0p3To0p4/ele->Pt();
1742 fMVAVar_GammaIso_DR0p4To0p5 = tmpGammaIso_DR0p4To0p5/ele->Pt();
1743 fMVAVar_NeutralHadronIso_DR0p0To0p1 = tmpNeutralHadronIso_DR0p0To0p1/ele->Pt();
1744 fMVAVar_NeutralHadronIso_DR0p1To0p2 = tmpNeutralHadronIso_DR0p1To0p2/ele->Pt();
1745 fMVAVar_NeutralHadronIso_DR0p2To0p3 = tmpNeutralHadronIso_DR0p2To0p3/ele->Pt();
1746 fMVAVar_NeutralHadronIso_DR0p3To0p4 = tmpNeutralHadronIso_DR0p3To0p4/ele->Pt();
1747 fMVAVar_NeutralHadronIso_DR0p4To0p5 = tmpNeutralHadronIso_DR0p4To0p5/ele->Pt();
1748 fMVAVar_Rho = Rho;
1749
1750 //Do Binding of MVA input variables
1751 if ( fMVAType == ElectronIDMVA::kIDEGamma2012TrigV0
1752 || fMVAType == ElectronIDMVA::kIDEGamma2012NonTrigV0
1753 || fMVAType == ElectronIDMVA::kIsoRingsV0
1754 || fMVAType == ElectronIDMVA::kIDHWW2012TrigV0
1755 ) {
1756 bindVariables();
1757 }
1758
1759 Double_t mva = -9999;
1760 TMVA::Reader *reader = 0;
1761
1762 reader = fTMVAReader[GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt)];
1763 mva = reader->EvaluateMVA( fMethodname );
1764
1765 if (printDebug == kTRUE) {
1766
1767 std::cout << "Debug Electron MVA-ID: "
1768 << fMVAVar_ElePt<< " " << fMVAVar_EleEta << " "
1769 << " --> MVABin " << GetMVABin( fMVAVar_EleEta , fMVAVar_ElePt) << " : "
1770 << " fbrem " << fMVAVar_EleFBrem
1771 << " kfchi2 " << fMVAVar_EleKFTrkChiSqr
1772 << " kfhits " << fMVAVar_EleKFTrkNLayers
1773 << " kfhitsall " << fMVAVar_EleKFTrkNHits
1774 << " gsfchi2 " << fMVAVar_EleGsfTrackChi2OverNdof
1775 << " deta " << fMVAVar_EleDEtaIn
1776 << " dphi " << fMVAVar_EleDPhiIn
1777 << " detacalo " << fMVAVar_EledEtaCalo
1778 << " see " << fMVAVar_EleSigmaIEtaIEta
1779 << " spp " << fMVAVar_EleSigmaIPhiIPhi
1780 << " etawidth " << fMVAVar_EleSCEtaWidth
1781 << " phiwidth " << fMVAVar_EleSCPhiWidth
1782 << " e1x5e5x5 " << fMVAVar_EleOneMinusE1x5OverE5x5
1783 << " R9 " << fMVAVar_EleR9
1784 << " HoE " << fMVAVar_EleHoverE
1785 << " EoP " << fMVAVar_EleEOverP
1786 << " IoEmIoP " << fMVAVar_EleOneOverEMinusOneOverP
1787 << " eleEoPout " << fMVAVar_EleEEleClusterOverPout
1788 << " EoPout " << fMVAVar_EleESeedClusterOverPout
1789 << " PreShowerOverRaw" << fMVAVar_ElePreShowerOverRaw
1790 << " d0 " << fMVAVar_EleD0
1791 << " ip3d " << fMVAVar_EleIP3d
1792 << " eta " << fMVAVar_EleEta
1793 << " pt " << fMVAVar_ElePt
1794 << " === : === "
1795 << mva << " "
1796 << std::endl;
1797 std::cout << "Debug Electron MVA-ISO: "
1798 << fMVAVar_ChargedIso_DR0p0To0p1 << " "
1799 << fMVAVar_ChargedIso_DR0p1To0p2 << " "
1800 << fMVAVar_ChargedIso_DR0p2To0p3 << " "
1801 << fMVAVar_ChargedIso_DR0p3To0p4 << " "
1802 << fMVAVar_ChargedIso_DR0p4To0p5 << " "
1803 << fMVAVar_GammaIso_DR0p0To0p1 << " "
1804 << fMVAVar_GammaIso_DR0p1To0p2 << " "
1805 << fMVAVar_GammaIso_DR0p2To0p3 << " "
1806 << fMVAVar_GammaIso_DR0p3To0p4 << " "
1807 << fMVAVar_GammaIso_DR0p4To0p5 << " "
1808 << fMVAVar_NeutralHadronIso_DR0p0To0p1 << " "
1809 << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
1810 << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
1811 << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
1812 << fMVAVar_NeutralHadronIso_DR0p4To0p5 << " "
1813 << fMVAVar_Rho << " "
1814 << std::endl;
1815 }
1816
1817 return mva;
1818 }
1819
1820
1821 void ElectronIDMVA::bindVariables() {
1822
1823 // this binding is needed for variables that sometime diverge.
1824
1825 if(fMVAVar_EleFBrem < -1.)
1826 fMVAVar_EleFBrem = -1.;
1827
1828 fMVAVar_EleDEtaIn = fabs(fMVAVar_EleDEtaIn);
1829 if(fMVAVar_EleDEtaIn > 0.06)
1830 fMVAVar_EleDEtaIn = 0.06;
1831
1832
1833 fMVAVar_EleDPhiIn = fabs(fMVAVar_EleDPhiIn);
1834 if(fMVAVar_EleDPhiIn > 0.6)
1835 fMVAVar_EleDPhiIn = 0.6;
1836
1837
1838 if(fMVAVar_EleESeedClusterOverPout > 20.)
1839 fMVAVar_EleESeedClusterOverPout = 20.;
1840
1841 if(fMVAVar_EleEOverP > 20.)
1842 fMVAVar_EleEOverP = 20.;
1843
1844 if(fMVAVar_EleEEleClusterOverPout > 20.)
1845 fMVAVar_EleEEleClusterOverPout = 20.;
1846
1847
1848 fMVAVar_EledEtaCalo = fabs(fMVAVar_EledEtaCalo);
1849 if(fMVAVar_EledEtaCalo > 0.2)
1850 fMVAVar_EledEtaCalo = 0.2;
1851
1852
1853 if(fMVAVar_EleE1x5OverE5x5 < -1.)
1854 fMVAVar_EleE1x5OverE5x5 = -1;
1855
1856 if(fMVAVar_EleE1x5OverE5x5 > 2.)
1857 fMVAVar_EleE1x5OverE5x5 = 2.;
1858
1859
1860
1861 if(fMVAVar_EleR9 > 5)
1862 fMVAVar_EleR9 = 5;
1863
1864 if(fMVAVar_EleGsfTrackChi2OverNdof > 200.)
1865 fMVAVar_EleGsfTrackChi2OverNdof = 200;
1866
1867
1868 if(fMVAVar_EleKFTrkChiSqr > 10.)
1869 fMVAVar_EleKFTrkChiSqr = 10.;
1870
1871 // Needed for a bug in CMSSW_420, fixed in more recent CMSSW versions
1872 if(std::isnan(fMVAVar_EleSigmaIPhiIPhi))
1873 fMVAVar_EleSigmaIPhiIPhi = 0.;
1874
1875
1876 return;
1877 }