ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/ElectronIDMod.cc
Revision: 1.125
Committed: Mon May 21 08:01:39 2012 UTC (12 years, 11 months ago) by ceballos
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_028a
Changes since 1.124: +16 -20 lines
Log Message:
new fo

File Contents

# User Rev Content
1 ceballos 1.125 // $Id: ElectronIDMod.cc,v 1.124 2012/05/19 14:59:14 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 ceballos 1.118 #include "MitAna/DataTree/interface/PFCandidateCol.h"
11 loizides 1.5 #include "MitPhysics/Init/interface/ModNames.h"
12 sixie 1.102 #include "TMVA/Tools.h"
13     #include "TMVA/Reader.h"
14 loizides 1.1
15     using namespace mithep;
16    
17     ClassImp(mithep::ElectronIDMod)
18    
19     //--------------------------------------------------------------------------------------------------
20 loizides 1.5 ElectronIDMod::ElectronIDMod(const char *name, const char *title) :
21 loizides 1.1 BaseMod(name,title),
22 sixie 1.112 fPrintMVADebugInfo(kFALSE),
23 loizides 1.5 fElectronBranchName(Names::gkElectronBrn),
24 ceballos 1.12 fConversionBranchName(Names::gkMvfConversionBrn),
25 loizides 1.5 fGoodElectronsName(ModNames::gkGoodElectronsName),
26 ceballos 1.78 fNonIsolatedMuonsName("random"),
27     fNonIsolatedElectronsName("random"),
28 ceballos 1.68 fVertexName(ModNames::gkGoodVertexesName),
29 bendavid 1.75 fBeamSpotName(Names::gkBeamSpotBrn),
30 ceballos 1.76 fTrackName(Names::gkTrackBrn),
31     fPFCandidatesName(Names::gkPFCandidatesBrn),
32 ceballos 1.31 fElectronIDType("CustomTight"),
33 sixie 1.87 fElectronIsoType("PFIso"),
34 bendavid 1.62 fTrigObjectsName("HLTModTrigObjs"),
35 loizides 1.1 fElectronPtMin(10),
36 bendavid 1.67 fElectronEtMin(0.0),
37 ceballos 1.64 fElectronEtaMax(2.5),
38 ceballos 1.95 fIDLikelihoodCut(-999.0),
39 loizides 1.1 fTrackIsolationCut(5.0),
40     fCaloIsolationCut(5.0),
41 loizides 1.5 fEcalJuraIsoCut(5.0),
42     fHcalIsolationCut(5.0),
43 fabstoec 1.97 fCombIsolationCut(0.1),
44 sixie 1.99 fCombRelativeIsolationCut(0.10),
45 fabstoec 1.115 fCombRelativeIsolationCut_EE(0.10),
46 fabstoec 1.97 fPFIsolationCut(-1.0),
47 ceballos 1.60 fApplyConvFilterType1(kTRUE),
48     fApplyConvFilterType2(kFALSE),
49 bendavid 1.82 fNWrongHitsMax(0),
50 ceballos 1.60 fNExpectedHitsInnerCut(999),
51 ceballos 1.98 fInvertNExpectedHitsInnerCut(kFALSE),
52 ceballos 1.59 fCombinedIdCut(kFALSE),
53 sixie 1.58 fApplySpikeRemoval(kTRUE),
54 ceballos 1.18 fApplyD0Cut(kTRUE),
55 ceballos 1.81 fApplyDZCut(kTRUE),
56 ceballos 1.45 fChargeFilter(kTRUE),
57 ceballos 1.60 fD0Cut(0.020),
58 ceballos 1.89 fDZCut(0.10),
59 ceballos 1.81 fWhichVertex(-1),
60 bendavid 1.62 fApplyTriggerMatching(kFALSE),
61 bendavid 1.67 fApplyEcalSeeded(kFALSE),
62     fApplyCombinedIso(kTRUE),
63     fApplyEcalFiducial(kFALSE),
64 ceballos 1.76 fElectronsFromBranch(kTRUE),
65 sixie 1.56 fElIdType(ElectronTools::kIdUndef),
66     fElIsoType(ElectronTools::kIsoUndef),
67 loizides 1.14 fElectrons(0),
68     fConversions(0),
69 bendavid 1.75 fVertices(0),
70 ceballos 1.76 fBeamSpot(0),
71     fTracks(0),
72     fPFCandidates(0),
73 ceballos 1.118 fPFNoPileUpCands(0),
74 ceballos 1.101 fIntRadius(0.0),
75 ceballos 1.78 fNonIsolatedMuons(0),
76     fNonIsolatedElectrons(0),
77 ceballos 1.80 fLH(0),
78     fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn),
79 sixie 1.102 fPileupEnergyDensity(0),
80     fElectronIDMVA(0),
81     fElectronMVAWeights_Subdet0Pt10To20(""),
82     fElectronMVAWeights_Subdet1Pt10To20(""),
83     fElectronMVAWeights_Subdet2Pt10To20(""),
84     fElectronMVAWeights_Subdet0Pt20ToInf(""),
85     fElectronMVAWeights_Subdet1Pt20ToInf(""),
86 fabstoec 1.119 fElectronMVAWeights_Subdet2Pt20ToInf(""),
87 fabstoec 1.120 fTheRhoType(RhoUtilities::DEFAULT)
88 loizides 1.1 {
89     // Constructor.
90     }
91    
92     //--------------------------------------------------------------------------------------------------
93 sixie 1.102 Bool_t ElectronIDMod::PassLikelihoodID(const Electron *ele) const
94 ceballos 1.77 {
95 sixie 1.102
96     Double_t LikelihoodValue = ElectronTools::Likelihood(fLH, ele);
97 ceballos 1.96
98 ceballos 1.95 double likCut = fIDLikelihoodCut;
99     if(likCut > -900){
100     if(ele->Pt() > 20){
101     if(ele->SCluster()->AbsEta() < 1.479){
102 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 3.5;
103     else likCut = 4.0;
104 ceballos 1.95 }
105     else {
106 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
107     else likCut = 4.0;
108 ceballos 1.95 }
109     }
110     else {
111     if(ele->SCluster()->AbsEta() < 1.479){
112 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
113     else likCut = 4.5;
114 ceballos 1.95 }
115     else {
116 ceballos 1.101 if(ele->NumberOfClusters() - 1 == 0) likCut = 4.0;
117     else likCut = 4.0;
118 ceballos 1.95 }
119     }
120     }
121 sixie 1.102 if (LikelihoodValue > likCut) return kTRUE;
122 ceballos 1.77 return kFALSE;
123     }
124    
125     //--------------------------------------------------------------------------------------------------
126 sixie 1.102 Bool_t ElectronIDMod::PassMVAID(const Electron *el, ElectronTools::EElIdType idType,
127 sixie 1.110 const Vertex *vertex, const PFCandidateCol *PFCands,
128     const PileupEnergyDensityCol *PileupEnergyDensity) const
129 ceballos 1.116 {
130 ceballos 1.123 Bool_t isDebug = kFALSE;
131 sixie 1.110 Double_t MVAValue = 0;
132 ceballos 1.116 if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombined) {
133 sixie 1.113 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, fIntRadius);
134 ceballos 1.116 }
135 ceballos 1.117 else if(idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
136 ceballos 1.116 ElectronOArr *tempElectrons = new ElectronOArr;
137     MuonOArr *tempMuons = new MuonOArr;
138 ceballos 1.122 MVAValue = fElectronIDMVA->MVAValue(el, vertex, PFCands, PileupEnergyDensity, ElectronTools::kEleEANoCorr,
139 ceballos 1.123 tempElectrons, tempMuons, isDebug);
140 ceballos 1.116 delete tempElectrons;
141     delete tempMuons;
142     }
143     else {
144 sixie 1.110 MVAValue = fElectronIDMVA->MVAValue(el, vertex);
145     }
146    
147 ceballos 1.118 Double_t eta = el->SCluster()->AbsEta();
148 sixie 1.102 Int_t MVABin = -1;
149 ceballos 1.118 if(idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
150     if (el->Pt() < 20 && eta < 0.800 ) MVABin = 0;
151     if (el->Pt() < 20 && eta >= 0.800 && fabs(eta) < 1.479 ) MVABin = 1;
152     if (el->Pt() < 20 && eta >= 1.479 ) MVABin = 2;
153     if (el->Pt() >= 20 && eta < 0.800 ) MVABin = 3;
154     if (el->Pt() >= 20 && eta >= 0.800 && fabs(eta) < 1.479 ) MVABin = 4;
155     if (el->Pt() >= 20 && eta >= 1.479 ) MVABin = 5;
156     } else {
157     if (el->Pt() < 20 && eta < 1.000 ) MVABin = 0;
158     if (el->Pt() < 20 && eta >= 1.000 && fabs(eta) < 1.479 ) MVABin = 1;
159     if (el->Pt() < 20 && eta >= 1.479 ) MVABin = 2;
160     if (el->Pt() >= 20 && eta < 1.000 ) MVABin = 3;
161     if (el->Pt() >= 20 && eta >= 1.000 && fabs(eta) < 1.479 ) MVABin = 4;
162     if (el->Pt() >= 20 && eta >= 1.479 ) MVABin = 5;
163     }
164     if(MVABin == -1) assert(0);
165 sixie 1.102
166     Double_t MVACut = -9999;
167 sixie 1.110 if (idType == ElectronTools::kMVAID_BDTG_NoIPInfo) {
168 ceballos 1.114 if (MVABin == 0) MVACut = 0.133;
169     else if (MVABin == 1) MVACut = 0.465;
170     else if (MVABin == 2) MVACut = 0.518;
171     else if (MVABin == 3) MVACut = 0.942;
172     else if (MVABin == 4) MVACut = 0.947;
173     else if (MVABin == 5) MVACut = 0.878 ;
174 sixie 1.110 } else if (idType == ElectronTools::kMVAID_BDTG_WithIPInfo) {
175 ceballos 1.114 if (MVABin == 0) MVACut = 0.139;
176     else if (MVABin == 1) MVACut = 0.525;
177     else if (MVABin == 2) MVACut = 0.543;
178     else if (MVABin == 3) MVACut = 0.947;
179     else if (MVABin == 4) MVACut = 0.950;
180     else if (MVABin == 5) MVACut = 0.884;
181 sixie 1.110 } else if (idType == ElectronTools::kMVAID_BDTG_IDIsoCombined) {
182 ceballos 1.114 if (MVABin == 0) MVACut = 0.4202;
183     else if (MVABin == 1) MVACut = 0.6206;
184     else if (MVABin == 2) MVACut = 0.6190;
185     else if (MVABin == 3) MVACut = 0.9590;
186     else if (MVABin == 4) MVACut = 0.9586;
187     else if (MVABin == 5) MVACut = 0.9278;
188 ceballos 1.117 } else if (idType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0) {
189 ceballos 1.121 if (MVABin == 0) MVACut = 0.000;
190     else if (MVABin == 1) MVACut = 0.100;
191     else if (MVABin == 2) MVACut = 0.620;
192     else if (MVABin == 3) MVACut = 0.940;
193     else if (MVABin == 4) MVACut = 0.850;
194     else if (MVABin == 5) MVACut = 0.920;
195 sixie 1.107 }
196    
197 ceballos 1.122 if(isDebug == kTRUE){
198 ceballos 1.123 printf("PassElMVAID(%d): %d, pt, eta = %f, %f, rho = %f(%f) : MVA = %f, bin: %d\n",
199     (MVAValue > MVACut),GetEventHeader()->EvtNum(),el->Pt(), eta,
200 ceballos 1.122 fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets(),MVAValue,MVABin);
201     }
202    
203 sixie 1.102 if (MVAValue > MVACut) return kTRUE;
204     return kFALSE;
205     }
206    
207     //--------------------------------------------------------------------------------------------------
208     Bool_t ElectronIDMod::PassIDCut(const Electron *ele, ElectronTools::EElIdType idType,
209     const Vertex *vertex) const
210 sixie 1.42 {
211    
212     Bool_t idcut = kFALSE;
213     switch (idType) {
214 sixie 1.56 case ElectronTools::kTight:
215 sixie 1.42 idcut = ele->PassTightID();
216     break;
217 sixie 1.56 case ElectronTools::kLoose:
218 sixie 1.42 idcut = ele->PassLooseID();
219     break;
220 sixie 1.56 case ElectronTools::kLikelihood:
221 ceballos 1.101 idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId) &&
222 sixie 1.102 PassLikelihoodID(ele);
223 sixie 1.42 break;
224 sixie 1.56 case ElectronTools::kNoId:
225 sixie 1.42 idcut = kTRUE;
226     break;
227 sixie 1.56 case ElectronTools::kCustomIdLoose:
228     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdLoose);
229 sixie 1.42 break;
230 sixie 1.56 case ElectronTools::kCustomIdTight:
231     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kCustomIdTight);
232 sixie 1.42 break;
233 ceballos 1.86 case ElectronTools::kVBTFWorkingPointFakeableId:
234     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
235     break;
236 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Id:
237     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint95Id);
238 ceballos 1.54 break;
239 sixie 1.56 case ElectronTools::kVBTFWorkingPoint90Id:
240     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint90Id);
241 ceballos 1.54 break;
242 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Id:
243     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint85Id);
244     break;
245 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Id:
246     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint80Id);
247     break;
248 ceballos 1.83 case ElectronTools::kVBTFWorkingPointLowPtId:
249     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointLowPtId);
250 ceballos 1.81 break;
251 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Id:
252     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPoint70Id);
253 ceballos 1.54 break;
254 fabstoec 1.115 case ElectronTools::kHggLeptonTagId:
255     idcut = ElectronTools::PassHggLeptonTagID(ele);
256     break;
257 sixie 1.110 case ElectronTools::kMVAID_BDTG_NoIPInfo:
258 sixie 1.111 {
259     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
260     if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_NoIPInfo,
261     vertex, fPFCandidates, fPileupEnergyDensity);
262     }
263     break;
264 sixie 1.110 case ElectronTools::kMVAID_BDTG_WithIPInfo:
265 sixie 1.111 {
266     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
267     if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_WithIPInfo,
268     vertex, fPFCandidates, fPileupEnergyDensity);
269     }
270     break;
271 sixie 1.110 case ElectronTools::kMVAID_BDTG_IDIsoCombined:
272 sixie 1.111 {
273     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
274     if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDIsoCombined,
275     vertex, fPFCandidates, fPileupEnergyDensity );
276     }
277     break;
278 ceballos 1.117 case ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0:
279 ceballos 1.116 {
280     idcut = ElectronTools::PassCustomID(ele, ElectronTools::kVBTFWorkingPointFakeableId);
281 ceballos 1.117 if (idcut) idcut = PassMVAID(ele, ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0,
282 ceballos 1.116 vertex, fPFCandidates, fPileupEnergyDensity );
283     }
284     break;
285 sixie 1.42 default:
286     break;
287     }
288    
289     return idcut;
290     }
291    
292     //--------------------------------------------------------------------------------------------------
293 ceballos 1.76 Bool_t ElectronIDMod::PassIsolationCut(const Electron *ele, ElectronTools::EElIsoType isoType,
294 ceballos 1.80 const TrackCol *tracks, const Vertex *vertex,
295 ceballos 1.124 const Double_t rho, ElectronTools::EElIdType idType) const
296 sixie 1.42 {
297    
298     Bool_t isocut = kFALSE;
299     switch (isoType) {
300 sixie 1.56 case ElectronTools::kTrackCalo:
301 sixie 1.42 isocut = (ele->TrackIsolationDr03() < fTrackIsolationCut) &&
302     (ele->CaloIsolation() < fCaloIsolationCut);
303     break;
304 sixie 1.56 case ElectronTools::kTrackJura:
305 ceballos 1.85 isocut = (ele->TrackIsolationDr03() < ele->Pt()*fTrackIsolationCut) &&
306     (ele->EcalRecHitIsoDr03() < ele->Pt()*fEcalJuraIsoCut) &&
307     (ele->HcalTowerSumEtDr03() < ele->Pt()*fHcalIsolationCut);
308 sixie 1.42 break;
309 sixie 1.56 case ElectronTools::kTrackJuraCombined:
310 ceballos 1.60 isocut = (ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03()
311 ceballos 1.49 - 1.5 < fCombIsolationCut);
312     break;
313 sixie 1.56 case ElectronTools::kTrackJuraSliding:
314 sixie 1.42 {
315 ceballos 1.80 Double_t totalIso = ele->TrackIsolationDr03() + TMath::Max(ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3, 0.0);
316     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);
317 ceballos 1.79 if (totalIso < (ele->Pt()*fCombIsolationCut) )
318     isocut = kTRUE;
319     }
320     break;
321 ceballos 1.80 case ElectronTools::kTrackJuraSlidingNoCorrection:
322 ceballos 1.79 {
323 ceballos 1.80 Double_t totalIso = ele->TrackIsolationDr03() + (ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03());
324     if(ele->SCluster()->AbsEta() < 1.479) totalIso = ele->TrackIsolationDr03() + (TMath::Max(ele->EcalRecHitIsoDr03() - 1.0, 0.0) + ele->HcalTowerSumEtDr03());
325 ceballos 1.76 if (totalIso < (ele->Pt()*fCombIsolationCut) )
326     isocut = kTRUE;
327     }
328     break;
329 sixie 1.99 case ElectronTools::kCombinedRelativeConeAreaCorrected:
330     {
331     Double_t totalIso = ele->TrackIsolationDr03() + ele->EcalRecHitIsoDr03() + ele->HcalTowerSumEtDr03() - rho * TMath::Pi() * 0.3 * 0.3;
332 fabstoec 1.115 if (ele->SCluster()->AbsEta() < 1.5) { // Barrel
333     if (totalIso < (ele->Pt()*fCombRelativeIsolationCut) )
334     isocut = kTRUE;
335     } else {
336     if (totalIso < (ele->Pt()*fCombRelativeIsolationCut_EE) )
337     isocut = kTRUE;
338     }
339 sixie 1.99 }
340     break;
341 ceballos 1.76 case ElectronTools::kPFIso:
342     {
343 sixie 1.87 Double_t pfIsoCutValue = 9999;
344 fabstoec 1.97 if(fPFIsolationCut > 0){
345     pfIsoCutValue = fPFIsolationCut;
346 ceballos 1.88 } else {
347 ceballos 1.91 if (ele->SCluster()->AbsEta() < 1.479) {
348 ceballos 1.88 if (ele->Pt() > 20) {
349 ceballos 1.92 pfIsoCutValue = 0.13;
350 ceballos 1.88 } else {
351 ceballos 1.92 pfIsoCutValue = 0.13;
352 ceballos 1.88 }
353 sixie 1.87 } else {
354 ceballos 1.91 if (ele->Pt() > 20) {
355     pfIsoCutValue = 0.09;
356     } else {
357     pfIsoCutValue = 0.09;
358     }
359     }
360 sixie 1.87 }
361 ceballos 1.101 Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, vertex, 0.1, 1.0, 0.4, fIntRadius);
362 sixie 1.87 if (totalIso < (ele->Pt()*pfIsoCutValue) )
363 ceballos 1.89 isocut = kTRUE;
364 ceballos 1.76 }
365     break;
366     case ElectronTools::kPFIsoNoL:
367     {
368 ceballos 1.109 Double_t pfIsoCutValue = 9999;
369     if(fPFIsolationCut > 0){
370     pfIsoCutValue = fPFIsolationCut;
371     } else {
372     if (ele->SCluster()->AbsEta() < 1.479) {
373     if (ele->Pt() > 20) {
374     pfIsoCutValue = 0.13;
375     } else {
376     pfIsoCutValue = 0.13;
377     }
378     } else {
379     if (ele->Pt() > 20) {
380     pfIsoCutValue = 0.09;
381     } else {
382     pfIsoCutValue = 0.09;
383     }
384     }
385     }
386     Double_t totalIso = IsolationTools::PFElectronIsolation(ele, fPFCandidates, fNonIsolatedMuons, fNonIsolatedElectrons, vertex, 0.1, 1.0, 0.4, fIntRadius);
387     if (totalIso < (ele->Pt()*pfIsoCutValue) )
388 sixie 1.42 isocut = kTRUE;
389     }
390     break;
391 sixie 1.56 case ElectronTools::kVBTFWorkingPoint95Iso:
392 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint95Iso, fApplyCombinedIso);
393 sixie 1.56 break;
394     case ElectronTools::kVBTFWorkingPoint90Iso:
395 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint90Iso, fApplyCombinedIso);
396 sixie 1.51 break;
397 ceballos 1.60 case ElectronTools::kVBTFWorkingPoint85Iso:
398 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint85Iso, fApplyCombinedIso);
399 ceballos 1.60 break;
400 sixie 1.56 case ElectronTools::kVBTFWorkingPoint80Iso:
401 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint80Iso, fApplyCombinedIso);
402 sixie 1.51 break;
403 sixie 1.56 case ElectronTools::kVBTFWorkingPoint70Iso:
404 bendavid 1.67 isocut = ElectronTools::PassCustomIso(ele, ElectronTools::kVBTFWorkingPoint70Iso, fApplyCombinedIso);
405 sixie 1.51 break;
406 sixie 1.110 case ElectronTools::kMVAIso_BDTG_IDIsoCombined:
407     isocut = (ele->TrackIsolationDr03() < ele->Pt()*0.2) &&
408     (ele->EcalRecHitIsoDr03() < ele->Pt()*0.2) &&
409     (ele->HcalTowerSumEtDr03() < ele->Pt()*0.2);
410     break;
411 ceballos 1.118 case ElectronTools::kPFIso_HWW2012TrigV0:
412     {
413 ceballos 1.122 Bool_t isDebug = kFALSE;
414     if(isDebug == kTRUE){
415     printf("PFIso_HWW2012TrigV0: %d, pt, eta = %f, %f, rho = %f(%f) : ",
416     GetEventHeader()->EvtNum(),ele->Pt(), ele->Eta(),
417     fPileupEnergyDensity->At(0)->Rho(),fPileupEnergyDensity->At(0)->RhoKt6PFJets());
418     }
419 ceballos 1.125 ElectronOArr *tempIsoElectrons = new ElectronOArr;
420     MuonOArr *tempIsoMuons = new MuonOArr;
421     Double_t IsoOverPt = IsolationTools::PFElectronIsolation2012(ele, vertex, fPFNoPileUpCands,
422     fPileupEnergyDensity, ElectronTools::kEleEANoCorr, tempIsoElectrons, tempIsoMuons, 0.4, isDebug);
423     delete tempIsoElectrons;
424     delete tempIsoMuons;
425     Double_t eta = ele->SCluster()->AbsEta();
426     Double_t IsoCut = -1;
427     if (ele->Pt() < 20 && eta < 0.800 ) IsoCut = 0.150;
428     if (ele->Pt() < 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
429     if (ele->Pt() < 20 && eta >= 1.479 ) IsoCut = 0.150;
430     if (ele->Pt() >= 20 && eta < 0.800 ) IsoCut = 0.150;
431     if (ele->Pt() >= 20 && eta >= 0.800 && eta < 1.479 ) IsoCut = 0.150;
432     if (ele->Pt() >= 20 && eta >= 1.479 ) IsoCut = 0.150;
433     if (IsoOverPt < IsoCut ) isocut = kTRUE;
434 ceballos 1.118 }
435     break;
436 sixie 1.56 case ElectronTools::kNoIso:
437 sixie 1.42 isocut = kTRUE;
438     break;
439 sixie 1.56 case ElectronTools::kCustomIso:
440 ceballos 1.118 break;
441 sixie 1.42 default:
442     break;
443     }
444    
445     return isocut;
446     }
447    
448    
449     //--------------------------------------------------------------------------------------------------
450 loizides 1.1 void ElectronIDMod::Process()
451     {
452     // Process entries of the tree.
453    
454 ceballos 1.76 if(fElIsoType != ElectronTools::kPFIsoNoL) {
455     LoadEventObject(fElectronBranchName, fElectrons);
456     }
457     else {
458     fElectrons = GetObjThisEvt<ElectronOArr>(fElectronBranchName);
459 ceballos 1.78 fNonIsolatedMuons = GetObjThisEvt<MuonCol>(fNonIsolatedMuonsName);
460     fNonIsolatedElectrons = GetObjThisEvt<ElectronCol>(fNonIsolatedElectronsName);
461 ceballos 1.76 }
462 bendavid 1.75 LoadEventObject(fBeamSpotName, fBeamSpot);
463 ceballos 1.76 LoadEventObject(fTrackName, fTracks);
464     LoadEventObject(fPFCandidatesName, fPFCandidates);
465 sixie 1.100 if(fElIsoType == ElectronTools::kTrackJuraSliding ||
466 sixie 1.110 fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected ||
467 ceballos 1.116 fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ||
468 ceballos 1.118 fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ||
469     fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0
470 sixie 1.110 ) {
471 ceballos 1.80 LoadEventObject(fPileupEnergyDensityName, fPileupEnergyDensity);
472     }
473 ceballos 1.76 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
474 loizides 1.1
475 ceballos 1.118 if(fElIsoType == ElectronTools::kPFIso_HWW2012TrigV0) {
476     // Name is hardcoded, can be changed if someone feels to do it
477     fPFNoPileUpCands = GetObjThisEvt<PFCandidateCol>("PFNoPileUp");
478     }
479    
480 bendavid 1.62 //get trigger object collection if trigger matching is enabled
481     const TriggerObjectCol *trigObjs = 0;
482     if (fApplyTriggerMatching) {
483     trigObjs = GetHLTObjects(fTrigObjectsName);
484     }
485    
486 loizides 1.6 ElectronOArr *GoodElectrons = new ElectronOArr;
487     GoodElectrons->SetName(fGoodElectronsName);
488 loizides 1.1
489 fabstoec 1.115 for (UInt_t i=0; i<fElectrons->GetEntries() && fVertices->GetEntries() > 0 ; ++i) {
490 loizides 1.5 const Electron *e = fElectrons->At(i);
491 loizides 1.1
492 ceballos 1.66 if (e->SCluster() == 0)
493     continue;
494    
495 ceballos 1.65 if (e->Pt() < fElectronPtMin)
496 loizides 1.5 continue;
497 loizides 1.1
498 dkralph 1.73 if (e->SCluster()->Et() < fElectronEtMin)
499 bendavid 1.67 continue;
500    
501 ceballos 1.65 if (e->AbsEta() > fElectronEtaMax)
502 ceballos 1.64 continue;
503 sixie 1.112
504 bendavid 1.67 if (fApplyEcalFiducial && ( (e->SCluster()->AbsEta()>1.4442 && e->SCluster()->AbsEta()<1.5666) || e->SCluster()->AbsEta()>2.5 )) {
505     continue;
506     }
507    
508     if (fApplyEcalSeeded && !e->IsEcalDriven()) {
509     continue;
510     }
511    
512 bendavid 1.62 //apply trigger matching
513     Bool_t matchTrigger = fApplyTriggerMatching && ElectronTools::PassTriggerMatching(e,trigObjs);
514     if (fApplyTriggerMatching && !matchTrigger)
515     continue;
516    
517 sixie 1.55 //apply ECAL spike removal
518 sixie 1.56 Bool_t spikecut = ElectronTools::PassSpikeRemovalFilter(e);
519 sixie 1.57 if (fApplySpikeRemoval && !spikecut)
520 sixie 1.55 continue;
521    
522 sixie 1.42 //apply Isolation Cut
523 ceballos 1.80 Double_t Rho = 0.0;
524 sixie 1.100 if( fElIsoType == ElectronTools::kTrackJuraSliding
525 sixie 1.110 || fElIsoType == ElectronTools::kCombinedRelativeConeAreaCorrected
526     || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined
527 sixie 1.111 ) {
528 fabstoec 1.119 switch(fTheRhoType) {
529     case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
530     Rho = fPileupEnergyDensity->At(0)->Rho();
531     break;
532     case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
533     Rho = fPileupEnergyDensity->At(0)->RhoLowEta();
534     break;
535     case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
536     Rho = fPileupEnergyDensity->At(0)->RhoRandom();
537     break;
538     case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
539     Rho = fPileupEnergyDensity->At(0)->RhoRandomLowEta();
540     break;
541 ceballos 1.122 case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
542     Rho = fPileupEnergyDensity->At(0)->RhoKt6PFJets();
543     break;
544 fabstoec 1.119 default:
545     // use the old default
546     Rho = fPileupEnergyDensity->At(0)->Rho();
547     break;
548     }
549 ceballos 1.80 }
550 ceballos 1.124 Bool_t isocut = PassIsolationCut(e, fElIsoType, fTracks, fVertices->At(0), Rho, fElIdType);
551 sixie 1.42 if (!isocut)
552 loizides 1.5 continue;
553    
554 ceballos 1.60 // apply conversion filters
555     Bool_t passConvVetoType1 = kFALSE;
556     if (fApplyConvFilterType1) {
557 sixie 1.42 LoadEventObject(fConversionBranchName, fConversions);
558 ceballos 1.60 passConvVetoType1 = ElectronTools::PassConversionFilter(e, fConversions,
559 bendavid 1.82 fBeamSpot->At(0), 0, 1e-6, 2.0, kTRUE, kFALSE);
560 ceballos 1.12 }
561 ceballos 1.60 else {
562     passConvVetoType1 = kTRUE;
563     }
564    
565     if (passConvVetoType1 == kFALSE) continue;
566    
567     Bool_t passConvVetoType2 = kFALSE;
568     if (fApplyConvFilterType2) {
569     passConvVetoType2 = TMath::Abs(e->ConvPartnerDCotTheta()) >= 0.02 ||
570     TMath::Abs(e->ConvPartnerDist()) >= 0.02;
571     }
572     else {
573     passConvVetoType2 = kTRUE;
574     }
575 sixie 1.42
576 ceballos 1.60 if (passConvVetoType2 == kFALSE) continue;
577 ceballos 1.72
578 ceballos 1.60 // apply NExpectedHitsInner Cut
579 ceballos 1.98 if(fInvertNExpectedHitsInnerCut == kFALSE && fNExpectedHitsInnerCut < 999 &&
580 ceballos 1.69 e->CorrectedNExpectedHitsInner() > fNExpectedHitsInnerCut) continue;
581 ceballos 1.60
582 ceballos 1.98 // apply NExpectedHitsInner inverted Cut
583     if(fInvertNExpectedHitsInnerCut == kTRUE && fNExpectedHitsInnerCut < 999 &&
584     e->CorrectedNExpectedHitsInner() <= fNExpectedHitsInnerCut) continue;
585    
586 sixie 1.42 // apply d0 cut
587 ceballos 1.15 if (fApplyD0Cut) {
588 ceballos 1.81 Bool_t passD0cut = kTRUE;
589     if(fWhichVertex >= -1) passD0cut = ElectronTools::PassD0Cut(e, fVertices, fD0Cut, fWhichVertex);
590     else passD0cut = ElectronTools::PassD0Cut(e, fBeamSpot, fD0Cut);
591 sixie 1.42 if (!passD0cut)
592 ceballos 1.24 continue;
593 ceballos 1.12 }
594    
595 ceballos 1.81 // apply dz cut
596     if (fApplyDZCut) {
597 ceballos 1.83 Bool_t passDZcut = ElectronTools::PassDZCut(e, fVertices, fDZCut, fWhichVertex);
598 ceballos 1.81 if (!passDZcut)
599     continue;
600     }
601    
602 sixie 1.102 //apply id cut
603     Bool_t idcut = PassIDCut(e, fElIdType, fVertices->At(0));
604     if (!idcut)
605     continue;
606    
607 ceballos 1.59 // apply charge filter
608 sixie 1.42 if(fChargeFilter == kTRUE) {
609 sixie 1.56 Bool_t passChargeFilter = ElectronTools::PassChargeFilter(e);
610 sixie 1.42 if (!passChargeFilter) continue;
611 ceballos 1.45 }
612    
613 ceballos 1.63 // apply full combined id, using Tight cuts
614 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
615 ceballos 1.68 fVertices = GetObjThisEvt<VertexOArr>(fVertexName);
616 ceballos 1.59 LoadEventObject(fConversionBranchName, fConversions);
617 ceballos 1.63 Int_t result = ElectronTools::PassTightId(e, *&fVertices, fConversions, 2);
618 ceballos 1.59 if(result != 15) continue;
619     }
620    
621 loizides 1.5 // add good electron
622 ceballos 1.12 GoodElectrons->Add(e);
623 loizides 1.5 }
624 loizides 1.1
625 loizides 1.9 // sort according to pt
626     GoodElectrons->Sort();
627    
628 loizides 1.5 // add to event for other modules to use
629 loizides 1.6 AddObjThisEvt(GoodElectrons);
630 loizides 1.1 }
631    
632     //--------------------------------------------------------------------------------------------------
633     void ElectronIDMod::SlaveBegin()
634     {
635     // Run startup code on the computer (slave) doing the actual analysis. Here,
636 loizides 1.5 // we just request the electron collection branch.
637 loizides 1.1
638 ceballos 1.76 // In this case we cannot have a branch
639     if (fElectronIsoType.CompareTo("PFIsoNoL") != 0 ) {
640     ReqEventObject(fElectronBranchName, fElectrons,fElectronsFromBranch);
641     }
642     ReqEventObject(fBeamSpotName, fBeamSpot, kTRUE);
643     ReqEventObject(fTrackName, fTracks, kTRUE);
644     ReqEventObject(fPFCandidatesName, fPFCandidates, kTRUE);
645 sixie 1.100 if (fElectronIsoType.CompareTo("TrackJuraSliding") == 0
646 sixie 1.110 || fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0
647     || fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0
648 ceballos 1.117 || fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0
649 ceballos 1.118 || fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0
650 sixie 1.110 ) {
651 ceballos 1.80 ReqEventObject(fPileupEnergyDensityName, fPileupEnergyDensity, kTRUE);
652     }
653 loizides 1.17
654 ceballos 1.59 if(fCombinedIdCut == kTRUE) {
655 ceballos 1.60 fElectronIDType = "NoId";
656     fElectronIsoType = "NoIso";
657     fApplyConvFilterType1 = kFALSE;
658     fApplyConvFilterType2 = kFALSE;
659     fApplyD0Cut = kFALSE;
660 ceballos 1.81 fApplyDZCut = kFALSE;
661 ceballos 1.59 }
662    
663 ceballos 1.60 if (fApplyConvFilterType1 || fCombinedIdCut == kTRUE)
664 loizides 1.23 ReqEventObject(fConversionBranchName, fConversions, kTRUE);
665 loizides 1.17
666 sixie 1.42 Setup();
667 sixie 1.102
668 sixie 1.42 }
669    
670     //--------------------------------------------------------------------------------------------------
671     void ElectronIDMod::Setup()
672     {
673     // Set all options properly before execution.
674    
675 loizides 1.5 if (fElectronIDType.CompareTo("Tight") == 0)
676 sixie 1.56 fElIdType = ElectronTools::kTight;
677 loizides 1.5 else if (fElectronIDType.CompareTo("Loose") == 0)
678 sixie 1.56 fElIdType = ElectronTools::kLoose;
679 sixie 1.93 else if (fElectronIDType.CompareTo("Likelihood") == 0) {
680     if (!fLH) { cout << "Error: Likelihood not initialized.\n"; assert(0); }
681 sixie 1.56 fElIdType = ElectronTools::kLikelihood;
682 sixie 1.93 } else if (fElectronIDType.CompareTo("NoId") == 0)
683 sixie 1.56 fElIdType = ElectronTools::kNoId;
684 sixie 1.42 else if (fElectronIDType.CompareTo("ZeeId") == 0)
685 sixie 1.56 fElIdType = ElectronTools::kZeeId;
686 sixie 1.51 else if (fElectronIDType.CompareTo("CustomLoose") == 0)
687 sixie 1.56 fElIdType = ElectronTools::kCustomIdLoose;
688 sixie 1.51 else if (fElectronIDType.CompareTo("CustomTight") == 0)
689 sixie 1.56 fElIdType = ElectronTools::kCustomIdTight;
690 ceballos 1.86 else if (fElectronIDType.CompareTo("VBTFWorkingPointFakeableId") == 0)
691     fElIdType = ElectronTools::kVBTFWorkingPointFakeableId;
692 sixie 1.55 else if (fElectronIDType.CompareTo("VBTFWorkingPoint95Id") == 0)
693 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint95Id;
694 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint90Id") == 0)
695 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint90Id;
696 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint80Id") == 0)
697 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint80Id;
698 ceballos 1.83 else if (fElectronIDType.CompareTo("VBTFWorkingPointLowPtId") == 0)
699     fElIdType = ElectronTools::kVBTFWorkingPointLowPtId;
700 ceballos 1.60 else if (fElectronIDType.CompareTo("VBTFWorkingPoint85Id") == 0)
701     fElIdType = ElectronTools::kVBTFWorkingPoint85Id;
702 sixie 1.51 else if (fElectronIDType.CompareTo("VBTFWorkingPoint70Id") == 0)
703 sixie 1.56 fElIdType = ElectronTools::kVBTFWorkingPoint70Id;
704 sixie 1.108 else if (fElectronIDType.CompareTo("MVA_BDTG_NoIPInfo") == 0)
705 sixie 1.110 fElIdType = ElectronTools::kMVAID_BDTG_NoIPInfo;
706 sixie 1.108 else if (fElectronIDType.CompareTo("MVA_BDTG_WithIPInfo") == 0)
707 sixie 1.110 fElIdType = ElectronTools::kMVAID_BDTG_WithIPInfo;
708     else if (fElectronIDType.CompareTo("MVA_BDTG_IDIsoCombined") == 0)
709     fElIdType = ElectronTools::kMVAID_BDTG_IDIsoCombined;
710 ceballos 1.117 else if (fElectronIDType.CompareTo("MVA_BDTG_IDHWW2012TrigV0") == 0)
711     fElIdType = ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0;
712 fabstoec 1.115
713     else if (fElectronIDType.CompareTo("Hgg_LeptonTag_WP85Id") == 0)
714     fElIdType = ElectronTools::kHggLeptonTagId;
715    
716 sixie 1.107 else {
717 loizides 1.5 SendError(kAbortAnalysis, "SlaveBegin",
718     "The specified electron identification %s is not defined.",
719     fElectronIDType.Data());
720     return;
721     }
722 sixie 1.51
723 loizides 1.5 if (fElectronIsoType.CompareTo("TrackCalo") == 0 )
724 sixie 1.56 fElIsoType = ElectronTools::kTrackCalo;
725 loizides 1.5 else if (fElectronIsoType.CompareTo("TrackJura") == 0)
726 sixie 1.56 fElIsoType = ElectronTools::kTrackJura;
727 ceballos 1.49 else if(fElectronIsoType.CompareTo("TrackJuraCombined") == 0)
728 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraCombined;
729 loizides 1.5 else if(fElectronIsoType.CompareTo("TrackJuraSliding") == 0)
730 sixie 1.56 fElIsoType = ElectronTools::kTrackJuraSliding;
731 ceballos 1.80 else if(fElectronIsoType.CompareTo("TrackJuraSlidingNoCorrection") == 0)
732     fElIsoType = ElectronTools::kTrackJuraSlidingNoCorrection;
733 sixie 1.99 else if(fElectronIsoType.CompareTo("CombinedRelativeConeAreaCorrected") == 0)
734     fElIsoType = ElectronTools::kCombinedRelativeConeAreaCorrected;
735 ceballos 1.76 else if (fElectronIsoType.CompareTo("PFIso") == 0 )
736     fElIsoType = ElectronTools::kPFIso;
737     else if (fElectronIsoType.CompareTo("PFIsoNoL") == 0 )
738     fElIsoType = ElectronTools::kPFIsoNoL;
739 loizides 1.5 else if (fElectronIsoType.CompareTo("NoIso") == 0 )
740 sixie 1.56 fElIsoType = ElectronTools::kNoIso;
741 sixie 1.42 else if (fElectronIsoType.CompareTo("ZeeIso") == 0 )
742 sixie 1.56 fElIsoType = ElectronTools::kZeeIso;
743 sixie 1.55 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint95Iso") == 0 )
744 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint95Iso;
745 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint90Iso") == 0 )
746 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint90Iso;
747 ceballos 1.60 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint85Iso") == 0 )
748     fElIsoType = ElectronTools::kVBTFWorkingPoint85Iso;
749 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint80Iso") == 0 )
750 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint80Iso;
751 sixie 1.51 else if (fElectronIsoType.CompareTo("VBTFWorkingPoint70Iso") == 0 )
752 sixie 1.56 fElIsoType = ElectronTools::kVBTFWorkingPoint70Iso;
753 sixie 1.110 else if (fElectronIsoType.CompareTo("MVA_BDTG_IDIsoCombined") == 0 )
754     fElIsoType = ElectronTools::kMVAIso_BDTG_IDIsoCombined;
755 ceballos 1.118 else if (fElectronIsoType.CompareTo("PFIso_HWW2012TrigV0") == 0)
756     fElIsoType = ElectronTools::kPFIso_HWW2012TrigV0;
757 loizides 1.5 else if (fElectronIsoType.CompareTo("Custom") == 0 ) {
758 sixie 1.56 fElIsoType = ElectronTools::kCustomIso;
759 loizides 1.5 SendError(kWarning, "SlaveBegin",
760     "Custom electron isolation is not yet implemented.");
761     } else {
762     SendError(kAbortAnalysis, "SlaveBegin",
763     "The specified electron isolation %s is not defined.",
764     fElectronIsoType.Data());
765     return;
766     }
767 sixie 1.42
768 loizides 1.30
769 sixie 1.102 //If we use MVA ID, need to load MVA weights
770 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_NoIPInfo) {
771 sixie 1.107 fElectronIDMVA = new ElectronIDMVA();
772     fElectronIDMVA->Initialize("BDTG method",
773     fElectronMVAWeights_Subdet0Pt10To20,
774     fElectronMVAWeights_Subdet1Pt10To20,
775     fElectronMVAWeights_Subdet2Pt10To20,
776     fElectronMVAWeights_Subdet0Pt20ToInf,
777     fElectronMVAWeights_Subdet1Pt20ToInf,
778     fElectronMVAWeights_Subdet2Pt20ToInf,
779 ceballos 1.122 ElectronIDMVA::kNoIPInfo,
780     fTheRhoType);
781 sixie 1.107 }
782 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_WithIPInfo) {
783 sixie 1.102 fElectronIDMVA = new ElectronIDMVA();
784     fElectronIDMVA->Initialize("BDTG method",
785     fElectronMVAWeights_Subdet0Pt10To20,
786     fElectronMVAWeights_Subdet1Pt10To20,
787     fElectronMVAWeights_Subdet2Pt10To20,
788     fElectronMVAWeights_Subdet0Pt20ToInf,
789     fElectronMVAWeights_Subdet1Pt20ToInf,
790     fElectronMVAWeights_Subdet2Pt20ToInf,
791 ceballos 1.122 ElectronIDMVA::kWithIPInfo,
792     fTheRhoType);
793 sixie 1.102 }
794 sixie 1.110 if (fElIdType == ElectronTools::kMVAID_BDTG_IDIsoCombined || fElIsoType == ElectronTools::kMVAIso_BDTG_IDIsoCombined ) {
795     fElectronIDMVA = new ElectronIDMVA();
796     fElectronIDMVA->Initialize("BDTG method",
797     fElectronMVAWeights_Subdet0Pt10To20,
798     fElectronMVAWeights_Subdet1Pt10To20,
799     fElectronMVAWeights_Subdet2Pt10To20,
800     fElectronMVAWeights_Subdet0Pt20ToInf,
801     fElectronMVAWeights_Subdet1Pt20ToInf,
802     fElectronMVAWeights_Subdet2Pt20ToInf,
803 ceballos 1.122 ElectronIDMVA::kIDIsoCombined,
804     fTheRhoType);
805 sixie 1.110 }
806 sixie 1.102
807 ceballos 1.117 if (fElIdType == ElectronTools::kMVAID_BDTG_IDHWW2012TrigV0 ) {
808 ceballos 1.116 fElectronIDMVA = new ElectronIDMVA();
809     fElectronIDMVA->Initialize("BDTG method",
810     fElectronMVAWeights_Subdet0Pt10To20,
811     fElectronMVAWeights_Subdet1Pt10To20,
812     fElectronMVAWeights_Subdet2Pt10To20,
813     fElectronMVAWeights_Subdet0Pt20ToInf,
814     fElectronMVAWeights_Subdet1Pt20ToInf,
815     fElectronMVAWeights_Subdet2Pt20ToInf,
816 ceballos 1.122 ElectronIDMVA::kIDHWW2012TrigV0,
817     fTheRhoType);
818 ceballos 1.116 }
819    
820 loizides 1.30 }
821 ceballos 1.77
822     //--------------------------------------------------------------------------------------------------
823     void ElectronIDMod::Terminate()
824     {
825     // Run finishing code on the computer (slave) that did the analysis
826 sixie 1.110 delete fElectronIDMVA;
827 ceballos 1.77 }