ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.93
Committed: Wed Jun 8 06:14:56 2011 UTC (13 years, 11 months ago) by sixie
Content type: text/plain
Branch: MAIN
Changes since 1.92: +8 -4 lines
Log Message:
*** empty log message ***

File Contents

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