ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.94
Committed: Wed Jun 8 14:27:21 2011 UTC (13 years, 11 months ago) by sixie
Content type: text/plain
Branch: MAIN
Changes since 1.93: +1 -3 lines
Log Message:
remove a print statement

File Contents

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