ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.88
Committed: Thu May 12 23:15:48 2011 UTC (13 years, 11 months ago) by ceballos
Content type: text/plain
Branch: MAIN
Changes since 1.87: +13 -10 lines
Log Message:
small updates

File Contents

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