ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.95
Committed: Fri Jun 10 10:42:29 2011 UTC (13 years, 10 months ago) by ceballos
Content type: text/plain
Branch: MAIN
Changes since 1.94: +34 -4 lines
Log Message:
fixes in the electron id

File Contents

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