ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.92
Committed: Sat May 21 17:05:58 2011 UTC (13 years, 11 months ago) by ceballos
Content type: text/plain
Branch: MAIN
Changes since 1.91: +3 -3 lines
Log Message:
new id

File Contents

# User Rev Content
1 ceballos 1.92 // $Id: ElectronIDMod.cc,v 1.91 2011/05/16 18:21:42 ceballos 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 loizides 1.5 #include "MitPhysics/Init/interface/ModNames.h"
11 loizides 1.1
12     using namespace mithep;
13    
14     ClassImp(mithep::ElectronIDMod)
15    
16     //--------------------------------------------------------------------------------------------------
17 loizides 1.5 ElectronIDMod::ElectronIDMod(const char *name, const char *title) :
18 loizides 1.1 BaseMod(name,title),
19 loizides 1.5 fElectronBranchName(Names::gkElectronBrn),
20 ceballos 1.12 fConversionBranchName(Names::gkMvfConversionBrn),
21 loizides 1.5 fGoodElectronsName(ModNames::gkGoodElectronsName),
22 ceballos 1.78 fNonIsolatedMuonsName("random"),
23     fNonIsolatedElectronsName("random"),
24 ceballos 1.68 fVertexName(ModNames::gkGoodVertexesName),
25 bendavid 1.75 fBeamSpotName(Names::gkBeamSpotBrn),
26 ceballos 1.76 fTrackName(Names::gkTrackBrn),
27     fPFCandidatesName(Names::gkPFCandidatesBrn),
28 ceballos 1.31 fElectronIDType("CustomTight"),
29 sixie 1.87 fElectronIsoType("PFIso"),
30 bendavid 1.62 fTrigObjectsName("HLTModTrigObjs"),
31 loizides 1.1 fElectronPtMin(10),
32 bendavid 1.67 fElectronEtMin(0.0),
33 ceballos 1.64 fElectronEtaMax(2.5),
34 ceballos 1.70 fIDLikelihoodCut(0.75),
35 loizides 1.1 fTrackIsolationCut(5.0),
36     fCaloIsolationCut(5.0),
37 loizides 1.5 fEcalJuraIsoCut(5.0),
38     fHcalIsolationCut(5.0),
39 ceballos 1.88 fCombIsolationCut(-1.0),
40 ceballos 1.60 fApplyConvFilterType1(kTRUE),
41     fApplyConvFilterType2(kFALSE),
42 bendavid 1.82 fNWrongHitsMax(0),
43 ceballos 1.60 fNExpectedHitsInnerCut(999),
44 ceballos 1.59 fCombinedIdCut(kFALSE),
45 sixie 1.58 fApplySpikeRemoval(kTRUE),
46 ceballos 1.18 fApplyD0Cut(kTRUE),
47 ceballos 1.81 fApplyDZCut(kTRUE),
48 ceballos 1.45 fChargeFilter(kTRUE),
49 ceballos 1.60 fD0Cut(0.020),
50 ceballos 1.89 fDZCut(0.10),
51 ceballos 1.81 fWhichVertex(-1),
52 bendavid 1.62 fApplyTriggerMatching(kFALSE),
53 bendavid 1.67 fApplyEcalSeeded(kFALSE),
54     fApplyCombinedIso(kTRUE),
55     fApplyEcalFiducial(kFALSE),
56 ceballos 1.76 fElectronsFromBranch(kTRUE),
57 sixie 1.56 fElIdType(ElectronTools::kIdUndef),
58     fElIsoType(ElectronTools::kIsoUndef),
59 loizides 1.14 fElectrons(0),
60     fConversions(0),
61 bendavid 1.75 fVertices(0),
62 ceballos 1.76 fBeamSpot(0),
63     fTracks(0),
64     fPFCandidates(0),
65 ceballos 1.78 fNonIsolatedMuons(0),
66     fNonIsolatedElectrons(0),
67 ceballos 1.80 fLH(0),
68     fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn),
69     fPileupEnergyDensity(0)
70 loizides 1.1 {
71     // Constructor.
72     }
73    
74     //--------------------------------------------------------------------------------------------------
75 ceballos 1.77 Bool_t ElectronIDMod::Likelihood(const Electron *ele) const
76     {
77     LikelihoodMeasurements measurements;
78     measurements.pt = ele->Pt();
79     measurements.subdet = (fabs(ele->Eta())<1.479) ? 0 : 1;
80     measurements.deltaPhi = TMath::Abs(ele->DeltaPhiSuperClusterTrackAtVtx());
81     measurements.deltaEta = TMath::Abs(ele->DeltaEtaSuperClusterTrackAtVtx());
82     measurements.eSeedClusterOverPout = ele->ESeedClusterOverPout();
83     measurements.eSuperClusterOverP = ele->ESuperClusterOverP();
84     measurements.hadronicOverEm = ele->HadronicOverEm();
85     measurements.sigmaIEtaIEta = ele->CoviEtaiEta();
86     measurements.sigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
87     measurements.fBrem = ele->FBrem();
88     measurements.nBremClusters = ele->NumberOfClusters() - 1;
89     double likelihood = fLH->result(measurements);
90    
91     if(likelihood > fIDLikelihoodCut) return kTRUE;
92     return kFALSE;
93     }
94    
95     //--------------------------------------------------------------------------------------------------
96 sixie 1.56 Bool_t ElectronIDMod::PassIDCut(const Electron *ele, ElectronTools::EElIdType idType) const
97 sixie 1.42 {
98    
99     Bool_t idcut = kFALSE;
100     switch (idType) {
101 sixie 1.56 case ElectronTools::kTight:
102 sixie 1.42 idcut = ele->PassTightID();
103     break;
104 sixie 1.56 case ElectronTools::kLoose:
105 sixie 1.42 idcut = ele->PassLooseID();
106     break;
107 sixie 1.56 case ElectronTools::kLikelihood:
108 ceballos 1.77 idcut = Likelihood(ele);
109 sixie 1.42 break;
110 sixie 1.56 case ElectronTools::kNoId:
111 sixie 1.42 idcut = kTRUE;
112     break;
113 sixie 1.56 case ElectronTools::kCustomIdLoose:
114     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdLoose);
115 sixie 1.42 break;
116 sixie 1.56 case ElectronTools::kCustomIdTight:
117     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdTight);
118 sixie 1.42 break;
119 ceballos 1.86 case ElectronTools::kVBTFWorkingPointFakeableId:
120     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
121     break;
122 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Id:
123     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint95Id);
124 ceballos 1.54 break;
125 sixie 1.56 case ElectronTools::kVBTFWorkingPoint90Id:
126     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint90Id);
127 ceballos 1.54 break;
128 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Id:
129     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint85Id);
130     break;
131 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Id:
132     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint80Id);
133     break;
134 ceballos 1.83 case ElectronTools::kVBTFWorkingPointLowPtId:
135     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointLowPtId);
136 ceballos 1.81 break;
137 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Id:
138     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint70Id);
139 ceballos 1.54 break;
140 sixie 1.42 default:
141     break;
142     }
143    
144     return idcut;
145     }
146    
147     //--------------------------------------------------------------------------------------------------
148 ceballos 1.76 Bool_t ElectronIDMod::PassIsolationCut(const Electron *ele, ElectronTools::EElIsoType isoType,
149 ceballos 1.80 const TrackCol *tracks, const Vertex *vertex,
150     const Double_t rho) const
151 sixie 1.42 {
152    
153     Bool_t isocut = kFALSE;
154     switch (isoType) {
155 sixie 1.56 case ElectronTools::kTrackCalo:
156 sixie 1.42 isocut = (ele->TrackIsolationDr03() < fTrackIsolationCut) &&
157     (ele->CaloIsolation() < fCaloIsolationCut);
158     break;
159 sixie 1.56 case ElectronTools::kTrackJura:
160 ceballos 1.85 isocut = (ele->TrackIsolationDr03() < ele->Pt()*fTrackIsolationCut) &&
161     (ele->EcalRecHitIsoDr03() < ele->Pt()*fEcalJuraIsoCut) &&
162     (ele->HcalTowerSumEtDr03() < ele->Pt()*fHcalIsolationCut);
163 sixie 1.42 break;
164 sixie 1.56 case ElectronTools::kTrackJuraCombined:
165 ceballos 1.60 isocut = (ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03()
166 ceballos 1.49 - 1.5 < fCombIsolationCut);
167     break;
168 sixie 1.56 case ElectronTools::kTrackJuraSliding:
169 sixie 1.42 {
170 ceballos 1.80 Double_t totalIso = ele->TrackIsolationDr03() + TMath::Max(ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3, 0.0);
171     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);
172 ceballos 1.79 if (totalIso < (ele->Pt()*fCombIsolationCut) )
173     isocut = kTRUE;
174     }
175     break;
176 ceballos 1.80 case ElectronTools::kTrackJuraSlidingNoCorrection:
177 ceballos 1.79 {
178 ceballos 1.80 Double_t totalIso = ele->TrackIsolationDr03() + (ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03());
179     if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + (TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03());
180 ceballos 1.76 if (totalIso < (ele->Pt()*fCombIsolationCut) )
181     isocut = kTRUE;
182     }
183     break;
184     case ElectronTools::kPFIso:
185     {
186 sixie 1.87 Double_t pfIsoCutValue = 9999;
187 ceballos 1.88 if(fCombIsolationCut > 0){
188     pfIsoCutValue = fCombIsolationCut;
189     } else {
190 ceballos 1.91 if (ele->SCluster()->AbsEta() < 1.479) {
191 ceballos 1.88 if (ele->Pt() > 20) {
192 ceballos 1.92 pfIsoCutValue = 0.13;
193 ceballos 1.88 } else {
194 ceballos 1.92 pfIsoCutValue = 0.13;
195 ceballos 1.88 }
196 sixie 1.87 } else {
197 ceballos 1.91 if (ele->Pt() > 20) {
198     pfIsoCutValue = 0.09;
199     } else {
200     pfIsoCutValue = 0.09;
201     }
202     }
203 sixie 1.87 }
204 ceballos 1.89 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.1, 1.0, 0.4, 0.0);
205 sixie 1.87 if (totalIso < (ele->Pt()*pfIsoCutValue) )
206 ceballos 1.89 isocut = kTRUE;
207 ceballos 1.76 }
208     break;
209     case ElectronTools::kPFIsoNoL:
210     {
211     Double_t beta = IsolationTools::BetaE(tracks, ele, vertex, 0.0, 0.2, 0.3, 0.02);
212 ceballos 1.79 if(beta == 0) beta = 1.0;
213 sixie 1.87 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, fNonIsolatedMuons, fNonIsolatedElectrons, 0.1, 1.0, 0.4, 0.0, 3, beta);
214 ceballos 1.74 if (totalIso < (ele->Pt()*fCombIsolationCut) )
215 sixie 1.42 isocut = kTRUE;
216     }
217     break;
218 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Iso:
219 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint95Iso, fApplyCombinedIso);
220 sixie 1.56 break;
221     case ElectronTools::kVBTFWorkingPoint90Iso:
222 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint90Iso, fApplyCombinedIso);
223 sixie 1.51 break;
224 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Iso:
225 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint85Iso, fApplyCombinedIso);
226 ceballos 1.60 break;
227 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Iso:
228 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint80Iso, fApplyCombinedIso);
229 sixie 1.51 break;
230 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Iso:
231 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint70Iso, fApplyCombinedIso);
232 sixie 1.51 break;
233 sixie 1.56 case ElectronTools::kNoIso:
234 sixie 1.42 isocut = kTRUE;
235     break;
236 sixie 1.56 case ElectronTools::kCustomIso:
237 sixie 1.42 default:
238     break;
239     }
240    
241     return isocut;
242     }
243    
244    
245     //--------------------------------------------------------------------------------------------------
246 loizides 1.1 void ElectronIDMod::Process()
247     {
248     // Process entries of the tree.
249    
250 ceballos 1.76 if(fElIsoType != ElectronTools::kPFIsoNoL) {
251     LoadEventObject(fElectronBranchName, fElectrons);
252     }
253     else {
254     fElectrons = GetObjThisEvt<ElectronOArr>(fElectronBranchName);
255 ceballos 1.78 fNonIsolatedMuons = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
256     fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
257 ceballos 1.76 }
258 bendavid 1.75 LoadEventObject(fBeamSpotName, fBeamSpot);
259 ceballos 1.76 LoadEventObject(fTrackName, fTracks);
260     LoadEventObject(fPFCandidatesName, fPFCandidates);
261 ceballos 1.80 if(fElIsoType == ElectronTools::kTrackJuraSliding) {
262     LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
263     }
264 ceballos 1.76 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
265 loizides 1.1
266 bendavid 1.62 //get trigger object collection if trigger matching is enabled
267     const TriggerObjectCol *trigObjs = 0;
268     if (fApplyTriggerMatching) {
269     trigObjs = GetHLTObjects(fTrigObjectsName);
270     }
271    
272 loizides 1.6 ElectronOArr *GoodElectrons = new ElectronOArr;
273     GoodElectrons->SetName(fGoodElectronsName);
274 loizides 1.1
275 ceballos 1.18 for (UInt_t i=0; i<fElectrons->GetEntries(); ++i) {
276 loizides 1.5 const Electron *e = fElectrons->At(i);
277 loizides 1.1
278 ceballos 1.66 if (e->SCluster() == 0)
279     continue;
280    
281 ceballos 1.65 if (e->Pt() < fElectronPtMin)
282 loizides 1.5 continue;
283 loizides 1.1
284 dkralph 1.73 if (e->SCluster()->Et() < fElectronEtMin)
285 bendavid 1.67 continue;
286    
287 ceballos 1.65 if (e->AbsEta() > fElectronEtaMax)
288 ceballos 1.64 continue;
289    
290 bendavid 1.67 if (fApplyEcalFiducial && ( (e->SCluster()->AbsEta()>1.4442 && e->SCluster()->AbsEta()<1.5666) || e->SCluster()->AbsEta()>2.5 )) {
291     continue;
292     }
293    
294     if (fApplyEcalSeeded && !e->IsEcalDriven()) {
295     continue;
296     }
297    
298 bendavid 1.62 //apply trigger matching
299     Bool_t matchTrigger = fApplyTriggerMatching && ElectronTools::PassTriggerMatching(e,trigObjs);
300     if (fApplyTriggerMatching && !matchTrigger)
301     continue;
302    
303 sixie 1.55 //apply ECAL spike removal
304 sixie 1.56 Bool_t spikecut = ElectronTools::PassSpikeRemovalFilter(e);
305 sixie 1.57 if (fApplySpikeRemoval && !spikecut)
306 sixie 1.55 continue;
307    
308 sixie 1.42 //apply id cut
309     Bool_t idcut = PassIDCut(e, fElIdType);
310 loizides 1.5 if (!idcut)
311     continue;
312    
313 sixie 1.42 //apply Isolation Cut
314 ceballos 1.80 Double_t Rho = 0.0;
315     if(fElIsoType == ElectronTools::kTrackJuraSliding) {
316     Rho = fPileupEnergyDensity->At(0)->Rho();
317     }
318     Bool_t isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(0), Rho);
319 sixie 1.42 if (!isocut)
320 loizides 1.5 continue;
321    
322 ceballos 1.60 // apply conversion filters
323     Bool_t passConvVetoType1 = kFALSE;
324     if (fApplyConvFilterType1) {
325 sixie 1.42 LoadEventObject(fConversionBranchName, fConversions);
326 ceballos 1.60 passConvVetoType1 = ElectronTools::PassConversionFilter(e, fConversions,
327 bendavid 1.82 fBeamSpot->At(0), 0, 1e-6, 2.0, kTRUE, kFALSE);
328 ceballos 1.12 }
329 ceballos 1.60 else {
330     passConvVetoType1 = kTRUE;
331     }
332    
333     if (passConvVetoType1 == kFALSE) continue;
334    
335     Bool_t passConvVetoType2 = kFALSE;
336     if (fApplyConvFilterType2) {
337     passConvVetoType2 = TMath::Abs(e->ConvPartnerDCotTheta()) >= 0.02 ||
338     TMath::Abs(e->ConvPartnerDist()) >= 0.02;
339     }
340     else {
341     passConvVetoType2 = kTRUE;
342     }
343 sixie 1.42
344 ceballos 1.60 if (passConvVetoType2 == kFALSE) continue;
345 ceballos 1.72
346 ceballos 1.60 // apply NExpectedHitsInner Cut
347     if(fNExpectedHitsInnerCut < 999 &&
348 ceballos 1.69 e->CorrectedNExpectedHitsInner() > fNExpectedHitsInnerCut) continue;
349 ceballos 1.60
350 sixie 1.42 // apply d0 cut
351 ceballos 1.15 if (fApplyD0Cut) {
352 ceballos 1.81 Bool_t passD0cut = kTRUE;
353     if(fWhichVertex >= -1) passD0cut = ElectronTools::PassD0Cut(e, fVertices, fD0Cut, fWhichVertex);
354     else passD0cut = ElectronTools::PassD0Cut(e, fBeamSpot, fD0Cut);
355 sixie 1.42 if (!passD0cut)
356 ceballos 1.24 continue;
357 ceballos 1.12 }
358    
359 ceballos 1.81 // apply dz cut
360     if (fApplyDZCut) {
361 ceballos 1.83 Bool_t passDZcut = ElectronTools::PassDZCut(e, fVertices, fDZCut, fWhichVertex);
362 ceballos 1.81 if (!passDZcut)
363     continue;
364     }
365    
366 ceballos 1.59 // apply charge filter
367 sixie 1.42 if(fChargeFilter == kTRUE) {
368 sixie 1.56 Bool_t passChargeFilter = ElectronTools::PassChargeFilter(e);
369 sixie 1.42 if (!passChargeFilter) continue;
370 ceballos 1.45 }
371    
372 ceballos 1.63 // apply full combined id, using Tight cuts
373 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
374 ceballos 1.68 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
375 ceballos 1.59 LoadEventObject(fConversionBranchName, fConversions);
376 ceballos 1.63 Int_t result = ElectronTools::PassTightId(e, *&fVertices, fConversions, 2);
377 ceballos 1.59 if(result != 15) continue;
378     }
379    
380 loizides 1.5 // add good electron
381 ceballos 1.12 GoodElectrons->Add(e);
382 loizides 1.5 }
383 loizides 1.1
384 loizides 1.9 // sort according to pt
385     GoodElectrons->Sort();
386    
387 loizides 1.5 // add to event for other modules to use
388 loizides 1.6 AddObjThisEvt(GoodElectrons);
389 loizides 1.1 }
390    
391     //--------------------------------------------------------------------------------------------------
392     void ElectronIDMod::SlaveBegin()
393     {
394     // Run startup code on the computer (slave) doing the actual analysis. Here,
395 loizides 1.5 // we just request the electron collection branch.
396 loizides 1.1
397 ceballos 1.76 // In this case we cannot have a branch
398     if (fElectronIsoType.CompareTo("PFIsoNoL") != 0 ) {
399     ReqEventObject(fElectronBranchName, fElectrons,fElectronsFromBranch);
400     }
401     ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
402     ReqEventObject(fTrackName, fTracks, kTRUE);
403     ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
404 ceballos 1.80 if (fElectronIsoType.CompareTo("TrackJuraSliding") == 0 ) {
405     ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
406     }
407 loizides 1.17
408 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
409 ceballos 1.60 fElectronIDType = "NoId";
410     fElectronIsoType = "NoIso";
411     fApplyConvFilterType1 = kFALSE;
412     fApplyConvFilterType2 = kFALSE;
413     fApplyD0Cut = kFALSE;
414 ceballos 1.81 fApplyDZCut = kFALSE;
415 ceballos 1.59 }
416    
417 ceballos 1.60 if (fApplyConvFilterType1 || fCombinedIdCut == kTRUE)
418 loizides 1.23 ReqEventObject(fConversionBranchName, fConversions, kTRUE);
419 loizides 1.17
420 sixie 1.42 Setup();
421     }
422    
423     //--------------------------------------------------------------------------------------------------
424     void ElectronIDMod::Setup()
425     {
426     // Set all options properly before execution.
427    
428 loizides 1.5 if (fElectronIDType.CompareTo("Tight") == 0)
429 sixie 1.56 fElIdType = ElectronTools::kTight;
430 loizides 1.5 else if (fElectronIDType.CompareTo("Loose") == 0)
431 sixie 1.56 fElIdType = ElectronTools::kLoose;
432 loizides 1.5 else if (fElectronIDType.CompareTo("Likelihood") == 0)
433 sixie 1.56 fElIdType = ElectronTools::kLikelihood;
434 loizides 1.10 else if (fElectronIDType.CompareTo("NoId") == 0)
435 sixie 1.56 fElIdType = ElectronTools::kNoId;
436 sixie 1.42 else if (fElectronIDType.CompareTo("ZeeId") == 0)
437 sixie 1.56 fElIdType = ElectronTools::kZeeId;
438 sixie 1.51 else if (fElectronIDType.CompareTo("CustomLoose") == 0)
439 sixie 1.56 fElIdType = ElectronTools::kCustomIdLoose;
440 sixie 1.51 else if (fElectronIDType.CompareTo("CustomTight") == 0)
441 sixie 1.56 fElIdType = ElectronTools::kCustomIdTight;
442 ceballos 1.86 else if (fElectronIDType.CompareTo("VBTFWorkingPointFakeableId") == 0)
443     fElIdType = ElectronTools::kVBTFWorkingPointFakeableId;
444 sixie 1.55 else if (fElectronIDType.CompareTo("VBTFWorkingPoint95Id") == 0)
445 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint95Id;
446 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint90Id") == 0)
447 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint90Id;
448 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint80Id") == 0)
449 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint80Id;
450 ceballos 1.83 else if (fElectronIDType.CompareTo("VBTFWorkingPointLowPtId") == 0)
451     fElIdType = ElectronTools::kVBTFWorkingPointLowPtId;
452 ceballos 1.60 else if (fElectronIDType.CompareTo("VBTFWorkingPoint85Id") == 0)
453     fElIdType = ElectronTools::kVBTFWorkingPoint85Id;
454 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint70Id") == 0)
455 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint70Id;
456 sixie 1.51
457 peveraer 1.29 else {
458 loizides 1.5 SendError(kAbortAnalysis, "SlaveBegin",
459     "The specified electron identification %s is not defined.",
460     fElectronIDType.Data());
461     return;
462     }
463 sixie 1.51
464 loizides 1.5 if (fElectronIsoType.CompareTo("TrackCalo") == 0 )
465 sixie 1.56 fElIsoType = ElectronTools::kTrackCalo;
466 loizides 1.5 else if (fElectronIsoType.CompareTo("TrackJura") == 0)
467 sixie 1.56 fElIsoType = ElectronTools::kTrackJura;
468 ceballos 1.49 else if(fElectronIsoType.CompareTo("TrackJuraCombined") == 0)
469 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraCombined;
470 loizides 1.5 else if(fElectronIsoType.CompareTo("TrackJuraSliding") == 0)
471 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraSliding;
472 ceballos 1.80 else if(fElectronIsoType.CompareTo("TrackJuraSlidingNoCorrection") == 0)
473     fElIsoType = ElectronTools::kTrackJuraSlidingNoCorrection;
474 ceballos 1.76 else if (fElectronIsoType.CompareTo("PFIso") == 0 )
475     fElIsoType = ElectronTools::kPFIso;
476     else if (fElectronIsoType.CompareTo("PFIsoNoL") == 0 )
477     fElIsoType = ElectronTools::kPFIsoNoL;
478 loizides 1.5 else if (fElectronIsoType.CompareTo("NoIso") == 0 )
479 sixie 1.56 fElIsoType = ElectronTools::kNoIso;
480 sixie 1.42 else if (fElectronIsoType.CompareTo("ZeeIso") == 0 )
481 sixie 1.56 fElIsoType = ElectronTools::kZeeIso;
482 sixie 1.55 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint95Iso") == 0 )
483 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint95Iso;
484 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint90Iso") == 0 )
485 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint90Iso;
486 ceballos 1.60 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint85Iso") == 0 )
487     fElIsoType = ElectronTools::kVBTFWorkingPoint85Iso;
488 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint80Iso") == 0 )
489 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint80Iso;
490 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint70Iso") == 0 )
491 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint70Iso;
492 loizides 1.5 else if (fElectronIsoType.CompareTo("Custom") == 0 ) {
493 sixie 1.56 fElIsoType = ElectronTools::kCustomIso;
494 loizides 1.5 SendError(kWarning, "SlaveBegin",
495     "Custom electron isolation is not yet implemented.");
496     } else {
497     SendError(kAbortAnalysis, "SlaveBegin",
498     "The specified electron isolation %s is not defined.",
499     fElectronIsoType.Data());
500     return;
501     }
502 sixie 1.42
503 loizides 1.30
504     }
505 ceballos 1.77
506     //--------------------------------------------------------------------------------------------------
507     void ElectronIDMod::Terminate()
508     {
509     // Run finishing code on the computer (slave) that did the analysis
510     }