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

File Contents

# User Rev Content
1 mingyang 1.136 // $Id: ElectronIDMod.cc,v 1.135 2013/01/07 22:14:10 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 mingyang 1.136 printf("PFIso_HggLeptonTag2012HCP: %d, pt, eta, sceta = %f, %f, %f,rho = %f(%f) : ",
537     GetEventHeader()->EvtNum(),ele->Pt(), ele->Eta(),ele->SCluster()->AbsEta(),
538 mingyang 1.129 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 mingyang 1.136 //printf("ming sync check IsoOverPt:%f\n\n",IsoOverPt);
544 mingyang 1.129 delete tempIsoElectrons;
545     delete tempIsoMuons;
546     Double_t eta = ele->SCluster()->AbsEta();
547     Double_t IsoCut = -1;
548     if (ele->Pt() < 20 && eta < 0.800 ) IsoCut = 0.150;
549     if (ele->Pt() < 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
550     if (ele->Pt() < 20 && eta >= 1.479 ) IsoCut = 0.150;
551     if (ele->Pt() >= 20 && eta < 0.800 ) IsoCut = 0.150;
552     if (ele->Pt() >= 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
553     if (ele->Pt() >= 20 && eta >= 1.479 ) IsoCut = 0.150;
554     if (IsoOverPt < IsoCut ) isocut = kTRUE;
555     }
556     break;
557 sixie 1.127 case ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4:
558     {
559     if (fabs(ele->SCluster()->Eta()) < 1.479) {
560     isocut = ( (ele->TrackIsolationDr03() - 1.0) < ele->Pt()*0.2) &&
561     (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
562     (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
563     } else {
564     isocut = (ele->TrackIsolationDr03() < ele->Pt()*0.2) &&
565     (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
566     (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
567     }
568     }
569     break;
570 sixie 1.56 case ElectronTools::kNoIso:
571 sixie 1.42 isocut = kTRUE;
572     break;
573 sixie 1.56 case ElectronTools::kCustomIso:
574 ceballos 1.118 break;
575 sixie 1.42 default:
576     break;
577     }
578    
579     return isocut;
580     }
581    
582    
583     //--------------------------------------------------------------------------------------------------
584 loizides 1.1 void ElectronIDMod::Process()
585     {
586     // Process entries of the tree.
587 mingyang 1.135 if(fElIdType == ElectronTools::kHggLeptonTagId2012HCP){
588     LoadEventObject(fPVName,fVertices);
589     }else{
590     fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
591     }
592 loizides 1.1
593 ceballos 1.76 if(fElIsoType != ElectronTools::kPFIsoNoL) {
594     LoadEventObject(fElectronBranchName, fElectrons);
595     }
596     else {
597     fElectrons = GetObjThisEvt<ElectronOArr>(fElectronBranchName);
598 ceballos 1.78 fNonIsolatedMuons = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
599     fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
600 ceballos 1.76 }
601 bendavid 1.75 LoadEventObject(fBeamSpotName, fBeamSpot);
602 ceballos 1.76 LoadEventObject(fTrackName, fTracks);
603     LoadEventObject(fPFCandidatesName, fPFCandidates);
604 mingyang 1.129
605 sixie 1.100 if(fElIsoType == ElectronTools::kTrackJuraSliding ||
606 sixie 1.110 fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected ||
607 ceballos 1.116 fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ||
608 ceballos 1.118 fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ||
609 sixie 1.128 fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4 ||
610 fabstoec 1.126 fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0 ||
611 mingyang 1.129 fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012 ||
612     fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012HCP
613     ) {
614 ceballos 1.80 LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
615 ceballos 1.130 assert(fPileupEnergyDensity);
616 ceballos 1.80 }
617 mingyang 1.129
618     if(fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0 || fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012 || fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012HCP) {
619 ceballos 1.118 // Name is hardcoded, can be changed if someone feels to do it
620 fabstoec 1.126 fPFNoPileUpCands = GetObjThisEvt<PFCandidateCol>(fPFNoPileUpName);
621 ceballos 1.118 }
622    
623 bendavid 1.62 //get trigger object collection if trigger matching is enabled
624     const TriggerObjectCol *trigObjs = 0;
625     if (fApplyTriggerMatching) {
626     trigObjs = GetHLTObjects(fTrigObjectsName);
627     }
628    
629 loizides 1.6 ElectronOArr *GoodElectrons = new ElectronOArr;
630     GoodElectrons->SetName(fGoodElectronsName);
631 loizides 1.1
632 mingyang 1.129 Double_t MVAValue = -100;
633     Double_t MVAValueMax = -99;
634     int NElectronMVAValueMax = 0;
635     int NPass = 0;
636    
637 mingyang 1.136
638     //printf("\n");
639     //printf("ming sync check number of electrons:%d\n",fElectrons->GetEntries());
640    
641 fabstoec 1.115 for (UInt_t i=0; i<fElectrons->GetEntries() && fVertices->GetEntries() > 0 ; ++i) {
642 mingyang 1.136
643     //printf("ming sync check electron i:%d\n",i);
644    
645 loizides 1.5 const Electron *e = fElectrons->At(i);
646 loizides 1.1
647 ceballos 1.66 if (e->SCluster() == 0)
648     continue;
649    
650 mingyang 1.136 //printf("ming sync check elept:%f sceta:%f \n",e->Pt(),e->SCluster()->Eta());
651    
652 ceballos 1.65 if (e->Pt() < fElectronPtMin)
653 loizides 1.5 continue;
654 loizides 1.1
655 dkralph 1.73 if (e->SCluster()->Et() < fElectronEtMin)
656 bendavid 1.67 continue;
657 mingyang 1.136
658    
659 ceballos 1.65 if (e->AbsEta() > fElectronEtaMax)
660 ceballos 1.64 continue;
661 sixie 1.112
662 ceballos 1.130 if (fApplyEcalFiducial && ( (e->SCluster()->AbsEta()>1.4442 && e->SCluster()->AbsEta()<1.5666) || e->SCluster()->AbsEta()>2.5 )) {
663 bendavid 1.67 continue;
664     }
665    
666 mingyang 1.135
667 bendavid 1.67 if (fApplyEcalSeeded && !e->IsEcalDriven()) {
668     continue;
669     }
670    
671 bendavid 1.62 //apply trigger matching
672     Bool_t matchTrigger = fApplyTriggerMatching && ElectronTools::PassTriggerMatching(e,trigObjs);
673     if (fApplyTriggerMatching && !matchTrigger)
674     continue;
675 mingyang 1.135
676 sixie 1.55 //apply ECAL spike removal
677 sixie 1.56 Bool_t spikecut = ElectronTools::PassSpikeRemovalFilter(e);
678 sixie 1.57 if (fApplySpikeRemoval && !spikecut)
679 sixie 1.55 continue;
680 ceballos 1.130
681 sixie 1.42 //apply Isolation Cut
682 ceballos 1.80 Double_t Rho = 0.0;
683 sixie 1.100 if( fElIsoType == ElectronTools::kTrackJuraSliding
684 sixie 1.110 || fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected
685     || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined
686 sixie 1.111 ) {
687 fabstoec 1.119 switch(fTheRhoType) {
688     case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
689     Rho = fPileupEnergyDensity->At(0)->Rho();
690     break;
691     case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
692     Rho = fPileupEnergyDensity->At(0)->RhoLowEta();
693     break;
694     case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
695     Rho = fPileupEnergyDensity->At(0)->RhoRandom();
696     break;
697     case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
698     Rho = fPileupEnergyDensity->At(0)->RhoRandomLowEta();
699     break;
700 ceballos 1.122 case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
701     Rho = fPileupEnergyDensity->At(0)->RhoKt6PFJets();
702     break;
703 fabstoec 1.119 default:
704     // use the old default
705     Rho = fPileupEnergyDensity->At(0)->Rho();
706     break;
707     }
708 ceballos 1.80 }
709 mingyang 1.135
710 mingyang 1.129 Bool_t isocut = kFALSE;
711 mingyang 1.135 Double_t distVtx = 999.0;
712     Int_t closestVtx = 0;
713 mingyang 1.129 if(fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012HCP){
714     for(UInt_t nv=0; nv<fVertices->GetEntries(); nv++){
715     double dz = TMath::Abs(e->GsfTrk()->DzCorrected(*fVertices->At(nv)));
716     if(dz < distVtx) {
717     distVtx = dz;
718     closestVtx = nv;
719     }
720     }
721     isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(closestVtx), Rho, fElIdType);
722     }else{
723     isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(0), Rho, fElIdType);
724     }
725 mingyang 1.135
726 sixie 1.42 if (!isocut)
727 loizides 1.5 continue;
728 ceballos 1.130
729 mingyang 1.136 //printf("ming sync check pass isocut\n");
730    
731 ceballos 1.60 // apply conversion filters
732     Bool_t passConvVetoType1 = kFALSE;
733     if (fApplyConvFilterType1) {
734 sixie 1.42 LoadEventObject(fConversionBranchName, fConversions);
735 ceballos 1.60 passConvVetoType1 = ElectronTools::PassConversionFilter(e, fConversions,
736 bendavid 1.82 fBeamSpot->At(0), 0, 1e-6, 2.0, kTRUE, kFALSE);
737 ceballos 1.12 }
738 ceballos 1.60 else {
739     passConvVetoType1 = kTRUE;
740     }
741    
742     if (passConvVetoType1 == kFALSE) continue;
743    
744     Bool_t passConvVetoType2 = kFALSE;
745     if (fApplyConvFilterType2) {
746     passConvVetoType2 = TMath::Abs(e->ConvPartnerDCotTheta()) >= 0.02 ||
747     TMath::Abs(e->ConvPartnerDist()) >= 0.02;
748     }
749     else {
750     passConvVetoType2 = kTRUE;
751     }
752 sixie 1.42
753 ceballos 1.60 if (passConvVetoType2 == kFALSE) continue;
754 mingyang 1.135
755 ceballos 1.60 // apply NExpectedHitsInner Cut
756 ceballos 1.98 if(fInvertNExpectedHitsInnerCut == kFALSE && fNExpectedHitsInnerCut < 999 &&
757 ceballos 1.69 e->CorrectedNExpectedHitsInner() > fNExpectedHitsInnerCut) continue;
758 ceballos 1.60
759 ceballos 1.98 // apply NExpectedHitsInner inverted Cut
760     if(fInvertNExpectedHitsInnerCut == kTRUE && fNExpectedHitsInnerCut < 999 &&
761     e->CorrectedNExpectedHitsInner() <= fNExpectedHitsInnerCut) continue;
762 mingyang 1.136
763     //printf("ming sync check pass Nexpectedinner cut \n");
764    
765 mingyang 1.135
766 sixie 1.42 // apply d0 cut
767 ceballos 1.15 if (fApplyD0Cut) {
768 ceballos 1.81 Bool_t passD0cut = kTRUE;
769     if(fWhichVertex >= -1) passD0cut = ElectronTools::PassD0Cut(e, fVertices, fD0Cut, fWhichVertex);
770     else passD0cut = ElectronTools::PassD0Cut(e, fBeamSpot, fD0Cut);
771 sixie 1.42 if (!passD0cut)
772 ceballos 1.24 continue;
773 ceballos 1.12 }
774 mingyang 1.136
775     //printf("ming sync check pass d0 cut \n");
776    
777    
778 ceballos 1.81 // apply dz cut
779     if (fApplyDZCut) {
780 ceballos 1.83 Bool_t passDZcut = ElectronTools::PassDZCut(e, fVertices, fDZCut, fWhichVertex);
781 ceballos 1.81 if (!passDZcut)
782     continue;
783     }
784 mingyang 1.135
785 mingyang 1.129 //apply id cut
786     Bool_t idcut = kFALSE;
787     if(fElIdType == ElectronTools::kHggLeptonTagId2012HCP){
788 fabstoec 1.132 MVAValue = EvaluateMVAID(e, ElectronTools::kHggLeptonTagId2012HCP, fVertices->At(closestVtx), fPFCandidates, fPileupEnergyDensity);
789 mingyang 1.129 idcut = PassIDCut(e, fElIdType, fVertices->At(closestVtx));
790     if(MVAValue>MVAValueMax){
791     MVAValueMax = MVAValue;
792     NElectronMVAValueMax = i;
793     }
794 ceballos 1.130 } else {
795 mingyang 1.129 idcut = PassIDCut(e, fElIdType, fVertices->At(0));
796     }
797 mingyang 1.135
798 sixie 1.102 if (!idcut)
799     continue;
800 ceballos 1.130
801 ceballos 1.59 // apply charge filter
802 sixie 1.42 if(fChargeFilter == kTRUE) {
803 sixie 1.56 Bool_t passChargeFilter = ElectronTools::PassChargeFilter(e);
804 sixie 1.42 if (!passChargeFilter) continue;
805 ceballos 1.45 }
806    
807 ceballos 1.63 // apply full combined id, using Tight cuts
808 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
809     LoadEventObject(fConversionBranchName, fConversions);
810 ceballos 1.63 Int_t result = ElectronTools::PassTightId(e, *&fVertices, fConversions, 2);
811 ceballos 1.59 if(result != 15) continue;
812     }
813    
814 loizides 1.5 // add good electron
815 mingyang 1.129 if(fElIdType!=ElectronTools::kHggLeptonTagId2012HCP){
816     GoodElectrons->Add(e);
817     }
818    
819     NPass = NPass+1;
820 loizides 1.5 }
821 loizides 1.1
822 mingyang 1.135 if((fElIdType==ElectronTools::kHggLeptonTagId2012HCP) && (NPass>0)){
823 mingyang 1.129 GoodElectrons->Add(fElectrons->At(NElectronMVAValueMax));
824     }
825    
826 loizides 1.9 // sort according to pt
827     GoodElectrons->Sort();
828    
829 loizides 1.5 // add to event for other modules to use
830 loizides 1.6 AddObjThisEvt(GoodElectrons);
831 loizides 1.1 }
832    
833     //--------------------------------------------------------------------------------------------------
834     void ElectronIDMod::SlaveBegin()
835     {
836     // Run startup code on the computer (slave) doing the actual analysis. Here,
837 loizides 1.5 // we just request the electron collection branch.
838 loizides 1.1
839 mingyang 1.135 if(fElectronIDType.CompareTo("Hgg_LeptonTag_2012IdHCP") == 0){
840     ReqEventObject(fPVName,fVertices,true);
841     }
842    
843 ceballos 1.76 // In this case we cannot have a branch
844     if (fElectronIsoType.CompareTo("PFIsoNoL") != 0 ) {
845     ReqEventObject(fElectronBranchName, fElectrons,fElectronsFromBranch);
846     }
847     ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
848     ReqEventObject(fTrackName, fTracks, kTRUE);
849     ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
850 sixie 1.100 if (fElectronIsoType.CompareTo("TrackJuraSliding") == 0
851 sixie 1.110 || fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0
852     || fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0
853 ceballos 1.117 || fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0
854 ceballos 1.118 || fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0
855 fabstoec 1.126 || fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012") == 0
856 sixie 1.127 || fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0
857     || fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0
858 mingyang 1.129 || fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012HCP") == 0
859     ) {
860 ceballos 1.80 ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
861     }
862 ceballos 1.130
863 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
864 ceballos 1.60 fElectronIDType = "NoId";
865     fElectronIsoType = "NoIso";
866     fApplyConvFilterType1 = kFALSE;
867     fApplyConvFilterType2 = kFALSE;
868     fApplyD0Cut = kFALSE;
869 ceballos 1.81 fApplyDZCut = kFALSE;
870 ceballos 1.59 }
871    
872 ceballos 1.60 if (fApplyConvFilterType1 || fCombinedIdCut == kTRUE)
873 loizides 1.23 ReqEventObject(fConversionBranchName, fConversions, kTRUE);
874 loizides 1.17
875 sixie 1.42 Setup();
876 sixie 1.102
877 sixie 1.42 }
878    
879     //--------------------------------------------------------------------------------------------------
880     void ElectronIDMod::Setup()
881     {
882     // Set all options properly before execution.
883    
884 loizides 1.5 if (fElectronIDType.CompareTo("Tight") == 0)
885 sixie 1.56 fElIdType = ElectronTools::kTight;
886 loizides 1.5 else if (fElectronIDType.CompareTo("Loose") == 0)
887 sixie 1.56 fElIdType = ElectronTools::kLoose;
888 sixie 1.93 else if (fElectronIDType.CompareTo("Likelihood") == 0) {
889     if (!fLH) { cout << "Error: Likelihood not initialized.\n"; assert(0); }
890 sixie 1.56 fElIdType = ElectronTools::kLikelihood;
891 sixie 1.93 } else if (fElectronIDType.CompareTo("NoId") == 0)
892 sixie 1.56 fElIdType = ElectronTools::kNoId;
893 sixie 1.42 else if (fElectronIDType.CompareTo("ZeeId") == 0)
894 sixie 1.56 fElIdType = ElectronTools::kZeeId;
895 sixie 1.51 else if (fElectronIDType.CompareTo("CustomLoose") == 0)
896 sixie 1.56 fElIdType = ElectronTools::kCustomIdLoose;
897 sixie 1.51 else if (fElectronIDType.CompareTo("CustomTight") == 0)
898 sixie 1.56 fElIdType = ElectronTools::kCustomIdTight;
899 ceballos 1.86 else if (fElectronIDType.CompareTo("VBTFWorkingPointFakeableId") == 0)
900     fElIdType = ElectronTools::kVBTFWorkingPointFakeableId;
901 sixie 1.55 else if (fElectronIDType.CompareTo("VBTFWorkingPoint95Id") == 0)
902 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint95Id;
903 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint90Id") == 0)
904 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint90Id;
905 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint80Id") == 0)
906 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint80Id;
907 ceballos 1.83 else if (fElectronIDType.CompareTo("VBTFWorkingPointLowPtId") == 0)
908     fElIdType = ElectronTools::kVBTFWorkingPointLowPtId;
909 ceballos 1.60 else if (fElectronIDType.CompareTo("VBTFWorkingPoint85Id") == 0)
910     fElIdType = ElectronTools::kVBTFWorkingPoint85Id;
911 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint70Id") == 0)
912 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint70Id;
913 sixie 1.108 else if (fElectronIDType.CompareTo("MVA_BDTG_NoIPInfo") == 0)
914 sixie 1.110 fElIdType = ElectronTools::kMVAID_BDTG_NoIPInfo;
915 sixie 1.108 else if (fElectronIDType.CompareTo("MVA_BDTG_WithIPInfo") == 0)
916 sixie 1.110 fElIdType = ElectronTools::kMVAID_BDTG_WithIPInfo;
917     else if (fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombined") == 0)
918     fElIdType = ElectronTools::kMVAID_BDTG_IDIsoCombined;
919 ceballos 1.117 else if (fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0)
920     fElIdType = ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0;
921 fabstoec 1.115 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_WP85Id") == 0)
922     fElIdType = ElectronTools::kHggLeptonTagId;
923 fabstoec 1.126 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_2012Id") == 0)
924     fElIdType = ElectronTools::kHggLeptonTagId2012;
925 mingyang 1.129 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_2012IdHCP") == 0)
926     fElIdType = ElectronTools::kHggLeptonTagId2012HCP;
927 sixie 1.127 else if (fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0)
928     fElIdType = ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4;
929 fabstoec 1.115
930 sixie 1.107 else {
931 loizides 1.5 SendError(kAbortAnalysis, "SlaveBegin",
932     "The specified electron identification %s is not defined.",
933     fElectronIDType.Data());
934     return;
935     }
936 sixie 1.51
937 loizides 1.5 if (fElectronIsoType.CompareTo("TrackCalo") == 0 )
938 sixie 1.56 fElIsoType = ElectronTools::kTrackCalo;
939 loizides 1.5 else if (fElectronIsoType.CompareTo("TrackJura") == 0)
940 sixie 1.56 fElIsoType = ElectronTools::kTrackJura;
941 ceballos 1.49 else if(fElectronIsoType.CompareTo("TrackJuraCombined") == 0)
942 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraCombined;
943 loizides 1.5 else if(fElectronIsoType.CompareTo("TrackJuraSliding") == 0)
944 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraSliding;
945 ceballos 1.80 else if(fElectronIsoType.CompareTo("TrackJuraSlidingNoCorrection") == 0)
946     fElIsoType = ElectronTools::kTrackJuraSlidingNoCorrection;
947 sixie 1.99 else if(fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0)
948     fElIsoType = ElectronTools::kCombinedRelativeConeAreaCorrected;
949 ceballos 1.76 else if (fElectronIsoType.CompareTo("PFIso") == 0 )
950     fElIsoType = ElectronTools::kPFIso;
951     else if (fElectronIsoType.CompareTo("PFIsoNoL") == 0 )
952     fElIsoType = ElectronTools::kPFIsoNoL;
953 loizides 1.5 else if (fElectronIsoType.CompareTo("NoIso") == 0 )
954 sixie 1.56 fElIsoType = ElectronTools::kNoIso;
955 sixie 1.42 else if (fElectronIsoType.CompareTo("ZeeIso") == 0 )
956 sixie 1.56 fElIsoType = ElectronTools::kZeeIso;
957 sixie 1.55 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint95Iso") == 0 )
958 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint95Iso;
959 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint90Iso") == 0 )
960 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint90Iso;
961 ceballos 1.60 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint85Iso") == 0 )
962     fElIsoType = ElectronTools::kVBTFWorkingPoint85Iso;
963 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint80Iso") == 0 )
964 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint80Iso;
965 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint70Iso") == 0 )
966 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint70Iso;
967 sixie 1.110 else if (fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0 )
968     fElIsoType = ElectronTools::kMVAIso_BDTG_IDIsoCombined;
969 ceballos 1.118 else if (fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0)
970 fabstoec 1.126 fElIsoType = ElectronTools::kPFIso_HWW2012TrigV0;
971 mingyang 1.129 else if (fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012") == 0)
972 fabstoec 1.126 fElIsoType = ElectronTools::kPFIso_HggLeptonTag2012;
973 mingyang 1.129 else if (fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012HCP") == 0)
974     fElIsoType = ElectronTools::kPFIso_HggLeptonTag2012HCP;
975 sixie 1.127 else if (fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0 )
976     fElIsoType = ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4;
977 loizides 1.5 else if (fElectronIsoType.CompareTo("Custom") == 0 ) {
978 sixie 1.56 fElIsoType = ElectronTools::kCustomIso;
979 loizides 1.5 SendError(kWarning, "SlaveBegin",
980     "Custom electron isolation is not yet implemented.");
981     } else {
982     SendError(kAbortAnalysis, "SlaveBegin",
983     "The specified electron isolation %s is not defined.",
984     fElectronIsoType.Data());
985     return;
986     }
987 sixie 1.42
988 sixie 1.102 //If we use MVA ID, need to load MVA weights
989 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_NoIPInfo) {
990 sixie 1.107 fElectronIDMVA = new ElectronIDMVA();
991     fElectronIDMVA->Initialize("BDTG method",
992     fElectronMVAWeights_Subdet0Pt10To20,
993     fElectronMVAWeights_Subdet1Pt10To20,
994     fElectronMVAWeights_Subdet2Pt10To20,
995     fElectronMVAWeights_Subdet0Pt20ToInf,
996     fElectronMVAWeights_Subdet1Pt20ToInf,
997     fElectronMVAWeights_Subdet2Pt20ToInf,
998 ceballos 1.122 ElectronIDMVA::kNoIPInfo,
999     fTheRhoType);
1000 sixie 1.107 }
1001 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_WithIPInfo) {
1002 sixie 1.102 fElectronIDMVA = new ElectronIDMVA();
1003     fElectronIDMVA->Initialize("BDTG method",
1004     fElectronMVAWeights_Subdet0Pt10To20,
1005     fElectronMVAWeights_Subdet1Pt10To20,
1006     fElectronMVAWeights_Subdet2Pt10To20,
1007     fElectronMVAWeights_Subdet0Pt20ToInf,
1008     fElectronMVAWeights_Subdet1Pt20ToInf,
1009     fElectronMVAWeights_Subdet2Pt20ToInf,
1010 ceballos 1.122 ElectronIDMVA::kWithIPInfo,
1011     fTheRhoType);
1012 sixie 1.102 }
1013 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_IDIsoCombined || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ) {
1014     fElectronIDMVA = new ElectronIDMVA();
1015     fElectronIDMVA->Initialize("BDTG method",
1016     fElectronMVAWeights_Subdet0Pt10To20,
1017     fElectronMVAWeights_Subdet1Pt10To20,
1018     fElectronMVAWeights_Subdet2Pt10To20,
1019     fElectronMVAWeights_Subdet0Pt20ToInf,
1020     fElectronMVAWeights_Subdet1Pt20ToInf,
1021     fElectronMVAWeights_Subdet2Pt20ToInf,
1022 ceballos 1.122 ElectronIDMVA::kIDIsoCombined,
1023     fTheRhoType);
1024 sixie 1.110 }
1025 sixie 1.102
1026 ceballos 1.117 if (fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ) {
1027 ceballos 1.116 fElectronIDMVA = new ElectronIDMVA();
1028     fElectronIDMVA->Initialize("BDTG method",
1029     fElectronMVAWeights_Subdet0Pt10To20,
1030     fElectronMVAWeights_Subdet1Pt10To20,
1031     fElectronMVAWeights_Subdet2Pt10To20,
1032     fElectronMVAWeights_Subdet0Pt20ToInf,
1033     fElectronMVAWeights_Subdet1Pt20ToInf,
1034     fElectronMVAWeights_Subdet2Pt20ToInf,
1035 ceballos 1.122 ElectronIDMVA::kIDHWW2012TrigV0,
1036     fTheRhoType);
1037 ceballos 1.116 }
1038    
1039 sixie 1.127 if (fElIdType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4
1040     || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4 ) {
1041     fElectronIDMVA = new ElectronIDMVA();
1042     fElectronIDMVA->Initialize("BDTG method",
1043     fElectronMVAWeights_Subdet0Pt10To20,
1044     fElectronMVAWeights_Subdet1Pt10To20,
1045     fElectronMVAWeights_Subdet2Pt10To20,
1046     fElectronMVAWeights_Subdet0Pt20ToInf,
1047     fElectronMVAWeights_Subdet1Pt20ToInf,
1048     fElectronMVAWeights_Subdet2Pt20ToInf,
1049     ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4,
1050     fTheRhoType);
1051     }
1052    
1053 mingyang 1.129 if (fElIdType == ElectronTools::kHggLeptonTagId2012HCP) {
1054     fElectronIDMVA = new ElectronIDMVA();
1055     fElectronIDMVA->Initialize("BDTG method",
1056     fElectronMVAWeights_Subdet0Pt10To20,
1057     fElectronMVAWeights_Subdet1Pt10To20,
1058     fElectronMVAWeights_Subdet2Pt10To20,
1059     fElectronMVAWeights_Subdet0Pt20ToInf,
1060     fElectronMVAWeights_Subdet1Pt20ToInf,
1061     fElectronMVAWeights_Subdet2Pt20ToInf,
1062 mingyang 1.131 ElectronIDMVA::kIDEGamma2012NonTrigV1,
1063 mingyang 1.129 fTheRhoType);
1064     }
1065    
1066 loizides 1.30 }
1067 ceballos 1.77
1068     //--------------------------------------------------------------------------------------------------
1069     void ElectronIDMod::Terminate()
1070     {
1071     // Run finishing code on the computer (slave) that did the analysis
1072 sixie 1.110 delete fElectronIDMVA;
1073 ceballos 1.77 }