ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.135
Committed: Mon Jan 7 22:14:10 2013 UTC (12 years, 3 months ago) by mingyang
Content type: text/plain
Branch: MAIN
Changes since 1.134: +25 -27 lines
Log Message:
beamspot constraint fVertices option added

File Contents

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