ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.76
Committed: Mon Feb 21 13:50:20 2011 UTC (14 years, 2 months ago) by ceballos
Content type: text/plain
Branch: MAIN
Changes since 1.75: +58 -15 lines
Log Message:
new beta

File Contents

# User Rev Content
1 ceballos 1.76 // $Id: ElectronIDMod.cc,v 1.75 2011/02/17 13:44:55 bendavid 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.76 fOldMuonsName("random"),
23     fOldElectronsName("random"),
24 ceballos 1.68 fVertexName(ModNames::gkGoodVertexesName),
25 bendavid 1.75 fBeamSpotName(Names::gkBeamSpotBrn),
26 ceballos 1.76 fTrackName(Names::gkTrackBrn),
27     fPFCandidatesName(Names::gkPFCandidatesBrn),
28 ceballos 1.31 fElectronIDType("CustomTight"),
29 ceballos 1.8 fElectronIsoType("TrackJuraSliding"),
30 bendavid 1.62 fTrigObjectsName("HLTModTrigObjs"),
31 loizides 1.1 fElectronPtMin(10),
32 bendavid 1.67 fElectronEtMin(0.0),
33 ceballos 1.64 fElectronEtaMax(2.5),
34 ceballos 1.70 fIDLikelihoodCut(0.75),
35 loizides 1.1 fTrackIsolationCut(5.0),
36     fCaloIsolationCut(5.0),
37 loizides 1.5 fEcalJuraIsoCut(5.0),
38     fHcalIsolationCut(5.0),
39 ceballos 1.74 fCombIsolationCut(0.10),
40 ceballos 1.60 fApplyConvFilterType1(kTRUE),
41     fApplyConvFilterType2(kFALSE),
42 bendavid 1.75 fNWrongHitsMax(1),
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.45 fChargeFilter(kTRUE),
48 ceballos 1.60 fD0Cut(0.020),
49 bendavid 1.62 fApplyTriggerMatching(kFALSE),
50 bendavid 1.67 fApplyEcalSeeded(kFALSE),
51     fApplyCombinedIso(kTRUE),
52     fApplyEcalFiducial(kFALSE),
53 ceballos 1.76 fElectronsFromBranch(kTRUE),
54 sixie 1.56 fElIdType(ElectronTools::kIdUndef),
55     fElIsoType(ElectronTools::kIsoUndef),
56 loizides 1.14 fElectrons(0),
57     fConversions(0),
58 bendavid 1.75 fVertices(0),
59 ceballos 1.76 fBeamSpot(0),
60     fTracks(0),
61     fPFCandidates(0),
62     fOldMuons(0),
63     fOldElectrons(0)
64 loizides 1.1 {
65     // Constructor.
66     }
67    
68     //--------------------------------------------------------------------------------------------------
69 sixie 1.56 Bool_t ElectronIDMod::PassIDCut(const Electron *ele, ElectronTools::EElIdType idType) const
70 sixie 1.42 {
71    
72     Bool_t idcut = kFALSE;
73     switch (idType) {
74 sixie 1.56 case ElectronTools::kTight:
75 sixie 1.42 idcut = ele->PassTightID();
76     break;
77 sixie 1.56 case ElectronTools::kLoose:
78 sixie 1.42 idcut = ele->PassLooseID();
79     break;
80 sixie 1.56 case ElectronTools::kLikelihood:
81 ceballos 1.70 idcut = (ele->Pt() > 15 && ele->IDLikelihood() > fIDLikelihoodCut) ||
82     (ele->Pt() <= 15 && ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint80Id));
83 sixie 1.42 break;
84 sixie 1.56 case ElectronTools::kNoId:
85 sixie 1.42 idcut = kTRUE;
86     break;
87 sixie 1.56 case ElectronTools::kCustomIdLoose:
88     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdLoose);
89 sixie 1.42 break;
90 sixie 1.56 case ElectronTools::kCustomIdTight:
91     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdTight);
92 sixie 1.42 break;
93 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Id:
94     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint95Id);
95 ceballos 1.54 break;
96 sixie 1.56 case ElectronTools::kVBTFWorkingPoint90Id:
97     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint90Id);
98 ceballos 1.54 break;
99 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Id:
100     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint85Id);
101     break;
102 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Id:
103     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint80Id);
104     break;
105     case ElectronTools::kVBTFWorkingPoint70Id:
106     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint70Id);
107 ceballos 1.54 break;
108 sixie 1.42 default:
109     break;
110     }
111    
112     return idcut;
113     }
114    
115    
116     //--------------------------------------------------------------------------------------------------
117 ceballos 1.76 Bool_t ElectronIDMod::PassIsolationCut(const Electron *ele, ElectronTools::EElIsoType isoType,
118     const TrackCol *tracks, const Vertex *vertex) const
119 sixie 1.42 {
120    
121     Bool_t isocut = kFALSE;
122     switch (isoType) {
123 sixie 1.56 case ElectronTools::kTrackCalo:
124 sixie 1.42 isocut = (ele->TrackIsolationDr03() < fTrackIsolationCut) &&
125     (ele->CaloIsolation() < fCaloIsolationCut);
126     break;
127 sixie 1.56 case ElectronTools::kTrackJura:
128 sixie 1.42 isocut = (ele->TrackIsolationDr03() < fTrackIsolationCut) &&
129 ceballos 1.60 (ele->EcalRecHitIsoDr03() < fEcalJuraIsoCut) &&
130     (ele->HcalTowerSumEtDr03() < fHcalIsolationCut);
131 sixie 1.42 break;
132 sixie 1.56 case ElectronTools::kTrackJuraCombined:
133 ceballos 1.60 isocut = (ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03()
134 ceballos 1.49 - 1.5 < fCombIsolationCut);
135     break;
136 sixie 1.56 case ElectronTools::kTrackJuraSliding:
137 sixie 1.42 {
138 ceballos 1.76 Double_t beta = IsolationTools::BetaE(tracks, ele, vertex, 0.0, 0.2, 0.3, 0.02);
139     Double_t totalIso = ele->TrackIsolationDr03() + (ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03())*beta;
140     if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + (TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03())*beta;
141     if (totalIso < (ele->Pt()*fCombIsolationCut) )
142     isocut = kTRUE;
143     }
144     break;
145     case ElectronTools::kPFIso:
146     {
147     Double_t beta = IsolationTools::BetaE(tracks, ele, vertex, 0.0, 0.2, 0.3, 0.02);
148     Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.2, 0.5, 0.3, 0.02, 0, beta, fOldMuons, fOldElectrons);
149     if (totalIso < (ele->Pt()*fCombIsolationCut) )
150     isocut = kTRUE;
151     }
152     break;
153     case ElectronTools::kPFIsoNoL:
154     {
155     Double_t beta = IsolationTools::BetaE(tracks, ele, vertex, 0.0, 0.2, 0.3, 0.02);
156     Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.2, 0.5, 0.3, 0.02, 3, beta, fOldMuons, fOldElectrons);
157 ceballos 1.74 if (totalIso < (ele->Pt()*fCombIsolationCut) )
158 sixie 1.42 isocut = kTRUE;
159     }
160     break;
161 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Iso:
162 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint95Iso, fApplyCombinedIso);
163 sixie 1.56 break;
164     case ElectronTools::kVBTFWorkingPoint90Iso:
165 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint90Iso, fApplyCombinedIso);
166 sixie 1.51 break;
167 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Iso:
168 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint85Iso, fApplyCombinedIso);
169 ceballos 1.60 break;
170 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Iso:
171 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint80Iso, fApplyCombinedIso);
172 sixie 1.51 break;
173 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Iso:
174 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint70Iso, fApplyCombinedIso);
175 sixie 1.51 break;
176 sixie 1.56 case ElectronTools::kNoIso:
177 sixie 1.42 isocut = kTRUE;
178     break;
179 sixie 1.56 case ElectronTools::kCustomIso:
180 sixie 1.42 default:
181     break;
182     }
183    
184     return isocut;
185     }
186    
187    
188     //--------------------------------------------------------------------------------------------------
189 loizides 1.1 void ElectronIDMod::Process()
190     {
191     // Process entries of the tree.
192    
193 ceballos 1.76 if(fElIsoType != ElectronTools::kPFIsoNoL) {
194     LoadEventObject(fElectronBranchName, fElectrons);
195     }
196     else {
197     fElectrons = GetObjThisEvt<ElectronOArr>(fElectronBranchName);
198     fOldMuons = GetObjThisEvt<MuonCol>(fOldMuonsName);
199     fOldElectrons = GetObjThisEvt<ElectronCol>(fOldElectronsName);
200     }
201 bendavid 1.75 LoadEventObject(fBeamSpotName, fBeamSpot);
202 ceballos 1.76 LoadEventObject(fTrackName, fTracks);
203     LoadEventObject(fPFCandidatesName, fPFCandidates);
204    
205     fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
206 loizides 1.1
207 bendavid 1.62 //get trigger object collection if trigger matching is enabled
208     const TriggerObjectCol *trigObjs = 0;
209     if (fApplyTriggerMatching) {
210     trigObjs = GetHLTObjects(fTrigObjectsName);
211     }
212    
213 loizides 1.6 ElectronOArr *GoodElectrons = new ElectronOArr;
214     GoodElectrons->SetName(fGoodElectronsName);
215 loizides 1.1
216 ceballos 1.18 for (UInt_t i=0; i<fElectrons->GetEntries(); ++i) {
217 loizides 1.5 const Electron *e = fElectrons->At(i);
218 loizides 1.1
219 ceballos 1.66 if (e->SCluster() == 0)
220     continue;
221    
222 ceballos 1.65 if (e->Pt() < fElectronPtMin)
223 loizides 1.5 continue;
224 loizides 1.1
225 dkralph 1.73 if (e->SCluster()->Et() < fElectronEtMin)
226 bendavid 1.67 continue;
227    
228 ceballos 1.65 if (e->AbsEta() > fElectronEtaMax)
229 ceballos 1.64 continue;
230    
231 bendavid 1.67 if (fApplyEcalFiducial && ( (e->SCluster()->AbsEta()>1.4442 && e->SCluster()->AbsEta()<1.5666) || e->SCluster()->AbsEta()>2.5 )) {
232     continue;
233     }
234    
235     if (fApplyEcalSeeded && !e->IsEcalDriven()) {
236     continue;
237     }
238    
239 bendavid 1.62 //apply trigger matching
240     Bool_t matchTrigger = fApplyTriggerMatching && ElectronTools::PassTriggerMatching(e,trigObjs);
241     if (fApplyTriggerMatching && !matchTrigger)
242     continue;
243    
244 sixie 1.55 //apply ECAL spike removal
245 sixie 1.56 Bool_t spikecut = ElectronTools::PassSpikeRemovalFilter(e);
246 sixie 1.57 if (fApplySpikeRemoval && !spikecut)
247 sixie 1.55 continue;
248    
249 sixie 1.42 //apply id cut
250     Bool_t idcut = PassIDCut(e, fElIdType);
251 loizides 1.5 if (!idcut)
252     continue;
253    
254 sixie 1.42 //apply Isolation Cut
255 ceballos 1.76 Bool_t isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(0));
256 sixie 1.42 if (!isocut)
257 loizides 1.5 continue;
258    
259 ceballos 1.60 // apply conversion filters
260     Bool_t passConvVetoType1 = kFALSE;
261     if (fApplyConvFilterType1) {
262 sixie 1.42 LoadEventObject(fConversionBranchName, fConversions);
263 ceballos 1.60 passConvVetoType1 = ElectronTools::PassConversionFilter(e, fConversions,
264 bendavid 1.75 fBeamSpot->At(0), fNWrongHitsMax);
265 ceballos 1.12 }
266 ceballos 1.60 else {
267     passConvVetoType1 = kTRUE;
268     }
269    
270     if (passConvVetoType1 == kFALSE) continue;
271    
272     Bool_t passConvVetoType2 = kFALSE;
273     if (fApplyConvFilterType2) {
274     passConvVetoType2 = TMath::Abs(e->ConvPartnerDCotTheta()) >= 0.02 ||
275     TMath::Abs(e->ConvPartnerDist()) >= 0.02;
276     }
277     else {
278     passConvVetoType2 = kTRUE;
279     }
280 sixie 1.42
281 ceballos 1.60 if (passConvVetoType2 == kFALSE) continue;
282 ceballos 1.72
283 ceballos 1.60 // apply NExpectedHitsInner Cut
284     if(fNExpectedHitsInnerCut < 999 &&
285 ceballos 1.69 e->CorrectedNExpectedHitsInner() > fNExpectedHitsInnerCut) continue;
286 ceballos 1.60
287 sixie 1.42 // apply d0 cut
288 ceballos 1.15 if (fApplyD0Cut) {
289 ceballos 1.74 Bool_t passD0cut = ElectronTools::PassD0Cut(e, fVertices, fD0Cut);
290 sixie 1.42 if (!passD0cut)
291 ceballos 1.24 continue;
292 ceballos 1.12 }
293    
294 ceballos 1.59 // apply charge filter
295 sixie 1.42 if(fChargeFilter == kTRUE) {
296 sixie 1.56 Bool_t passChargeFilter = ElectronTools::PassChargeFilter(e);
297 sixie 1.42 if (!passChargeFilter) continue;
298 ceballos 1.45 }
299    
300 ceballos 1.63 // apply full combined id, using Tight cuts
301 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
302 ceballos 1.68 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
303 ceballos 1.59 LoadEventObject(fConversionBranchName, fConversions);
304 ceballos 1.63 Int_t result = ElectronTools::PassTightId(e, *&fVertices, fConversions, 2);
305 ceballos 1.59 if(result != 15) continue;
306     }
307    
308 loizides 1.5 // add good electron
309 ceballos 1.12 GoodElectrons->Add(e);
310 loizides 1.5 }
311 loizides 1.1
312 loizides 1.9 // sort according to pt
313     GoodElectrons->Sort();
314    
315 loizides 1.5 // add to event for other modules to use
316 loizides 1.6 AddObjThisEvt(GoodElectrons);
317 loizides 1.1 }
318    
319     //--------------------------------------------------------------------------------------------------
320     void ElectronIDMod::SlaveBegin()
321     {
322     // Run startup code on the computer (slave) doing the actual analysis. Here,
323 loizides 1.5 // we just request the electron collection branch.
324 loizides 1.1
325 ceballos 1.76 // In this case we cannot have a branch
326     if (fElectronIsoType.CompareTo("PFIsoNoL") != 0 ) {
327     ReqEventObject(fElectronBranchName, fElectrons,fElectronsFromBranch);
328     }
329     ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
330     ReqEventObject(fTrackName, fTracks, kTRUE);
331     ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
332 loizides 1.17
333 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
334 ceballos 1.60 fElectronIDType = "NoId";
335     fElectronIsoType = "NoIso";
336     fApplyConvFilterType1 = kFALSE;
337     fApplyConvFilterType2 = kFALSE;
338     fApplyD0Cut = kFALSE;
339 ceballos 1.59 }
340    
341 ceballos 1.60 if (fApplyConvFilterType1 || fCombinedIdCut == kTRUE)
342 loizides 1.23 ReqEventObject(fConversionBranchName, fConversions, kTRUE);
343 loizides 1.17
344 sixie 1.42 Setup();
345     }
346    
347     //--------------------------------------------------------------------------------------------------
348     void ElectronIDMod::Setup()
349     {
350     // Set all options properly before execution.
351    
352 loizides 1.5 if (fElectronIDType.CompareTo("Tight") == 0)
353 sixie 1.56 fElIdType = ElectronTools::kTight;
354 loizides 1.5 else if (fElectronIDType.CompareTo("Loose") == 0)
355 sixie 1.56 fElIdType = ElectronTools::kLoose;
356 loizides 1.5 else if (fElectronIDType.CompareTo("Likelihood") == 0)
357 sixie 1.56 fElIdType = ElectronTools::kLikelihood;
358 loizides 1.10 else if (fElectronIDType.CompareTo("NoId") == 0)
359 sixie 1.56 fElIdType = ElectronTools::kNoId;
360 sixie 1.42 else if (fElectronIDType.CompareTo("ZeeId") == 0)
361 sixie 1.56 fElIdType = ElectronTools::kZeeId;
362 sixie 1.51 else if (fElectronIDType.CompareTo("CustomLoose") == 0)
363 sixie 1.56 fElIdType = ElectronTools::kCustomIdLoose;
364 sixie 1.51 else if (fElectronIDType.CompareTo("CustomTight") == 0)
365 sixie 1.56 fElIdType = ElectronTools::kCustomIdTight;
366 sixie 1.55 else if (fElectronIDType.CompareTo("VBTFWorkingPoint95Id") == 0)
367 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint95Id;
368 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint90Id") == 0)
369 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint90Id;
370 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint80Id") == 0)
371 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint80Id;
372 ceballos 1.60 else if (fElectronIDType.CompareTo("VBTFWorkingPoint85Id") == 0)
373     fElIdType = ElectronTools::kVBTFWorkingPoint85Id;
374 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint70Id") == 0)
375 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint70Id;
376 sixie 1.51
377 peveraer 1.29 else {
378 loizides 1.5 SendError(kAbortAnalysis, "SlaveBegin",
379     "The specified electron identification %s is not defined.",
380     fElectronIDType.Data());
381     return;
382     }
383 sixie 1.51
384 loizides 1.5 if (fElectronIsoType.CompareTo("TrackCalo") == 0 )
385 sixie 1.56 fElIsoType = ElectronTools::kTrackCalo;
386 loizides 1.5 else if (fElectronIsoType.CompareTo("TrackJura") == 0)
387 sixie 1.56 fElIsoType = ElectronTools::kTrackJura;
388 ceballos 1.49 else if(fElectronIsoType.CompareTo("TrackJuraCombined") == 0)
389 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraCombined;
390 loizides 1.5 else if(fElectronIsoType.CompareTo("TrackJuraSliding") == 0)
391 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraSliding;
392 ceballos 1.76 else if (fElectronIsoType.CompareTo("PFIso") == 0 )
393     fElIsoType = ElectronTools::kPFIso;
394     else if (fElectronIsoType.CompareTo("PFIsoNoL") == 0 )
395     fElIsoType = ElectronTools::kPFIsoNoL;
396 loizides 1.5 else if (fElectronIsoType.CompareTo("NoIso") == 0 )
397 sixie 1.56 fElIsoType = ElectronTools::kNoIso;
398 sixie 1.42 else if (fElectronIsoType.CompareTo("ZeeIso") == 0 )
399 sixie 1.56 fElIsoType = ElectronTools::kZeeIso;
400 sixie 1.55 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint95Iso") == 0 )
401 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint95Iso;
402 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint90Iso") == 0 )
403 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint90Iso;
404 ceballos 1.60 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint85Iso") == 0 )
405     fElIsoType = ElectronTools::kVBTFWorkingPoint85Iso;
406 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint80Iso") == 0 )
407 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint80Iso;
408 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint70Iso") == 0 )
409 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint70Iso;
410 loizides 1.5 else if (fElectronIsoType.CompareTo("Custom") == 0 ) {
411 sixie 1.56 fElIsoType = ElectronTools::kCustomIso;
412 loizides 1.5 SendError(kWarning, "SlaveBegin",
413     "Custom electron isolation is not yet implemented.");
414     } else {
415     SendError(kAbortAnalysis, "SlaveBegin",
416     "The specified electron isolation %s is not defined.",
417     fElectronIsoType.Data());
418     return;
419     }
420 sixie 1.42
421 loizides 1.30
422     }