ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/ElectronTools.cc
Revision: 1.55
Committed: Fri Apr 5 13:13:31 2013 UTC (12 years, 1 month ago) by arapyan
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_029c, Mit_029b, Mit_029a
Changes since 1.54: +2 -1 lines
Log Message:
add track identification cuts for electron conversion--to be able to run on pfaod

File Contents

# Content
1 // $Id: ElectronTools.cc,v 1.54 2013/02/23 14:52:59 mingyang Exp $
2
3 #include "MitPhysics/Utils/interface/ElectronTools.h"
4 #include "MitAna/DataTree/interface/StableData.h"
5 #include <TFile.h>
6 #include "MitPhysics/ElectronLikelihood/interface/ElectronLikelihood.h"
7 #include "MitPhysics/ElectronLikelihood/interface/LikelihoodSwitches.h"
8 #include "MitPhysics/ElectronLikelihood/interface/LikelihoodMeasurements.h"
9
10 ClassImp(mithep::ElectronTools)
11
12 using namespace mithep;
13
14 //--------------------------------------------------------------------------------------------------
15 ElectronTools::ElectronTools()
16 {
17 // Constructor.
18 }
19
20 //--------------------------------------------------------------------------------------------------
21 Bool_t ElectronTools::PassCustomID(const Electron *ele, EElIdType idType) {
22
23 Double_t fCuts[6][8]; //!custom id cuts
24
25 Double_t tightcuts[6][8]={
26 {0.086, 0.1, 0.052, 0.0, 0.050, 0.059, 0.061, 0.0}, //hovere
27 {0.011, 0.011, 0.011, 0.0, 0.033, 0.029, 0.030, 0.0}, //sigmaetaeta
28 {0.038, 0.024, 0.045, 0.0, 0.034, 0.017, 0.026, 0.0}, //deltaphiin
29 {0.0081, 0.0029, 0.0051, 0.0, 0.0070, 0.0062, 0.0088, 0.0}, //deltaetain
30 {0.0, 0.9, 0.0, 0.0, 0.0, 0.78, 0.0, 0.0}, //eoverp
31 {0.8,0.2,0.9,0,0,0,0,0}}; //extra cuts fbrem and E_Over_P
32
33 Double_t loosecuts[6][8]={
34 {0.076, 0.033, 0.07, 0.0, 0.083,0.148, 0.033, 0.0}, //hovere
35 {0.0101, 0.0095, 0.0097, 0.0, 0.03, 0.03, 0.03, 0.0}, //sigmaetaeta
36 {0.053, 0.0189, 0.059, 0.099, 0.0278,0.0157, 0.042, 0.080}, //deltaphiin
37 {0.0078, 0.00259, 0.0062, 0.0, 0.0078,0.0061, 0.0061, 0.0}, //deltaetain
38 {0.3, 0.92, 0.211, 0.0, 0.42, 0.88, 0.68, 0.0}, //eoverp
39 {0.8,0.2,0,0,0,0,0,0}}; //extra cuts fbrem and E_Over_P
40
41 Double_t VBTFWorkingPointFakeable[6][8] = {
42 {0.12, 0.12, 0.12, 0.12, 0.10, 0.10, 0.10, 0.10 }, //hovere
43 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
44 {0.15, 0.15, 0.15, 0.15, 0.10, 0.10, 0.10, 0.10 }, //deltaphiin
45 {0.007, 0.007, 0.007, 0.007, 0.009, 0.009, 0.009, 0.009 }, //deltaetain
46 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
47 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
48 };
49
50 Double_t VBTFWorkingPoint95[6][8] = {
51 {0.15, 0.15, 0.15, 0.15, 0.07, 0.07, 0.07, 0.07 }, //hovere
52 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
53 {0.8, 0.8, 0.8, 0.8, 0.7, 0.7, 0.7, 0.7 }, //deltaphiin
54 {0.007, 0.007, 0.007, 0.007, 0.010, 0.010, 0.010, 0.010 }, //deltaetain
55 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
56 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
57 };
58
59 Double_t VBTFWorkingPoint90[6][8] = {
60 {0.12, 0.12, 0.12, 0.12, 0.05, 0.05, 0.05, 0.05 }, //hovere
61 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
62 {0.8, 0.8, 0.8, 0.8, 0.7, 0.7, 0.7, 0.7 }, //deltaphiin
63 {0.007, 0.007, 0.007, 0.007, 0.009, 0.009, 0.009, 0.009 }, //deltaetain
64 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
65 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
66 };
67
68 Double_t VBTFWorkingPoint85[6][8] = {
69 {0.04, 0.04, 0.04, 0.04, 0.025, 0.025, 0.025, 0.025 }, //hovere
70 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
71 {0.06, 0.06, 0.06, 0.06, 0.04, 0.04, 0.04, 0.04 }, //deltaphiin
72 {0.006, 0.006, 0.006, 0.006, 0.007, 0.007, 0.007, 0.007 }, //deltaetain
73 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
74 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
75 };
76
77 Double_t VBTFWorkingPoint80[6][8] = {
78 {0.04, 0.04, 0.04, 0.04, 0.10, 0.10, 0.10, 0.10 }, //hovere
79 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
80 {0.06, 0.06, 0.06, 0.06, 0.03, 0.03, 0.03, 0.03 }, //deltaphiin
81 {0.004, 0.004, 0.004, 0.004, 0.007, 0.007, 0.007, 0.007}, //deltaetain
82 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
83 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
84 };
85
86 Double_t VBTFWorkingPoint70[6][8] = {
87 {0.025, 0.025, 0.025, 0.025, 0.012, 0.012, 0.012, 0.012}, //hovere
88 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
89 {0.03, 0.03, 0.03, 0.03, 0.02, 0.02, 0.02, 0.02 }, //deltaphiin
90 {0.004, 0.004, 0.004, 0.004, 0.005, 0.005, 0.005, 0.005}, //deltaetain
91 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
92 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
93 };
94
95 Double_t VBTFWorkingPoint80NoHOverEE[6][8] = {
96 {0.04, 0.04, 0.04, 0.04, 0.10, 0.10, 0.10, 0.10 }, //hovere
97 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
98 {0.06, 0.06, 0.06, 0.06, 0.03, 0.03, 0.03, 0.03 }, //deltaphiin
99 {0.004, 0.004, 0.004, 0.004, 0.007, 0.007, 0.007, 0.007}, //deltaetain
100 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
101 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
102 };
103
104 Double_t VBTFWorkingPoint70NoHOverEE[6][8] = {
105 {0.025, 0.025, 0.025, 0.025, 0.10, 0.10, 0.10, 0.10 }, //hovere
106 {0.01, 0.01, 0.01, 0.01, 0.03, 0.03, 0.03, 0.03 }, //sigmaetaeta
107 {0.03, 0.03, 0.03, 0.03, 0.02, 0.02, 0.02, 0.02 }, //deltaphiin
108 {0.004, 0.004, 0.004, 0.004, 0.005, 0.005, 0.005, 0.005}, //deltaetain
109 {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, //eoverp
110 {0.0, 0.0, 0, 0, 0, 0, 0, 0 } //extra cuts fbrem and E_Over_P
111 };
112
113 switch (idType) {
114 case kCustomIdTight:
115 memcpy(fCuts,tightcuts,sizeof(fCuts));
116 break;
117 case kCustomIdLoose:
118 memcpy(fCuts,loosecuts,sizeof(fCuts));
119 break;
120 case kVBTFWorkingPointFakeableId:
121 memcpy(fCuts,VBTFWorkingPointFakeable,sizeof(fCuts));
122 break;
123 case kVBTFWorkingPoint95Id:
124 memcpy(fCuts,VBTFWorkingPoint95,sizeof(fCuts));
125 break;
126 case kVBTFWorkingPoint90Id:
127 memcpy(fCuts,VBTFWorkingPoint90,sizeof(fCuts));
128 break;
129 case kVBTFWorkingPoint85Id:
130 memcpy(fCuts,VBTFWorkingPoint85,sizeof(fCuts));
131 break;
132 case kVBTFWorkingPoint80Id:
133 memcpy(fCuts,VBTFWorkingPoint80,sizeof(fCuts));
134 break;
135 case kVBTFWorkingPointLowPtId:
136 if(ele->Pt() < 20)
137 memcpy(fCuts,VBTFWorkingPoint70NoHOverEE,sizeof(fCuts));
138 else
139 memcpy(fCuts,VBTFWorkingPoint80NoHOverEE,sizeof(fCuts));
140 break;
141 case kVBTFWorkingPoint70Id:
142 memcpy(fCuts,VBTFWorkingPoint70,sizeof(fCuts));
143 break;
144 default:
145 memset(fCuts,0,sizeof(fCuts));
146 break;
147 }
148
149 // Based on RecoEgamma/ElectronIdentification/src/CutBasedElectronID.cc.
150 Double_t eOverP = ele->ESuperClusterOverP();
151 Double_t fBrem = ele->FBrem();
152
153 if ( (fCuts[5][0]>0.0) && (eOverP < fCuts[5][0]) && (fCuts[5][1]>0.0) && (fBrem < fCuts[5][1]))
154 return kFALSE;
155
156 if ( (fCuts[5][2]>0.0) && (eOverP < fCuts[5][2]*(1-fBrem)))
157 return kFALSE;
158
159 Int_t cat = 2;
160 if ((ele->IsEB() && fBrem<0.06) || (ele->IsEE() && fBrem<0.1))
161 cat=1;
162 else if (eOverP < 1.2 && eOverP > 0.8)
163 cat=0;
164
165 if(ele->SCluster() == 0)
166 return kFALSE;
167 Double_t eSeedOverPin = ele->ESeedClusterOverPIn();
168 Double_t hOverE = ele->HadronicOverEm();
169 Double_t sigmaee = ele->CoviEtaiEta();
170 Double_t deltaPhiIn = TMath::Abs(ele->DeltaPhiSuperClusterTrackAtVtx());
171 Double_t deltaEtaIn = TMath::Abs(ele->DeltaEtaSuperClusterTrackAtVtx());
172
173 Int_t eb = 1;
174 if (ele->IsEB())
175 eb = 0;
176
177 if (hOverE>fCuts[0][cat+4*eb])
178 return kFALSE;
179
180 if (sigmaee>fCuts[1][cat+4*eb])
181 return kFALSE;
182
183 if (deltaPhiIn>fCuts[2][cat+4*eb])
184 return kFALSE;
185
186 if(deltaEtaIn>fCuts[3][cat+4*eb])
187 return kFALSE;
188
189 if(eSeedOverPin<fCuts[4][cat+4*eb])
190 return kFALSE;
191
192 // Apply detector isolation at high pt only
193 Bool_t isoCut = kTRUE;
194 if(idType == kVBTFWorkingPointFakeableId){
195 double isoEcal = ele->EcalRecHitIsoDr03();
196 if(ele->IsEB()) isoEcal = isoEcal - 1.0;
197 isoCut = (ele->TrackIsolationDr03() < ele->Pt()*0.2) &&
198 (isoEcal < ele->Pt()*0.2) &&
199 (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
200 }
201 if(isoCut == kFALSE) return kFALSE;
202
203 // Cuts only for pt<20 region and kVBTFWorkingPointLowPtId
204 if(ele->Pt() < 20 && idType == kVBTFWorkingPointLowPtId) {
205 Bool_t isGoodLowPtEl = fBrem > 0.15 ||
206 (ele->SCluster()->AbsEta() < 1.0 && eOverP > 0.95);
207 if(!isGoodLowPtEl) return kFALSE;
208 }
209
210 return kTRUE;
211 }
212
213 //--------------------------------------------------------------------------------------------------
214 Bool_t ElectronTools::PassCustomIso(const Electron *ele, EElIsoType isoType,
215 Bool_t useCombineIso)
216 {
217 Bool_t pass = kTRUE;
218 Double_t fIsoCuts[4][2]; //!custom isolation cuts
219 Double_t VBTFWorkingPoint95[4][2] = {
220 {0.15 , 0.08 }, //TrkIso
221 {2.00 , 0.06 }, //ECALIso
222 {0.12 , 0.05 }, //HCALIso
223 {0.15, 0.10 } //Combined
224 };
225
226 Double_t VBTFWorkingPoint90[4][2] = {
227 {0.12 , 0.05 }, //TrkIso
228 {0.09 , 0.06 }, //ECALIso
229 {0.10 , 0.03 }, //HCALIso
230 {0.10, 0.07 } //Combined
231 };
232
233 Double_t VBTFWorkingPoint85[4][2] = {
234 {0.09 , 0.05 }, //TrkIso
235 {0.08 , 0.05 }, //ECALIso
236 {0.10 , 0.025 }, //HCALIso
237 {0.09, 0.06 } //Combined
238 };
239
240 Double_t VBTFWorkingPoint80[4][2] = {
241 {0.09 , 0.04 }, //TrkIso
242 {0.07 , 0.05 }, //ECALIso
243 {0.10 , 0.025 }, //HCALIso
244 {0.07, 0.06 } //Combined
245 };
246
247 Double_t VBTFWorkingPoint70[4][2] = {
248 {0.05 , 0.025 }, //TrkIso
249 {0.06 , 0.025 }, //ECALIso
250 {0.03 , 0.020 }, //HCALIso
251 {0.04, 0.030 } //Combined
252 };
253
254 switch (isoType) {
255 case kVBTFWorkingPoint95Iso:
256 memcpy(fIsoCuts,VBTFWorkingPoint95,sizeof(fIsoCuts));
257 break;
258 case kVBTFWorkingPoint90Iso:
259 memcpy(fIsoCuts,VBTFWorkingPoint90,sizeof(fIsoCuts));
260 break;
261 case kVBTFWorkingPoint85Iso:
262 memcpy(fIsoCuts,VBTFWorkingPoint85,sizeof(fIsoCuts));
263 break;
264 case kVBTFWorkingPoint80Iso:
265 memcpy(fIsoCuts,VBTFWorkingPoint80,sizeof(fIsoCuts));
266 break;
267 case kVBTFWorkingPoint70Iso:
268 memcpy(fIsoCuts,VBTFWorkingPoint70,sizeof(fIsoCuts));
269 break;
270 default:
271 memset(fIsoCuts,0,sizeof(fIsoCuts));
272 break;
273 }
274
275 Double_t trkIso = ele->TrackIsolationDr03() / ele->Pt();
276 Double_t ecalIso = ele->EcalRecHitIsoDr03() / ele->Pt();
277 Double_t hcalIso = ele->HcalTowerSumEtDr03() / ele->Pt();
278 Double_t combinedIso = ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03();
279 if(ele->IsEB()) combinedIso = ele->TrackIsolationDr03() + TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03();
280 combinedIso = combinedIso / ele->Pt();
281
282 Int_t eb = 1;
283 if (ele->IsEB())
284 eb = 0;
285
286 if(useCombineIso == kFALSE){
287 if (trkIso>fIsoCuts[0][eb])
288 pass = kFALSE;
289 if (ecalIso>fIsoCuts[1][eb])
290 pass = kFALSE;
291 if (hcalIso>fIsoCuts[2][eb])
292 pass = kFALSE;
293 }
294 else {
295 if (combinedIso>fIsoCuts[3][eb])
296 pass = kFALSE;
297 }
298
299 return pass;
300 }
301
302
303 //--------------------------------------------------------------------------------------------------
304 Bool_t ElectronTools::PassConversionFilter(const Electron *ele,
305 const DecayParticleCol *conversions,
306 const BaseVertex *vtx,
307 UInt_t nWrongHitsMax,
308 Double_t probMin,
309 Double_t lxyMin,
310 Bool_t matchCkf,
311 Bool_t requireArbitratedMerged,
312 Double_t trkptMin)
313 {
314 Bool_t isGoodConversion = kFALSE;
315
316 for (UInt_t ifc=0; ifc<conversions->GetEntries(); ifc++) {
317 Bool_t ConversionMatchFound = kFALSE;
318 for (UInt_t d=0; d<conversions->At(ifc)->NDaughters(); d++) {
319 const Track *trk = dynamic_cast<const ChargedParticle*>
320 (conversions->At(ifc)->Daughter(d))->Trk();
321 if (ele->GsfTrk() == trk || (matchCkf && ele->TrackerTrk()==trk) ) {
322 ConversionMatchFound = kTRUE;
323 break;
324 }
325 }
326
327 // if match between the e-track and one of the conversion legs
328 if (ConversionMatchFound == kTRUE){
329 isGoodConversion = (conversions->At(ifc)->Prob() > probMin) &&
330 (!requireArbitratedMerged || conversions->At(ifc)->Quality().Quality(ConversionQuality::arbitratedMerged)) &&
331 (conversions->At(ifc)->LxyCorrected(vtx) > lxyMin);
332
333 if (isGoodConversion == kTRUE) {
334 for (UInt_t d=0; d<conversions->At(ifc)->NDaughters(); d++) {
335 const Track *trk = dynamic_cast<const ChargedParticle*>
336 (conversions->At(ifc)->Daughter(d))->Trk();
337 if (trk) {
338 if (trk->Pt()<trkptMin) isGoodConversion = kFALSE;
339 const StableData *sd = dynamic_cast<const StableData*>
340 (conversions->At(ifc)->DaughterDat(d));
341 if (sd->NWrongHits() > nWrongHitsMax)
342 isGoodConversion = kFALSE;
343 } else {
344 isGoodConversion = kFALSE;
345 }
346 }
347 }
348 }
349
350 if (isGoodConversion == kTRUE) break;
351
352 } // loop over all conversions
353
354 return !isGoodConversion;
355 }
356
357 //--------------------------------------------------------------------------------------------------
358 Bool_t ElectronTools::PassConversionFilterPFAOD(const Electron *ele,
359 const DecayParticleCol *conversions,
360 const BaseVertex *vtx,
361 UInt_t nWrongHitsMax,
362 Double_t probMin,
363 Double_t lxyMin,
364 Bool_t matchCkf,
365 Bool_t requireArbitratedMerged,
366 Double_t trkptMin)
367 {
368
369 Bool_t isGoodConversion = kFALSE;
370
371 for (UInt_t ifc=0; ifc<conversions->GetEntries(); ifc++) {
372 if(!(conversions->At(ifc)->Prob() > probMin) && (!requireArbitratedMerged || conversions->At(ifc)->Quality().Quality(ConversionQuality::arbitratedMerged)) && (conversions->At(ifc)->LxyCorrected((BaseVertex*)vtx) > lxyMin)) continue;
373 Bool_t ConversionMatchFound = kFALSE;
374 for (UInt_t d=0; d<conversions->At(ifc)->NDaughters(); d++) {
375 const ChargedParticle *pParticle = 0;
376 pParticle = dynamic_cast<const ChargedParticle*>(conversions->At(ifc)->Daughter(d));
377 if(pParticle == 0) continue;
378 const Track* trk = 0;
379 trk = pParticle->Trk();
380 if(trk == 0) continue;
381 if (ele->GsfTrk() == trk || (matchCkf && ele->TrackerTrk()==trk) ) {
382 ConversionMatchFound = kTRUE;
383 break;
384 }
385 }
386
387 // if match between the e-track and one of the conversion legs
388 if (ConversionMatchFound == kTRUE){
389 isGoodConversion = (conversions->At(ifc)->Prob() > probMin) &&
390 (!requireArbitratedMerged || conversions->At(ifc)->Quality().Quality(ConversionQuality::arbitratedMerged)) &&
391 (conversions->At(ifc)->LxyCorrected(vtx) > lxyMin);
392
393 if (isGoodConversion == kTRUE) {
394 for (UInt_t d=0; d<conversions->At(ifc)->NDaughters(); d++) {
395 const ChargedParticle *pParticle = 0;
396 pParticle = dynamic_cast<const ChargedParticle*>(conversions->At(ifc)->Daughter(d));
397 if(pParticle == 0) continue;
398 const Track* trk = 0;
399 trk = pParticle->Trk();
400 if(trk == 0) continue;
401 if (trk) {
402 if (trk->Pt()<trkptMin) isGoodConversion = kFALSE;
403 const StableData *sd = dynamic_cast<const StableData*>
404 (conversions->At(ifc)->DaughterDat(d));
405 if (sd->NWrongHits() > nWrongHitsMax)
406 isGoodConversion = kFALSE;
407 } else {
408 isGoodConversion = kFALSE;
409 }
410 }
411 }
412 }
413
414 if (isGoodConversion == kTRUE) break;
415
416 } // loop over all conversions
417
418 return !isGoodConversion;
419 }
420 //--------------------------------------------------------------------------------------------------
421 Bool_t ElectronTools::PassD0Cut(const Electron *ele, const VertexCol *vertices, Double_t fD0Cut, Int_t nVertex)
422 {
423 Bool_t d0cut = kFALSE;
424
425 Double_t d0_real = 1e30;
426 Double_t dz_real = 1e30;
427 Int_t closestVtx = 0;
428
429 if( nVertex >= (int) vertices->GetEntries() )
430 nVertex = vertices->GetEntries() - 1;
431
432 if(nVertex >= 0) d0_real = TMath::Abs(ele->GsfTrk()->D0Corrected(*vertices->At(nVertex)));
433 else {
434 Double_t distVtx = 999.0;
435 for(UInt_t nv=0; nv<vertices->GetEntries(); nv++){
436 double dz = TMath::Abs(ele->GsfTrk()->DzCorrected(*vertices->At(nv)));
437 if(dz < distVtx) {
438 distVtx = dz;
439 closestVtx = nv;
440 }
441 d0_real = TMath::Abs(ele->GsfTrk()->D0Corrected(*vertices->At(nv)));
442 //printf("ming sync check nv:%d dz:%f d0:%f\n",nv,dz,d0_real);
443 }
444 d0_real = TMath::Abs(ele->GsfTrk()->D0Corrected(*vertices->At(closestVtx)));
445 dz_real = TMath::Abs(ele->GsfTrk()->DzCorrected(*vertices->At(closestVtx)));
446 }
447
448 //printf("ming sync check electonidmod vtxind:%d vtx_x:%f vtx_y:%f vtx_z:%f dz:%f d0:%f\n",closestVtx,vertices->At(closestVtx)->X(),vertices->At(closestVtx)->Y(),vertices->At(closestVtx)->Z(),dz_real,d0_real);
449
450 if(d0_real < fD0Cut) d0cut = kTRUE;
451
452 return d0cut;
453 }
454
455 //--------------------------------------------------------------------------------------------------
456 Bool_t ElectronTools::PassD0Cut(const Electron *ele, const BeamSpotCol *beamspots, Double_t fD0Cut)
457 {
458 Bool_t d0cut = kFALSE;
459 // d0 cut
460 Double_t d0_real = 99999;
461 for(UInt_t i0 = 0; i0 < beamspots->GetEntries(); i0++) {
462 Double_t pD0 = ele->GsfTrk()->D0Corrected(*beamspots->At(i0));
463 if(TMath::Abs(pD0) < TMath::Abs(d0_real)) d0_real = TMath::Abs(pD0);
464 }
465 if(d0_real < fD0Cut) d0cut = kTRUE;
466
467 return d0cut;
468 }
469
470 //--------------------------------------------------------------------------------------------------
471 Bool_t ElectronTools::PassDZCut(const Electron *ele, const VertexCol *vertices, Double_t fDZCut, Int_t nVertex)
472 {
473 Bool_t dzcut = kFALSE;
474
475 Double_t distVtx = 999.0;
476
477 if( nVertex >= (int) vertices->GetEntries() )
478 nVertex = vertices->GetEntries()-1;
479
480 if(nVertex >= 0) distVtx = TMath::Abs(ele->GsfTrk()->DzCorrected(*vertices->At(nVertex)));
481 else {
482 for(UInt_t nv=0; nv<vertices->GetEntries(); nv++){
483 double dz = TMath::Abs(ele->GsfTrk()->DzCorrected(*vertices->At(nv)));
484 if(dz < distVtx) {
485 distVtx = dz;
486 }
487 }
488 }
489
490 if(distVtx < fDZCut) dzcut = kTRUE;
491
492 return dzcut;
493 }
494
495 //--------------------------------------------------------------------------------------------------
496 Bool_t ElectronTools::PassChargeFilter(const Electron *ele)
497 {
498 Bool_t passChargeFilter = kTRUE;
499 if(ele->TrackerTrk() &&
500 ele->TrackerTrk()->Charge() != ele->Charge()) passChargeFilter = kFALSE;
501
502 return passChargeFilter;
503 }
504
505 //--------------------------------------------------------------------------------------------------
506 Bool_t ElectronTools::PassSpikeRemovalFilter(const Electron *ele)
507 {
508 Bool_t passSpikeRemovalFilter = kTRUE;
509 if(ele->SCluster() &&
510 ele->SCluster()->Seed()->Energy() > 5.0 &&
511 ele->SCluster()->Seed()->EMax() / ele->SCluster()->Seed()->E3x3() > 0.95
512 ) {
513 passSpikeRemovalFilter = kFALSE;
514 }
515
516 // For Now Only use the EMax/E3x3 prescription.
517 // if(ele->SCluster()->Seed()->Energy() > 5.0 &&
518 // (1 - (ele->SCluster()->Seed()->E1x3() + ele->SCluster()->Seed()->E3x1() - 2*ele->SCluster()->Seed()->EMax())) > 0.95
519 // ) {
520 // passSpikeRemovalFilter = kFALSE;
521 // }
522
523 return passSpikeRemovalFilter;
524 }
525
526 Bool_t ElectronTools::PassTriggerMatching(const Electron *ele, const TriggerObjectCol *trigobjs)
527 {
528
529 for (UInt_t i=0; i<trigobjs->GetEntries(); ++i) {
530 const TriggerObject *trigobj = trigobjs->At(i);
531 if (trigobj->TriggerType()==TriggerObject::TriggerCluster || trigobj->TriggerType()==TriggerObject::TriggerElectron || trigobj->TriggerType()==TriggerObject::TriggerPhoton) {
532 if (MathUtils::DeltaR(ele->SCluster(),trigobj)<0.3) {
533 return kTRUE;
534 }
535 }
536 }
537
538 return kFALSE;
539
540
541 }
542
543 //--------------------------------------------------------------------------------------------------
544 Int_t ElectronTools::Classify(const Electron *ele) {
545
546 double eta = ele->AbsEta();
547 double eOverP = ele->ESuperClusterOverP();
548 double fBrem = ele->FBrem();
549
550 int cat = -1;
551 if (ele->IsEB()) {
552 if ((fBrem >= 0.12) and (eOverP > 0.9) and (eOverP < 1.2))
553 cat = 0;
554 else if (((eta > .445 and eta < .45 ) or
555 (eta > .79 and eta < .81 ) or
556 (eta > 1.137 and eta < 1.157 ) or
557 (eta > 1.47285 and eta < 1.4744)))
558 cat = 6;
559 else if (ele->IsTrackerDriven() and !ele->IsEcalDriven())
560 cat = 8;
561 else if (fBrem < 0.12)
562 cat = 1;
563 else
564 cat = 2;
565 } else {
566 if ((fBrem >= 0.2) and (eOverP > 0.82) and (eOverP < 1.22))
567 cat = 3;
568 else if (eta > 1.5 and eta < 1.58)
569 cat = 7;
570 else if (ele->IsTrackerDriven() and !ele->IsEcalDriven())
571 cat = 8;
572 else if (fBrem < 0.2)
573 cat = 4;
574 else
575 cat = 5;
576 }
577
578 return cat;
579 }
580
581 //--------------------------------------------------------------------------------------------------
582 Int_t ElectronTools::PassTightId(const Electron *ele, const VertexCol *vertices,
583 const DecayParticleCol *conversions, const Int_t typeCuts,
584 Double_t beta){
585
586 // original code on
587 // http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/RecoEgamma/ElectronIdentification/src/CutBasedElectronID.cc
588 // beta must be computed with a DR cone of 0.4
589
590 Double_t scEt = ele->SCluster()->Et();
591 Double_t scEta = ele->SCluster()->Eta();
592
593 Double_t fBrem = ele->FBrem();
594 Double_t hOverE = ele->HadronicOverEm();
595 Double_t sigmaee = ele->CoviEtaiEta();
596 Double_t deltaPhiIn = TMath::Abs(ele->DeltaPhiSuperClusterTrackAtVtx());
597 Double_t deltaEtaIn = TMath::Abs(ele->DeltaEtaSuperClusterTrackAtVtx());
598 Double_t eSeedOverPin = ele->ESeedClusterOverPIn();
599
600 Int_t mishits = ele->BestTrk()->NExpectedHitsInner();
601 Double_t tkIso = ele->TrackIsolationDr03();
602 Double_t ecalIso = ele->EcalRecHitIsoDr04()*beta;
603 Double_t hcalIso = ele->HcalTowerSumEtDr04()*beta;
604
605 int cat = Classify(ele);
606 int eb;
607
608 if (ele->IsEB())
609 eb = 0;
610 else
611 eb = 1;
612
613 // Medium cuts
614 Double_t cutdcotdistMedium[9] = {
615 3.32e-02, 2.92e-02, 2.49e-02, 3.92e-02, 3.41e-02, 3.96e-02, 2.91e-02, 3.95e-02, 7.71e-03};
616 Double_t cutdetainMedium[9] = {
617 1.33e-02, 4.48e-03, 9.22e-03, 1.54e-02, 7.26e-03, 1.24e-02, 1.29e-02, 3.84e-02, 1.88e-02};
618 Double_t cutdetainlMedium[9] = {
619 1.21e-02, 4.22e-03, 9.18e-03, 1.61e-02, 6.45e-03, 1.16e-02, 1.23e-02, 6.20e-02, 2.43e-02};
620 Double_t cutdphiinMedium[9] = {
621 7.09e-02, 2.43e-01, 2.96e-01, 7.98e-02, 2.35e-01, 2.76e-01, 3.42e-01, 4.04e-01, 2.99e-01};
622 Double_t cutdphiinlMedium[9] = {
623 7.42e-02, 2.43e-01, 2.97e-01, 9.12e-02, 2.26e-01, 2.76e-01, 3.34e-01, 5.58e-01, 2.91e-01};
624 Double_t cuteseedopcorMedium[9] = {
625 6.42e-01, 9.44e-01, 4.53e-01, 7.62e-01, 3.67e-01, 5.57e-01, 1.98e-01, 9.15e-01, 6.28e-02};
626 Double_t cutfmishitsMedium[9] = {
627 4.50e+00, 1.50e+00, 1.50e+00, 1.50e+00, 1.50e+00, 5.00e-01, 1.50e+00, 5.00e-01, 5.00e-01};
628 Double_t cuthoeMedium[9] = {
629 1.96e-01, 6.30e-02, 1.48e-01, 3.66e-01, 5.66e-02, 1.45e-01, 4.29e-01, 4.28e-01, 3.99e-01};
630 Double_t cuthoelMedium[9] = {
631 2.19e-01, 6.19e-02, 1.47e-01, 3.58e-01, 4.61e-02, 1.46e-01, 3.26e-01, 3.81e-01, 3.89e-01};
632 Double_t cutip_gsfMedium[9] = {
633 2.45e-02, 9.74e-02, 1.48e-01, 5.49e-02, 5.65e-01, 3.33e-01, 2.04e-01, 5.41e-01, 1.21e-01};
634 Double_t cutip_gsflMedium[9] = {
635 1.92e-02, 9.81e-02, 1.33e-01, 4.34e-02, 5.65e-01, 3.24e-01, 2.33e-01, 4.30e-01, 6.44e-02};
636 Double_t cutiso_sumMedium[9] = {
637 1.44e+01, 1.12e+01, 1.09e+01, 1.08e+01, 6.35e+00, 9.78e+00, 1.30e+01, 1.62e+01, 1.96e+00};
638 Double_t cutiso_sumoetMedium[9] = {
639 1.01e+01, 6.41e+00, 6.00e+00, 8.14e+00, 3.90e+00, 4.76e+00, 6.86e+00, 6.48e+00, 1.74e+01};
640 Double_t cutiso_sumoetlMedium[9] = {
641 9.44e+00, 7.67e+00, 7.15e+00, 7.34e+00, 3.35e+00, 4.70e+00, 8.32e+00, 7.55e+00, 6.25e+00};
642 Double_t cutseeMedium[9] = {
643 1.30e-02, 1.09e-02, 1.18e-02, 3.94e-02, 3.04e-02, 3.28e-02, 1.00e-02, 3.73e-02, 6.69e-02};
644 Double_t cutseelMedium[9] = {
645 1.42e-02, 1.11e-02, 1.29e-02, 4.32e-02, 2.96e-02, 3.82e-02, 1.01e-02, 4.45e-02, 1.19e-01};
646
647 // Tight cuts
648 Double_t cutdcotdistTight[9] = {
649 2.68e-02, 2.36e-02, 2.21e-02, 3.72e-02, 3.17e-02, 3.61e-02, 2.55e-02, 3.75e-02, 2.16e-04};
650 Double_t cutdetainTight[9] = {
651 8.92e-03, 3.96e-03, 8.50e-03, 1.34e-02, 6.27e-03, 1.05e-02, 1.12e-02, 3.09e-02, 1.88e-02};
652 Double_t cutdetainlTight[9] = {
653 9.23e-03, 3.77e-03, 8.70e-03, 1.39e-02, 5.60e-03, 9.40e-03, 1.07e-02, 6.20e-02, 4.10e-03};
654 Double_t cutdphiinTight[9] = {
655 6.37e-02, 1.53e-01, 2.90e-01, 7.69e-02, 1.81e-01, 2.34e-01, 3.42e-01, 3.93e-01, 2.84e-01};
656 Double_t cutdphiinlTight[9] = {
657 6.92e-02, 2.33e-01, 2.96e-01, 8.65e-02, 1.85e-01, 2.76e-01, 3.34e-01, 3.53e-01, 2.90e-01};
658 Double_t cuteseedopcorTight[9] = {
659 6.52e-01, 9.69e-01, 9.12e-01, 7.79e-01, 3.67e-01, 6.99e-01, 3.28e-01, 9.67e-01, 5.89e-01};
660 Double_t cutfmishitsTight[9] = {
661 4.50e+00, 1.50e+00, 5.00e-01, 1.50e+00, 1.50e+00, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01};
662 Double_t cuthoeTight[9] = {
663 1.74e-01, 4.88e-02, 1.46e-01, 3.64e-01, 4.93e-02, 1.45e-01, 4.29e-01, 4.20e-01, 3.99e-01};
664 Double_t cuthoelTight[9] = {
665 2.19e-01, 5.25e-02, 1.47e-01, 3.57e-01, 4.25e-02, 1.45e-01, 3.26e-01, 3.80e-01, 1.32e-01};
666 Double_t cutip_gsfTight[9] = {
667 1.58e-02, 8.25e-02, 1.15e-01, 4.05e-02, 5.40e-01, 1.51e-01, 7.74e-02, 4.17e-01, 7.80e-02};
668 Double_t cutip_gsflTight[9] = {
669 1.27e-02, 6.26e-02, 9.68e-02, 3.02e-02, 5.65e-01, 1.46e-01, 7.90e-02, 4.10e-01, 4.79e-02};
670 Double_t cutiso_sumTight[9] = {
671 1.23e+01, 9.77e+00, 1.01e+01, 9.77e+00, 6.13e+00, 7.55e+00, 1.30e+01, 1.62e+01, 1.78e+00};
672 Double_t cutiso_sumoetTight[9] = {
673 7.75e+00, 5.45e+00, 5.67e+00, 5.97e+00, 3.17e+00, 3.86e+00, 6.06e+00, 5.31e+00, 1.05e+01};
674 Double_t cutiso_sumoetlTight[9] = {
675 7.56e+00, 5.08e+00, 5.77e+00, 5.74e+00, 2.37e+00, 3.32e+00, 4.97e+00, 5.46e+00, 3.82e+00};
676 Double_t cutseeTight[9] = {
677 1.16e-02, 1.07e-02, 1.08e-02, 3.49e-02, 2.89e-02, 3.08e-02, 9.87e-03, 3.37e-02, 4.40e-02};
678 Double_t cutseelTight[9] = {
679 1.27e-02, 1.08e-02, 1.13e-02, 4.19e-02, 2.81e-02, 3.02e-02, 9.76e-03, 4.28e-02, 2.98e-02};
680
681 // SuperTight cuts
682 Double_t cutdcotdistSuperTight[9] = {
683 2.11e-02, 1.86e-02, 1.55e-02, 3.40e-02, 2.85e-02, 3.32e-02, 1.64e-02, 3.75e-02, 1.30e-04};
684 Double_t cutdetainSuperTight[9] = {
685 7.84e-03, 3.67e-03, 7.00e-03, 1.28e-02, 5.65e-03, 9.53e-03, 1.08e-02, 2.97e-02, 7.24e-03};
686 Double_t cutdetainlSuperTight[9] = {
687 7.61e-03, 3.28e-03, 6.57e-03, 1.03e-02, 5.05e-03, 8.55e-03, 1.07e-02, 2.94e-02, 4.10e-03};
688 Double_t cutdphiinSuperTight[9] = {
689 4.83e-02, 7.39e-02, 2.38e-01, 5.74e-02, 1.29e-01, 2.13e-01, 3.31e-01, 3.93e-01, 2.84e-01};
690 Double_t cutdphiinlSuperTight[9] = {
691 5.79e-02, 7.21e-02, 2.18e-01, 7.70e-02, 1.41e-01, 2.11e-01, 2.43e-01, 3.53e-01, 2.89e-01};
692 Double_t cuteseedopcorSuperTight[9] = {
693 7.32e-01, 9.77e-01, 9.83e-01, 8.55e-01, 4.31e-01, 7.35e-01, 4.18e-01, 9.99e-01, 5.89e-01};
694 Double_t cutfmishitsSuperTight[9] = {
695 3.50e+00, 1.50e+00, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01};
696 Double_t cuthoeSuperTight[9] = {
697 9.19e-02, 4.11e-02, 1.42e-01, 3.35e-01, 3.82e-02, 1.41e-01, 4.29e-01, 4.01e-01, 3.99e-01};
698 Double_t cuthoelSuperTight[9] = {
699 7.51e-02, 3.81e-02, 1.41e-01, 3.32e-01, 3.10e-02, 1.43e-01, 2.35e-01, 3.80e-01, 1.32e-01};
700 Double_t cutip_gsfSuperTight[9] = {
701 1.42e-02, 2.66e-02, 1.06e-01, 3.38e-02, 3.23e-01, 1.07e-01, 7.74e-02, 2.32e-01, 7.80e-02};
702 Double_t cutip_gsflSuperTight[9] = {
703 1.15e-02, 2.72e-02, 8.41e-02, 2.49e-02, 4.17e-01, 1.02e-01, 7.90e-02, 1.69e-01, 4.79e-02};
704 Double_t cutiso_sumSuperTight[9] = {
705 8.95e+00, 8.18e+00, 8.75e+00, 7.47e+00, 5.43e+00, 5.87e+00, 8.16e+00, 1.02e+01, 1.78e+00};
706 Double_t cutiso_sumoetSuperTight[9] = {
707 6.45e+00, 5.14e+00, 4.99e+00, 5.21e+00, 2.65e+00, 3.12e+00, 4.52e+00, 4.72e+00, 3.68e+00};
708 Double_t cutiso_sumoetlSuperTight[9] = {
709 6.02e+00, 3.96e+00, 4.23e+00, 4.73e+00, 1.99e+00, 2.64e+00, 3.72e+00, 3.81e+00, 1.44e+00};
710 Double_t cutseeSuperTight[9] = {
711 1.09e-02, 1.05e-02, 1.05e-02, 3.24e-02, 2.81e-02, 2.95e-02, 9.77e-03, 2.75e-02, 2.95e-02};
712 Double_t cutseelSuperTight[9] = {
713 1.12e-02, 1.05e-02, 1.07e-02, 3.51e-02, 2.75e-02, 2.87e-02, 9.59e-03, 2.67e-02, 2.98e-02};
714
715 // HyperTight1 cuts
716 Double_t cutdcotdistHyperTight1[9] = {
717 1.48e-02, 1.50e-02, 8.25e-03, 3.16e-02, 2.85e-02, 3.15e-02, 6.62e-03, 3.48e-02, 3.63e-06};
718 Double_t cutdetainHyperTight1[9] = {
719 6.51e-03, 3.51e-03, 5.53e-03, 9.16e-03, 5.30e-03, 8.28e-03, 1.08e-02, 2.97e-02, 7.24e-03};
720 Double_t cutdetainlHyperTight1[9] = {
721 6.05e-03, 3.23e-03, 4.93e-03, 8.01e-03, 4.93e-03, 7.91e-03, 1.03e-02, 2.94e-02, 4.10e-03};
722 Double_t cutdphiinHyperTight1[9] = {
723 4.83e-02, 4.91e-02, 2.30e-01, 3.48e-02, 7.44e-02, 2.04e-01, 9.95e-02, 3.93e-01, 2.84e-01};
724 Double_t cutdphiinlHyperTight1[9] = {
725 4.74e-02, 4.51e-02, 2.18e-01, 2.99e-02, 7.37e-02, 2.11e-01, 9.99e-02, 3.53e-01, 2.89e-01};
726 Double_t cuteseedopcorHyperTight1[9] = {
727 7.72e-01, 9.90e-01, 1.01e+00, 8.55e-01, 9.11e-01, 7.72e-01, 9.17e-01, 1.06e+00, 7.63e-01};
728 Double_t cutfmishitsHyperTight1[9] = {
729 3.50e+00, 1.50e+00, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01};
730 Double_t cuthoeHyperTight1[9] = {
731 6.17e-02, 3.70e-02, 1.41e-01, 2.91e-01, 3.82e-02, 1.34e-01, 4.19e-01, 3.87e-01, 3.93e-01};
732 Double_t cuthoelHyperTight1[9] = {
733 4.43e-02, 3.57e-02, 1.41e-01, 2.81e-01, 3.07e-02, 1.28e-01, 2.27e-01, 3.80e-01, 1.32e-01};
734 Double_t cutip_gsfHyperTight1[9] = {
735 1.21e-02, 1.76e-02, 6.01e-02, 2.96e-02, 1.74e-01, 9.70e-02, 7.74e-02, 1.33e-01, 7.80e-02};
736 Double_t cutip_gsflHyperTight1[9] = {
737 1.01e-02, 1.56e-02, 6.87e-02, 2.13e-02, 1.25e-01, 8.16e-02, 7.90e-02, 1.30e-01, 4.79e-02};
738 Double_t cutiso_sumHyperTight1[9] = {
739 7.92e+00, 6.85e+00, 7.87e+00, 6.77e+00, 4.47e+00, 5.28e+00, 6.57e+00, 1.02e+01, 1.78e+00};
740 Double_t cutiso_sumoetHyperTight1[9] = {
741 5.20e+00, 3.93e+00, 3.88e+00, 4.10e+00, 2.40e+00, 2.43e+00, 3.49e+00, 3.94e+00, 3.01e+00};
742 Double_t cutiso_sumoetlHyperTight1[9] = {
743 4.18e+00, 3.12e+00, 3.44e+00, 3.25e+00, 1.77e+00, 2.06e+00, 2.83e+00, 3.12e+00, 1.43e+00};
744 Double_t cutseeHyperTight1[9] = {
745 1.05e-02, 1.04e-02, 1.01e-02, 3.24e-02, 2.80e-02, 2.85e-02, 9.67e-03, 2.61e-02, 2.95e-02};
746 Double_t cutseelHyperTight1[9] = {
747 1.04e-02, 1.03e-02, 1.01e-02, 3.04e-02, 2.74e-02, 2.78e-02, 9.58e-03, 2.54e-02, 2.83e-02};
748
749 // HyperTight2 cuts
750 Double_t cutdcotdistHyperTight2[9] = {
751 1.15e-02, 1.07e-02, 4.01e-03, 2.97e-02, 2.85e-02, 3.10e-02, 9.34e-04, 3.40e-02, 2.82e-07};
752 Double_t cutdetainHyperTight2[9] = {
753 5.29e-03, 2.56e-03, 4.89e-03, 7.89e-03, 5.30e-03, 7.37e-03, 8.91e-03, 9.36e-03, 5.94e-03};
754 Double_t cutdetainlHyperTight2[9] = {
755 4.48e-03, 2.59e-03, 4.42e-03, 6.54e-03, 4.93e-03, 6.98e-03, 8.49e-03, 9.06e-03, -4.81e-03};
756 Double_t cutdphiinHyperTight2[9] = {
757 2.41e-02, 3.83e-02, 1.48e-01, 2.91e-02, 3.15e-02, 1.57e-01, 8.90e-02, 1.02e-01, 2.81e-01};
758 Double_t cutdphiinlHyperTight2[9] = {
759 2.13e-02, 3.79e-02, 1.25e-01, 2.24e-02, 3.69e-02, 1.64e-01, 9.99e-02, 9.23e-02, 2.37e-01};
760 Double_t cuteseedopcorHyperTight2[9] = {
761 1.03e+00, 9.95e-01, 1.03e+00, 1.01e+00, 9.46e-01, 9.03e-01, 9.97e-01, 1.14e+00, 8.00e-01};
762 Double_t cutfmishitsHyperTight2[9] = {
763 1.50e+00, 1.50e+00, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, -5.00e-01};
764 Double_t cuthoeHyperTight2[9] = {
765 4.94e-02, 3.45e-02, 1.40e-01, 2.02e-01, 3.82e-02, 1.19e-01, 1.23e-01, 3.82e-01, 2.50e-01};
766 Double_t cuthoelHyperTight2[9] = {
767 4.04e-02, 3.42e-02, 1.31e-01, 1.85e-01, 3.01e-02, 1.27e-01, 2.27e-01, 3.80e-01, 1.32e-01};
768 Double_t cutip_gsfHyperTight2[9] = {
769 1.14e-02, 1.38e-02, 5.29e-02, 1.87e-02, 1.31e-01, 8.63e-02, 7.74e-02, 1.04e-01, 2.42e-02};
770 Double_t cutip_gsflHyperTight2[9] = {
771 9.83e-03, 1.35e-02, 4.27e-02, 1.72e-02, 1.25e-01, 7.92e-02, 7.90e-02, 1.30e-01, 3.40e-02};
772 Double_t cutiso_sumHyperTight2[9] = {
773 6.40e+00, 5.77e+00, 6.54e+00, 5.22e+00, 3.86e+00, 4.63e+00, 6.31e+00, 1.02e+01, 1.78e+00};
774 Double_t cutiso_sumoetHyperTight2[9] = {
775 4.03e+00, 3.03e+00, 3.24e+00, 3.13e+00, 2.05e+00, 2.01e+00, 2.99e+00, 3.44e+00, 2.76e+00};
776 Double_t cutiso_sumoetlHyperTight2[9] = {
777 3.08e+00, 2.31e+00, 2.84e+00, 2.53e+00, 1.65e+00, 1.72e+00, 2.34e+00, 3.11e+00, 1.35e+00};
778 Double_t cutseeHyperTight2[9] = {
779 1.03e-02, 1.03e-02, 9.88e-03, 3.03e-02, 2.79e-02, 2.79e-02, 9.67e-03, 2.52e-02, 2.58e-02};
780 Double_t cutseelHyperTight2[9] = {
781 1.02e-02, 1.02e-02, 9.80e-03, 2.90e-02, 2.74e-02, 2.75e-02, 9.58e-03, 2.49e-02, 2.50e-02};
782
783 // HyperTight3 cuts
784 Double_t cutdcotdistHyperTight3[9] = {
785 9.63e-03, 5.11e-03, 1.95e-04, 2.97e-02, 2.85e-02, 2.18e-02, 2.61e-05, 2.57e-02, 2.82e-07};
786 Double_t cutdetainHyperTight3[9] = {
787 4.86e-03, 2.29e-03, 4.40e-03, 7.79e-03, 4.07e-03, 6.33e-03, 7.70e-03, 7.93e-03, 5.94e-03};
788 Double_t cutdetainlHyperTight3[9] = {
789 4.48e-03, 2.30e-03, 4.14e-03, 6.04e-03, 3.87e-03, 6.09e-03, 7.97e-03, 8.04e-03, -4.81e-03};
790 Double_t cutdphiinHyperTight3[9] = {
791 2.41e-02, 2.88e-02, 7.39e-02, 2.91e-02, 1.91e-02, 1.14e-01, 3.61e-02, 8.92e-02, 2.81e-01};
792 Double_t cutdphiinlHyperTight3[9] = {
793 1.95e-02, 3.42e-02, 8.06e-02, 2.22e-02, 2.26e-02, 9.73e-02, 4.51e-02, 9.23e-02, 2.37e-01};
794 Double_t cuteseedopcorHyperTight3[9] = {
795 1.07e+00, 1.01e+00, 1.08e+00, 1.01e+00, 9.69e-01, 9.10e-01, 1.04e+00, 1.20e+00, 8.00e-01};
796 Double_t cutfmishitsHyperTight3[9] = {
797 5.00e-01, 1.50e+00, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, -5.00e-01};
798 Double_t cuthoeHyperTight3[9] = {
799 3.52e-02, 3.45e-02, 1.33e-01, 1.88e-01, 2.72e-02, 1.19e-01, 9.28e-02, 2.46e-01, 2.50e-01};
800 Double_t cuthoelHyperTight3[9] = {
801 4.04e-02, 3.40e-02, 1.31e-01, 1.84e-01, 2.64e-02, 1.18e-01, 9.76e-02, 2.53e-01, 1.32e-01};
802 Double_t cutip_gsfHyperTight3[9] = {
803 1.14e-02, 1.26e-02, 3.79e-02, 1.68e-02, 1.21e-01, 5.29e-02, 7.74e-02, 3.35e-02, 2.42e-02};
804 Double_t cutip_gsflHyperTight3[9] = {
805 9.83e-03, 1.18e-02, 3.59e-02, 1.56e-02, 1.20e-01, 5.36e-02, 7.90e-02, 2.88e-02, 3.40e-02};
806 Double_t cutiso_sumHyperTight3[9] = {
807 5.40e+00, 5.41e+00, 5.88e+00, 4.32e+00, 3.86e+00, 4.33e+00, 5.87e+00, 9.05e+00, 1.78e+00};
808 Double_t cutiso_sumoetHyperTight3[9] = {
809 3.03e+00, 2.50e+00, 2.58e+00, 2.44e+00, 1.91e+00, 1.76e+00, 2.92e+00, 3.13e+00, 2.76e+00};
810 Double_t cutiso_sumoetlHyperTight3[9] = {
811 2.36e+00, 2.02e+00, 2.29e+00, 1.89e+00, 1.65e+00, 1.69e+00, 2.03e+00, 2.79e+00, 1.35e+00};
812 Double_t cutseeHyperTight3[9] = {
813 1.03e-02, 1.01e-02, 9.84e-03, 2.89e-02, 2.74e-02, 2.73e-02, 9.47e-03, 2.44e-02, 2.58e-02};
814 Double_t cutseelHyperTight3[9] = {
815 1.02e-02, 1.00e-02, 9.73e-03, 2.79e-02, 2.73e-02, 2.69e-02, 9.40e-03, 2.46e-02, 2.50e-02};
816
817 // HyperTight4 cuts
818 Double_t cutdcotdistHyperTight4[9] = {
819 2.70e-04, 1.43e-04, 1.95e-04, 2.64e-03, 2.82e-02, 1.64e-02, 2.61e-05, 2.57e-02, 2.82e-07};
820 Double_t cutdetainHyperTight4[9] = {
821 2.44e-03, 1.67e-03, 2.26e-03, 3.43e-03, 3.51e-03, 3.52e-03, 2.98e-03, 4.79e-03, 5.94e-03};
822 Double_t cutdetainlHyperTight4[9] = {
823 2.34e-03, 1.29e-03, 2.30e-03, 3.30e-03, 3.61e-03, 3.84e-03, 2.53e-03, 3.66e-03, -4.81e-03};
824 Double_t cutdphiinHyperTight4[9] = {
825 8.44e-03, 5.21e-03, 2.18e-02, 1.39e-02, 7.82e-03, 1.52e-02, 2.59e-02, 3.87e-02, 2.81e-01};
826 Double_t cutdphiinlHyperTight4[9] = {
827 5.77e-03, 3.20e-03, 2.85e-02, 2.22e-02, 7.00e-03, 1.84e-02, 2.91e-02, 4.40e-02, 2.37e-01};
828 Double_t cuteseedopcorHyperTight4[9] = {
829 1.15e+00, 1.01e+00, 1.21e+00, 1.07e+00, 9.69e-01, 9.10e-01, 1.08e+00, 1.36e+00, 8.00e-01};
830 Double_t cutfmishitsHyperTight4[9] = {
831 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, 5.00e-01, -5.00e-01};
832 Double_t cuthoeHyperTight4[9] = {
833 2.39e-02, 2.68e-02, 2.12e-02, 1.03e-01, 9.92e-03, 7.07e-02, 7.12e-02, 1.48e-01, 2.50e-01};
834 Double_t cuthoelHyperTight4[9] = {
835 2.87e-02, 1.94e-02, 2.16e-02, 5.68e-02, 1.35e-02, 4.04e-02, 7.98e-02, 1.50e-01, 1.32e-01};
836 Double_t cutip_gsfHyperTight4[9] = {
837 7.61e-03, 5.22e-03, 3.79e-02, 1.02e-02, 4.62e-02, 1.82e-02, 7.74e-02, 3.35e-02, 2.42e-02};
838 Double_t cutip_gsflHyperTight4[9] = {
839 7.81e-03, 4.25e-03, 3.08e-02, 1.04e-02, 2.35e-02, 2.45e-02, 7.90e-02, 2.88e-02, 3.40e-02};
840 Double_t cutiso_sumHyperTight4[9] = {
841 5.40e+00, 5.41e+00, 5.88e+00, 4.32e+00, 3.86e+00, 4.33e+00, 5.86e+00, 9.05e+00, 1.78e+00};
842 Double_t cutiso_sumoetHyperTight4[9] = {
843 2.53e+00, 2.10e+00, 1.87e+00, 1.84e+00, 1.79e+00, 1.61e+00, 2.53e+00, 1.98e+00, 2.76e+00};
844 Double_t cutiso_sumoetlHyperTight4[9] = {
845 2.28e+00, 2.02e+00, 2.04e+00, 1.69e+00, 1.65e+00, 1.61e+00, 2.03e+00, 1.82e+00, 1.35e+00};
846 Double_t cutseeHyperTight4[9] = {
847 9.99e-03, 9.61e-03, 9.65e-03, 2.75e-02, 2.61e-02, 2.64e-02, 9.18e-03, 2.44e-02, 2.58e-02};
848 Double_t cutseelHyperTight4[9] = {
849 9.66e-03, 9.69e-03, 9.58e-03, 2.73e-02, 2.66e-02, 2.66e-02, 8.64e-03, 2.46e-02, 2.50e-02};
850
851 Double_t cutdcotdist[9];
852 Double_t cutdetain[9];
853 Double_t cutdetainl[9];
854 Double_t cutdphiin[9];
855 Double_t cutdphiinl[9];
856 Double_t cuteseedopcor[9];
857 Double_t cutfmishits[9];
858 Double_t cuthoe[9];
859 Double_t cuthoel[9];
860 Double_t cutip_gsf[9];
861 Double_t cutip_gsfl[9];
862 Double_t cutiso_sum[9];
863 Double_t cutiso_sumoet[9];
864 Double_t cutiso_sumoetl[9];
865 Double_t cutsee[9];
866 Double_t cutseel[9];
867 if (typeCuts == 0) {
868 memcpy(cutdcotdist ,cutdcotdistMedium ,sizeof(cutdcotdistMedium));
869 memcpy(cutdetain ,cutdetainMedium ,sizeof(cutdetainMedium));
870 memcpy(cutdetainl ,cutdetainlMedium ,sizeof(cutdetainlMedium));
871 memcpy(cutdphiin ,cutdphiinMedium ,sizeof(cutdphiinMedium));
872 memcpy(cutdphiinl ,cutdphiinlMedium ,sizeof(cutdphiinlMedium));
873 memcpy(cuteseedopcor ,cuteseedopcorMedium ,sizeof(cuteseedopcorMedium));
874 memcpy(cutfmishits ,cutfmishitsMedium ,sizeof(cutfmishitsMedium));
875 memcpy(cuthoe ,cuthoeMedium ,sizeof(cuthoeMedium));
876 memcpy(cuthoel ,cuthoelMedium ,sizeof(cuthoelMedium));
877 memcpy(cutip_gsf ,cutip_gsfMedium ,sizeof(cutip_gsfMedium));
878 memcpy(cutip_gsfl ,cutip_gsflMedium ,sizeof(cutip_gsflMedium));
879 memcpy(cutiso_sum ,cutiso_sumMedium ,sizeof(cutiso_sumMedium));
880 memcpy(cutiso_sumoet ,cutiso_sumoetMedium ,sizeof(cutiso_sumoetMedium));
881 memcpy(cutiso_sumoetl,cutiso_sumoetlMedium,sizeof(cutiso_sumoetlMedium));
882 memcpy(cutsee ,cutseeMedium ,sizeof(cutseeMedium));
883 memcpy(cutseel ,cutseelMedium ,sizeof(cutseelMedium));
884 }
885 else if(typeCuts == 1) {
886 memcpy(cutdcotdist ,cutdcotdistTight ,sizeof(cutdcotdistTight));
887 memcpy(cutdetain ,cutdetainTight ,sizeof(cutdetainTight));
888 memcpy(cutdetainl ,cutdetainlTight ,sizeof(cutdetainlTight));
889 memcpy(cutdphiin ,cutdphiinTight ,sizeof(cutdphiinTight));
890 memcpy(cutdphiinl ,cutdphiinlTight ,sizeof(cutdphiinlTight));
891 memcpy(cuteseedopcor ,cuteseedopcorTight ,sizeof(cuteseedopcorTight));
892 memcpy(cutfmishits ,cutfmishitsTight ,sizeof(cutfmishitsTight));
893 memcpy(cuthoe ,cuthoeTight ,sizeof(cuthoeTight));
894 memcpy(cuthoel ,cuthoelTight ,sizeof(cuthoelTight));
895 memcpy(cutip_gsf ,cutip_gsfTight ,sizeof(cutip_gsfTight));
896 memcpy(cutip_gsfl ,cutip_gsflTight ,sizeof(cutip_gsflTight));
897 memcpy(cutiso_sum ,cutiso_sumTight ,sizeof(cutiso_sumTight));
898 memcpy(cutiso_sumoet ,cutiso_sumoetTight ,sizeof(cutiso_sumoetTight));
899 memcpy(cutiso_sumoetl,cutiso_sumoetlTight,sizeof(cutiso_sumoetlTight));
900 memcpy(cutsee ,cutseeTight ,sizeof(cutseeTight));
901 memcpy(cutseel ,cutseelTight ,sizeof(cutseelTight));
902 }
903 else if(typeCuts == 2) {
904 memcpy(cutdcotdist ,cutdcotdistSuperTight ,sizeof(cutdcotdistSuperTight));
905 memcpy(cutdetain ,cutdetainSuperTight ,sizeof(cutdetainSuperTight));
906 memcpy(cutdetainl ,cutdetainlSuperTight ,sizeof(cutdetainlSuperTight));
907 memcpy(cutdphiin ,cutdphiinSuperTight ,sizeof(cutdphiinSuperTight));
908 memcpy(cutdphiinl ,cutdphiinlSuperTight ,sizeof(cutdphiinlSuperTight));
909 memcpy(cuteseedopcor ,cuteseedopcorSuperTight ,sizeof(cuteseedopcorSuperTight));
910 memcpy(cutfmishits ,cutfmishitsSuperTight ,sizeof(cutfmishitsSuperTight));
911 memcpy(cuthoe ,cuthoeSuperTight ,sizeof(cuthoeSuperTight));
912 memcpy(cuthoel ,cuthoelSuperTight ,sizeof(cuthoelSuperTight));
913 memcpy(cutip_gsf ,cutip_gsfSuperTight ,sizeof(cutip_gsfSuperTight));
914 memcpy(cutip_gsfl ,cutip_gsflSuperTight ,sizeof(cutip_gsflSuperTight));
915 memcpy(cutiso_sum ,cutiso_sumSuperTight ,sizeof(cutiso_sumSuperTight));
916 memcpy(cutiso_sumoet ,cutiso_sumoetSuperTight ,sizeof(cutiso_sumoetSuperTight));
917 memcpy(cutiso_sumoetl,cutiso_sumoetlSuperTight,sizeof(cutiso_sumoetlSuperTight));
918 memcpy(cutsee ,cutseeSuperTight ,sizeof(cutseeSuperTight));
919 memcpy(cutseel ,cutseelSuperTight ,sizeof(cutseelSuperTight));
920 }
921 else if(typeCuts == 3) {
922 memcpy(cutdcotdist ,cutdcotdistHyperTight1 ,sizeof(cutdcotdistHyperTight1));
923 memcpy(cutdetain ,cutdetainHyperTight1 ,sizeof(cutdetainHyperTight1));
924 memcpy(cutdetainl ,cutdetainlHyperTight1 ,sizeof(cutdetainlHyperTight1));
925 memcpy(cutdphiin ,cutdphiinHyperTight1 ,sizeof(cutdphiinHyperTight1));
926 memcpy(cutdphiinl ,cutdphiinlHyperTight1 ,sizeof(cutdphiinlHyperTight1));
927 memcpy(cuteseedopcor ,cuteseedopcorHyperTight1 ,sizeof(cuteseedopcorHyperTight1));
928 memcpy(cutfmishits ,cutfmishitsHyperTight1 ,sizeof(cutfmishitsHyperTight1));
929 memcpy(cuthoe ,cuthoeHyperTight1 ,sizeof(cuthoeHyperTight1));
930 memcpy(cuthoel ,cuthoelHyperTight1 ,sizeof(cuthoelHyperTight1));
931 memcpy(cutip_gsf ,cutip_gsfHyperTight1 ,sizeof(cutip_gsfHyperTight1));
932 memcpy(cutip_gsfl ,cutip_gsflHyperTight1 ,sizeof(cutip_gsflHyperTight1));
933 memcpy(cutiso_sum ,cutiso_sumHyperTight1 ,sizeof(cutiso_sumHyperTight1));
934 memcpy(cutiso_sumoet ,cutiso_sumoetHyperTight1 ,sizeof(cutiso_sumoetHyperTight1));
935 memcpy(cutiso_sumoetl,cutiso_sumoetlHyperTight1,sizeof(cutiso_sumoetlHyperTight1));
936 memcpy(cutsee ,cutseeHyperTight1 ,sizeof(cutseeHyperTight1));
937 memcpy(cutseel ,cutseelHyperTight1 ,sizeof(cutseelHyperTight1));
938 }
939 else if(typeCuts == 4) {
940 memcpy(cutdcotdist ,cutdcotdistHyperTight2 ,sizeof(cutdcotdistHyperTight2));
941 memcpy(cutdetain ,cutdetainHyperTight2 ,sizeof(cutdetainHyperTight2));
942 memcpy(cutdetainl ,cutdetainlHyperTight2 ,sizeof(cutdetainlHyperTight2));
943 memcpy(cutdphiin ,cutdphiinHyperTight2 ,sizeof(cutdphiinHyperTight2));
944 memcpy(cutdphiinl ,cutdphiinlHyperTight2 ,sizeof(cutdphiinlHyperTight2));
945 memcpy(cuteseedopcor ,cuteseedopcorHyperTight2 ,sizeof(cuteseedopcorHyperTight2));
946 memcpy(cutfmishits ,cutfmishitsHyperTight2 ,sizeof(cutfmishitsHyperTight2));
947 memcpy(cuthoe ,cuthoeHyperTight2 ,sizeof(cuthoeHyperTight2));
948 memcpy(cuthoel ,cuthoelHyperTight2 ,sizeof(cuthoelHyperTight2));
949 memcpy(cutip_gsf ,cutip_gsfHyperTight2 ,sizeof(cutip_gsfHyperTight2));
950 memcpy(cutip_gsfl ,cutip_gsflHyperTight2 ,sizeof(cutip_gsflHyperTight2));
951 memcpy(cutiso_sum ,cutiso_sumHyperTight2 ,sizeof(cutiso_sumHyperTight2));
952 memcpy(cutiso_sumoet ,cutiso_sumoetHyperTight2 ,sizeof(cutiso_sumoetHyperTight2));
953 memcpy(cutiso_sumoetl,cutiso_sumoetlHyperTight2,sizeof(cutiso_sumoetlHyperTight2));
954 memcpy(cutsee ,cutseeHyperTight2 ,sizeof(cutseeHyperTight2));
955 memcpy(cutseel ,cutseelHyperTight2 ,sizeof(cutseelHyperTight2));
956 }
957 else if(typeCuts == 5) {
958 memcpy(cutdcotdist ,cutdcotdistHyperTight3 ,sizeof(cutdcotdistHyperTight3));
959 memcpy(cutdetain ,cutdetainHyperTight3 ,sizeof(cutdetainHyperTight3));
960 memcpy(cutdetainl ,cutdetainlHyperTight3 ,sizeof(cutdetainlHyperTight3));
961 memcpy(cutdphiin ,cutdphiinHyperTight3 ,sizeof(cutdphiinHyperTight3));
962 memcpy(cutdphiinl ,cutdphiinlHyperTight3 ,sizeof(cutdphiinlHyperTight3));
963 memcpy(cuteseedopcor ,cuteseedopcorHyperTight3 ,sizeof(cuteseedopcorHyperTight3));
964 memcpy(cutfmishits ,cutfmishitsHyperTight3 ,sizeof(cutfmishitsHyperTight3));
965 memcpy(cuthoe ,cuthoeHyperTight3 ,sizeof(cuthoeHyperTight3));
966 memcpy(cuthoel ,cuthoelHyperTight3 ,sizeof(cuthoelHyperTight3));
967 memcpy(cutip_gsf ,cutip_gsfHyperTight3 ,sizeof(cutip_gsfHyperTight3));
968 memcpy(cutip_gsfl ,cutip_gsflHyperTight3 ,sizeof(cutip_gsflHyperTight3));
969 memcpy(cutiso_sum ,cutiso_sumHyperTight3 ,sizeof(cutiso_sumHyperTight3));
970 memcpy(cutiso_sumoet ,cutiso_sumoetHyperTight3 ,sizeof(cutiso_sumoetHyperTight3));
971 memcpy(cutiso_sumoetl,cutiso_sumoetlHyperTight3,sizeof(cutiso_sumoetlHyperTight3));
972 memcpy(cutsee ,cutseeHyperTight3 ,sizeof(cutseeHyperTight3));
973 memcpy(cutseel ,cutseelHyperTight3 ,sizeof(cutseelHyperTight3));
974 }
975 else if(typeCuts == 6) {
976 memcpy(cutdcotdist ,cutdcotdistHyperTight4 ,sizeof(cutdcotdistHyperTight4));
977 memcpy(cutdetain ,cutdetainHyperTight4 ,sizeof(cutdetainHyperTight4));
978 memcpy(cutdetainl ,cutdetainlHyperTight4 ,sizeof(cutdetainlHyperTight4));
979 memcpy(cutdphiin ,cutdphiinHyperTight4 ,sizeof(cutdphiinHyperTight4));
980 memcpy(cutdphiinl ,cutdphiinlHyperTight4 ,sizeof(cutdphiinlHyperTight4));
981 memcpy(cuteseedopcor ,cuteseedopcorHyperTight4 ,sizeof(cuteseedopcorHyperTight4));
982 memcpy(cutfmishits ,cutfmishitsHyperTight4 ,sizeof(cutfmishitsHyperTight4));
983 memcpy(cuthoe ,cuthoeHyperTight4 ,sizeof(cuthoeHyperTight4));
984 memcpy(cuthoel ,cuthoelHyperTight4 ,sizeof(cuthoelHyperTight4));
985 memcpy(cutip_gsf ,cutip_gsfHyperTight4 ,sizeof(cutip_gsfHyperTight4));
986 memcpy(cutip_gsfl ,cutip_gsflHyperTight4 ,sizeof(cutip_gsflHyperTight4));
987 memcpy(cutiso_sum ,cutiso_sumHyperTight4 ,sizeof(cutiso_sumHyperTight4));
988 memcpy(cutiso_sumoet ,cutiso_sumoetHyperTight4 ,sizeof(cutiso_sumoetHyperTight4));
989 memcpy(cutiso_sumoetl,cutiso_sumoetlHyperTight4,sizeof(cutiso_sumoetlHyperTight4));
990 memcpy(cutsee ,cutseeHyperTight4 ,sizeof(cutseeHyperTight4));
991 memcpy(cutseel ,cutseelHyperTight4 ,sizeof(cutseelHyperTight4));
992 }
993 else {
994 return 0;
995 }
996 int result = 0;
997
998 const int ncuts = 10;
999 std::vector<bool> cut_results(ncuts, false);
1000
1001 float iso_sum = tkIso + ecalIso + hcalIso;
1002 if(fabs(scEta)>1.5)
1003 iso_sum += (fabs(scEta)-1.5)*1.09;
1004
1005 float iso_sumoet = iso_sum*(40./scEt);
1006
1007 float eseedopincor = eSeedOverPin + fBrem;
1008 if(fBrem < 0)
1009 eseedopincor = eSeedOverPin;
1010
1011 float dist = (TMath::Abs(ele->ConvPartnerDist()) == -9999.? 9999:TMath::Abs(ele->ConvPartnerDist()));
1012 float dcot = (TMath::Abs(ele->ConvPartnerDCotTheta()) == -9999.? 9999:TMath::Abs(ele->ConvPartnerDCotTheta()));
1013
1014 float dcotdistcomb = ((0.04 - std::max(dist, dcot)) > 0?(0.04 - std::max(dist, dcot)):0);
1015
1016 Double_t ip = 99999;
1017 for(UInt_t i0 = 0; i0 < vertices->GetEntries(); i0++) {
1018 if(vertices->At(i0)->NTracks() > 0){
1019 Double_t pD0 = ele->GsfTrk()->D0Corrected(*vertices->At(i0));
1020 ip = TMath::Abs(pD0);
1021 break;
1022 }
1023 }
1024
1025 for (int cut=0; cut<ncuts; cut++) {
1026 switch (cut) {
1027 case 0:
1028 cut_results[cut] = compute_cut(fabs(deltaEtaIn), scEt, cutdetainl[cat], cutdetain[cat]);
1029 break;
1030 case 1:
1031 cut_results[cut] = compute_cut(fabs(deltaPhiIn), scEt, cutdphiinl[cat], cutdphiin[cat]);
1032 break;
1033 case 2:
1034 cut_results[cut] = (eseedopincor > cuteseedopcor[cat]);
1035 break;
1036 case 3:
1037 cut_results[cut] = compute_cut(hOverE, scEt, cuthoel[cat], cuthoe[cat]);
1038 break;
1039 case 4:
1040 cut_results[cut] = compute_cut(sigmaee, scEt, cutseel[cat], cutsee[cat]);
1041 break;
1042 case 5:
1043 cut_results[cut] = compute_cut(iso_sumoet, scEt, cutiso_sumoetl[cat], cutiso_sumoet[cat]);
1044 break;
1045 case 6:
1046 cut_results[cut] = (iso_sum < cutiso_sum[cat]);
1047 break;
1048 case 7:
1049 cut_results[cut] = compute_cut(fabs(ip), scEt, cutip_gsfl[cat], cutip_gsf[cat]);
1050 break;
1051 case 8:
1052 cut_results[cut] = (mishits < cutfmishits[cat]);
1053 break;
1054 case 9:
1055 cut_results[cut] = (dcotdistcomb < cutdcotdist[cat]);
1056 break;
1057 }
1058 }
1059
1060 // ID part
1061 if (cut_results[0] & cut_results[1] & cut_results[2] & cut_results[3] & cut_results[4])
1062 result = result + 1;
1063
1064 // ISO part
1065 if (cut_results[5] & cut_results[6])
1066 result = result + 2;
1067
1068 // IP part
1069 if (cut_results[7])
1070 result = result + 8;
1071
1072 // Conversion part
1073 if (cut_results[8] and cut_results[9])
1074 result = result + 4;
1075
1076 return result;
1077 }
1078
1079 //--------------------------------------------------------------------------------------------------
1080 bool ElectronTools::compute_cut(double x, double et, double cut_min, double cut_max, bool gtn) {
1081
1082 float et_min = 10;
1083 float et_max = 40;
1084
1085 bool accept = false;
1086 float cut = cut_max; // the cut at et=40 GeV
1087
1088 if(et < et_max) {
1089 cut = cut_min + (1/et_min - 1/et)*(cut_max - cut_min)/(1/et_min - 1/et_max);
1090 }
1091
1092 if(et < et_min) {
1093 cut = cut_min;
1094 }
1095
1096 if(gtn) { // useful for e/p cut which is gt
1097 accept = (x >= cut);
1098 }
1099 else {
1100 accept = (x <= cut);
1101 }
1102
1103 return accept;
1104 }
1105
1106 //--------------------------------------------------------------------------------------------------
1107 Double_t ElectronTools::Likelihood(ElectronLikelihood *LH, const Electron *ele)
1108 {
1109 if (!LH) {
1110 std::cout << "Error: Likelihood not properly initialized\n";
1111 return -9999;
1112 }
1113
1114 LikelihoodMeasurements measurements;
1115 measurements.pt = ele->Pt();
1116 if (ele->IsEB() && ele->AbsEta()<1.0) measurements.subdet = 0;
1117 else if (ele->IsEB()) measurements.subdet = 1;
1118 else measurements.subdet = 2;
1119 measurements.deltaPhi = TMath::Abs(ele->DeltaPhiSuperClusterTrackAtVtx());
1120 measurements.deltaEta = TMath::Abs(ele->DeltaEtaSuperClusterTrackAtVtx());
1121 measurements.eSeedClusterOverPout = ele->ESeedClusterOverPout();
1122 measurements.eSuperClusterOverP = ele->ESuperClusterOverP();
1123 measurements.hadronicOverEm = ele->HadronicOverEm();
1124 measurements.sigmaIEtaIEta = ele->CoviEtaiEta();
1125 measurements.sigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
1126 measurements.fBrem = ele->FBrem();
1127 measurements.nBremClusters = ele->NumberOfClusters() - 1;
1128 //measurements.OneOverEMinusOneOverP = (1.0 / ele->SCluster()->Energy()) - (1.0 / ele->BestTrk()->P());
1129 measurements.OneOverEMinusOneOverP = (1.0 / ele->ESuperClusterOverP() / ele->BestTrk()->P()) - (1.0 / ele->BestTrk()->P());
1130 double likelihood = LH->result(measurements);
1131
1132 double newLik = 0.0;
1133 if (likelihood<=0) newLik = -20.0;
1134 else if(likelihood>=1) newLik = 20.0;
1135 else newLik = log(likelihood/(1.0-likelihood));
1136
1137 Bool_t isDebug = kFALSE;
1138 if(isDebug == kTRUE){
1139 printf("LIKELIHOOD: %f %d %f %f %f %f %f %f %f %f %d %f %f %f - %f %f\n",measurements.pt,measurements.subdet,
1140 measurements.deltaPhi ,measurements.deltaEta ,measurements.eSeedClusterOverPout,
1141 measurements.eSuperClusterOverP,measurements.hadronicOverEm,measurements.sigmaIEtaIEta,
1142 measurements.sigmaIPhiIPhi ,measurements.fBrem ,measurements.nBremClusters,
1143 measurements.OneOverEMinusOneOverP,ele->SCluster()->Energy(),ele->BestTrk()->P(),
1144 likelihood,newLik);
1145 }
1146
1147 return newLik;
1148
1149 }
1150
1151 Double_t ElectronTools::ElectronEffectiveArea(EElectronEffectiveAreaType type, Double_t SCEta, EElectronEffectiveAreaTarget EffectiveAreaTarget) {
1152
1153 Double_t EffectiveArea = 0;
1154
1155 if(type == ElectronTools::kEleNeutralIso04){
1156 if (fabs(SCEta) < 1.0 ) EffectiveArea = 0.208;
1157 else if(fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.209;
1158 else if(fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.000 ) EffectiveArea = 0.115;
1159 else if(fabs(SCEta) >= 2.000 && fabs(SCEta) < 2.200 ) EffectiveArea = 0.143;
1160 else if(fabs(SCEta) >= 2.200 && fabs(SCEta) < 2.300 ) EffectiveArea = 0.183;
1161 else if(fabs(SCEta) >= 2.300 && fabs(SCEta) < 2.400 ) EffectiveArea = 0.194;
1162 else EffectiveArea = 0.261;
1163 return EffectiveArea;
1164 }
1165
1166 if (fabs(SCEta) < 1.0) {
1167 if (type == ElectronTools::kEleChargedIso03) EffectiveArea = 0.000;
1168 if (type == ElectronTools::kEleNeutralHadronIso03) EffectiveArea = 0.017;
1169 if (type == ElectronTools::kEleGammaIso03) EffectiveArea = 0.045;
1170 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip03) EffectiveArea = 0.014;
1171 if (type == ElectronTools::kEleChargedIso04) EffectiveArea = 0.000;
1172 if (type == ElectronTools::kEleNeutralHadronIso04) EffectiveArea = 0.034;
1173 if (type == ElectronTools::kEleGammaIso04) EffectiveArea = 0.079;
1174 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip04) EffectiveArea = 0.014;
1175 if (type == ElectronTools::kEleNeutralHadronIso007) EffectiveArea = 0.000;
1176 if (type == ElectronTools::kEleHoverE) EffectiveArea = 0.00016;
1177 if (type == ElectronTools::kEleHcalDepth1OverEcal) EffectiveArea = 0.00016;
1178 if (type == ElectronTools::kEleHcalDepth2OverEcal) EffectiveArea = 0.00000;
1179 } else if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) {
1180 if (type == ElectronTools::kEleChargedIso03) EffectiveArea = 0.000;
1181 if (type == ElectronTools::kEleNeutralHadronIso03) EffectiveArea = 0.025;
1182 if (type == ElectronTools::kEleGammaIso03) EffectiveArea = 0.052;
1183 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip03) EffectiveArea = 0.030;
1184 if (type == ElectronTools::kEleChargedIso04) EffectiveArea = 0.000;
1185 if (type == ElectronTools::kEleNeutralHadronIso04) EffectiveArea = 0.050;
1186 if (type == ElectronTools::kEleGammaIso04) EffectiveArea = 0.073;
1187 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip04) EffectiveArea = 0.030;
1188 if (type == ElectronTools::kEleNeutralHadronIso007) EffectiveArea = 0.000;
1189 if (type == ElectronTools::kEleHoverE) EffectiveArea = 0.00022;
1190 if (type == ElectronTools::kEleHcalDepth1OverEcal) EffectiveArea = 0.00022;
1191 if (type == ElectronTools::kEleHcalDepth2OverEcal) EffectiveArea = 0.00000;
1192 } else if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) {
1193 if (type == ElectronTools::kEleChargedIso03) EffectiveArea = 0.000;
1194 if (type == ElectronTools::kEleNeutralHadronIso03) EffectiveArea = 0.030;
1195 if (type == ElectronTools::kEleGammaIso03) EffectiveArea = 0.170;
1196 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip03) EffectiveArea = 0.134;
1197 if (type == ElectronTools::kEleChargedIso04) EffectiveArea = 0.000;
1198 if (type == ElectronTools::kEleNeutralHadronIso04) EffectiveArea = 0.060;
1199 if (type == ElectronTools::kEleGammaIso04) EffectiveArea = 0.187;
1200 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip04) EffectiveArea = 0.134;
1201 if (type == ElectronTools::kEleNeutralHadronIso007) EffectiveArea = 0.000;
1202 if (type == ElectronTools::kEleHoverE) EffectiveArea = 0.00030;
1203 if (type == ElectronTools::kEleHcalDepth1OverEcal) EffectiveArea = 0.00026;
1204 if (type == ElectronTools::kEleHcalDepth2OverEcal) EffectiveArea = 0.00002;
1205 } else if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.25 ) {
1206 if (type == ElectronTools::kEleChargedIso03) EffectiveArea = 0.000;
1207 if (type == ElectronTools::kEleNeutralHadronIso03) EffectiveArea = 0.022;
1208 if (type == ElectronTools::kEleGammaIso03) EffectiveArea = 0.623;
1209 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip03) EffectiveArea = 0.516;
1210 if (type == ElectronTools::kEleChargedIso04) EffectiveArea = 0.000;
1211 if (type == ElectronTools::kEleNeutralHadronIso04) EffectiveArea = 0.055;
1212 if (type == ElectronTools::kEleGammaIso04) EffectiveArea = 0.659;
1213 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip04) EffectiveArea = 0.517;
1214 if (type == ElectronTools::kEleNeutralHadronIso007) EffectiveArea = 0.000;
1215 if (type == ElectronTools::kEleHoverE) EffectiveArea = 0.00054;
1216 if (type == ElectronTools::kEleHcalDepth1OverEcal) EffectiveArea = 0.00045;
1217 if (type == ElectronTools::kEleHcalDepth2OverEcal) EffectiveArea = 0.00003;
1218 } else if (fabs(SCEta) >= 2.25 && fabs(SCEta) < 2.5 ) {
1219 if (type == ElectronTools::kEleChargedIso03) EffectiveArea = 0.000;
1220 if (type == ElectronTools::kEleNeutralHadronIso03) EffectiveArea = 0.018;
1221 if (type == ElectronTools::kEleGammaIso03) EffectiveArea = 1.198;
1222 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip03) EffectiveArea = 1.049;
1223 if (type == ElectronTools::kEleChargedIso04) EffectiveArea = 0.000;
1224 if (type == ElectronTools::kEleNeutralHadronIso04) EffectiveArea = 0.073;
1225 if (type == ElectronTools::kEleGammaIso04) EffectiveArea = 1.258;
1226 if (type == ElectronTools::kEleGammaIsoVetoEtaStrip04) EffectiveArea = 1.051;
1227 if (type == ElectronTools::kEleNeutralHadronIso007) EffectiveArea = 0.000;
1228 if (type == ElectronTools::kEleHoverE) EffectiveArea = 0.00082;
1229 if (type == ElectronTools::kEleHcalDepth1OverEcal) EffectiveArea = 0.00066;
1230 if (type == ElectronTools::kEleHcalDepth2OverEcal) EffectiveArea = 0.00004;
1231 }
1232
1233 //NoCorrections
1234 if (EffectiveAreaTarget == kEleEANoCorr) {
1235 return 0.0;
1236 }
1237 else if (EffectiveAreaTarget == kEleEAData2012) {
1238 if (type == kEleGammaIso03) {
1239 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.122;
1240 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.147;
1241 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.055;
1242 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.106;
1243 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.138;
1244 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.221;
1245 if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.211;
1246 }
1247 if (type == kEleGammaIso04) {
1248 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.176;
1249 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.206;
1250 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.094;
1251 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.172;
1252 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.244;
1253 if (fabs(SCEta) >= 2.4 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.333;
1254 if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.348;
1255 }
1256 if (type == kEleNeutralHadronIso03) {
1257 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.013;
1258 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.021;
1259 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.013;
1260 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.010;
1261 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.024;
1262 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.020;
1263 if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.019;
1264 }
1265 if (type == kEleNeutralHadronIso04) {
1266 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.022;
1267 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.036;
1268 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.027;
1269 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.028;
1270 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.052;
1271 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.063;
1272 if (fabs(SCEta) >= 2.4 ) EffectiveArea = 0.028;
1273 }
1274 if (type == kEleGammaAndNeutralHadronIso04) {
1275 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.208;
1276 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.209;
1277 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.115;
1278 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.143;
1279 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.183;
1280 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.194;
1281 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.261;
1282 }
1283 if (type == kEleGammaIsoDR0p0To0p1) {
1284 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.051;
1285 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.032;
1286 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.006;
1287 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.007;
1288 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.024;
1289 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.013;
1290 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.013;
1291 }
1292 if (type == kEleGammaIsoDR0p1To0p2) {
1293 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.013;
1294 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.013;
1295 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.021;
1296 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.052;
1297 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.066;
1298 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.043;
1299 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.102;
1300 }
1301 if (type == kEleGammaIsoDR0p2To0p3) {
1302 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.026;
1303 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.017;
1304 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.012;
1305 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.028;
1306 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.041;
1307 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.034;
1308 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.042;
1309 }
1310 if (type == kEleGammaIsoDR0p3To0p4) {
1311 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.039;
1312 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.032;
1313 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.017;
1314 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.024;
1315 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.053;
1316 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.059;
1317 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.069;
1318 }
1319 if (type == kEleGammaIsoDR0p4To0p5) {
1320 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.059;
1321 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.045;
1322 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.033;
1323 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.043;
1324 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.056;
1325 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.065;
1326 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.074;
1327 }
1328 if (type == kEleNeutralHadronIsoDR0p0To0p1) {
1329 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.001;
1330 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.006;
1331 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.001;
1332 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.000;
1333 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.001;
1334 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.003;
1335 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.008;
1336 }
1337 if (type == kEleNeutralHadronIsoDR0p1To0p2) {
1338 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.002;
1339 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.001;
1340 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.004;
1341 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.003;
1342 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.005;
1343 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.006;
1344 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.010;
1345 }
1346 if (type == kEleNeutralHadronIsoDR0p2To0p3) {
1347 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.007;
1348 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.010;
1349 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.009;
1350 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.009;
1351 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.007;
1352 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.018;
1353 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.028;
1354 }
1355 if (type == kEleNeutralHadronIsoDR0p3To0p4) {
1356 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.010;
1357 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.011;
1358 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.012;
1359 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.008;
1360 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.018;
1361 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.026;
1362 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.063;
1363 }
1364 if (type == kEleNeutralHadronIsoDR0p4To0p5) {
1365 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.011;
1366 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.012;
1367 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.016;
1368 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.023;
1369 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.038;
1370 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.051;
1371 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.143;
1372 }
1373 }
1374
1375 //2011 Data Effective Areas
1376 else if (EffectiveAreaTarget == kEleEAData2011) {
1377 if (type == kEleGammaAndNeutralHadronIso03) {
1378 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.100;
1379 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.120;
1380 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.085;
1381 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.110;
1382 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.120;
1383 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.120;
1384 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.130;
1385 }
1386 if (type == kEleGammaAndNeutralHadronIso04) {
1387 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.180;
1388 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.200;
1389 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.150;
1390 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.190;
1391 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.210;
1392 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.220;
1393 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.290;
1394 }
1395 if (type == kEleGammaIsoDR0p0To0p1) {
1396 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.017;
1397 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.033;
1398 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.005;
1399 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.007;
1400 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.004;
1401 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.000;
1402 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.000;
1403 }
1404 if (type == kEleGammaIsoDR0p1To0p2) {
1405 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.010;
1406 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.010;
1407 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.019;
1408 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.042;
1409 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.041;
1410 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.035;
1411 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.041;
1412 }
1413 if (type == kEleGammaIsoDR0p2To0p3) {
1414 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.020;
1415 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.017;
1416 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.014;
1417 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.029;
1418 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.039;
1419 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.042;
1420 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.048;
1421 }
1422 if (type == kEleGammaIsoDR0p3To0p4) {
1423 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.036;
1424 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.029;
1425 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.020;
1426 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.029;
1427 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.042;
1428 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.047;
1429 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.054;
1430 }
1431 if (type == kEleGammaIsoDR0p4To0p5) {
1432 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.051;
1433 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.038;
1434 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.028;
1435 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.036;
1436 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.047;
1437 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.057;
1438 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.059;
1439 }
1440 if (type == kEleNeutralHadronIsoDR0p0To0p1) {
1441 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.001;
1442 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.002;
1443 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.002;
1444 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.000;
1445 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.000;
1446 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.000;
1447 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.000;
1448 }
1449 if (type == kEleNeutralHadronIsoDR0p1To0p2) {
1450 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.005;
1451 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.008;
1452 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.008;
1453 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.006;
1454 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.003;
1455 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.001;
1456 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.003;
1457 }
1458 if (type == kEleNeutralHadronIsoDR0p2To0p3) {
1459 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.010;
1460 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.014;
1461 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.017;
1462 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.016;
1463 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.016;
1464 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.016;
1465 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.019;
1466 }
1467 if (type == kEleNeutralHadronIsoDR0p3To0p4) {
1468 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.015;
1469 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.021;
1470 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.025;
1471 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.030;
1472 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.036;
1473 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.038;
1474 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.084;
1475 }
1476 if (type == kEleNeutralHadronIsoDR0p4To0p5) {
1477 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.020;
1478 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.027;
1479 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.035;
1480 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.045;
1481 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.051;
1482 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.107;
1483 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.228;
1484 }
1485 }
1486
1487 //Summer11 MC Effective Areas
1488 else if (EffectiveAreaTarget == kEleEASummer11MC) {
1489 if (type == kEleGammaIsoDR0p0To0p1) {
1490 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.015;
1491 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.030;
1492 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.004;
1493 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.010;
1494 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.014;
1495 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.024;
1496 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.023;
1497 }
1498 if (type == kEleGammaIsoDR0p1To0p2) {
1499 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.012;
1500 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.010;
1501 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.009;
1502 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.037;
1503 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.046;
1504 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.055;
1505 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.046;
1506 }
1507 if (type == kEleGammaIsoDR0p2To0p3) {
1508 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.021;
1509 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.018;
1510 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.013;
1511 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.026;
1512 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.038;
1513 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.045;
1514 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.059;
1515 }
1516 if (type == kEleGammaIsoDR0p3To0p4) {
1517 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.036;
1518 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.030;
1519 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.017;
1520 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.036;
1521 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.058;
1522 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.073;
1523 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.083;
1524 }
1525 if (type == kEleGammaIsoDR0p4To0p5) {
1526 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.053;
1527 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.037;
1528 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.032;
1529 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.048;
1530 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.062;
1531 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.085;
1532 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.118;
1533 }
1534 if (type == kEleNeutralHadronIsoDR0p0To0p1) {
1535 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.000;
1536 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.000;
1537 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.000;
1538 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.000;
1539 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.000;
1540 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.000;
1541 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.000;
1542 }
1543 if (type == kEleNeutralHadronIsoDR0p1To0p2) {
1544 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.004;
1545 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.007;
1546 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.009;
1547 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.004;
1548 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.003;
1549 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.000;
1550 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.004;
1551 }
1552 if (type == kEleNeutralHadronIsoDR0p2To0p3) {
1553 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.008;
1554 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.013;
1555 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.016;
1556 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.013;
1557 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.014;
1558 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.016;
1559 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.021;
1560 }
1561 if (type == kEleNeutralHadronIsoDR0p3To0p4) {
1562 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.012;
1563 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.017;
1564 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.020;
1565 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.024;
1566 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.040;
1567 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.036;
1568 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.086;
1569 }
1570 if (type == kEleNeutralHadronIsoDR0p4To0p5) {
1571 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.016;
1572 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.026;
1573 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.030;
1574 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.038;
1575 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.051;
1576 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.105;
1577 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.169;
1578 }
1579 }
1580
1581 //Fall11 MC Effective Areas
1582 else if (EffectiveAreaTarget == kEleEAFall11MC) {
1583 if (type == kEleGammaIsoDR0p0To0p1) {
1584 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.014;
1585 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.020;
1586 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.004;
1587 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.012;
1588 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.016;
1589 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.021;
1590 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.012;
1591 }
1592 if (type == kEleGammaIsoDR0p1To0p2) {
1593 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.012;
1594 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.011;
1595 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.015;
1596 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.042;
1597 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.055;
1598 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.068;
1599 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.067;
1600 }
1601 if (type == kEleGammaIsoDR0p2To0p3) {
1602 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.024;
1603 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.020;
1604 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.017;
1605 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.038;
1606 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.051;
1607 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.066;
1608 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.080;
1609 }
1610 if (type == kEleGammaIsoDR0p3To0p4) {
1611 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.040;
1612 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.032;
1613 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.021;
1614 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.047;
1615 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.066;
1616 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.083;
1617 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.123;
1618 }
1619 if (type == kEleGammaIsoDR0p4To0p5) {
1620 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.059;
1621 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.041;
1622 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.037;
1623 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.057;
1624 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.095;
1625 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.123;
1626 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.133;
1627 }
1628 if (type == kEleNeutralHadronIsoDR0p0To0p1) {
1629 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.002;
1630 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.003;
1631 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.000;
1632 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.000;
1633 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.000;
1634 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.000;
1635 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.000;
1636 }
1637 if (type == kEleNeutralHadronIsoDR0p1To0p2) {
1638 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.006;
1639 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.008;
1640 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.010;
1641 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.006;
1642 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.005;
1643 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.002;
1644 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.007;
1645 }
1646 if (type == kEleNeutralHadronIsoDR0p2To0p3) {
1647 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.009;
1648 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.014;
1649 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.018;
1650 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.016;
1651 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.017;
1652 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.020;
1653 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.021;
1654 }
1655 if (type == kEleNeutralHadronIsoDR0p3To0p4) {
1656 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.013;
1657 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.019;
1658 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.027;
1659 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.035;
1660 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.037;
1661 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.043;
1662 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.110;
1663 }
1664 if (type == kEleNeutralHadronIsoDR0p4To0p5) {
1665 if (fabs(SCEta) >= 0.0 && fabs(SCEta) < 1.0 ) EffectiveArea = 0.017;
1666 if (fabs(SCEta) >= 1.0 && fabs(SCEta) < 1.479 ) EffectiveArea = 0.027;
1667 if (fabs(SCEta) >= 1.479 && fabs(SCEta) < 2.0 ) EffectiveArea = 0.036;
1668 if (fabs(SCEta) >= 2.0 && fabs(SCEta) < 2.2 ) EffectiveArea = 0.045;
1669 if (fabs(SCEta) >= 2.2 && fabs(SCEta) < 2.3 ) EffectiveArea = 0.057;
1670 if (fabs(SCEta) >= 2.3 && fabs(SCEta) < 2.4 ) EffectiveArea = 0.123;
1671 if (fabs(SCEta) >= 2.4) EffectiveArea = 0.220;
1672 }
1673 }
1674
1675 return EffectiveArea;
1676 }
1677
1678
1679 Bool_t ElectronTools::PassHggLeptonTagID(const Electron* ele) {
1680
1681 float dist = ( ele->ConvPartnerDist() == -9999.? 9999:TMath::Abs(ele->ConvPartnerDist()));
1682 float dcot = ( ele->ConvPartnerDCotTheta() == -9999.? 9999:TMath::Abs(ele->ConvPartnerDCotTheta()));
1683
1684 if (dist < 0.02) return false;
1685 if (dcot < 0.02) return false;
1686
1687 int numInnerHits = ele->Trk()->NExpectedHitsInner();
1688 if( numInnerHits > 1 ) return false;
1689
1690 float coviEtaiEta = ele->CoviEtaiEta();
1691 if( ele->SCluster()->AbsEta() < 1.5 && coviEtaiEta > 0.01 ) return false;
1692 else if( ele->SCluster()->AbsEta() > 1.5 && coviEtaiEta > 0.031 ) return false;
1693
1694 Double_t deltaPhiIn = TMath::Abs(ele->DeltaPhiSuperClusterTrackAtVtx());
1695 Double_t deltaEtaIn = TMath::Abs(ele->DeltaEtaSuperClusterTrackAtVtx());
1696
1697 if( ele->SCluster()->AbsEta() < 1.5 && ( deltaPhiIn > 0.039 || deltaEtaIn > 0.005 ) ) return false;
1698 else if ( ele->SCluster()->AbsEta() > 1.5 && ( deltaPhiIn > 0.028 || deltaEtaIn > 0.007 ) ) return false;
1699
1700 return true;
1701 }
1702
1703 Bool_t ElectronTools::PassHggLeptonTagID2012(const Electron* ele) {
1704
1705 if (TMath::Abs(1./ele->E()-1./ele->Pt())>0.05) return false;
1706
1707 int numInnerHits = ele->Trk()->NExpectedHitsInner();
1708 if( numInnerHits > 1 ) return false;
1709
1710 float coviEtaiEta = ele->CoviEtaiEta();
1711 if( ele->SCluster()->AbsEta() < 1.5 && coviEtaiEta > 0.01 ) return false;
1712 else if( ele->SCluster()->AbsEta() > 1.5 && coviEtaiEta > 0.03 ) return false; // h
1713
1714 Double_t deltaPhiIn = TMath::Abs(ele->DeltaPhiSuperClusterTrackAtVtx());
1715 Double_t deltaEtaIn = TMath::Abs(ele->DeltaEtaSuperClusterTrackAtVtx());
1716
1717 if( ele->SCluster()->AbsEta() < 1.5 && ( deltaPhiIn > 0.15 || deltaEtaIn > 0.007 || ele->HadronicOverEm()>0.12) ) return false; // h
1718 else if ( ele->SCluster()->AbsEta() > 1.5 && ( deltaPhiIn > 0.10 || deltaEtaIn > 0.009 || ele->HadronicOverEm()>0.10 ) ) return false; // h
1719
1720 return true;
1721 }
1722
1723 std::pair<Double_t,Double_t> ElectronTools::ComputeEPCombination( const Electron * ele, const float regression_energy,
1724 const float regression_energy_error) {
1725
1726 enum Classification { GSF_ELECTRON_UNKNOWN=-1,
1727 GSF_ELECTRON_GOLDEN=0,
1728 GSF_ELECTRON_BIGBREM=1,
1729 GSF_ELECTRON_BADTRACK=2,
1730 GSF_ELECTRON_SHOWERING=3,
1731 GSF_ELECTRON_GAP=4 } ;
1732
1733 float newEnergyError_ = regression_energy_error;
1734 float scEnergy = regression_energy;
1735
1736 int elClass = ele->Classification();
1737
1738 float trackMomentum = ele->PIn() ;
1739 float errorTrackMomentum_ = 999. ;
1740
1741 // the electron's track momentum error was not available in bambu versions less than 029
1742 if(ele->TrackMomentumError() > 0)
1743 errorTrackMomentum_ = ele->TrackMomentumError();
1744 else if ( ele->GsfTrk()->PtErr() > 0)
1745 errorTrackMomentum_ = ele->GsfTrk()->PtErr()*cosh(ele->GsfTrk()->Eta());
1746 else
1747 assert(0);
1748
1749 float finalMomentum = ele->E(); // initial
1750 float finalMomentumError = 999.;
1751
1752 // first check for large errors
1753
1754 if (errorTrackMomentum_/trackMomentum > 0.5 && regression_energy_error/regression_energy <= 0.5) {
1755 finalMomentum = regression_energy; finalMomentumError = regression_energy_error;
1756 }
1757 else if (errorTrackMomentum_/trackMomentum <= 0.5 && regression_energy_error/regression_energy > 0.5){
1758 finalMomentum = trackMomentum; finalMomentumError = errorTrackMomentum_;
1759 }
1760 else if (errorTrackMomentum_/trackMomentum > 0.5 && regression_energy_error/regression_energy > 0.5){
1761 if (errorTrackMomentum_/trackMomentum < regression_energy_error/regression_energy) {
1762 finalMomentum = trackMomentum; finalMomentumError = errorTrackMomentum_;
1763 }
1764 else{
1765 finalMomentum = regression_energy; finalMomentumError = regression_energy_error;
1766 }
1767 }
1768 // then apply the combination algorithm
1769 else {
1770 // calculate E/p and corresponding error
1771 float eOverP = regression_energy / trackMomentum;
1772 float errorEOverP = sqrt(
1773 (regression_energy_error/trackMomentum)*(regression_energy_error/trackMomentum) +
1774 (regression_energy*errorTrackMomentum_/trackMomentum/trackMomentum)*
1775 (regression_energy*errorTrackMomentum_/trackMomentum/trackMomentum));
1776
1777
1778 bool eleIsNotInCombination = false ;
1779 if ( (eOverP > 1 + 2.5*errorEOverP) || (eOverP < 1 - 2.5*errorEOverP) || (eOverP < 0.8) || (eOverP > 1.3) )
1780 { eleIsNotInCombination = true ; }
1781 if (eleIsNotInCombination)
1782 {
1783 if (eOverP > 1)
1784 { finalMomentum = regression_energy ; finalMomentumError = regression_energy_error ; }
1785 else
1786 {
1787 if (elClass == GSF_ELECTRON_GOLDEN)
1788 { finalMomentum = regression_energy; finalMomentumError = regression_energy_error; }
1789 if (elClass == GSF_ELECTRON_BIGBREM)
1790 {
1791 if (regression_energy<36)
1792 { finalMomentum = trackMomentum ; finalMomentumError = errorTrackMomentum_ ; }
1793 else
1794 { finalMomentum = regression_energy ; finalMomentumError = regression_energy_error ; }
1795 }
1796 if (elClass == GSF_ELECTRON_BADTRACK)
1797 { finalMomentum = regression_energy; finalMomentumError = regression_energy_error ; }
1798 if (elClass == GSF_ELECTRON_SHOWERING)
1799 {
1800 if (regression_energy<30)
1801 { finalMomentum = trackMomentum ; finalMomentumError = errorTrackMomentum_; }
1802 else
1803 { finalMomentum = regression_energy; finalMomentumError = regression_energy_error;}
1804 }
1805 if (elClass == GSF_ELECTRON_GAP)
1806 {
1807 if (regression_energy<60)
1808 { finalMomentum = trackMomentum ; finalMomentumError = errorTrackMomentum_ ; }
1809 else
1810 { finalMomentum = regression_energy; finalMomentumError = regression_energy_error ; }
1811 }
1812 }
1813 }
1814 else
1815 {
1816 // combination
1817 finalMomentum = (regression_energy/regression_energy_error/regression_energy_error + trackMomentum/errorTrackMomentum_/errorTrackMomentum_) /
1818 (1/regression_energy_error/regression_energy_error + 1/errorTrackMomentum_/errorTrackMomentum_);
1819 float finalMomentumVariance = 1 / (1/regression_energy_error/regression_energy_error + 1/errorTrackMomentum_/errorTrackMomentum_);
1820 finalMomentumError = sqrt(finalMomentumVariance);
1821 }
1822 }
1823
1824 std::pair<Double_t,Double_t> value;
1825 value.first = finalMomentum;
1826 value.second = finalMomentumError;
1827 return value;
1828
1829 }