ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.136
Committed: Sat Feb 23 14:51:25 2013 UTC (12 years, 2 months ago) by mingyang
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_029c, Mit_029b, Mit_029a
Changes since 1.135: +24 -6 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 // $Id: ElectronIDMod.cc,v 1.135 2013/01/07 22:14:10 mingyang Exp $
2
3 #include "MitPhysics/Mods/interface/ElectronIDMod.h"
4 #include "MitAna/DataTree/interface/StableData.h"
5 #include "MitAna/DataTree/interface/ElectronFwd.h"
6 #include "MitAna/DataTree/interface/MuonFwd.h"
7 #include "MitAna/DataTree/interface/VertexCol.h"
8 #include "MitAna/DataTree/interface/TriggerObjectCol.h"
9 #include "MitAna/DataTree/interface/DecayParticleCol.h"
10 #include "MitAna/DataTree/interface/PFCandidateCol.h"
11 #include "MitPhysics/Init/interface/ModNames.h"
12 #include "TMVA/Tools.h"
13 #include "TMVA/Reader.h"
14
15 using namespace mithep;
16
17 ClassImp(mithep::ElectronIDMod)
18
19 //--------------------------------------------------------------------------------------------------
20 ElectronIDMod::ElectronIDMod(const char *name, const char *title) :
21 BaseMod(name,title),
22 fPrintMVADebugInfo(kFALSE),
23 fElectronBranchName(Names::gkElectronBrn),
24 fConversionBranchName(Names::gkMvfConversionBrn),
25 fGoodElectronsName(ModNames::gkGoodElectronsName),
26 fNonIsolatedMuonsName("random"),
27 fNonIsolatedElectronsName("random"),
28 fVertexName(ModNames::gkGoodVertexesName),
29 fBeamSpotName(Names::gkBeamSpotBrn),
30 fTrackName(Names::gkTrackBrn),
31 fPFCandidatesName(Names::gkPFCandidatesBrn),
32 fPFNoPileUpName("PFNoPileUp"),
33 fElectronIDType("CustomTight"),
34 fElectronIsoType("PFIso"),
35 fTrigObjectsName("HLTModTrigObjs"),
36 fElectronPtMin(10),
37 fElectronEtMin(0.0),
38 fElectronEtaMax(2.5),
39 fIDLikelihoodCut(-999.0),
40 fTrackIsolationCut(5.0),
41 fCaloIsolationCut(5.0),
42 fEcalJuraIsoCut(5.0),
43 fHcalIsolationCut(5.0),
44 fCombIsolationCut(0.1),
45 fCombRelativeIsolationCut(0.10),
46 fCombRelativeIsolationCut_EE(0.10),
47 fPFIsolationCut(-1.0),
48 fApplyConvFilterType1(kTRUE),
49 fApplyConvFilterType2(kFALSE),
50 fNWrongHitsMax(0),
51 fNExpectedHitsInnerCut(999),
52 fInvertNExpectedHitsInnerCut(kFALSE),
53 fCombinedIdCut(kFALSE),
54 fApplySpikeRemoval(kTRUE),
55 fApplyD0Cut(kTRUE),
56 fApplyDZCut(kTRUE),
57 fChargeFilter(kTRUE),
58 fD0Cut(0.020),
59 fDZCut(0.10),
60 fWhichVertex(-1),
61 fApplyTriggerMatching(kFALSE),
62 fApplyEcalSeeded(kFALSE),
63 fApplyCombinedIso(kTRUE),
64 fApplyEcalFiducial(kFALSE),
65 fElectronsFromBranch(kTRUE),
66 fElIdType(ElectronTools::kIdUndef),
67 fElIsoType(ElectronTools::kIsoUndef),
68 fElectrons(0),
69 fConversions(0),
70 fVertices(0),
71 fBeamSpot(0),
72 fTracks(0),
73 fPFCandidates(0),
74 fPFNoPileUpCands(0),
75 fIntRadius(0.0),
76 fNonIsolatedMuons(0),
77 fNonIsolatedElectrons(0),
78 fLH(0),
79 fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn),
80 fPileupEnergyDensity(0),
81 fElectronIDMVA(0),
82 fElectronMVAWeights_Subdet0Pt10To20(""),
83 fElectronMVAWeights_Subdet1Pt10To20(""),
84 fElectronMVAWeights_Subdet2Pt10To20(""),
85 fElectronMVAWeights_Subdet0Pt20ToInf(""),
86 fElectronMVAWeights_Subdet1Pt20ToInf(""),
87 fElectronMVAWeights_Subdet2Pt20ToInf(""),
88 fTheRhoType(RhoUtilities::DEFAULT),
89 fPVName(Names::gkPVBeamSpotBrn)
90 {
91 // Constructor.
92 }
93
94 //--------------------------------------------------------------------------------------------------
95 Bool_t ElectronIDMod::PassLikelihoodID(const Electron *ele) const
96 {
97
98 Double_t LikelihoodValue = ElectronTools::Likelihood(fLH, ele);
99
100 double likCut = fIDLikelihoodCut;
101 if(likCut > -900){
102 if(ele->Pt() > 20){
103 if(ele->SCluster()->AbsEta() < 1.479){
104 if(ele->NumberOfClusters() - 1 == 0) likCut = 3.5;
105 else likCut = 4.0;
106 }
107 else {
108 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
109 else likCut = 4.0;
110 }
111 }
112 else {
113 if(ele->SCluster()->AbsEta() < 1.479){
114 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
115 else likCut = 4.5;
116 }
117 else {
118 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
119 else likCut = 4.0;
120 }
121 }
122 }
123 if (LikelihoodValue > likCut) return kTRUE;
124 return kFALSE;
125 }
126
127 //--------------------------------------------------------------------------------------------------
128 Bool_t ElectronIDMod::PassMVAID(const Electron *el, ElectronTools::EElIdType idType,
129 const Vertex *vertex, const PFCandidateCol *PFCands,
130 const PileupEnergyDensityCol *PileupEnergyDensity) const
131 {
132 Bool_t isDebug = kFALSE;
133 Double_t MVAValue = 0;
134 if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombined) {
135 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, fIntRadius);
136 }
137 else if(idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
138 ElectronOArr *tempElectrons = new ElectronOArr;
139 MuonOArr *tempMuons = new MuonOArr;
140 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, ElectronTools::kEleEANoCorr,
141 tempElectrons, tempMuons, isDebug);
142 delete tempElectrons;
143 delete tempMuons;
144 }
145 else if(idType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4) {
146 MVAValue = fElectronIDMVA->MVAValue(el, vertex, fVertices, PFCands,
147 PileupEnergyDensity, ElectronTools::kEleEANoCorr,
148 isDebug);
149 }
150 else {
151 MVAValue = fElectronIDMVA->MVAValue(el, vertex);
152 }
153
154 Double_t eta = el->SCluster()->AbsEta();
155 Int_t MVABin = -1;
156 if(idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0
157 || idType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4
158 || idType == ElectronTools::kHggLeptonTagId2012HCP
159 ) {
160 if (el->Pt() < 20 && eta < 0.800 ) MVABin = 0;
161 if (el->Pt() < 20 && eta >= 0.800 && fabs(eta) < 1.479 ) MVABin = 1;
162 if (el->Pt() < 20 && eta >= 1.479 ) MVABin = 2;
163 if (el->Pt() >= 20 && eta < 0.800 ) MVABin = 3;
164 if (el->Pt() >= 20 && eta >= 0.800 && fabs(eta) < 1.479 ) MVABin = 4;
165 if (el->Pt() >= 20 && eta >= 1.479 ) MVABin = 5;
166 } else {
167 if (el->Pt() < 20 && eta < 1.000 ) MVABin = 0;
168 if (el->Pt() < 20 && eta >= 1.000 && fabs(eta) < 1.479 ) MVABin = 1;
169 if (el->Pt() < 20 && eta >= 1.479 ) MVABin = 2;
170 if (el->Pt() >= 20 && eta < 1.000 ) MVABin = 3;
171 if (el->Pt() >= 20 && eta >= 1.000 && fabs(eta) < 1.479 ) MVABin = 4;
172 if (el->Pt() >= 20 && eta >= 1.479 ) MVABin = 5;
173 }
174 if(MVABin == -1) assert(0);
175
176 Double_t MVACut = -9999;
177 if (idType == ElectronTools::kMVAID_BDTG_NoIPInfo) {
178 if (MVABin == 0) MVACut = 0.133;
179 else if (MVABin == 1) MVACut = 0.465;
180 else if (MVABin == 2) MVACut = 0.518;
181 else if (MVABin == 3) MVACut = 0.942;
182 else if (MVABin == 4) MVACut = 0.947;
183 else if (MVABin == 5) MVACut = 0.878 ;
184 } else if (idType == ElectronTools::kMVAID_BDTG_WithIPInfo) {
185 if (MVABin == 0) MVACut = 0.139;
186 else if (MVABin == 1) MVACut = 0.525;
187 else if (MVABin == 2) MVACut = 0.543;
188 else if (MVABin == 3) MVACut = 0.947;
189 else if (MVABin == 4) MVACut = 0.950;
190 else if (MVABin == 5) MVACut = 0.884;
191 } else if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombined) {
192 if (MVABin == 0) MVACut = 0.4202;
193 else if (MVABin == 1) MVACut = 0.6206;
194 else if (MVABin == 2) MVACut = 0.6190;
195 else if (MVABin == 3) MVACut = 0.9590;
196 else if (MVABin == 4) MVACut = 0.9586;
197 else if (MVABin == 5) MVACut = 0.9278;
198 } else if (idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
199 if (MVABin == 0) MVACut = 0.000;
200 else if (MVABin == 1) MVACut = 0.100;
201 else if (MVABin == 2) MVACut = 0.620;
202 else if (MVABin == 3) MVACut = 0.940;
203 else if (MVABin == 4) MVACut = 0.850;
204 else if (MVABin == 5) MVACut = 0.920;
205 } else if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4) {
206 if (MVABin == 0) MVACut = 0.123;
207 else if (MVABin == 1) MVACut = 0.219;
208 else if (MVABin == 2) MVACut = 0.509;
209 else if (MVABin == 3) MVACut = 0.935;
210 else if (MVABin == 4) MVACut = 0.889;
211 else if (MVABin == 5) MVACut = 0.871;
212 } else if (idType == ElectronTools::kHggLeptonTagId2012HCP) {
213 if (MVABin == 0) MVACut = 0.9;
214 else if (MVABin == 1) MVACut = 0.9;
215 else if (MVABin == 2) MVACut = 0.9;
216 else if (MVABin == 3) MVACut = 0.9;
217 else if (MVABin == 4) MVACut = 0.9;
218 else if (MVABin == 5) MVACut = 0.9;
219 }
220
221 //if(isDebug == kTRUE || true ){
222 // printf("PassElMVAID(%d): %d, pt, eta = %f, %f, rho = %f(%f) : MVA = %f, bin: %d\n",
223 // (MVAValue > MVACut),GetEventHeader()->EvtNum(),el->Pt(), eta,
224 // fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets(),MVAValue,MVABin);
225 //}
226
227 if (MVAValue > MVACut) return kTRUE;
228 return kFALSE;
229 }
230
231 Double_t ElectronIDMod::EvaluateMVAID(const Electron *el, ElectronTools::EElIdType idType,
232 const Vertex *vertex, const PFCandidateCol *PFCands,
233 const PileupEnergyDensityCol *PileupEnergyDensity) const
234 {
235 Bool_t isDebug = kFALSE;
236 Double_t MVAValue = 0;
237 if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombined) {
238 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, fIntRadius);
239 }
240 else if(idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
241 ElectronOArr *tempElectrons = new ElectronOArr;
242 MuonOArr *tempMuons = new MuonOArr;
243 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, ElectronTools::kEleEANoCorr,
244 tempElectrons, tempMuons, isDebug);
245 delete tempElectrons;
246 delete tempMuons;
247 }
248 else if(idType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4) {
249
250 MVAValue = fElectronIDMVA->MVAValue(el, vertex, fVertices, PFCands,
251 PileupEnergyDensity, ElectronTools::kEleEANoCorr,
252 isDebug);
253 }
254 else {
255 MVAValue = fElectronIDMVA->MVAValue(el, vertex);
256 }
257
258 return MVAValue;
259
260 }
261
262 //--------------------------------------------------------------------------------------------------
263 Bool_t ElectronIDMod::PassIDCut(const Electron *ele, ElectronTools::EElIdType idType,
264 const Vertex *vertex) const
265 {
266 Bool_t idcut = kFALSE;
267 switch (idType) {
268 case ElectronTools::kTight:
269 idcut = ele->PassTightID();
270 break;
271 case ElectronTools::kLoose:
272 idcut = ele->PassLooseID();
273 break;
274 case ElectronTools::kLikelihood:
275 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId) &&
276 PassLikelihoodID(ele);
277 break;
278 case ElectronTools::kNoId:
279 idcut = kTRUE;
280 break;
281 case ElectronTools::kCustomIdLoose:
282 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdLoose);
283 break;
284 case ElectronTools::kCustomIdTight:
285 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdTight);
286 break;
287 case ElectronTools::kVBTFWorkingPointFakeableId:
288 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
289 break;
290 case ElectronTools::kVBTFWorkingPoint95Id:
291 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint95Id);
292 break;
293 case ElectronTools::kVBTFWorkingPoint90Id:
294 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint90Id);
295 break;
296 case ElectronTools::kVBTFWorkingPoint85Id:
297 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint85Id);
298 break;
299 case ElectronTools::kVBTFWorkingPoint80Id:
300 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint80Id);
301 break;
302 case ElectronTools::kVBTFWorkingPointLowPtId:
303 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointLowPtId);
304 break;
305 case ElectronTools::kVBTFWorkingPoint70Id:
306 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint70Id);
307 break;
308 case ElectronTools::kHggLeptonTagId:
309 idcut = ElectronTools::PassHggLeptonTagID(ele);
310 break;
311 case ElectronTools::kHggLeptonTagId2012:
312 idcut = ElectronTools::PassHggLeptonTagID2012(ele);
313 break;
314 case ElectronTools::kHggLeptonTagId2012HCP:
315 {
316 idcut = PassMVAID(ele, ElectronTools::kHggLeptonTagId2012HCP,
317 vertex, fPFCandidates, fPileupEnergyDensity);
318 }
319 break;
320 case ElectronTools::kMVAID_BDTG_NoIPInfo:
321 {
322 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
323 if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_NoIPInfo,
324 vertex, fPFCandidates, fPileupEnergyDensity);
325 }
326 break;
327 case ElectronTools::kMVAID_BDTG_WithIPInfo:
328 {
329 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
330 if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_WithIPInfo,
331 vertex, fPFCandidates, fPileupEnergyDensity);
332 }
333 break;
334 case ElectronTools::kMVAID_BDTG_IDIsoCombined:
335 {
336 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
337 if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDIsoCombined,
338 vertex, fPFCandidates, fPileupEnergyDensity );
339 }
340 break;
341 case ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0:
342 {
343 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
344 if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0,
345 vertex, fPFCandidates, fPileupEnergyDensity );
346 }
347 break;
348 case ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4:
349 {
350 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
351 if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4,
352 vertex, fPFCandidates, fPileupEnergyDensity );
353 }
354 break;
355 default:
356 break;
357 }
358
359 return idcut;
360 }
361
362 //--------------------------------------------------------------------------------------------------
363 Bool_t ElectronIDMod::PassIsolationCut(const Electron *ele, ElectronTools::EElIsoType isoType,
364 const TrackCol *tracks, const Vertex *vertex,
365 const Double_t rho, ElectronTools::EElIdType idType) const
366 {
367
368 Bool_t isocut = kFALSE;
369 switch (isoType) {
370 case ElectronTools::kTrackCalo:
371 isocut = (ele->TrackIsolationDr03() < fTrackIsolationCut) &&
372 (ele->CaloIsolation() < fCaloIsolationCut);
373 break;
374 case ElectronTools::kTrackJura:
375 isocut = (ele->TrackIsolationDr03() < ele->Pt()*fTrackIsolationCut) &&
376 (ele->EcalRecHitIsoDr03() < ele->Pt()*fEcalJuraIsoCut) &&
377 (ele->HcalTowerSumEtDr03() < ele->Pt()*fHcalIsolationCut);
378 break;
379 case ElectronTools::kTrackJuraCombined:
380 isocut = (ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03()
381 - 1.5 < fCombIsolationCut);
382 break;
383 case ElectronTools::kTrackJuraSliding:
384 {
385 Double_t totalIso = ele->TrackIsolationDr03() + TMath::Max(ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3, 0.0);
386 if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + TMath::Max(TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3, 0.0);
387 if (totalIso < (ele->Pt()*fCombIsolationCut) )
388 isocut = kTRUE;
389 }
390 break;
391 case ElectronTools::kTrackJuraSlidingNoCorrection:
392 {
393 Double_t totalIso = ele->TrackIsolationDr03() + (ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03());
394 if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + (TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03());
395 if (totalIso < (ele->Pt()*fCombIsolationCut) )
396 isocut = kTRUE;
397 }
398 break;
399 case ElectronTools::kCombinedRelativeConeAreaCorrected:
400 {
401 Double_t totalIso = ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3;
402 if (ele->SCluster()->AbsEta() < 1.5) { // Barrel
403 if (totalIso < (ele->Pt()*fCombRelativeIsolationCut) )
404 isocut = kTRUE;
405 } else {
406 if (totalIso < (ele->Pt()*fCombRelativeIsolationCut_EE) )
407 isocut = kTRUE;
408 }
409 }
410 break;
411 case ElectronTools::kPFIso:
412 {
413 Double_t pfIsoCutValue = 9999;
414 if(fPFIsolationCut > 0){
415 pfIsoCutValue = fPFIsolationCut;
416 } else {
417 if (ele->SCluster()->AbsEta() < 1.479) {
418 if (ele->Pt() > 20) {
419 pfIsoCutValue = 0.13;
420 } else {
421 pfIsoCutValue = 0.13;
422 }
423 } else {
424 if (ele->Pt() > 20) {
425 pfIsoCutValue = 0.09;
426 } else {
427 pfIsoCutValue = 0.09;
428 }
429 }
430 }
431 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.1, 1.0, 0.4, fIntRadius);
432 if (totalIso < (ele->Pt()*pfIsoCutValue) )
433 isocut = kTRUE;
434 }
435 break;
436 case ElectronTools::kPFIsoNoL:
437 {
438 Double_t pfIsoCutValue = 9999;
439 if(fPFIsolationCut > 0){
440 pfIsoCutValue = fPFIsolationCut;
441 } else {
442 if (ele->SCluster()->AbsEta() < 1.479) {
443 if (ele->Pt() > 20) {
444 pfIsoCutValue = 0.13;
445 } else {
446 pfIsoCutValue = 0.13;
447 }
448 } else {
449 if (ele->Pt() > 20) {
450 pfIsoCutValue = 0.09;
451 } else {
452 pfIsoCutValue = 0.09;
453 }
454 }
455 }
456 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, fNonIsolatedMuons, fNonIsolatedElectrons, vertex, 0.1, 1.0, 0.4, fIntRadius);
457 if (totalIso < (ele->Pt()*pfIsoCutValue) )
458 isocut = kTRUE;
459 }
460 break;
461 case ElectronTools::kVBTFWorkingPoint95Iso:
462 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint95Iso, fApplyCombinedIso);
463 break;
464 case ElectronTools::kVBTFWorkingPoint90Iso:
465 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint90Iso, fApplyCombinedIso);
466 break;
467 case ElectronTools::kVBTFWorkingPoint85Iso:
468 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint85Iso, fApplyCombinedIso);
469 break;
470 case ElectronTools::kVBTFWorkingPoint80Iso:
471 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint80Iso, fApplyCombinedIso);
472 break;
473 case ElectronTools::kVBTFWorkingPoint70Iso:
474 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint70Iso, fApplyCombinedIso);
475 break;
476 case ElectronTools::kMVAIso_BDTG_IDIsoCombined:
477 isocut = (ele->TrackIsolationDr03() < ele->Pt()*0.2) &&
478 (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
479 (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
480 break;
481 case ElectronTools::kPFIso_HWW2012TrigV0:
482 {
483 Bool_t isDebug = kFALSE;
484 if(isDebug == kTRUE){
485 printf("PFIso_HWW2012TrigV0: %d, pt, eta = %f, %f, rho = %f(%f) : ",
486 GetEventHeader()->EvtNum(),ele->Pt(), ele->Eta(),
487 fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets());
488 }
489 ElectronOArr *tempIsoElectrons = new ElectronOArr;
490 MuonOArr *tempIsoMuons = new MuonOArr;
491 Double_t IsoOverPt = IsolationTools::PFElectronIsolation2012(ele, vertex, fPFNoPileUpCands,
492 fPileupEnergyDensity, ElectronTools::kEleEANoCorr, tempIsoElectrons, tempIsoMuons, 0.4, isDebug);
493 delete tempIsoElectrons;
494 delete tempIsoMuons;
495 Double_t eta = ele->SCluster()->AbsEta();
496 Double_t IsoCut = -1;
497 if (ele->Pt() < 20 && eta < 0.800 ) IsoCut = 0.150;
498 if (ele->Pt() < 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
499 if (ele->Pt() < 20 && eta >= 1.479 ) IsoCut = 0.150;
500 if (ele->Pt() >= 20 && eta < 0.800 ) IsoCut = 0.150;
501 if (ele->Pt() >= 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
502 if (ele->Pt() >= 20 && eta >= 1.479 ) IsoCut = 0.150;
503 if (IsoOverPt < IsoCut ) isocut = kTRUE;
504 }
505 break;
506 case ElectronTools::kPFIso_HggLeptonTag2012:
507 {
508 Bool_t isDebug = kFALSE;
509 if(isDebug == kTRUE){
510 printf("PFIso_HggLeptonTag2012: %d, pt, eta = %f, %f, rho = %f(%f) : ",
511 GetEventHeader()->EvtNum(),ele->Pt(), ele->Eta(),
512 fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets());
513 }
514 ElectronOArr *tempIsoElectrons = new ElectronOArr;
515 MuonOArr *tempIsoMuons = new MuonOArr;
516 Double_t IsoOverPt = IsolationTools::PFElectronIsolation2012LepTag(ele, vertex, fPFNoPileUpCands,
517 fPileupEnergyDensity, ElectronTools::kEleEAData2012, tempIsoElectrons, tempIsoMuons, 0.3, isDebug);
518 delete tempIsoElectrons;
519 delete tempIsoMuons;
520 Double_t eta = ele->SCluster()->AbsEta();
521 Double_t IsoCut = -1;
522 if (ele->Pt() < 20 && eta < 0.800 ) IsoCut = 0.150;
523 if (ele->Pt() < 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
524 if (ele->Pt() < 20 && eta >= 1.479 ) IsoCut = 0.10;
525 if (ele->Pt() >= 20 && eta < 0.800 ) IsoCut = 0.150;
526 if (ele->Pt() >= 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
527 if (ele->Pt() >= 20 && eta >= 1.479 ) IsoCut = 0.150;
528 if (IsoOverPt < IsoCut ) isocut = kTRUE;
529 }
530 break;
531 case ElectronTools::kPFIso_HggLeptonTag2012HCP:
532 {
533
534 Bool_t isDebug = kFALSE;
535 if(isDebug == kTRUE){
536 printf("PFIso_HggLeptonTag2012HCP: %d, pt, eta, sceta = %f, %f, %f,rho = %f(%f) : ",
537 GetEventHeader()->EvtNum(),ele->Pt(), ele->Eta(),ele->SCluster()->AbsEta(),
538 fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets());
539 }
540 ElectronOArr *tempIsoElectrons = new ElectronOArr;
541 MuonOArr *tempIsoMuons = new MuonOArr;
542 Double_t IsoOverPt = IsolationTools::PFElectronIsolation2012LepTag(ele, vertex, fPFNoPileUpCands,fPileupEnergyDensity, ElectronTools::kEleEAData2012, tempIsoElectrons, tempIsoMuons, 0.3, isDebug);
543 //printf("ming sync check IsoOverPt:%f\n\n",IsoOverPt);
544 delete tempIsoElectrons;
545 delete tempIsoMuons;
546 Double_t eta = ele->SCluster()->AbsEta();
547 Double_t IsoCut = -1;
548 if (ele->Pt() < 20 && eta < 0.800 ) IsoCut = 0.150;
549 if (ele->Pt() < 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
550 if (ele->Pt() < 20 && eta >= 1.479 ) IsoCut = 0.150;
551 if (ele->Pt() >= 20 && eta < 0.800 ) IsoCut = 0.150;
552 if (ele->Pt() >= 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
553 if (ele->Pt() >= 20 && eta >= 1.479 ) IsoCut = 0.150;
554 if (IsoOverPt < IsoCut ) isocut = kTRUE;
555 }
556 break;
557 case ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4:
558 {
559 if (fabs(ele->SCluster()->Eta()) < 1.479) {
560 isocut = ( (ele->TrackIsolationDr03() - 1.0) < ele->Pt()*0.2) &&
561 (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
562 (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
563 } else {
564 isocut = (ele->TrackIsolationDr03() < ele->Pt()*0.2) &&
565 (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
566 (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
567 }
568 }
569 break;
570 case ElectronTools::kNoIso:
571 isocut = kTRUE;
572 break;
573 case ElectronTools::kCustomIso:
574 break;
575 default:
576 break;
577 }
578
579 return isocut;
580 }
581
582
583 //--------------------------------------------------------------------------------------------------
584 void ElectronIDMod::Process()
585 {
586 // Process entries of the tree.
587 if(fElIdType == ElectronTools::kHggLeptonTagId2012HCP){
588 LoadEventObject(fPVName,fVertices);
589 }else{
590 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
591 }
592
593 if(fElIsoType != ElectronTools::kPFIsoNoL) {
594 LoadEventObject(fElectronBranchName, fElectrons);
595 }
596 else {
597 fElectrons = GetObjThisEvt<ElectronOArr>(fElectronBranchName);
598 fNonIsolatedMuons = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
599 fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
600 }
601 LoadEventObject(fBeamSpotName, fBeamSpot);
602 LoadEventObject(fTrackName, fTracks);
603 LoadEventObject(fPFCandidatesName, fPFCandidates);
604
605 if(fElIsoType == ElectronTools::kTrackJuraSliding ||
606 fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected ||
607 fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ||
608 fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ||
609 fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4 ||
610 fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0 ||
611 fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012 ||
612 fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012HCP
613 ) {
614 LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
615 assert(fPileupEnergyDensity);
616 }
617
618 if(fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0 || fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012 || fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012HCP) {
619 // Name is hardcoded, can be changed if someone feels to do it
620 fPFNoPileUpCands = GetObjThisEvt<PFCandidateCol>(fPFNoPileUpName);
621 }
622
623 //get trigger object collection if trigger matching is enabled
624 const TriggerObjectCol *trigObjs = 0;
625 if (fApplyTriggerMatching) {
626 trigObjs = GetHLTObjects(fTrigObjectsName);
627 }
628
629 ElectronOArr *GoodElectrons = new ElectronOArr;
630 GoodElectrons->SetName(fGoodElectronsName);
631
632 Double_t MVAValue = -100;
633 Double_t MVAValueMax = -99;
634 int NElectronMVAValueMax = 0;
635 int NPass = 0;
636
637
638 //printf("\n");
639 //printf("ming sync check number of electrons:%d\n",fElectrons->GetEntries());
640
641 for (UInt_t i=0; i<fElectrons->GetEntries() && fVertices->GetEntries() > 0 ; ++i) {
642
643 //printf("ming sync check electron i:%d\n",i);
644
645 const Electron *e = fElectrons->At(i);
646
647 if (e->SCluster() == 0)
648 continue;
649
650 //printf("ming sync check elept:%f sceta:%f \n",e->Pt(),e->SCluster()->Eta());
651
652 if (e->Pt() < fElectronPtMin)
653 continue;
654
655 if (e->SCluster()->Et() < fElectronEtMin)
656 continue;
657
658
659 if (e->AbsEta() > fElectronEtaMax)
660 continue;
661
662 if (fApplyEcalFiducial && ( (e->SCluster()->AbsEta()>1.4442 && e->SCluster()->AbsEta()<1.5666) || e->SCluster()->AbsEta()>2.5 )) {
663 continue;
664 }
665
666
667 if (fApplyEcalSeeded && !e->IsEcalDriven()) {
668 continue;
669 }
670
671 //apply trigger matching
672 Bool_t matchTrigger = fApplyTriggerMatching && ElectronTools::PassTriggerMatching(e,trigObjs);
673 if (fApplyTriggerMatching && !matchTrigger)
674 continue;
675
676 //apply ECAL spike removal
677 Bool_t spikecut = ElectronTools::PassSpikeRemovalFilter(e);
678 if (fApplySpikeRemoval && !spikecut)
679 continue;
680
681 //apply Isolation Cut
682 Double_t Rho = 0.0;
683 if( fElIsoType == ElectronTools::kTrackJuraSliding
684 || fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected
685 || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined
686 ) {
687 switch(fTheRhoType) {
688 case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
689 Rho = fPileupEnergyDensity->At(0)->Rho();
690 break;
691 case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
692 Rho = fPileupEnergyDensity->At(0)->RhoLowEta();
693 break;
694 case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
695 Rho = fPileupEnergyDensity->At(0)->RhoRandom();
696 break;
697 case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
698 Rho = fPileupEnergyDensity->At(0)->RhoRandomLowEta();
699 break;
700 case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
701 Rho = fPileupEnergyDensity->At(0)->RhoKt6PFJets();
702 break;
703 default:
704 // use the old default
705 Rho = fPileupEnergyDensity->At(0)->Rho();
706 break;
707 }
708 }
709
710 Bool_t isocut = kFALSE;
711 Double_t distVtx = 999.0;
712 Int_t closestVtx = 0;
713 if(fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012HCP){
714 for(UInt_t nv=0; nv<fVertices->GetEntries(); nv++){
715 double dz = TMath::Abs(e->GsfTrk()->DzCorrected(*fVertices->At(nv)));
716 if(dz < distVtx) {
717 distVtx = dz;
718 closestVtx = nv;
719 }
720 }
721 isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(closestVtx), Rho, fElIdType);
722 }else{
723 isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(0), Rho, fElIdType);
724 }
725
726 if (!isocut)
727 continue;
728
729 //printf("ming sync check pass isocut\n");
730
731 // apply conversion filters
732 Bool_t passConvVetoType1 = kFALSE;
733 if (fApplyConvFilterType1) {
734 LoadEventObject(fConversionBranchName, fConversions);
735 passConvVetoType1 = ElectronTools::PassConversionFilter(e, fConversions,
736 fBeamSpot->At(0), 0, 1e-6, 2.0, kTRUE, kFALSE);
737 }
738 else {
739 passConvVetoType1 = kTRUE;
740 }
741
742 if (passConvVetoType1 == kFALSE) continue;
743
744 Bool_t passConvVetoType2 = kFALSE;
745 if (fApplyConvFilterType2) {
746 passConvVetoType2 = TMath::Abs(e->ConvPartnerDCotTheta()) >= 0.02 ||
747 TMath::Abs(e->ConvPartnerDist()) >= 0.02;
748 }
749 else {
750 passConvVetoType2 = kTRUE;
751 }
752
753 if (passConvVetoType2 == kFALSE) continue;
754
755 // apply NExpectedHitsInner Cut
756 if(fInvertNExpectedHitsInnerCut == kFALSE && fNExpectedHitsInnerCut < 999 &&
757 e->CorrectedNExpectedHitsInner() > fNExpectedHitsInnerCut) continue;
758
759 // apply NExpectedHitsInner inverted Cut
760 if(fInvertNExpectedHitsInnerCut == kTRUE && fNExpectedHitsInnerCut < 999 &&
761 e->CorrectedNExpectedHitsInner() <= fNExpectedHitsInnerCut) continue;
762
763 //printf("ming sync check pass Nexpectedinner cut \n");
764
765
766 // apply d0 cut
767 if (fApplyD0Cut) {
768 Bool_t passD0cut = kTRUE;
769 if(fWhichVertex >= -1) passD0cut = ElectronTools::PassD0Cut(e, fVertices, fD0Cut, fWhichVertex);
770 else passD0cut = ElectronTools::PassD0Cut(e, fBeamSpot, fD0Cut);
771 if (!passD0cut)
772 continue;
773 }
774
775 //printf("ming sync check pass d0 cut \n");
776
777
778 // apply dz cut
779 if (fApplyDZCut) {
780 Bool_t passDZcut = ElectronTools::PassDZCut(e, fVertices, fDZCut, fWhichVertex);
781 if (!passDZcut)
782 continue;
783 }
784
785 //apply id cut
786 Bool_t idcut = kFALSE;
787 if(fElIdType == ElectronTools::kHggLeptonTagId2012HCP){
788 MVAValue = EvaluateMVAID(e, ElectronTools::kHggLeptonTagId2012HCP, fVertices->At(closestVtx), fPFCandidates, fPileupEnergyDensity);
789 idcut = PassIDCut(e, fElIdType, fVertices->At(closestVtx));
790 if(MVAValue>MVAValueMax){
791 MVAValueMax = MVAValue;
792 NElectronMVAValueMax = i;
793 }
794 } else {
795 idcut = PassIDCut(e, fElIdType, fVertices->At(0));
796 }
797
798 if (!idcut)
799 continue;
800
801 // apply charge filter
802 if(fChargeFilter == kTRUE) {
803 Bool_t passChargeFilter = ElectronTools::PassChargeFilter(e);
804 if (!passChargeFilter) continue;
805 }
806
807 // apply full combined id, using Tight cuts
808 if(fCombinedIdCut == kTRUE) {
809 LoadEventObject(fConversionBranchName, fConversions);
810 Int_t result = ElectronTools::PassTightId(e, *&fVertices, fConversions, 2);
811 if(result != 15) continue;
812 }
813
814 // add good electron
815 if(fElIdType!=ElectronTools::kHggLeptonTagId2012HCP){
816 GoodElectrons->Add(e);
817 }
818
819 NPass = NPass+1;
820 }
821
822 if((fElIdType==ElectronTools::kHggLeptonTagId2012HCP) && (NPass>0)){
823 GoodElectrons->Add(fElectrons->At(NElectronMVAValueMax));
824 }
825
826 // sort according to pt
827 GoodElectrons->Sort();
828
829 // add to event for other modules to use
830 AddObjThisEvt(GoodElectrons);
831 }
832
833 //--------------------------------------------------------------------------------------------------
834 void ElectronIDMod::SlaveBegin()
835 {
836 // Run startup code on the computer (slave) doing the actual analysis. Here,
837 // we just request the electron collection branch.
838
839 if(fElectronIDType.CompareTo("Hgg_LeptonTag_2012IdHCP") == 0){
840 ReqEventObject(fPVName,fVertices,true);
841 }
842
843 // In this case we cannot have a branch
844 if (fElectronIsoType.CompareTo("PFIsoNoL") != 0 ) {
845 ReqEventObject(fElectronBranchName, fElectrons,fElectronsFromBranch);
846 }
847 ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
848 ReqEventObject(fTrackName, fTracks, kTRUE);
849 ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
850 if (fElectronIsoType.CompareTo("TrackJuraSliding") == 0
851 || fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0
852 || fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0
853 || fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0
854 || fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0
855 || fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012") == 0
856 || fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0
857 || fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0
858 || fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012HCP") == 0
859 ) {
860 ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
861 }
862
863 if(fCombinedIdCut == kTRUE) {
864 fElectronIDType = "NoId";
865 fElectronIsoType = "NoIso";
866 fApplyConvFilterType1 = kFALSE;
867 fApplyConvFilterType2 = kFALSE;
868 fApplyD0Cut = kFALSE;
869 fApplyDZCut = kFALSE;
870 }
871
872 if (fApplyConvFilterType1 || fCombinedIdCut == kTRUE)
873 ReqEventObject(fConversionBranchName, fConversions, kTRUE);
874
875 Setup();
876
877 }
878
879 //--------------------------------------------------------------------------------------------------
880 void ElectronIDMod::Setup()
881 {
882 // Set all options properly before execution.
883
884 if (fElectronIDType.CompareTo("Tight") == 0)
885 fElIdType = ElectronTools::kTight;
886 else if (fElectronIDType.CompareTo("Loose") == 0)
887 fElIdType = ElectronTools::kLoose;
888 else if (fElectronIDType.CompareTo("Likelihood") == 0) {
889 if (!fLH) { cout << "Error: Likelihood not initialized.\n"; assert(0); }
890 fElIdType = ElectronTools::kLikelihood;
891 } else if (fElectronIDType.CompareTo("NoId") == 0)
892 fElIdType = ElectronTools::kNoId;
893 else if (fElectronIDType.CompareTo("ZeeId") == 0)
894 fElIdType = ElectronTools::kZeeId;
895 else if (fElectronIDType.CompareTo("CustomLoose") == 0)
896 fElIdType = ElectronTools::kCustomIdLoose;
897 else if (fElectronIDType.CompareTo("CustomTight") == 0)
898 fElIdType = ElectronTools::kCustomIdTight;
899 else if (fElectronIDType.CompareTo("VBTFWorkingPointFakeableId") == 0)
900 fElIdType = ElectronTools::kVBTFWorkingPointFakeableId;
901 else if (fElectronIDType.CompareTo("VBTFWorkingPoint95Id") == 0)
902 fElIdType = ElectronTools::kVBTFWorkingPoint95Id;
903 else if (fElectronIDType.CompareTo("VBTFWorkingPoint90Id") == 0)
904 fElIdType = ElectronTools::kVBTFWorkingPoint90Id;
905 else if (fElectronIDType.CompareTo("VBTFWorkingPoint80Id") == 0)
906 fElIdType = ElectronTools::kVBTFWorkingPoint80Id;
907 else if (fElectronIDType.CompareTo("VBTFWorkingPointLowPtId") == 0)
908 fElIdType = ElectronTools::kVBTFWorkingPointLowPtId;
909 else if (fElectronIDType.CompareTo("VBTFWorkingPoint85Id") == 0)
910 fElIdType = ElectronTools::kVBTFWorkingPoint85Id;
911 else if (fElectronIDType.CompareTo("VBTFWorkingPoint70Id") == 0)
912 fElIdType = ElectronTools::kVBTFWorkingPoint70Id;
913 else if (fElectronIDType.CompareTo("MVA_BDTG_NoIPInfo") == 0)
914 fElIdType = ElectronTools::kMVAID_BDTG_NoIPInfo;
915 else if (fElectronIDType.CompareTo("MVA_BDTG_WithIPInfo") == 0)
916 fElIdType = ElectronTools::kMVAID_BDTG_WithIPInfo;
917 else if (fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombined") == 0)
918 fElIdType = ElectronTools::kMVAID_BDTG_IDIsoCombined;
919 else if (fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0)
920 fElIdType = ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0;
921 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_WP85Id") == 0)
922 fElIdType = ElectronTools::kHggLeptonTagId;
923 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_2012Id") == 0)
924 fElIdType = ElectronTools::kHggLeptonTagId2012;
925 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_2012IdHCP") == 0)
926 fElIdType = ElectronTools::kHggLeptonTagId2012HCP;
927 else if (fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0)
928 fElIdType = ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4;
929
930 else {
931 SendError(kAbortAnalysis, "SlaveBegin",
932 "The specified electron identification %s is not defined.",
933 fElectronIDType.Data());
934 return;
935 }
936
937 if (fElectronIsoType.CompareTo("TrackCalo") == 0 )
938 fElIsoType = ElectronTools::kTrackCalo;
939 else if (fElectronIsoType.CompareTo("TrackJura") == 0)
940 fElIsoType = ElectronTools::kTrackJura;
941 else if(fElectronIsoType.CompareTo("TrackJuraCombined") == 0)
942 fElIsoType = ElectronTools::kTrackJuraCombined;
943 else if(fElectronIsoType.CompareTo("TrackJuraSliding") == 0)
944 fElIsoType = ElectronTools::kTrackJuraSliding;
945 else if(fElectronIsoType.CompareTo("TrackJuraSlidingNoCorrection") == 0)
946 fElIsoType = ElectronTools::kTrackJuraSlidingNoCorrection;
947 else if(fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0)
948 fElIsoType = ElectronTools::kCombinedRelativeConeAreaCorrected;
949 else if (fElectronIsoType.CompareTo("PFIso") == 0 )
950 fElIsoType = ElectronTools::kPFIso;
951 else if (fElectronIsoType.CompareTo("PFIsoNoL") == 0 )
952 fElIsoType = ElectronTools::kPFIsoNoL;
953 else if (fElectronIsoType.CompareTo("NoIso") == 0 )
954 fElIsoType = ElectronTools::kNoIso;
955 else if (fElectronIsoType.CompareTo("ZeeIso") == 0 )
956 fElIsoType = ElectronTools::kZeeIso;
957 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint95Iso") == 0 )
958 fElIsoType = ElectronTools::kVBTFWorkingPoint95Iso;
959 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint90Iso") == 0 )
960 fElIsoType = ElectronTools::kVBTFWorkingPoint90Iso;
961 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint85Iso") == 0 )
962 fElIsoType = ElectronTools::kVBTFWorkingPoint85Iso;
963 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint80Iso") == 0 )
964 fElIsoType = ElectronTools::kVBTFWorkingPoint80Iso;
965 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint70Iso") == 0 )
966 fElIsoType = ElectronTools::kVBTFWorkingPoint70Iso;
967 else if (fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0 )
968 fElIsoType = ElectronTools::kMVAIso_BDTG_IDIsoCombined;
969 else if (fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0)
970 fElIsoType = ElectronTools::kPFIso_HWW2012TrigV0;
971 else if (fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012") == 0)
972 fElIsoType = ElectronTools::kPFIso_HggLeptonTag2012;
973 else if (fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012HCP") == 0)
974 fElIsoType = ElectronTools::kPFIso_HggLeptonTag2012HCP;
975 else if (fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0 )
976 fElIsoType = ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4;
977 else if (fElectronIsoType.CompareTo("Custom") == 0 ) {
978 fElIsoType = ElectronTools::kCustomIso;
979 SendError(kWarning, "SlaveBegin",
980 "Custom electron isolation is not yet implemented.");
981 } else {
982 SendError(kAbortAnalysis, "SlaveBegin",
983 "The specified electron isolation %s is not defined.",
984 fElectronIsoType.Data());
985 return;
986 }
987
988 //If we use MVA ID, need to load MVA weights
989 if (fElIdType == ElectronTools::kMVAID_BDTG_NoIPInfo) {
990 fElectronIDMVA = new ElectronIDMVA();
991 fElectronIDMVA->Initialize("BDTG method",
992 fElectronMVAWeights_Subdet0Pt10To20,
993 fElectronMVAWeights_Subdet1Pt10To20,
994 fElectronMVAWeights_Subdet2Pt10To20,
995 fElectronMVAWeights_Subdet0Pt20ToInf,
996 fElectronMVAWeights_Subdet1Pt20ToInf,
997 fElectronMVAWeights_Subdet2Pt20ToInf,
998 ElectronIDMVA::kNoIPInfo,
999 fTheRhoType);
1000 }
1001 if (fElIdType == ElectronTools::kMVAID_BDTG_WithIPInfo) {
1002 fElectronIDMVA = new ElectronIDMVA();
1003 fElectronIDMVA->Initialize("BDTG method",
1004 fElectronMVAWeights_Subdet0Pt10To20,
1005 fElectronMVAWeights_Subdet1Pt10To20,
1006 fElectronMVAWeights_Subdet2Pt10To20,
1007 fElectronMVAWeights_Subdet0Pt20ToInf,
1008 fElectronMVAWeights_Subdet1Pt20ToInf,
1009 fElectronMVAWeights_Subdet2Pt20ToInf,
1010 ElectronIDMVA::kWithIPInfo,
1011 fTheRhoType);
1012 }
1013 if (fElIdType == ElectronTools::kMVAID_BDTG_IDIsoCombined || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ) {
1014 fElectronIDMVA = new ElectronIDMVA();
1015 fElectronIDMVA->Initialize("BDTG method",
1016 fElectronMVAWeights_Subdet0Pt10To20,
1017 fElectronMVAWeights_Subdet1Pt10To20,
1018 fElectronMVAWeights_Subdet2Pt10To20,
1019 fElectronMVAWeights_Subdet0Pt20ToInf,
1020 fElectronMVAWeights_Subdet1Pt20ToInf,
1021 fElectronMVAWeights_Subdet2Pt20ToInf,
1022 ElectronIDMVA::kIDIsoCombined,
1023 fTheRhoType);
1024 }
1025
1026 if (fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ) {
1027 fElectronIDMVA = new ElectronIDMVA();
1028 fElectronIDMVA->Initialize("BDTG method",
1029 fElectronMVAWeights_Subdet0Pt10To20,
1030 fElectronMVAWeights_Subdet1Pt10To20,
1031 fElectronMVAWeights_Subdet2Pt10To20,
1032 fElectronMVAWeights_Subdet0Pt20ToInf,
1033 fElectronMVAWeights_Subdet1Pt20ToInf,
1034 fElectronMVAWeights_Subdet2Pt20ToInf,
1035 ElectronIDMVA::kIDHWW2012TrigV0,
1036 fTheRhoType);
1037 }
1038
1039 if (fElIdType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4
1040 || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4 ) {
1041 fElectronIDMVA = new ElectronIDMVA();
1042 fElectronIDMVA->Initialize("BDTG method",
1043 fElectronMVAWeights_Subdet0Pt10To20,
1044 fElectronMVAWeights_Subdet1Pt10To20,
1045 fElectronMVAWeights_Subdet2Pt10To20,
1046 fElectronMVAWeights_Subdet0Pt20ToInf,
1047 fElectronMVAWeights_Subdet1Pt20ToInf,
1048 fElectronMVAWeights_Subdet2Pt20ToInf,
1049 ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4,
1050 fTheRhoType);
1051 }
1052
1053 if (fElIdType == ElectronTools::kHggLeptonTagId2012HCP) {
1054 fElectronIDMVA = new ElectronIDMVA();
1055 fElectronIDMVA->Initialize("BDTG method",
1056 fElectronMVAWeights_Subdet0Pt10To20,
1057 fElectronMVAWeights_Subdet1Pt10To20,
1058 fElectronMVAWeights_Subdet2Pt10To20,
1059 fElectronMVAWeights_Subdet0Pt20ToInf,
1060 fElectronMVAWeights_Subdet1Pt20ToInf,
1061 fElectronMVAWeights_Subdet2Pt20ToInf,
1062 ElectronIDMVA::kIDEGamma2012NonTrigV1,
1063 fTheRhoType);
1064 }
1065
1066 }
1067
1068 //--------------------------------------------------------------------------------------------------
1069 void ElectronIDMod::Terminate()
1070 {
1071 // Run finishing code on the computer (slave) that did the analysis
1072 delete fElectronIDMVA;
1073 }