ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/ElectronIDMVA.cc
Revision: 1.11
Committed: Tue Feb 7 20:53:28 2012 UTC (13 years, 2 months ago) by sixie
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025e, Mit_025d
Changes since 1.10: +7 -6 lines
Log Message:
add internal radius parameter for isolation

File Contents

# User Rev Content
1 sixie 1.1 #include "MitPhysics/Utils/interface/ElectronIDMVA.h"
2     #include "MitPhysics/Utils/interface/ElectronTools.h"
3     #include "MitPhysics/Utils/interface/IsolationTools.h"
4     #include "MitAna/DataTree/interface/StableData.h"
5     #include <TFile.h>
6     #include <TRandom3.h>
7     #include "TMVA/Tools.h"
8     #include "TMVA/Reader.h"
9    
10    
11     ClassImp(mithep::ElectronIDMVA)
12    
13     using namespace mithep;
14    
15     //--------------------------------------------------------------------------------------------------
16     ElectronIDMVA::ElectronIDMVA() :
17     fMethodname("BDTG method"),
18     fIsInitialized(kFALSE)
19     {
20     // Constructor.
21     for(UInt_t i=0; i<6; ++i) {
22     fTMVAReader[i] = 0;
23     }
24     }
25    
26    
27     //--------------------------------------------------------------------------------------------------
28     ElectronIDMVA::~ElectronIDMVA()
29     {
30     for(UInt_t i=0; i<6; ++i) {
31     if (fTMVAReader[i]) delete fTMVAReader[i];
32     }
33     }
34    
35     //--------------------------------------------------------------------------------------------------
36     void ElectronIDMVA::Initialize( TString methodName,
37     TString Subdet0Pt10To20Weights ,
38     TString Subdet1Pt10To20Weights ,
39     TString Subdet2Pt10To20Weights,
40     TString Subdet0Pt20ToInfWeights,
41     TString Subdet1Pt20ToInfWeights,
42     TString Subdet2Pt20ToInfWeights,
43 sixie 1.4 ElectronIDMVA::MVAType type) {
44 sixie 1.1
45     fIsInitialized = kTRUE;
46    
47     fMethodname = methodName;
48    
49     for(UInt_t i=0; i<6; ++i) {
50     if (fTMVAReader[i]) delete fTMVAReader[i];
51    
52     fTMVAReader[i] = new TMVA::Reader( "!Color:!Silent:Error" );
53     fTMVAReader[i]->SetVerbose(kTRUE);
54 sixie 1.4
55     if (type == kBaseline) {
56 sixie 1.6 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
57     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
58     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
59     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
60     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
61     fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
62     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
63 sixie 1.4 }
64    
65 sixie 1.5 if (type == kNoIPInfo) {
66 sixie 1.6 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
67     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
68     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
69     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
70     fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
71     fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
72     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
73     fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
74     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
75     fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
76 sixie 1.4 }
77 sixie 1.5 if (type == kWithIPInfo) {
78 sixie 1.6 fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
79     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
80     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
81     fTMVAReader[i]->AddVariable( "D0", &fMVAVar_EleD0 );
82     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
83     fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
84     fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
85     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
86     fTMVAReader[i]->AddVariable( "NBrem", &fMVAVar_EleNBrem );
87     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
88     fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
89     fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_EleIP3d );
90     fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig );
91     }
92     if (type == kIDIsoCombined) {
93     fTMVAReader[i]->AddVariable( "SigmaIEtaIEta", &fMVAVar_EleSigmaIEtaIEta );
94     fTMVAReader[i]->AddVariable( "DEtaIn", &fMVAVar_EleDEtaIn );
95     fTMVAReader[i]->AddVariable( "DPhiIn", &fMVAVar_EleDPhiIn );
96     fTMVAReader[i]->AddVariable( "D0", &fMVAVar_EleD0 );
97     fTMVAReader[i]->AddVariable( "FBrem", &fMVAVar_EleFBrem );
98     fTMVAReader[i]->AddVariable( "EOverP", &fMVAVar_EleEOverP );
99     fTMVAReader[i]->AddVariable( "ESeedClusterOverPout", &fMVAVar_EleESeedClusterOverPout );
100     fTMVAReader[i]->AddVariable( "SigmaIPhiIPhi", &fMVAVar_EleSigmaIPhiIPhi );
101     fTMVAReader[i]->AddVariable( "OneOverEMinusOneOverP", &fMVAVar_EleOneOverEMinusOneOverP );
102     fTMVAReader[i]->AddVariable( "ESeedClusterOverPIn", &fMVAVar_EleESeedClusterOverPIn );
103     fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_EleIP3d );
104     fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_EleIP3dSig );
105    
106     fTMVAReader[i]->AddVariable( "GsfTrackChi2OverNdof", &fMVAVar_EleGsfTrackChi2OverNdof );
107     fTMVAReader[i]->AddVariable( "dEtaCalo", &fMVAVar_EledEtaCalo );
108     fTMVAReader[i]->AddVariable( "dPhiCalo", &fMVAVar_EledPhiCalo );
109     fTMVAReader[i]->AddVariable( "R9", &fMVAVar_EleR9 );
110     fTMVAReader[i]->AddVariable( "SCEtaWidth", &fMVAVar_EleSCEtaWidth );
111     fTMVAReader[i]->AddVariable( "SCPhiWidth", &fMVAVar_EleSCPhiWidth );
112     fTMVAReader[i]->AddVariable( "CovIEtaIPhi", &fMVAVar_EleCovIEtaIPhi );
113     if (i == 2 || i == 5) {
114     fTMVAReader[i]->AddVariable( "PreShowerOverRaw", &fMVAVar_ElePreShowerOverRaw );
115     }
116     fTMVAReader[i]->AddVariable( "ChargedIso03", &fMVAVar_EleChargedIso03OverPt );
117     fTMVAReader[i]->AddVariable( "NeutralHadronIso03", &fMVAVar_EleNeutralHadronIso03OverPt );
118     fTMVAReader[i]->AddVariable( "GammaIso03", &fMVAVar_EleGammaIso03OverPt );
119     fTMVAReader[i]->AddVariable( "ChargedIso04", &fMVAVar_EleChargedIso04OverPt );
120     fTMVAReader[i]->AddVariable( "NeutralHadronIso04", &fMVAVar_EleNeutralHadronIso04OverPt );
121     fTMVAReader[i]->AddVariable( "GammaIso04", &fMVAVar_EleGammaIso04OverPt );
122    
123 sixie 1.4 }
124 sixie 1.1
125     if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To20Weights );
126     if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To20Weights );
127     if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt10To20Weights );
128     if (i==3) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt20ToInfWeights );
129     if (i==4) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt20ToInfWeights );
130     if (i==5) fTMVAReader[i]->BookMVA(fMethodname , Subdet2Pt20ToInfWeights );
131    
132     }
133    
134     std::cout << "Electron ID MVA Initialization\n";
135 sixie 1.4 std::cout << "MethodName : " << fMethodname << " , type == " << type << std::endl;
136 sixie 1.1 std::cout << "Load weights file : " << Subdet0Pt10To20Weights << std::endl;
137     std::cout << "Load weights file : " << Subdet1Pt10To20Weights << std::endl;
138     std::cout << "Load weights file : " << Subdet2Pt10To20Weights << std::endl;
139     std::cout << "Load weights file : " << Subdet0Pt20ToInfWeights << std::endl;
140     std::cout << "Load weights file : " << Subdet1Pt20ToInfWeights << std::endl;
141     std::cout << "Load weights file : " << Subdet2Pt20ToInfWeights << std::endl;
142    
143     }
144    
145 sixie 1.3 //--------------------------------------------------------------------------------------------------
146 sixie 1.6 Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleEta,
147 sixie 1.3 Double_t EleSigmaIEtaIEta,
148     Double_t EleDEtaIn,
149     Double_t EleDPhiIn,
150     Double_t EleHoverE,
151     Double_t EleD0,
152     Double_t EleDZ,
153     Double_t EleFBrem,
154     Double_t EleEOverP,
155     Double_t EleESeedClusterOverPout,
156     Double_t EleSigmaIPhiIPhi,
157     Double_t EleNBrem,
158     Double_t EleOneOverEMinusOneOverP,
159     Double_t EleESeedClusterOverPIn,
160     Double_t EleIP3d,
161 sixie 1.4 Double_t EleIP3dSig
162 sixie 1.3 ) {
163    
164     if (!fIsInitialized) {
165     std::cout << "Error: ElectronIDMVA not properly initialized.\n";
166     return -9999;
167     }
168    
169     Int_t subdet = 0;
170 sixie 1.6 if (fabs(EleEta) < 1.0) subdet = 0;
171     else if (fabs(EleEta) < 1.479) subdet = 1;
172 sixie 1.3 else subdet = 2;
173     Int_t ptBin = 0;
174     if (ElePt > 20.0) ptBin = 1;
175    
176     //set all input variables
177     fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
178     fMVAVar_EleDEtaIn = EleDEtaIn;
179     fMVAVar_EleDPhiIn = EleDPhiIn;
180     fMVAVar_EleHoverE = EleHoverE;
181     fMVAVar_EleD0 = EleD0;
182     fMVAVar_EleDZ = EleDZ;
183     fMVAVar_EleFBrem = EleFBrem;
184     fMVAVar_EleEOverP = EleEOverP;
185     fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
186     fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
187     fMVAVar_EleNBrem = EleNBrem;
188     fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
189     fMVAVar_EleESeedClusterOverPIn = EleESeedClusterOverPIn;
190     fMVAVar_EleIP3d = EleIP3d;
191     fMVAVar_EleIP3dSig = EleIP3dSig;
192    
193     Double_t mva = -9999;
194     TMVA::Reader *reader = 0;
195     Int_t MVABin = -1;
196     if (subdet == 0 && ptBin == 0) MVABin = 0;
197     if (subdet == 1 && ptBin == 0) MVABin = 1;
198     if (subdet == 2 && ptBin == 0) MVABin = 2;
199     if (subdet == 0 && ptBin == 1) MVABin = 3;
200     if (subdet == 1 && ptBin == 1) MVABin = 4;
201     if (subdet == 2 && ptBin == 1) MVABin = 5;
202     assert(MVABin >= 0 && MVABin <= 5);
203     reader = fTMVAReader[MVABin];
204    
205     mva = reader->EvaluateMVA( fMethodname );
206    
207     return mva;
208     }
209    
210 sixie 1.6 //--------------------------------------------------------------------------------------------------
211     Double_t ElectronIDMVA::MVAValue(Double_t ElePt , Double_t EleEta, Double_t PileupEnergyDensity,
212     Double_t EleSigmaIEtaIEta,
213     Double_t EleDEtaIn,
214     Double_t EleDPhiIn,
215     Double_t EleHoverE,
216     Double_t EleD0,
217     Double_t EleDZ,
218     Double_t EleFBrem,
219     Double_t EleEOverP,
220     Double_t EleESeedClusterOverPout,
221     Double_t EleSigmaIPhiIPhi,
222     Double_t EleNBrem,
223     Double_t EleOneOverEMinusOneOverP,
224     Double_t EleESeedClusterOverPIn,
225     Double_t EleIP3d,
226     Double_t EleIP3dSig,
227     Double_t EleGsfTrackChi2OverNdof,
228     Double_t EledEtaCalo,
229     Double_t EledPhiCalo,
230     Double_t EleR9,
231     Double_t EleSCEtaWidth,
232     Double_t EleSCPhiWidth,
233     Double_t EleCovIEtaIPhi,
234     Double_t ElePreShowerOverRaw,
235     Double_t EleChargedIso03,
236     Double_t EleNeutralHadronIso03,
237     Double_t EleGammaIso03,
238     Double_t EleChargedIso04,
239     Double_t EleNeutralHadronIso04,
240 sixie 1.10 Double_t EleGammaIso04,
241     Bool_t printDebug
242 sixie 1.6 ) {
243    
244     if (!fIsInitialized) {
245     std::cout << "Error: ElectronIDMVA not properly initialized.\n";
246     return -9999;
247     }
248 sixie 1.3
249 sixie 1.8 Double_t Rho = 0;
250     if (!(TMath::IsNaN(PileupEnergyDensity) || isinf(PileupEnergyDensity))) Rho = PileupEnergyDensity;
251    
252 sixie 1.6 Int_t subdet = 0;
253     if (fabs(EleEta) < 1.0) subdet = 0;
254     else if (fabs(EleEta) < 1.479) subdet = 1;
255     else subdet = 2;
256     Int_t ptBin = 0;
257     if (ElePt > 20.0) ptBin = 1;
258    
259     //set all input variables
260     fMVAVar_EleSigmaIEtaIEta = EleSigmaIEtaIEta;
261     fMVAVar_EleDEtaIn = EleDEtaIn;
262     fMVAVar_EleDPhiIn = EleDPhiIn;
263     fMVAVar_EleHoverE = EleHoverE;
264     fMVAVar_EleD0 = EleD0;
265     fMVAVar_EleDZ = EleDZ;
266     fMVAVar_EleFBrem = EleFBrem;
267     fMVAVar_EleEOverP = EleEOverP;
268     fMVAVar_EleESeedClusterOverPout = EleESeedClusterOverPout;
269     fMVAVar_EleSigmaIPhiIPhi = EleSigmaIPhiIPhi;
270     fMVAVar_EleNBrem = EleNBrem;
271     fMVAVar_EleOneOverEMinusOneOverP = EleOneOverEMinusOneOverP;
272     fMVAVar_EleESeedClusterOverPIn = EleESeedClusterOverPIn;
273     fMVAVar_EleIP3d = EleIP3d;
274     fMVAVar_EleIP3dSig = EleIP3dSig;
275     fMVAVar_EleGsfTrackChi2OverNdof = EleGsfTrackChi2OverNdof;
276     fMVAVar_EledEtaCalo = EledEtaCalo;
277     fMVAVar_EledPhiCalo = EledPhiCalo;
278     fMVAVar_EleR9 = EleR9;
279     fMVAVar_EleSCEtaWidth = EleSCEtaWidth;
280     fMVAVar_EleSCPhiWidth = EleSCPhiWidth;
281     fMVAVar_EleCovIEtaIPhi = EleCovIEtaIPhi;
282     fMVAVar_ElePreShowerOverRaw = ElePreShowerOverRaw;
283     fMVAVar_EleChargedIso03OverPt
284     = (EleChargedIso03
285 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso03, EleEta)) / ElePt;
286 sixie 1.6 fMVAVar_EleNeutralHadronIso03OverPt
287     = (EleNeutralHadronIso03
288 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso03, EleEta)
289     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,EleEta)) / ElePt;
290 sixie 1.6 fMVAVar_EleGammaIso03OverPt
291     = (EleGammaIso03
292 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso03, EleEta)
293     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip03,EleEta))/ElePt;
294 sixie 1.6 fMVAVar_EleChargedIso04OverPt
295     = (EleChargedIso04
296 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso04, EleEta))/ElePt;
297 sixie 1.6 fMVAVar_EleNeutralHadronIso04OverPt
298     = (EleNeutralHadronIso04
299 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso04, EleEta)
300     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,EleEta))/ElePt;
301 sixie 1.6 fMVAVar_EleGammaIso04OverPt
302     = (EleGammaIso04
303 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso04, EleEta)
304     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip04,EleEta))/ElePt;
305 sixie 1.6
306     Double_t mva = -9999;
307     TMVA::Reader *reader = 0;
308     Int_t MVABin = -1;
309     if (subdet == 0 && ptBin == 0) MVABin = 0;
310     if (subdet == 1 && ptBin == 0) MVABin = 1;
311     if (subdet == 2 && ptBin == 0) MVABin = 2;
312     if (subdet == 0 && ptBin == 1) MVABin = 3;
313     if (subdet == 1 && ptBin == 1) MVABin = 4;
314     if (subdet == 2 && ptBin == 1) MVABin = 5;
315     assert(MVABin >= 0 && MVABin <= 5);
316     reader = fTMVAReader[MVABin];
317    
318     mva = reader->EvaluateMVA( fMethodname );
319    
320 sixie 1.10 if (printDebug == kTRUE) {
321 sixie 1.7 std::cout << "Debug Electron MVA: "
322     << ElePt << " " << EleEta << " " << " --> MVABin " << MVABin << " : "
323     << fMVAVar_EleSigmaIEtaIEta << " "
324     << fMVAVar_EleDEtaIn << " "
325     << fMVAVar_EleDPhiIn << " "
326     << fMVAVar_EleHoverE << " "
327     << fMVAVar_EleD0 << " "
328     << fMVAVar_EleDZ << " "
329     << fMVAVar_EleFBrem << " "
330     << fMVAVar_EleEOverP << " "
331     << fMVAVar_EleESeedClusterOverPout << " "
332     << fMVAVar_EleSigmaIPhiIPhi << " "
333     << fMVAVar_EleNBrem << " "
334     << fMVAVar_EleOneOverEMinusOneOverP << " "
335     << fMVAVar_EleESeedClusterOverPIn << " "
336     << fMVAVar_EleIP3d << " "
337     << fMVAVar_EleIP3dSig << " "
338     << fMVAVar_EleGsfTrackChi2OverNdof << " "
339     << fMVAVar_EledEtaCalo << " "
340     << fMVAVar_EledPhiCalo << " "
341     << fMVAVar_EleR9 << " "
342     << fMVAVar_EleSCEtaWidth << " "
343     << fMVAVar_EleSCPhiWidth << " "
344     << fMVAVar_EleCovIEtaIPhi << " "
345     << fMVAVar_ElePreShowerOverRaw << " "
346     << fMVAVar_EleChargedIso03OverPt << " "
347     << fMVAVar_EleNeutralHadronIso03OverPt << " "
348     << fMVAVar_EleGammaIso03OverPt << " "
349     << fMVAVar_EleChargedIso04OverPt << " "
350     << fMVAVar_EleNeutralHadronIso04OverPt << " "
351     << fMVAVar_EleGammaIso04OverPt << " "
352     << " === : === "
353     << mva
354     << std::endl;
355     }
356    
357 sixie 1.6 return mva;
358     }
359    
360    
361     //--------------------------------------------------------------------------------------------------
362     Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex,
363     const PFCandidateCol *PFCands,
364 sixie 1.10 const PileupEnergyDensityCol *PileupEnergyDensity,
365 sixie 1.11 Double_t intRadius,
366 sixie 1.10 Bool_t printDebug) {
367 sixie 1.6
368     if (!fIsInitialized) {
369     std::cout << "Error: ElectronIDMVA not properly initialized.\n";
370     return -9999;
371     }
372    
373     Int_t subdet = 0;
374     if (ele->SCluster()->AbsEta() < 1.0) subdet = 0;
375     else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1;
376     else subdet = 2;
377     Int_t ptBin = 0;
378     if (ele->Pt() > 20.0) ptBin = 1;
379 sixie 1.8
380     Double_t Rho = 0;
381     if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho();
382    
383 sixie 1.6 //set all input variables
384     fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
385     fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
386     fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
387     fMVAVar_EleHoverE = ele->HadronicOverEm();
388     fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
389     fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
390     fMVAVar_EleFBrem = ele->FBrem();
391     fMVAVar_EleEOverP = ele->ESuperClusterOverP();
392     fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
393     if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
394     else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
395     fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
396     fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
397     fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
398     fMVAVar_EleIP3d = ele->Ip3dPV();
399     fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
400     fMVAVar_EleGsfTrackChi2OverNdof = ele->BestTrk()->Chi2() / ele->BestTrk()->Ndof();
401     fMVAVar_EledEtaCalo = ele->DeltaEtaSeedClusterTrackAtCalo();
402     fMVAVar_EledPhiCalo = ele->DeltaPhiSeedClusterTrackAtCalo();
403     fMVAVar_EleR9 = ele->SCluster()->R9();
404     fMVAVar_EleSCEtaWidth = ele->SCluster()->EtaWidth();
405     fMVAVar_EleSCPhiWidth = ele->SCluster()->PhiWidth();
406     fMVAVar_EleCovIEtaIPhi = ele->SCluster()->Seed()->CoviEtaiPhi();
407     fMVAVar_ElePreShowerOverRaw = ele->SCluster()->PreshowerEnergy() / ele->SCluster()->RawEnergy();
408     fMVAVar_EleChargedIso03OverPt
409 sixie 1.11 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 99999, 0.3, intRadius)
410 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso03, ele->SCluster()->Eta())) / ele->Pt();
411 sixie 1.6 fMVAVar_EleNeutralHadronIso03OverPt
412 sixie 1.11 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.3, intRadius, PFCandidate::eNeutralHadron)
413 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso03, ele->SCluster()->Eta())
414     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,ele->SCluster()->Eta())) / ele->Pt();
415 sixie 1.6 fMVAVar_EleGammaIso03OverPt
416 sixie 1.11 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.3, intRadius, PFCandidate::eGamma)
417 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso03, ele->SCluster()->Eta())
418     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip03,ele->SCluster()->Eta())) / ele->Pt();
419 sixie 1.6 fMVAVar_EleChargedIso04OverPt
420 sixie 1.11 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 99999, 0.4, intRadius)
421 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleChargedIso04, ele->SCluster()->Eta())) / ele->Pt();
422 sixie 1.6 fMVAVar_EleNeutralHadronIso04OverPt
423 sixie 1.11 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.4, intRadius, PFCandidate::eNeutralHadron)
424 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso04, ele->SCluster()->Eta())
425     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleNeutralHadronIso007,ele->SCluster()->Eta())) / ele->Pt() ;
426 sixie 1.6 fMVAVar_EleGammaIso04OverPt
427 sixie 1.11 = (IsolationTools::PFElectronIsolation(ele, PFCands, vertex, 0.1, 0.5, 0.4, intRadius, PFCandidate::eGamma)
428 sixie 1.8 - Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIso04, ele->SCluster()->Eta())
429     + Rho * ElectronTools::ElectronEffectiveArea(ElectronTools::kEleGammaIsoVetoEtaStrip04,ele->SCluster()->Eta())) / ele->Pt();
430 sixie 1.6
431     Double_t mva = -9999;
432     TMVA::Reader *reader = 0;
433     Int_t MVABin = -1;
434     if (subdet == 0 && ptBin == 0) MVABin = 0;
435     if (subdet == 1 && ptBin == 0) MVABin = 1;
436     if (subdet == 2 && ptBin == 0) MVABin = 2;
437     if (subdet == 0 && ptBin == 1) MVABin = 3;
438     if (subdet == 1 && ptBin == 1) MVABin = 4;
439     if (subdet == 2 && ptBin == 1) MVABin = 5;
440     assert(MVABin >= 0 && MVABin <= 5);
441     reader = fTMVAReader[MVABin];
442    
443     mva = reader->EvaluateMVA( fMethodname );
444    
445 sixie 1.10 if (printDebug == kTRUE) {
446 sixie 1.7 std::cout << "Debug Electron MVA: "
447     << ele->Pt() << " " << ele->Eta() << " " << ele->Phi() << " : "
448     << ele->Pt() << " " << ele->SCluster()->AbsEta() << " --> MVABin " << MVABin << " : "
449     << fMVAVar_EleSigmaIEtaIEta << " "
450     << fMVAVar_EleDEtaIn << " "
451     << fMVAVar_EleDPhiIn << " "
452     << fMVAVar_EleHoverE << " "
453     << fMVAVar_EleD0 << " "
454     << fMVAVar_EleDZ << " "
455     << fMVAVar_EleFBrem << " "
456     << fMVAVar_EleEOverP << " "
457     << fMVAVar_EleESeedClusterOverPout << " "
458     << fMVAVar_EleSigmaIPhiIPhi << " "
459     << fMVAVar_EleNBrem << " "
460     << fMVAVar_EleOneOverEMinusOneOverP << " "
461     << fMVAVar_EleESeedClusterOverPIn << " "
462     << fMVAVar_EleIP3d << " "
463     << fMVAVar_EleIP3dSig << " "
464     << fMVAVar_EleGsfTrackChi2OverNdof << " "
465     << fMVAVar_EledEtaCalo << " "
466     << fMVAVar_EledPhiCalo << " "
467     << fMVAVar_EleR9 << " "
468     << fMVAVar_EleSCEtaWidth << " "
469     << fMVAVar_EleSCPhiWidth << " "
470     << fMVAVar_EleCovIEtaIPhi << " "
471     << fMVAVar_ElePreShowerOverRaw << " "
472     << fMVAVar_EleChargedIso03OverPt << " "
473     << fMVAVar_EleNeutralHadronIso03OverPt << " "
474     << fMVAVar_EleGammaIso03OverPt << " "
475     << fMVAVar_EleChargedIso04OverPt << " "
476     << fMVAVar_EleNeutralHadronIso04OverPt << " "
477     << fMVAVar_EleGammaIso04OverPt << " "
478     << " === : === "
479     << mva << " "
480     << std::endl;
481    
482     }
483    
484 sixie 1.6 return mva;
485     }
486 sixie 1.1
487     //--------------------------------------------------------------------------------------------------
488     Double_t ElectronIDMVA::MVAValue(const Electron *ele, const Vertex *vertex) {
489    
490     if (!fIsInitialized) {
491     std::cout << "Error: ElectronIDMVA not properly initialized.\n";
492     return -9999;
493     }
494    
495     Int_t subdet = 0;
496     if (ele->SCluster()->AbsEta() < 1.0) subdet = 0;
497     else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1;
498     else subdet = 2;
499     Int_t ptBin = 0;
500     if (ele->Pt() > 20.0) ptBin = 1;
501    
502     //set all input variables
503     fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
504     fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
505     fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
506     fMVAVar_EleHoverE = ele->HadronicOverEm();
507     fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
508     fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
509     fMVAVar_EleFBrem = ele->FBrem();
510     fMVAVar_EleEOverP = ele->ESuperClusterOverP();
511     fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
512     if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
513     else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
514     fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
515 sixie 1.5 fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
516 sixie 1.1 fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
517     fMVAVar_EleIP3d = ele->Ip3dPV();
518     fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
519    
520     Double_t mva = -9999;
521     TMVA::Reader *reader = 0;
522     Int_t MVABin = -1;
523     if (subdet == 0 && ptBin == 0) MVABin = 0;
524     if (subdet == 1 && ptBin == 0) MVABin = 1;
525     if (subdet == 2 && ptBin == 0) MVABin = 2;
526     if (subdet == 0 && ptBin == 1) MVABin = 3;
527     if (subdet == 1 && ptBin == 1) MVABin = 4;
528     if (subdet == 2 && ptBin == 1) MVABin = 5;
529     assert(MVABin >= 0 && MVABin <= 5);
530     reader = fTMVAReader[MVABin];
531    
532     mva = reader->EvaluateMVA( fMethodname );
533    
534     return mva;
535     }