ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.79
Committed: Mon Mar 7 12:45:52 2011 UTC (14 years, 2 months ago) by ceballos
Content type: text/plain
Branch: MAIN
Changes since 1.78: +15 -1 lines
Log Message:
new stuff

File Contents

# User Rev Content
1 ceballos 1.79 // $Id: ElectronIDMod.cc,v 1.78 2011/02/23 10:37:12 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 ceballos 1.79 if(beta == 0) beta = 1.0;
160     Double_t totalIso = ele->TrackIsolationDr03() + (ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03())*beta;
161     if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + (TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03())*beta;
162     if (totalIso < (ele->Pt()*fCombIsolationCut) )
163     isocut = kTRUE;
164     }
165     break;
166     case ElectronTools::kTrackJuraSlidingNoBeta:
167     {
168     Double_t beta = 1.0;
169 ceballos 1.76 Double_t totalIso = ele->TrackIsolationDr03() + (ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03())*beta;
170     if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + (TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03())*beta;
171     if (totalIso < (ele->Pt()*fCombIsolationCut) )
172     isocut = kTRUE;
173     }
174     break;
175     case ElectronTools::kPFIso:
176     {
177     Double_t beta = IsolationTools::BetaE(tracks, ele, vertex, 0.0, 0.2, 0.3, 0.02);
178 ceballos 1.79 if(beta == 0) beta = 1.0;
179 ceballos 1.78 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.2, 0.5, 0.3, 0.02, 0, beta, fNonIsolatedMuons, fNonIsolatedElectrons);
180 ceballos 1.76 if (totalIso < (ele->Pt()*fCombIsolationCut) )
181     isocut = kTRUE;
182     }
183     break;
184     case ElectronTools::kPFIsoNoL:
185     {
186     Double_t beta = IsolationTools::BetaE(tracks, ele, vertex, 0.0, 0.2, 0.3, 0.02);
187 ceballos 1.79 if(beta == 0) beta = 1.0;
188 ceballos 1.78 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.2, 0.5, 0.3, 0.02, 3, beta, fNonIsolatedMuons, fNonIsolatedElectrons);
189 ceballos 1.74 if (totalIso < (ele->Pt()*fCombIsolationCut) )
190 sixie 1.42 isocut = kTRUE;
191     }
192     break;
193 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Iso:
194 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint95Iso, fApplyCombinedIso);
195 sixie 1.56 break;
196     case ElectronTools::kVBTFWorkingPoint90Iso:
197 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint90Iso, fApplyCombinedIso);
198 sixie 1.51 break;
199 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Iso:
200 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint85Iso, fApplyCombinedIso);
201 ceballos 1.60 break;
202 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Iso:
203 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint80Iso, fApplyCombinedIso);
204 sixie 1.51 break;
205 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Iso:
206 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint70Iso, fApplyCombinedIso);
207 sixie 1.51 break;
208 sixie 1.56 case ElectronTools::kNoIso:
209 sixie 1.42 isocut = kTRUE;
210     break;
211 sixie 1.56 case ElectronTools::kCustomIso:
212 sixie 1.42 default:
213     break;
214     }
215    
216     return isocut;
217     }
218    
219    
220     //--------------------------------------------------------------------------------------------------
221 loizides 1.1 void ElectronIDMod::Process()
222     {
223     // Process entries of the tree.
224    
225 ceballos 1.76 if(fElIsoType != ElectronTools::kPFIsoNoL) {
226     LoadEventObject(fElectronBranchName, fElectrons);
227     }
228     else {
229     fElectrons = GetObjThisEvt<ElectronOArr>(fElectronBranchName);
230 ceballos 1.78 fNonIsolatedMuons = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
231     fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
232 ceballos 1.76 }
233 bendavid 1.75 LoadEventObject(fBeamSpotName, fBeamSpot);
234 ceballos 1.76 LoadEventObject(fTrackName, fTracks);
235     LoadEventObject(fPFCandidatesName, fPFCandidates);
236    
237     fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
238 loizides 1.1
239 bendavid 1.62 //get trigger object collection if trigger matching is enabled
240     const TriggerObjectCol *trigObjs = 0;
241     if (fApplyTriggerMatching) {
242     trigObjs = GetHLTObjects(fTrigObjectsName);
243     }
244    
245 loizides 1.6 ElectronOArr *GoodElectrons = new ElectronOArr;
246     GoodElectrons->SetName(fGoodElectronsName);
247 loizides 1.1
248 ceballos 1.18 for (UInt_t i=0; i<fElectrons->GetEntries(); ++i) {
249 loizides 1.5 const Electron *e = fElectrons->At(i);
250 loizides 1.1
251 ceballos 1.66 if (e->SCluster() == 0)
252     continue;
253    
254 ceballos 1.65 if (e->Pt() < fElectronPtMin)
255 loizides 1.5 continue;
256 loizides 1.1
257 dkralph 1.73 if (e->SCluster()->Et() < fElectronEtMin)
258 bendavid 1.67 continue;
259    
260 ceballos 1.65 if (e->AbsEta() > fElectronEtaMax)
261 ceballos 1.64 continue;
262    
263 bendavid 1.67 if (fApplyEcalFiducial && ( (e->SCluster()->AbsEta()>1.4442 && e->SCluster()->AbsEta()<1.5666) || e->SCluster()->AbsEta()>2.5 )) {
264     continue;
265     }
266    
267     if (fApplyEcalSeeded && !e->IsEcalDriven()) {
268     continue;
269     }
270    
271 bendavid 1.62 //apply trigger matching
272     Bool_t matchTrigger = fApplyTriggerMatching && ElectronTools::PassTriggerMatching(e,trigObjs);
273     if (fApplyTriggerMatching && !matchTrigger)
274     continue;
275    
276 sixie 1.55 //apply ECAL spike removal
277 sixie 1.56 Bool_t spikecut = ElectronTools::PassSpikeRemovalFilter(e);
278 sixie 1.57 if (fApplySpikeRemoval && !spikecut)
279 sixie 1.55 continue;
280    
281 sixie 1.42 //apply id cut
282     Bool_t idcut = PassIDCut(e, fElIdType);
283 loizides 1.5 if (!idcut)
284     continue;
285    
286 sixie 1.42 //apply Isolation Cut
287 ceballos 1.76 Bool_t isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(0));
288 sixie 1.42 if (!isocut)
289 loizides 1.5 continue;
290    
291 ceballos 1.60 // apply conversion filters
292     Bool_t passConvVetoType1 = kFALSE;
293     if (fApplyConvFilterType1) {
294 sixie 1.42 LoadEventObject(fConversionBranchName, fConversions);
295 ceballos 1.60 passConvVetoType1 = ElectronTools::PassConversionFilter(e, fConversions,
296 bendavid 1.75 fBeamSpot->At(0), fNWrongHitsMax);
297 ceballos 1.12 }
298 ceballos 1.60 else {
299     passConvVetoType1 = kTRUE;
300     }
301    
302     if (passConvVetoType1 == kFALSE) continue;
303    
304     Bool_t passConvVetoType2 = kFALSE;
305     if (fApplyConvFilterType2) {
306     passConvVetoType2 = TMath::Abs(e->ConvPartnerDCotTheta()) >= 0.02 ||
307     TMath::Abs(e->ConvPartnerDist()) >= 0.02;
308     }
309     else {
310     passConvVetoType2 = kTRUE;
311     }
312 sixie 1.42
313 ceballos 1.60 if (passConvVetoType2 == kFALSE) continue;
314 ceballos 1.72
315 ceballos 1.60 // apply NExpectedHitsInner Cut
316     if(fNExpectedHitsInnerCut < 999 &&
317 ceballos 1.69 e->CorrectedNExpectedHitsInner() > fNExpectedHitsInnerCut) continue;
318 ceballos 1.60
319 sixie 1.42 // apply d0 cut
320 ceballos 1.15 if (fApplyD0Cut) {
321 ceballos 1.74 Bool_t passD0cut = ElectronTools::PassD0Cut(e, fVertices, fD0Cut);
322 sixie 1.42 if (!passD0cut)
323 ceballos 1.24 continue;
324 ceballos 1.12 }
325    
326 ceballos 1.59 // apply charge filter
327 sixie 1.42 if(fChargeFilter == kTRUE) {
328 sixie 1.56 Bool_t passChargeFilter = ElectronTools::PassChargeFilter(e);
329 sixie 1.42 if (!passChargeFilter) continue;
330 ceballos 1.45 }
331    
332 ceballos 1.63 // apply full combined id, using Tight cuts
333 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
334 ceballos 1.68 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
335 ceballos 1.59 LoadEventObject(fConversionBranchName, fConversions);
336 ceballos 1.63 Int_t result = ElectronTools::PassTightId(e, *&fVertices, fConversions, 2);
337 ceballos 1.59 if(result != 15) continue;
338     }
339    
340 loizides 1.5 // add good electron
341 ceballos 1.12 GoodElectrons->Add(e);
342 loizides 1.5 }
343 loizides 1.1
344 loizides 1.9 // sort according to pt
345     GoodElectrons->Sort();
346    
347 loizides 1.5 // add to event for other modules to use
348 loizides 1.6 AddObjThisEvt(GoodElectrons);
349 loizides 1.1 }
350    
351     //--------------------------------------------------------------------------------------------------
352     void ElectronIDMod::SlaveBegin()
353     {
354     // Run startup code on the computer (slave) doing the actual analysis. Here,
355 loizides 1.5 // we just request the electron collection branch.
356 loizides 1.1
357 ceballos 1.76 // In this case we cannot have a branch
358     if (fElectronIsoType.CompareTo("PFIsoNoL") != 0 ) {
359     ReqEventObject(fElectronBranchName, fElectrons,fElectronsFromBranch);
360     }
361     ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
362     ReqEventObject(fTrackName, fTracks, kTRUE);
363     ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
364 loizides 1.17
365 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
366 ceballos 1.60 fElectronIDType = "NoId";
367     fElectronIsoType = "NoIso";
368     fApplyConvFilterType1 = kFALSE;
369     fApplyConvFilterType2 = kFALSE;
370     fApplyD0Cut = kFALSE;
371 ceballos 1.59 }
372    
373 ceballos 1.60 if (fApplyConvFilterType1 || fCombinedIdCut == kTRUE)
374 loizides 1.23 ReqEventObject(fConversionBranchName, fConversions, kTRUE);
375 loizides 1.17
376 sixie 1.42 Setup();
377     }
378    
379     //--------------------------------------------------------------------------------------------------
380     void ElectronIDMod::Setup()
381     {
382     // Set all options properly before execution.
383    
384 loizides 1.5 if (fElectronIDType.CompareTo("Tight") == 0)
385 sixie 1.56 fElIdType = ElectronTools::kTight;
386 loizides 1.5 else if (fElectronIDType.CompareTo("Loose") == 0)
387 sixie 1.56 fElIdType = ElectronTools::kLoose;
388 loizides 1.5 else if (fElectronIDType.CompareTo("Likelihood") == 0)
389 sixie 1.56 fElIdType = ElectronTools::kLikelihood;
390 loizides 1.10 else if (fElectronIDType.CompareTo("NoId") == 0)
391 sixie 1.56 fElIdType = ElectronTools::kNoId;
392 sixie 1.42 else if (fElectronIDType.CompareTo("ZeeId") == 0)
393 sixie 1.56 fElIdType = ElectronTools::kZeeId;
394 sixie 1.51 else if (fElectronIDType.CompareTo("CustomLoose") == 0)
395 sixie 1.56 fElIdType = ElectronTools::kCustomIdLoose;
396 sixie 1.51 else if (fElectronIDType.CompareTo("CustomTight") == 0)
397 sixie 1.56 fElIdType = ElectronTools::kCustomIdTight;
398 sixie 1.55 else if (fElectronIDType.CompareTo("VBTFWorkingPoint95Id") == 0)
399 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint95Id;
400 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint90Id") == 0)
401 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint90Id;
402 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint80Id") == 0)
403 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint80Id;
404 ceballos 1.60 else if (fElectronIDType.CompareTo("VBTFWorkingPoint85Id") == 0)
405     fElIdType = ElectronTools::kVBTFWorkingPoint85Id;
406 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint70Id") == 0)
407 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint70Id;
408 sixie 1.51
409 peveraer 1.29 else {
410 loizides 1.5 SendError(kAbortAnalysis, "SlaveBegin",
411     "The specified electron identification %s is not defined.",
412     fElectronIDType.Data());
413     return;
414     }
415 sixie 1.51
416 loizides 1.5 if (fElectronIsoType.CompareTo("TrackCalo") == 0 )
417 sixie 1.56 fElIsoType = ElectronTools::kTrackCalo;
418 loizides 1.5 else if (fElectronIsoType.CompareTo("TrackJura") == 0)
419 sixie 1.56 fElIsoType = ElectronTools::kTrackJura;
420 ceballos 1.49 else if(fElectronIsoType.CompareTo("TrackJuraCombined") == 0)
421 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraCombined;
422 loizides 1.5 else if(fElectronIsoType.CompareTo("TrackJuraSliding") == 0)
423 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraSliding;
424 ceballos 1.79 else if(fElectronIsoType.CompareTo("TrackJuraSlidingNoBeta") == 0)
425     fElIsoType = ElectronTools::kTrackJuraSlidingNoBeta;
426 ceballos 1.76 else if (fElectronIsoType.CompareTo("PFIso") == 0 )
427     fElIsoType = ElectronTools::kPFIso;
428     else if (fElectronIsoType.CompareTo("PFIsoNoL") == 0 )
429     fElIsoType = ElectronTools::kPFIsoNoL;
430 loizides 1.5 else if (fElectronIsoType.CompareTo("NoIso") == 0 )
431 sixie 1.56 fElIsoType = ElectronTools::kNoIso;
432 sixie 1.42 else if (fElectronIsoType.CompareTo("ZeeIso") == 0 )
433 sixie 1.56 fElIsoType = ElectronTools::kZeeIso;
434 sixie 1.55 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint95Iso") == 0 )
435 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint95Iso;
436 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint90Iso") == 0 )
437 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint90Iso;
438 ceballos 1.60 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint85Iso") == 0 )
439     fElIsoType = ElectronTools::kVBTFWorkingPoint85Iso;
440 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint80Iso") == 0 )
441 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint80Iso;
442 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint70Iso") == 0 )
443 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint70Iso;
444 loizides 1.5 else if (fElectronIsoType.CompareTo("Custom") == 0 ) {
445 sixie 1.56 fElIsoType = ElectronTools::kCustomIso;
446 loizides 1.5 SendError(kWarning, "SlaveBegin",
447     "Custom electron isolation is not yet implemented.");
448     } else {
449     SendError(kAbortAnalysis, "SlaveBegin",
450     "The specified electron isolation %s is not defined.",
451     fElectronIsoType.Data());
452     return;
453     }
454 sixie 1.42
455 loizides 1.30
456     }
457 ceballos 1.77
458     //--------------------------------------------------------------------------------------------------
459     void ElectronIDMod::Terminate()
460     {
461     // Run finishing code on the computer (slave) that did the analysis
462     }