ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.78
Committed: Wed Feb 23 10:37:12 2011 UTC (14 years, 2 months ago) by ceballos
Content type: text/plain
Branch: MAIN
Changes since 1.77: +9 -9 lines
Log Message:
new ele id

File Contents

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