ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.128
Committed: Tue Aug 7 15:04:59 2012 UTC (12 years, 9 months ago) by sixie
Content type: text/plain
Branch: MAIN
Changes since 1.127: +9 -8 lines
Log Message:
update id+iso mva v4 cuts after fixing bug with isolation

File Contents

# User Rev Content
1 sixie 1.128 // $Id: ElectronIDMod.cc,v 1.127 2012/07/22 20:33:27 sixie 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 fabstoec 1.120 fTheRhoType(RhoUtilities::DEFAULT)
89 loizides 1.1 {
90     // Constructor.
91     }
92    
93     //--------------------------------------------------------------------------------------------------
94 sixie 1.102 Bool_t ElectronIDMod::PassLikelihoodID(const Electron *ele) const
95 ceballos 1.77 {
96 sixie 1.102
97     Double_t LikelihoodValue = ElectronTools::Likelihood(fLH, ele);
98 ceballos 1.96
99 ceballos 1.95 double likCut = fIDLikelihoodCut;
100     if(likCut > -900){
101     if(ele->Pt() > 20){
102     if(ele->SCluster()->AbsEta() < 1.479){
103 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 3.5;
104     else likCut = 4.0;
105 ceballos 1.95 }
106     else {
107 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
108     else likCut = 4.0;
109 ceballos 1.95 }
110     }
111     else {
112     if(ele->SCluster()->AbsEta() < 1.479){
113 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
114     else likCut = 4.5;
115 ceballos 1.95 }
116     else {
117 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
118     else likCut = 4.0;
119 ceballos 1.95 }
120     }
121     }
122 sixie 1.102 if (LikelihoodValue > likCut) return kTRUE;
123 ceballos 1.77 return kFALSE;
124     }
125    
126     //--------------------------------------------------------------------------------------------------
127 sixie 1.102 Bool_t ElectronIDMod::PassMVAID(const Electron *el, ElectronTools::EElIdType idType,
128 sixie 1.110 const Vertex *vertex, const PFCandidateCol *PFCands,
129     const PileupEnergyDensityCol *PileupEnergyDensity) const
130 ceballos 1.116 {
131 ceballos 1.123 Bool_t isDebug = kFALSE;
132 sixie 1.110 Double_t MVAValue = 0;
133 ceballos 1.116 if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombined) {
134 sixie 1.113 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, fIntRadius);
135 ceballos 1.116 }
136 ceballos 1.117 else if(idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
137 ceballos 1.116 ElectronOArr *tempElectrons = new ElectronOArr;
138     MuonOArr *tempMuons = new MuonOArr;
139 ceballos 1.122 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, ElectronTools::kEleEANoCorr,
140 ceballos 1.123 tempElectrons, tempMuons, isDebug);
141 ceballos 1.116 delete tempElectrons;
142     delete tempMuons;
143     }
144 sixie 1.127 else if(idType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4) {
145 sixie 1.128
146 sixie 1.127 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     ) {
159 ceballos 1.118 if (el->Pt() < 20 && eta < 0.800 ) MVABin = 0;
160     if (el->Pt() < 20 && eta >= 0.800 && fabs(eta) < 1.479 ) MVABin = 1;
161     if (el->Pt() < 20 && eta >= 1.479 ) MVABin = 2;
162     if (el->Pt() >= 20 && eta < 0.800 ) MVABin = 3;
163     if (el->Pt() >= 20 && eta >= 0.800 && fabs(eta) < 1.479 ) MVABin = 4;
164     if (el->Pt() >= 20 && eta >= 1.479 ) MVABin = 5;
165     } else {
166     if (el->Pt() < 20 && eta < 1.000 ) MVABin = 0;
167     if (el->Pt() < 20 && eta >= 1.000 && fabs(eta) < 1.479 ) MVABin = 1;
168     if (el->Pt() < 20 && eta >= 1.479 ) MVABin = 2;
169     if (el->Pt() >= 20 && eta < 1.000 ) MVABin = 3;
170     if (el->Pt() >= 20 && eta >= 1.000 && fabs(eta) < 1.479 ) MVABin = 4;
171     if (el->Pt() >= 20 && eta >= 1.479 ) MVABin = 5;
172     }
173     if(MVABin == -1) assert(0);
174 sixie 1.102
175     Double_t MVACut = -9999;
176 sixie 1.110 if (idType == ElectronTools::kMVAID_BDTG_NoIPInfo) {
177 ceballos 1.114 if (MVABin == 0) MVACut = 0.133;
178     else if (MVABin == 1) MVACut = 0.465;
179     else if (MVABin == 2) MVACut = 0.518;
180     else if (MVABin == 3) MVACut = 0.942;
181     else if (MVABin == 4) MVACut = 0.947;
182     else if (MVABin == 5) MVACut = 0.878 ;
183 sixie 1.110 } else if (idType == ElectronTools::kMVAID_BDTG_WithIPInfo) {
184 ceballos 1.114 if (MVABin == 0) MVACut = 0.139;
185     else if (MVABin == 1) MVACut = 0.525;
186     else if (MVABin == 2) MVACut = 0.543;
187     else if (MVABin == 3) MVACut = 0.947;
188     else if (MVABin == 4) MVACut = 0.950;
189     else if (MVABin == 5) MVACut = 0.884;
190 sixie 1.110 } else if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombined) {
191 ceballos 1.114 if (MVABin == 0) MVACut = 0.4202;
192     else if (MVABin == 1) MVACut = 0.6206;
193     else if (MVABin == 2) MVACut = 0.6190;
194     else if (MVABin == 3) MVACut = 0.9590;
195     else if (MVABin == 4) MVACut = 0.9586;
196     else if (MVABin == 5) MVACut = 0.9278;
197 ceballos 1.117 } else if (idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
198 ceballos 1.121 if (MVABin == 0) MVACut = 0.000;
199     else if (MVABin == 1) MVACut = 0.100;
200     else if (MVABin == 2) MVACut = 0.620;
201     else if (MVABin == 3) MVACut = 0.940;
202     else if (MVABin == 4) MVACut = 0.850;
203     else if (MVABin == 5) MVACut = 0.920;
204 sixie 1.127 } else if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4) {
205 sixie 1.128 if (MVABin == 0) MVACut = 0.124;
206     else if (MVABin == 1) MVACut = 0.220;
207     else if (MVABin == 2) MVACut = 0.523;
208     else if (MVABin == 3) MVACut = 0.936;
209     else if (MVABin == 4) MVACut = 0.888;
210     else if (MVABin == 5) MVACut = 0.869;
211 sixie 1.107 }
212    
213 ceballos 1.122 if(isDebug == kTRUE){
214 ceballos 1.123 printf("PassElMVAID(%d): %d, pt, eta = %f, %f, rho = %f(%f) : MVA = %f, bin: %d\n",
215     (MVAValue > MVACut),GetEventHeader()->EvtNum(),el->Pt(), eta,
216 ceballos 1.122 fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets(),MVAValue,MVABin);
217     }
218    
219 sixie 1.102 if (MVAValue > MVACut) return kTRUE;
220     return kFALSE;
221     }
222    
223     //--------------------------------------------------------------------------------------------------
224     Bool_t ElectronIDMod::PassIDCut(const Electron *ele, ElectronTools::EElIdType idType,
225     const Vertex *vertex) const
226 sixie 1.42 {
227    
228     Bool_t idcut = kFALSE;
229     switch (idType) {
230 sixie 1.56 case ElectronTools::kTight:
231 sixie 1.42 idcut = ele->PassTightID();
232     break;
233 sixie 1.56 case ElectronTools::kLoose:
234 sixie 1.42 idcut = ele->PassLooseID();
235     break;
236 sixie 1.56 case ElectronTools::kLikelihood:
237 ceballos 1.101 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId) &&
238 sixie 1.102 PassLikelihoodID(ele);
239 sixie 1.42 break;
240 sixie 1.56 case ElectronTools::kNoId:
241 sixie 1.42 idcut = kTRUE;
242     break;
243 sixie 1.56 case ElectronTools::kCustomIdLoose:
244     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdLoose);
245 sixie 1.42 break;
246 sixie 1.56 case ElectronTools::kCustomIdTight:
247     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdTight);
248 sixie 1.42 break;
249 ceballos 1.86 case ElectronTools::kVBTFWorkingPointFakeableId:
250     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
251     break;
252 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Id:
253     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint95Id);
254 ceballos 1.54 break;
255 sixie 1.56 case ElectronTools::kVBTFWorkingPoint90Id:
256     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint90Id);
257 ceballos 1.54 break;
258 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Id:
259     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint85Id);
260     break;
261 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Id:
262     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint80Id);
263     break;
264 ceballos 1.83 case ElectronTools::kVBTFWorkingPointLowPtId:
265     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointLowPtId);
266 ceballos 1.81 break;
267 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Id:
268     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint70Id);
269 ceballos 1.54 break;
270 fabstoec 1.115 case ElectronTools::kHggLeptonTagId:
271     idcut = ElectronTools::PassHggLeptonTagID(ele);
272     break;
273 fabstoec 1.126 case ElectronTools::kHggLeptonTagId2012:
274     idcut = ElectronTools::PassHggLeptonTagID2012(ele);
275     break;
276 sixie 1.110 case ElectronTools::kMVAID_BDTG_NoIPInfo:
277 sixie 1.111 {
278     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
279     if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_NoIPInfo,
280     vertex, fPFCandidates, fPileupEnergyDensity);
281     }
282     break;
283 sixie 1.110 case ElectronTools::kMVAID_BDTG_WithIPInfo:
284 sixie 1.111 {
285     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
286     if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_WithIPInfo,
287     vertex, fPFCandidates, fPileupEnergyDensity);
288     }
289     break;
290 sixie 1.110 case ElectronTools::kMVAID_BDTG_IDIsoCombined:
291 sixie 1.111 {
292     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
293     if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDIsoCombined,
294     vertex, fPFCandidates, fPileupEnergyDensity );
295     }
296     break;
297 ceballos 1.117 case ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0:
298 ceballos 1.116 {
299     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
300 ceballos 1.117 if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0,
301 ceballos 1.116 vertex, fPFCandidates, fPileupEnergyDensity );
302     }
303     break;
304 sixie 1.127 case ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4:
305     {
306     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
307     if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4,
308     vertex, fPFCandidates, fPileupEnergyDensity );
309     }
310     break;
311 sixie 1.42 default:
312     break;
313     }
314    
315     return idcut;
316     }
317    
318     //--------------------------------------------------------------------------------------------------
319 ceballos 1.76 Bool_t ElectronIDMod::PassIsolationCut(const Electron *ele, ElectronTools::EElIsoType isoType,
320 ceballos 1.80 const TrackCol *tracks, const Vertex *vertex,
321 ceballos 1.124 const Double_t rho, ElectronTools::EElIdType idType) const
322 sixie 1.42 {
323    
324     Bool_t isocut = kFALSE;
325     switch (isoType) {
326 sixie 1.56 case ElectronTools::kTrackCalo:
327 sixie 1.42 isocut = (ele->TrackIsolationDr03() < fTrackIsolationCut) &&
328     (ele->CaloIsolation() < fCaloIsolationCut);
329     break;
330 sixie 1.56 case ElectronTools::kTrackJura:
331 ceballos 1.85 isocut = (ele->TrackIsolationDr03() < ele->Pt()*fTrackIsolationCut) &&
332     (ele->EcalRecHitIsoDr03() < ele->Pt()*fEcalJuraIsoCut) &&
333     (ele->HcalTowerSumEtDr03() < ele->Pt()*fHcalIsolationCut);
334 sixie 1.42 break;
335 sixie 1.56 case ElectronTools::kTrackJuraCombined:
336 ceballos 1.60 isocut = (ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03()
337 ceballos 1.49 - 1.5 < fCombIsolationCut);
338     break;
339 sixie 1.56 case ElectronTools::kTrackJuraSliding:
340 sixie 1.42 {
341 ceballos 1.80 Double_t totalIso = ele->TrackIsolationDr03() + TMath::Max(ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3, 0.0);
342     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);
343 ceballos 1.79 if (totalIso < (ele->Pt()*fCombIsolationCut) )
344     isocut = kTRUE;
345     }
346     break;
347 ceballos 1.80 case ElectronTools::kTrackJuraSlidingNoCorrection:
348 ceballos 1.79 {
349 ceballos 1.80 Double_t totalIso = ele->TrackIsolationDr03() + (ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03());
350     if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + (TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03());
351 ceballos 1.76 if (totalIso < (ele->Pt()*fCombIsolationCut) )
352     isocut = kTRUE;
353     }
354     break;
355 sixie 1.99 case ElectronTools::kCombinedRelativeConeAreaCorrected:
356     {
357     Double_t totalIso = ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3;
358 fabstoec 1.115 if (ele->SCluster()->AbsEta() < 1.5) { // Barrel
359     if (totalIso < (ele->Pt()*fCombRelativeIsolationCut) )
360     isocut = kTRUE;
361     } else {
362     if (totalIso < (ele->Pt()*fCombRelativeIsolationCut_EE) )
363     isocut = kTRUE;
364     }
365 sixie 1.99 }
366     break;
367 ceballos 1.76 case ElectronTools::kPFIso:
368     {
369 sixie 1.87 Double_t pfIsoCutValue = 9999;
370 fabstoec 1.97 if(fPFIsolationCut > 0){
371     pfIsoCutValue = fPFIsolationCut;
372 ceballos 1.88 } else {
373 ceballos 1.91 if (ele->SCluster()->AbsEta() < 1.479) {
374 ceballos 1.88 if (ele->Pt() > 20) {
375 ceballos 1.92 pfIsoCutValue = 0.13;
376 ceballos 1.88 } else {
377 ceballos 1.92 pfIsoCutValue = 0.13;
378 ceballos 1.88 }
379 sixie 1.87 } else {
380 ceballos 1.91 if (ele->Pt() > 20) {
381     pfIsoCutValue = 0.09;
382     } else {
383     pfIsoCutValue = 0.09;
384     }
385     }
386 sixie 1.87 }
387 ceballos 1.101 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.1, 1.0, 0.4, fIntRadius);
388 sixie 1.87 if (totalIso < (ele->Pt()*pfIsoCutValue) )
389 ceballos 1.89 isocut = kTRUE;
390 ceballos 1.76 }
391     break;
392     case ElectronTools::kPFIsoNoL:
393     {
394 ceballos 1.109 Double_t pfIsoCutValue = 9999;
395     if(fPFIsolationCut > 0){
396     pfIsoCutValue = fPFIsolationCut;
397     } else {
398     if (ele->SCluster()->AbsEta() < 1.479) {
399     if (ele->Pt() > 20) {
400     pfIsoCutValue = 0.13;
401     } else {
402     pfIsoCutValue = 0.13;
403     }
404     } else {
405     if (ele->Pt() > 20) {
406     pfIsoCutValue = 0.09;
407     } else {
408     pfIsoCutValue = 0.09;
409     }
410     }
411     }
412     Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, fNonIsolatedMuons, fNonIsolatedElectrons, vertex, 0.1, 1.0, 0.4, fIntRadius);
413     if (totalIso < (ele->Pt()*pfIsoCutValue) )
414 sixie 1.42 isocut = kTRUE;
415     }
416     break;
417 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Iso:
418 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint95Iso, fApplyCombinedIso);
419 sixie 1.56 break;
420     case ElectronTools::kVBTFWorkingPoint90Iso:
421 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint90Iso, fApplyCombinedIso);
422 sixie 1.51 break;
423 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Iso:
424 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint85Iso, fApplyCombinedIso);
425 ceballos 1.60 break;
426 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Iso:
427 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint80Iso, fApplyCombinedIso);
428 sixie 1.51 break;
429 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Iso:
430 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint70Iso, fApplyCombinedIso);
431 sixie 1.51 break;
432 sixie 1.110 case ElectronTools::kMVAIso_BDTG_IDIsoCombined:
433     isocut = (ele->TrackIsolationDr03() < ele->Pt()*0.2) &&
434     (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
435     (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
436     break;
437 ceballos 1.118 case ElectronTools::kPFIso_HWW2012TrigV0:
438     {
439 ceballos 1.122 Bool_t isDebug = kFALSE;
440     if(isDebug == kTRUE){
441     printf("PFIso_HWW2012TrigV0: %d, pt, eta = %f, %f, rho = %f(%f) : ",
442     GetEventHeader()->EvtNum(),ele->Pt(), ele->Eta(),
443     fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets());
444     }
445 ceballos 1.125 ElectronOArr *tempIsoElectrons = new ElectronOArr;
446     MuonOArr *tempIsoMuons = new MuonOArr;
447     Double_t IsoOverPt = IsolationTools::PFElectronIsolation2012(ele, vertex, fPFNoPileUpCands,
448     fPileupEnergyDensity, ElectronTools::kEleEANoCorr, tempIsoElectrons, tempIsoMuons, 0.4, isDebug);
449     delete tempIsoElectrons;
450     delete tempIsoMuons;
451     Double_t eta = ele->SCluster()->AbsEta();
452     Double_t IsoCut = -1;
453     if (ele->Pt() < 20 && eta < 0.800 ) IsoCut = 0.150;
454     if (ele->Pt() < 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
455     if (ele->Pt() < 20 && eta >= 1.479 ) IsoCut = 0.150;
456     if (ele->Pt() >= 20 && eta < 0.800 ) IsoCut = 0.150;
457     if (ele->Pt() >= 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
458     if (ele->Pt() >= 20 && eta >= 1.479 ) IsoCut = 0.150;
459     if (IsoOverPt < IsoCut ) isocut = kTRUE;
460 ceballos 1.118 }
461     break;
462 fabstoec 1.126 case ElectronTools::kPFIso_HggLeptonTag2012:
463     {
464     Bool_t isDebug = kFALSE;
465     if(isDebug == kTRUE){
466     printf("PFIso_HggLeptonTag2012: %d, pt, eta = %f, %f, rho = %f(%f) : ",
467     GetEventHeader()->EvtNum(),ele->Pt(), ele->Eta(),
468     fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets());
469     }
470     ElectronOArr *tempIsoElectrons = new ElectronOArr;
471     MuonOArr *tempIsoMuons = new MuonOArr;
472     Double_t IsoOverPt = IsolationTools::PFElectronIsolation2012LepTag(ele, vertex, fPFNoPileUpCands,
473     fPileupEnergyDensity, ElectronTools::kEleEAData2012, tempIsoElectrons, tempIsoMuons, 0.3, isDebug);
474     delete tempIsoElectrons;
475     delete tempIsoMuons;
476     Double_t eta = ele->SCluster()->AbsEta();
477     Double_t IsoCut = -1;
478     if (ele->Pt() < 20 && eta < 0.800 ) IsoCut = 0.150;
479     if (ele->Pt() < 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
480     if (ele->Pt() < 20 && eta >= 1.479 ) IsoCut = 0.10;
481     if (ele->Pt() >= 20 && eta < 0.800 ) IsoCut = 0.150;
482     if (ele->Pt() >= 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
483     if (ele->Pt() >= 20 && eta >= 1.479 ) IsoCut = 0.150;
484     if (IsoOverPt < IsoCut ) isocut = kTRUE;
485     }
486     break;
487 sixie 1.127 case ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4:
488     {
489     if (fabs(ele->SCluster()->Eta()) < 1.479) {
490     isocut = ( (ele->TrackIsolationDr03() - 1.0) < ele->Pt()*0.2) &&
491     (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
492     (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
493     } else {
494     isocut = (ele->TrackIsolationDr03() < ele->Pt()*0.2) &&
495     (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
496     (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
497     }
498     }
499     break;
500 sixie 1.56 case ElectronTools::kNoIso:
501 sixie 1.42 isocut = kTRUE;
502     break;
503 sixie 1.56 case ElectronTools::kCustomIso:
504 ceballos 1.118 break;
505 sixie 1.42 default:
506     break;
507     }
508    
509     return isocut;
510     }
511    
512    
513     //--------------------------------------------------------------------------------------------------
514 loizides 1.1 void ElectronIDMod::Process()
515     {
516     // Process entries of the tree.
517    
518 ceballos 1.76 if(fElIsoType != ElectronTools::kPFIsoNoL) {
519     LoadEventObject(fElectronBranchName, fElectrons);
520     }
521     else {
522     fElectrons = GetObjThisEvt<ElectronOArr>(fElectronBranchName);
523 ceballos 1.78 fNonIsolatedMuons = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
524     fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
525 ceballos 1.76 }
526 bendavid 1.75 LoadEventObject(fBeamSpotName, fBeamSpot);
527 ceballos 1.76 LoadEventObject(fTrackName, fTracks);
528     LoadEventObject(fPFCandidatesName, fPFCandidates);
529 sixie 1.100 if(fElIsoType == ElectronTools::kTrackJuraSliding ||
530 sixie 1.110 fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected ||
531 ceballos 1.116 fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ||
532 ceballos 1.118 fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ||
533 sixie 1.128 fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4 ||
534 fabstoec 1.126 fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0 ||
535     fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012
536 sixie 1.110 ) {
537 ceballos 1.80 LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
538     }
539 ceballos 1.76 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
540 loizides 1.1
541 fabstoec 1.126 if(fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0 || fElIsoType == ElectronTools::kPFIso_HggLeptonTag2012) {
542 ceballos 1.118 // Name is hardcoded, can be changed if someone feels to do it
543 fabstoec 1.126 fPFNoPileUpCands = GetObjThisEvt<PFCandidateCol>(fPFNoPileUpName);
544 ceballos 1.118 }
545    
546 bendavid 1.62 //get trigger object collection if trigger matching is enabled
547     const TriggerObjectCol *trigObjs = 0;
548     if (fApplyTriggerMatching) {
549     trigObjs = GetHLTObjects(fTrigObjectsName);
550     }
551    
552 loizides 1.6 ElectronOArr *GoodElectrons = new ElectronOArr;
553     GoodElectrons->SetName(fGoodElectronsName);
554 loizides 1.1
555 fabstoec 1.115 for (UInt_t i=0; i<fElectrons->GetEntries() && fVertices->GetEntries() > 0 ; ++i) {
556 loizides 1.5 const Electron *e = fElectrons->At(i);
557 loizides 1.1
558 ceballos 1.66 if (e->SCluster() == 0)
559     continue;
560    
561 ceballos 1.65 if (e->Pt() < fElectronPtMin)
562 loizides 1.5 continue;
563 loizides 1.1
564 dkralph 1.73 if (e->SCluster()->Et() < fElectronEtMin)
565 bendavid 1.67 continue;
566    
567 ceballos 1.65 if (e->AbsEta() > fElectronEtaMax)
568 ceballos 1.64 continue;
569 sixie 1.112
570 bendavid 1.67 if (fApplyEcalFiducial && ( (e->SCluster()->AbsEta()>1.4442 && e->SCluster()->AbsEta()<1.5666) || e->SCluster()->AbsEta()>2.5 )) {
571     continue;
572     }
573    
574     if (fApplyEcalSeeded && !e->IsEcalDriven()) {
575     continue;
576     }
577    
578 bendavid 1.62 //apply trigger matching
579     Bool_t matchTrigger = fApplyTriggerMatching && ElectronTools::PassTriggerMatching(e,trigObjs);
580     if (fApplyTriggerMatching && !matchTrigger)
581     continue;
582    
583 sixie 1.55 //apply ECAL spike removal
584 sixie 1.56 Bool_t spikecut = ElectronTools::PassSpikeRemovalFilter(e);
585 sixie 1.57 if (fApplySpikeRemoval && !spikecut)
586 sixie 1.55 continue;
587    
588 sixie 1.42 //apply Isolation Cut
589 ceballos 1.80 Double_t Rho = 0.0;
590 sixie 1.100 if( fElIsoType == ElectronTools::kTrackJuraSliding
591 sixie 1.110 || fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected
592     || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined
593 sixie 1.111 ) {
594 fabstoec 1.119 switch(fTheRhoType) {
595     case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
596     Rho = fPileupEnergyDensity->At(0)->Rho();
597     break;
598     case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
599     Rho = fPileupEnergyDensity->At(0)->RhoLowEta();
600     break;
601     case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
602     Rho = fPileupEnergyDensity->At(0)->RhoRandom();
603     break;
604     case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
605     Rho = fPileupEnergyDensity->At(0)->RhoRandomLowEta();
606     break;
607 ceballos 1.122 case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
608     Rho = fPileupEnergyDensity->At(0)->RhoKt6PFJets();
609     break;
610 fabstoec 1.119 default:
611     // use the old default
612     Rho = fPileupEnergyDensity->At(0)->Rho();
613     break;
614     }
615 ceballos 1.80 }
616 ceballos 1.124 Bool_t isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(0), Rho, fElIdType);
617 sixie 1.42 if (!isocut)
618 loizides 1.5 continue;
619    
620 ceballos 1.60 // apply conversion filters
621     Bool_t passConvVetoType1 = kFALSE;
622     if (fApplyConvFilterType1) {
623 sixie 1.42 LoadEventObject(fConversionBranchName, fConversions);
624 ceballos 1.60 passConvVetoType1 = ElectronTools::PassConversionFilter(e, fConversions,
625 bendavid 1.82 fBeamSpot->At(0), 0, 1e-6, 2.0, kTRUE, kFALSE);
626 ceballos 1.12 }
627 ceballos 1.60 else {
628     passConvVetoType1 = kTRUE;
629     }
630    
631     if (passConvVetoType1 == kFALSE) continue;
632    
633     Bool_t passConvVetoType2 = kFALSE;
634     if (fApplyConvFilterType2) {
635     passConvVetoType2 = TMath::Abs(e->ConvPartnerDCotTheta()) >= 0.02 ||
636     TMath::Abs(e->ConvPartnerDist()) >= 0.02;
637     }
638     else {
639     passConvVetoType2 = kTRUE;
640     }
641 sixie 1.42
642 ceballos 1.60 if (passConvVetoType2 == kFALSE) continue;
643 ceballos 1.72
644 ceballos 1.60 // apply NExpectedHitsInner Cut
645 ceballos 1.98 if(fInvertNExpectedHitsInnerCut == kFALSE && fNExpectedHitsInnerCut < 999 &&
646 ceballos 1.69 e->CorrectedNExpectedHitsInner() > fNExpectedHitsInnerCut) continue;
647 ceballos 1.60
648 ceballos 1.98 // apply NExpectedHitsInner inverted Cut
649     if(fInvertNExpectedHitsInnerCut == kTRUE && fNExpectedHitsInnerCut < 999 &&
650     e->CorrectedNExpectedHitsInner() <= fNExpectedHitsInnerCut) continue;
651    
652 sixie 1.42 // apply d0 cut
653 ceballos 1.15 if (fApplyD0Cut) {
654 ceballos 1.81 Bool_t passD0cut = kTRUE;
655     if(fWhichVertex >= -1) passD0cut = ElectronTools::PassD0Cut(e, fVertices, fD0Cut, fWhichVertex);
656     else passD0cut = ElectronTools::PassD0Cut(e, fBeamSpot, fD0Cut);
657 sixie 1.42 if (!passD0cut)
658 ceballos 1.24 continue;
659 ceballos 1.12 }
660    
661 ceballos 1.81 // apply dz cut
662     if (fApplyDZCut) {
663 ceballos 1.83 Bool_t passDZcut = ElectronTools::PassDZCut(e, fVertices, fDZCut, fWhichVertex);
664 ceballos 1.81 if (!passDZcut)
665     continue;
666     }
667    
668 sixie 1.102 //apply id cut
669     Bool_t idcut = PassIDCut(e, fElIdType, fVertices->At(0));
670     if (!idcut)
671     continue;
672    
673 ceballos 1.59 // apply charge filter
674 sixie 1.42 if(fChargeFilter == kTRUE) {
675 sixie 1.56 Bool_t passChargeFilter = ElectronTools::PassChargeFilter(e);
676 sixie 1.42 if (!passChargeFilter) continue;
677 ceballos 1.45 }
678    
679 ceballos 1.63 // apply full combined id, using Tight cuts
680 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
681 ceballos 1.68 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
682 ceballos 1.59 LoadEventObject(fConversionBranchName, fConversions);
683 ceballos 1.63 Int_t result = ElectronTools::PassTightId(e, *&fVertices, fConversions, 2);
684 ceballos 1.59 if(result != 15) continue;
685     }
686    
687 loizides 1.5 // add good electron
688 ceballos 1.12 GoodElectrons->Add(e);
689 loizides 1.5 }
690 loizides 1.1
691 loizides 1.9 // sort according to pt
692     GoodElectrons->Sort();
693    
694 loizides 1.5 // add to event for other modules to use
695 loizides 1.6 AddObjThisEvt(GoodElectrons);
696 loizides 1.1 }
697    
698     //--------------------------------------------------------------------------------------------------
699     void ElectronIDMod::SlaveBegin()
700     {
701     // Run startup code on the computer (slave) doing the actual analysis. Here,
702 loizides 1.5 // we just request the electron collection branch.
703 loizides 1.1
704 ceballos 1.76 // In this case we cannot have a branch
705     if (fElectronIsoType.CompareTo("PFIsoNoL") != 0 ) {
706     ReqEventObject(fElectronBranchName, fElectrons,fElectronsFromBranch);
707     }
708     ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
709     ReqEventObject(fTrackName, fTracks, kTRUE);
710     ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
711 sixie 1.100 if (fElectronIsoType.CompareTo("TrackJuraSliding") == 0
712 sixie 1.110 || fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0
713     || fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0
714 ceballos 1.117 || fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0
715 ceballos 1.118 || fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0
716 fabstoec 1.126 || fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012") == 0
717 sixie 1.127 || fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0
718     || fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0
719 sixie 1.110 ) {
720 ceballos 1.80 ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
721     }
722 loizides 1.17
723 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
724 ceballos 1.60 fElectronIDType = "NoId";
725     fElectronIsoType = "NoIso";
726     fApplyConvFilterType1 = kFALSE;
727     fApplyConvFilterType2 = kFALSE;
728     fApplyD0Cut = kFALSE;
729 ceballos 1.81 fApplyDZCut = kFALSE;
730 ceballos 1.59 }
731    
732 ceballos 1.60 if (fApplyConvFilterType1 || fCombinedIdCut == kTRUE)
733 loizides 1.23 ReqEventObject(fConversionBranchName, fConversions, kTRUE);
734 loizides 1.17
735 sixie 1.42 Setup();
736 sixie 1.102
737 sixie 1.42 }
738    
739     //--------------------------------------------------------------------------------------------------
740     void ElectronIDMod::Setup()
741     {
742     // Set all options properly before execution.
743    
744 loizides 1.5 if (fElectronIDType.CompareTo("Tight") == 0)
745 sixie 1.56 fElIdType = ElectronTools::kTight;
746 loizides 1.5 else if (fElectronIDType.CompareTo("Loose") == 0)
747 sixie 1.56 fElIdType = ElectronTools::kLoose;
748 sixie 1.93 else if (fElectronIDType.CompareTo("Likelihood") == 0) {
749     if (!fLH) { cout << "Error: Likelihood not initialized.\n"; assert(0); }
750 sixie 1.56 fElIdType = ElectronTools::kLikelihood;
751 sixie 1.93 } else if (fElectronIDType.CompareTo("NoId") == 0)
752 sixie 1.56 fElIdType = ElectronTools::kNoId;
753 sixie 1.42 else if (fElectronIDType.CompareTo("ZeeId") == 0)
754 sixie 1.56 fElIdType = ElectronTools::kZeeId;
755 sixie 1.51 else if (fElectronIDType.CompareTo("CustomLoose") == 0)
756 sixie 1.56 fElIdType = ElectronTools::kCustomIdLoose;
757 sixie 1.51 else if (fElectronIDType.CompareTo("CustomTight") == 0)
758 sixie 1.56 fElIdType = ElectronTools::kCustomIdTight;
759 ceballos 1.86 else if (fElectronIDType.CompareTo("VBTFWorkingPointFakeableId") == 0)
760     fElIdType = ElectronTools::kVBTFWorkingPointFakeableId;
761 sixie 1.55 else if (fElectronIDType.CompareTo("VBTFWorkingPoint95Id") == 0)
762 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint95Id;
763 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint90Id") == 0)
764 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint90Id;
765 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint80Id") == 0)
766 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint80Id;
767 ceballos 1.83 else if (fElectronIDType.CompareTo("VBTFWorkingPointLowPtId") == 0)
768     fElIdType = ElectronTools::kVBTFWorkingPointLowPtId;
769 ceballos 1.60 else if (fElectronIDType.CompareTo("VBTFWorkingPoint85Id") == 0)
770     fElIdType = ElectronTools::kVBTFWorkingPoint85Id;
771 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint70Id") == 0)
772 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint70Id;
773 sixie 1.108 else if (fElectronIDType.CompareTo("MVA_BDTG_NoIPInfo") == 0)
774 sixie 1.110 fElIdType = ElectronTools::kMVAID_BDTG_NoIPInfo;
775 sixie 1.108 else if (fElectronIDType.CompareTo("MVA_BDTG_WithIPInfo") == 0)
776 sixie 1.110 fElIdType = ElectronTools::kMVAID_BDTG_WithIPInfo;
777     else if (fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombined") == 0)
778     fElIdType = ElectronTools::kMVAID_BDTG_IDIsoCombined;
779 ceballos 1.117 else if (fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0)
780     fElIdType = ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0;
781 fabstoec 1.115 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_WP85Id") == 0)
782     fElIdType = ElectronTools::kHggLeptonTagId;
783 fabstoec 1.126 else if (fElectronIDType.CompareTo("Hgg_LeptonTag_2012Id") == 0)
784     fElIdType = ElectronTools::kHggLeptonTagId2012;
785 sixie 1.127 else if (fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0)
786     fElIdType = ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4;
787 fabstoec 1.115
788 sixie 1.107 else {
789 loizides 1.5 SendError(kAbortAnalysis, "SlaveBegin",
790     "The specified electron identification %s is not defined.",
791     fElectronIDType.Data());
792     return;
793     }
794 sixie 1.51
795 loizides 1.5 if (fElectronIsoType.CompareTo("TrackCalo") == 0 )
796 sixie 1.56 fElIsoType = ElectronTools::kTrackCalo;
797 loizides 1.5 else if (fElectronIsoType.CompareTo("TrackJura") == 0)
798 sixie 1.56 fElIsoType = ElectronTools::kTrackJura;
799 ceballos 1.49 else if(fElectronIsoType.CompareTo("TrackJuraCombined") == 0)
800 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraCombined;
801 loizides 1.5 else if(fElectronIsoType.CompareTo("TrackJuraSliding") == 0)
802 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraSliding;
803 ceballos 1.80 else if(fElectronIsoType.CompareTo("TrackJuraSlidingNoCorrection") == 0)
804     fElIsoType = ElectronTools::kTrackJuraSlidingNoCorrection;
805 sixie 1.99 else if(fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0)
806     fElIsoType = ElectronTools::kCombinedRelativeConeAreaCorrected;
807 ceballos 1.76 else if (fElectronIsoType.CompareTo("PFIso") == 0 )
808     fElIsoType = ElectronTools::kPFIso;
809     else if (fElectronIsoType.CompareTo("PFIsoNoL") == 0 )
810     fElIsoType = ElectronTools::kPFIsoNoL;
811 loizides 1.5 else if (fElectronIsoType.CompareTo("NoIso") == 0 )
812 sixie 1.56 fElIsoType = ElectronTools::kNoIso;
813 sixie 1.42 else if (fElectronIsoType.CompareTo("ZeeIso") == 0 )
814 sixie 1.56 fElIsoType = ElectronTools::kZeeIso;
815 sixie 1.55 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint95Iso") == 0 )
816 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint95Iso;
817 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint90Iso") == 0 )
818 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint90Iso;
819 ceballos 1.60 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint85Iso") == 0 )
820     fElIsoType = ElectronTools::kVBTFWorkingPoint85Iso;
821 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint80Iso") == 0 )
822 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint80Iso;
823 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint70Iso") == 0 )
824 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint70Iso;
825 sixie 1.110 else if (fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0 )
826     fElIsoType = ElectronTools::kMVAIso_BDTG_IDIsoCombined;
827 ceballos 1.118 else if (fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0)
828 fabstoec 1.126 fElIsoType = ElectronTools::kPFIso_HWW2012TrigV0;
829     else if (fElectronIsoType.CompareTo("PFIso_HggLeptonTag2012") == 0)
830     fElIsoType = ElectronTools::kPFIso_HggLeptonTag2012;
831 sixie 1.127 else if (fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombinedHWW2012TrigV4") == 0 )
832     fElIsoType = ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4;
833 loizides 1.5 else if (fElectronIsoType.CompareTo("Custom") == 0 ) {
834 sixie 1.56 fElIsoType = ElectronTools::kCustomIso;
835 loizides 1.5 SendError(kWarning, "SlaveBegin",
836     "Custom electron isolation is not yet implemented.");
837     } else {
838     SendError(kAbortAnalysis, "SlaveBegin",
839     "The specified electron isolation %s is not defined.",
840     fElectronIsoType.Data());
841     return;
842     }
843 sixie 1.42
844 sixie 1.102 //If we use MVA ID, need to load MVA weights
845 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_NoIPInfo) {
846 sixie 1.107 fElectronIDMVA = new ElectronIDMVA();
847     fElectronIDMVA->Initialize("BDTG method",
848     fElectronMVAWeights_Subdet0Pt10To20,
849     fElectronMVAWeights_Subdet1Pt10To20,
850     fElectronMVAWeights_Subdet2Pt10To20,
851     fElectronMVAWeights_Subdet0Pt20ToInf,
852     fElectronMVAWeights_Subdet1Pt20ToInf,
853     fElectronMVAWeights_Subdet2Pt20ToInf,
854 ceballos 1.122 ElectronIDMVA::kNoIPInfo,
855     fTheRhoType);
856 sixie 1.107 }
857 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_WithIPInfo) {
858 sixie 1.102 fElectronIDMVA = new ElectronIDMVA();
859     fElectronIDMVA->Initialize("BDTG method",
860     fElectronMVAWeights_Subdet0Pt10To20,
861     fElectronMVAWeights_Subdet1Pt10To20,
862     fElectronMVAWeights_Subdet2Pt10To20,
863     fElectronMVAWeights_Subdet0Pt20ToInf,
864     fElectronMVAWeights_Subdet1Pt20ToInf,
865     fElectronMVAWeights_Subdet2Pt20ToInf,
866 ceballos 1.122 ElectronIDMVA::kWithIPInfo,
867     fTheRhoType);
868 sixie 1.102 }
869 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_IDIsoCombined || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ) {
870     fElectronIDMVA = new ElectronIDMVA();
871     fElectronIDMVA->Initialize("BDTG method",
872     fElectronMVAWeights_Subdet0Pt10To20,
873     fElectronMVAWeights_Subdet1Pt10To20,
874     fElectronMVAWeights_Subdet2Pt10To20,
875     fElectronMVAWeights_Subdet0Pt20ToInf,
876     fElectronMVAWeights_Subdet1Pt20ToInf,
877     fElectronMVAWeights_Subdet2Pt20ToInf,
878 ceballos 1.122 ElectronIDMVA::kIDIsoCombined,
879     fTheRhoType);
880 sixie 1.110 }
881 sixie 1.102
882 ceballos 1.117 if (fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ) {
883 ceballos 1.116 fElectronIDMVA = new ElectronIDMVA();
884     fElectronIDMVA->Initialize("BDTG method",
885     fElectronMVAWeights_Subdet0Pt10To20,
886     fElectronMVAWeights_Subdet1Pt10To20,
887     fElectronMVAWeights_Subdet2Pt10To20,
888     fElectronMVAWeights_Subdet0Pt20ToInf,
889     fElectronMVAWeights_Subdet1Pt20ToInf,
890     fElectronMVAWeights_Subdet2Pt20ToInf,
891 ceballos 1.122 ElectronIDMVA::kIDHWW2012TrigV0,
892     fTheRhoType);
893 ceballos 1.116 }
894    
895 sixie 1.127 if (fElIdType == ElectronTools::kMVAID_BDTG_IDIsoCombinedHWW2012TrigV4
896     || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombinedHWW2012TrigV4 ) {
897     fElectronIDMVA = new ElectronIDMVA();
898     fElectronIDMVA->Initialize("BDTG method",
899     fElectronMVAWeights_Subdet0Pt10To20,
900     fElectronMVAWeights_Subdet1Pt10To20,
901     fElectronMVAWeights_Subdet2Pt10To20,
902     fElectronMVAWeights_Subdet0Pt20ToInf,
903     fElectronMVAWeights_Subdet1Pt20ToInf,
904     fElectronMVAWeights_Subdet2Pt20ToInf,
905     ElectronIDMVA::kIDIsoCombinedHWW2012TrigV4,
906     fTheRhoType);
907     }
908    
909 loizides 1.30 }
910 ceballos 1.77
911     //--------------------------------------------------------------------------------------------------
912     void ElectronIDMod::Terminate()
913     {
914     // Run finishing code on the computer (slave) that did the analysis
915 sixie 1.110 delete fElectronIDMVA;
916 ceballos 1.77 }