ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.84
Committed: Tue Apr 5 06:37:07 2011 UTC (14 years, 1 month ago) by ceballos
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_020d, TMit_020d, Mit_020c, Mit_021pre1, Mit_020b
Changes since 1.83: +1 -6 lines
Log Message:
new

File Contents

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