ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MuonIDMVA.cc
Revision: 1.7
Committed: Mon Jan 23 20:05:41 2012 UTC (13 years, 3 months ago) by sixie
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025e, Mit_025d
Changes since 1.6: +166 -5 lines
Log Message:
update muon mva with detector isolation variables

File Contents

# Content
1 #include "MitPhysics/Utils/interface/MuonIDMVA.h"
2 #include "MitPhysics/Utils/interface/MuonTools.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::MuonIDMVA)
12
13 using namespace mithep;
14
15 //--------------------------------------------------------------------------------------------------
16 MuonIDMVA::MuonIDMVA() :
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 MuonIDMVA::~MuonIDMVA()
29 {
30 for(UInt_t i=0; i<6; ++i) {
31 if (fTMVAReader[i]) delete fTMVAReader[i];
32 }
33 }
34
35 //--------------------------------------------------------------------------------------------------
36 void MuonIDMVA::Initialize( TString methodName,
37 TString Subdet0Pt10To14p5Weights ,
38 TString Subdet1Pt10To14p5Weights ,
39 TString Subdet0Pt14p5To20Weights,
40 TString Subdet1Pt14p5To20Weights,
41 TString Subdet0Pt20ToInfWeights,
42 TString Subdet1Pt20ToInfWeights,
43 MuonIDMVA::MVAType type) {
44
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
55 if (type == kV2) {
56 fTMVAReader[i]->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
57 fTMVAReader[i]->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
58 fTMVAReader[i]->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
59 fTMVAReader[i]->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
60 fTMVAReader[i]->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
61 fTMVAReader[i]->AddVariable( "NMatches", &fMVAVar_MuNMatches );
62 fTMVAReader[i]->AddVariable( "D0", &fMVAVar_MuD0 );
63 fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_MuIP3d );
64 fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
65 fTMVAReader[i]->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
66 fTMVAReader[i]->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
67 }
68
69 if (type == kV3) {
70 fTMVAReader[i]->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
71 fTMVAReader[i]->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
72 fTMVAReader[i]->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
73 fTMVAReader[i]->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
74 fTMVAReader[i]->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
75 fTMVAReader[i]->AddVariable( "NMatches", &fMVAVar_MuNMatches );
76 fTMVAReader[i]->AddVariable( "D0", &fMVAVar_MuD0 );
77 fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_MuIP3d );
78 fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
79 fTMVAReader[i]->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
80 fTMVAReader[i]->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
81 fTMVAReader[i]->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
82 fTMVAReader[i]->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt );
83 if (i==0 || i==2 || i==4) {
84 fTMVAReader[i]->AddVariable( "HoEnergyOverPt", &fMVAVar_MuHoEnergyOverPt );
85 }
86 fTMVAReader[i]->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt );
87 fTMVAReader[i]->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt );
88 if (i==0 || i==2 || i==4) {
89 fTMVAReader[i]->AddVariable( "HoS9EnergyOverPt", &fMVAVar_MuHoS9EnergyOverPt );
90 }
91 fTMVAReader[i]->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt );
92 }
93
94 if (type == kV8) {
95 fTMVAReader[i]->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
96 fTMVAReader[i]->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
97 fTMVAReader[i]->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
98 fTMVAReader[i]->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
99 fTMVAReader[i]->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
100 fTMVAReader[i]->AddVariable( "NMatches", &fMVAVar_MuNMatches );
101 fTMVAReader[i]->AddVariable( "D0", &fMVAVar_MuD0 );
102 fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_MuIP3d );
103 fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
104 fTMVAReader[i]->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
105 fTMVAReader[i]->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
106 fTMVAReader[i]->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
107 fTMVAReader[i]->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt );
108 fTMVAReader[i]->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt );
109 fTMVAReader[i]->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt );
110 fTMVAReader[i]->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt );
111 fTMVAReader[i]->AddVariable( "ChargedIso03OverPt", &fMVAVar_MuChargedIso03OverPt );
112 fTMVAReader[i]->AddVariable( "NeutralIso03OverPt", &fMVAVar_MuNeutralIso03OverPt );
113 fTMVAReader[i]->AddVariable( "ChargedIso04OverPt", &fMVAVar_MuChargedIso04OverPt );
114 fTMVAReader[i]->AddVariable( "NeutralIso04OverPt", &fMVAVar_MuNeutralIso04OverPt );
115 }
116
117 if (type == kIDIsoCombinedDetIso) {
118 fTMVAReader[i]->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
119 fTMVAReader[i]->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
120 fTMVAReader[i]->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
121 fTMVAReader[i]->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
122 fTMVAReader[i]->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
123 fTMVAReader[i]->AddVariable( "NMatches", &fMVAVar_MuNMatches );
124 fTMVAReader[i]->AddVariable( "D0", &fMVAVar_MuD0 );
125 fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_MuIP3d );
126 fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
127 fTMVAReader[i]->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
128 fTMVAReader[i]->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
129 fTMVAReader[i]->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
130 fTMVAReader[i]->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt );
131 fTMVAReader[i]->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt );
132 fTMVAReader[i]->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt );
133 fTMVAReader[i]->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt );
134 fTMVAReader[i]->AddVariable( "TrkIso03OverPt", &fMVAVar_MuTrkIso03OverPt );
135 fTMVAReader[i]->AddVariable( "EMIso03OverPt", &fMVAVar_MuEMIso03OverPt );
136 fTMVAReader[i]->AddVariable( "HadIso03OverPt", &fMVAVar_MuHadIso03OverPt );
137 fTMVAReader[i]->AddVariable( "TrkIso05OverPt", &fMVAVar_MuTrkIso05OverPt );
138 fTMVAReader[i]->AddVariable( "EMIso05OverPt", &fMVAVar_MuEMIso05OverPt );
139 fTMVAReader[i]->AddVariable( "HadIso05OverPt", &fMVAVar_MuHadIso05OverPt );
140
141 }
142
143 if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To14p5Weights );
144 if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To14p5Weights );
145 if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt14p5To20Weights );
146 if (i==3) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt14p5To20Weights );
147 if (i==4) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt20ToInfWeights );
148 if (i==5) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt20ToInfWeights );
149
150 }
151
152 std::cout << "Muon ID MVA Initialization\n";
153 std::cout << "MethodName : " << fMethodname << " , type == " << type << std::endl;
154 std::cout << "Load weights file : " << Subdet0Pt10To14p5Weights << std::endl;
155 std::cout << "Load weights file : " << Subdet1Pt10To14p5Weights << std::endl;
156 std::cout << "Load weights file : " << Subdet0Pt14p5To20Weights << std::endl;
157 std::cout << "Load weights file : " << Subdet1Pt14p5To20Weights << std::endl;
158 std::cout << "Load weights file : " << Subdet0Pt20ToInfWeights << std::endl;
159 std::cout << "Load weights file : " << Subdet1Pt20ToInfWeights << std::endl;
160
161 }
162
163 //--------------------------------------------------------------------------------------------------
164 Double_t MuonIDMVA::MVAValue(Double_t MuPt , Double_t MuEta,
165 Double_t MuTkNchi2,
166 Double_t MuGlobalNchi2,
167 Double_t MuNValidHits,
168 Double_t MuNTrackerHits,
169 Double_t MuNPixelHits,
170 Double_t MuNMatches,
171 Double_t MuD0,
172 Double_t MuIP3d,
173 Double_t MuIP3dSig,
174 Double_t MuTrkKink,
175 Double_t MuSegmentCompatibility,
176 Double_t MuCaloCompatibility,
177 Double_t MuHadEnergyOverPt,
178 Double_t MuHoEnergyOverPt,
179 Double_t MuEmEnergyOverPt,
180 Double_t MuHadS9EnergyOverPt,
181 Double_t MuHoS9EnergyOverPt,
182 Double_t MuEmS9EnergyOverPt,
183 Double_t MuChargedIso03OverPt,
184 Double_t MuNeutralIso03OverPt,
185 Double_t MuChargedIso04OverPt,
186 Double_t MuNeutralIso04OverPt,
187 Bool_t printDebug
188 ) {
189
190 if (!fIsInitialized) {
191 std::cout << "Error: MuonIDMVA not properly initialized.\n";
192 return -9999;
193 }
194
195 Int_t subdet = 0;
196 if (fabs(MuEta) < 1.479) subdet = 0;
197 else subdet = 1;
198 Int_t ptBin = 0;
199 if (MuPt > 14.5) ptBin = 1;
200 if (MuPt > 20.0) ptBin = 2;
201
202
203 //set all input variables
204 fMVAVar_MuTkNchi2 = MuTkNchi2;
205 fMVAVar_MuGlobalNchi2 = MuGlobalNchi2;
206 fMVAVar_MuNValidHits = MuNValidHits;
207 fMVAVar_MuNTrackerHits = MuNTrackerHits;
208 fMVAVar_MuNPixelHits = MuNPixelHits;
209 fMVAVar_MuNMatches = MuNMatches;
210 fMVAVar_MuD0 = MuD0;
211 fMVAVar_MuIP3d = MuIP3d;
212 fMVAVar_MuIP3dSig = MuIP3dSig;
213 fMVAVar_MuTrkKink = MuTrkKink;
214 fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility;
215 fMVAVar_MuCaloCompatibility = MuCaloCompatibility;
216 fMVAVar_MuHadEnergyOverPt = MuHadEnergyOverPt;
217 fMVAVar_MuHoEnergyOverPt = MuHoEnergyOverPt;
218 fMVAVar_MuEmEnergyOverPt = MuEmEnergyOverPt;
219 fMVAVar_MuHadS9EnergyOverPt = MuHadS9EnergyOverPt;
220 fMVAVar_MuHoS9EnergyOverPt = MuHoS9EnergyOverPt;
221 fMVAVar_MuEmS9EnergyOverPt = MuEmS9EnergyOverPt;
222 fMVAVar_MuChargedIso03OverPt = MuChargedIso03OverPt;
223 fMVAVar_MuNeutralIso03OverPt = MuNeutralIso03OverPt;
224 fMVAVar_MuChargedIso04OverPt = MuChargedIso04OverPt;
225 fMVAVar_MuNeutralIso04OverPt = MuNeutralIso04OverPt;
226
227 Double_t mva = -9999;
228 TMVA::Reader *reader = 0;
229
230 Int_t MVABin = -1;
231 if (subdet == 0 && ptBin == 0) MVABin = 0;
232 if (subdet == 1 && ptBin == 0) MVABin = 1;
233 if (subdet == 0 && ptBin == 1) MVABin = 2;
234 if (subdet == 1 && ptBin == 1) MVABin = 3;
235 if (subdet == 0 && ptBin == 2) MVABin = 4;
236 if (subdet == 1 && ptBin == 2) MVABin = 5;
237 assert(MVABin >= 0 && MVABin <= 5);
238 reader = fTMVAReader[MVABin];
239
240 mva = reader->EvaluateMVA( fMethodname );
241
242 if (printDebug) {
243 std::cout << "Debug Muon MVA: "
244 << MuPt << " " << MuEta << " --> MVABin " << MVABin << " : "
245 << fMVAVar_MuTkNchi2 << " "
246 << fMVAVar_MuGlobalNchi2 << " "
247 << fMVAVar_MuNValidHits << " "
248 << fMVAVar_MuNTrackerHits << " "
249 << fMVAVar_MuNPixelHits << " "
250 << fMVAVar_MuNMatches << " "
251 << fMVAVar_MuD0 << " "
252 << fMVAVar_MuIP3d << " "
253 << fMVAVar_MuIP3dSig << " "
254 << fMVAVar_MuTrkKink << " "
255 << fMVAVar_MuSegmentCompatibility << " "
256 << fMVAVar_MuCaloCompatibility << " "
257 << fMVAVar_MuHadEnergyOverPt << " "
258 << fMVAVar_MuHoEnergyOverPt << " "
259 << fMVAVar_MuEmEnergyOverPt << " "
260 << fMVAVar_MuHadS9EnergyOverPt << " "
261 << fMVAVar_MuHoS9EnergyOverPt << " "
262 << fMVAVar_MuEmS9EnergyOverPt << " "
263 << fMVAVar_MuChargedIso03OverPt << " "
264 << fMVAVar_MuNeutralIso03OverPt << " "
265 << fMVAVar_MuChargedIso04OverPt << " "
266 << fMVAVar_MuNeutralIso04OverPt << " "
267 << " === : === "
268 << mva
269 << std::endl;
270 }
271
272 return mva;
273 }
274
275
276 //--------------------------------------------------------------------------------------------------
277 Double_t MuonIDMVA::MVAValue(Double_t MuPt , Double_t MuEta,
278 Double_t MuTkNchi2,
279 Double_t MuGlobalNchi2,
280 Double_t MuNValidHits,
281 Double_t MuNTrackerHits,
282 Double_t MuNPixelHits,
283 Double_t MuNMatches,
284 Double_t MuD0,
285 Double_t MuIP3d,
286 Double_t MuIP3dSig,
287 Double_t MuTrkKink,
288 Double_t MuSegmentCompatibility,
289 Double_t MuCaloCompatibility,
290 Double_t MuHadEnergyOverPt,
291 Double_t MuHoEnergyOverPt,
292 Double_t MuEmEnergyOverPt,
293 Double_t MuHadS9EnergyOverPt,
294 Double_t MuHoS9EnergyOverPt,
295 Double_t MuEmS9EnergyOverPt,
296 Double_t MuTrkIso03OverPt,
297 Double_t MuEMIso03OverPt,
298 Double_t MuHadIso03OverPt,
299 Double_t MuTrkIso05OverPt,
300 Double_t MuEMIso05OverPt,
301 Double_t MuHadIso05OverPt,
302 Bool_t printDebug
303 ) {
304
305 if (!fIsInitialized) {
306 std::cout << "Error: MuonIDMVA not properly initialized.\n";
307 return -9999;
308 }
309
310 Int_t subdet = 0;
311 if (fabs(MuEta) < 1.479) subdet = 0;
312 else subdet = 1;
313 Int_t ptBin = 0;
314 if (MuPt > 14.5) ptBin = 1;
315 if (MuPt > 20.0) ptBin = 2;
316
317
318 //set all input variables
319 fMVAVar_MuTkNchi2 = MuTkNchi2;
320 fMVAVar_MuGlobalNchi2 = MuGlobalNchi2;
321 fMVAVar_MuNValidHits = MuNValidHits;
322 fMVAVar_MuNTrackerHits = MuNTrackerHits;
323 fMVAVar_MuNPixelHits = MuNPixelHits;
324 fMVAVar_MuNMatches = MuNMatches;
325 fMVAVar_MuD0 = MuD0;
326 fMVAVar_MuIP3d = MuIP3d;
327 fMVAVar_MuIP3dSig = MuIP3dSig;
328 fMVAVar_MuTrkKink = MuTrkKink;
329 fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility;
330 fMVAVar_MuCaloCompatibility = MuCaloCompatibility;
331 fMVAVar_MuHadEnergyOverPt = MuHadEnergyOverPt;
332 fMVAVar_MuHoEnergyOverPt = MuHoEnergyOverPt;
333 fMVAVar_MuEmEnergyOverPt = MuEmEnergyOverPt;
334 fMVAVar_MuHadS9EnergyOverPt = MuHadS9EnergyOverPt;
335 fMVAVar_MuHoS9EnergyOverPt = MuHoS9EnergyOverPt;
336 fMVAVar_MuEmS9EnergyOverPt = MuEmS9EnergyOverPt;
337 fMVAVar_MuTrkIso03OverPt = MuTrkIso03OverPt;
338 fMVAVar_MuEMIso03OverPt = MuEMIso03OverPt;
339 fMVAVar_MuHadIso03OverPt = MuHadIso03OverPt;
340 fMVAVar_MuTrkIso05OverPt = MuTrkIso05OverPt;
341 fMVAVar_MuEMIso05OverPt = MuEMIso05OverPt;
342 fMVAVar_MuHadIso05OverPt = MuHadIso05OverPt;
343
344 Double_t mva = -9999;
345 TMVA::Reader *reader = 0;
346
347 Int_t MVABin = -1;
348 if (subdet == 0 && ptBin == 0) MVABin = 0;
349 if (subdet == 1 && ptBin == 0) MVABin = 1;
350 if (subdet == 0 && ptBin == 1) MVABin = 2;
351 if (subdet == 1 && ptBin == 1) MVABin = 3;
352 if (subdet == 0 && ptBin == 2) MVABin = 4;
353 if (subdet == 1 && ptBin == 2) MVABin = 5;
354 assert(MVABin >= 0 && MVABin <= 5);
355 reader = fTMVAReader[MVABin];
356
357 mva = reader->EvaluateMVA( fMethodname );
358
359 if (printDebug) {
360 std::cout << "Debug Muon MVA: "
361 << MuPt << " " << MuEta << " --> MVABin " << MVABin << " : "
362 << fMVAVar_MuTkNchi2 << " "
363 << fMVAVar_MuGlobalNchi2 << " "
364 << fMVAVar_MuNValidHits << " "
365 << fMVAVar_MuNTrackerHits << " "
366 << fMVAVar_MuNPixelHits << " "
367 << fMVAVar_MuNMatches << " "
368 << fMVAVar_MuD0 << " "
369 << fMVAVar_MuIP3d << " "
370 << fMVAVar_MuIP3dSig << " "
371 << fMVAVar_MuTrkKink << " "
372 << fMVAVar_MuSegmentCompatibility << " "
373 << fMVAVar_MuCaloCompatibility << " "
374 << fMVAVar_MuHadEnergyOverPt << " "
375 << fMVAVar_MuHoEnergyOverPt << " "
376 << fMVAVar_MuEmEnergyOverPt << " "
377 << fMVAVar_MuHadS9EnergyOverPt << " "
378 << fMVAVar_MuHoS9EnergyOverPt << " "
379 << fMVAVar_MuEmS9EnergyOverPt << " "
380 << fMVAVar_MuTrkIso03OverPt << " "
381 << fMVAVar_MuEMIso03OverPt << " "
382 << fMVAVar_MuHadIso03OverPt << " "
383 << fMVAVar_MuTrkIso05OverPt << " "
384 << fMVAVar_MuEMIso05OverPt << " "
385 << fMVAVar_MuHadIso05OverPt << " "
386 << " === : === "
387 << mva
388 << std::endl;
389 }
390
391 return mva;
392 }
393
394
395
396 //--------------------------------------------------------------------------------------------------
397 Double_t MuonIDMVA::MVAValue(const Muon *mu, const Vertex *vertex, MuonTools *fMuonTools,
398 const PFCandidateCol *PFCands,
399 const PileupEnergyDensityCol *PileupEnergyDensity,
400 Bool_t printDebug) {
401
402 if (!fIsInitialized) {
403 std::cout << "Error: MuonIDMVA not properly initialized.\n";
404 return -9999;
405 }
406
407 const Track *muTrk=0;
408 if(mu->HasTrackerTrk()) { muTrk = mu->TrackerTrk(); }
409 else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
410
411 Double_t muNchi2 = 0.0;
412 if(mu->HasGlobalTrk()) { muNchi2 = mu->GlobalTrk()->RChi2(); }
413 else if(mu->HasStandaloneTrk()) { muNchi2 = mu->StandaloneTrk()->RChi2(); }
414 else if(mu->HasTrackerTrk()) { muNchi2 = mu->TrackerTrk()->RChi2(); }
415
416 Double_t ChargedIso03 = 0;
417 Double_t NeutralIso03_05Threshold = 0;
418 Double_t ChargedIso04 = 0;
419 Double_t NeutralIso04_05Threshold = 0;
420 ChargedIso03 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.3, 0.0, 0.0);
421 NeutralIso03_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.3, 0.0, 0.0);
422 ChargedIso04 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.4, 0.0, 0.0);
423 NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0);
424
425 Double_t Rho = 0;
426 if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho();
427
428 Int_t subdet = 0;
429 if (fabs(muTrk->Eta()) < 1.479) subdet = 0;
430 else subdet = 1;
431 Int_t ptBin = 0;
432 if (muTrk->Pt() > 14.5) ptBin = 1;
433 if (muTrk->Pt() > 20.0) ptBin = 2;
434
435 //set all input variables
436 fMVAVar_MuTkNchi2 = muTrk->RChi2();
437 fMVAVar_MuGlobalNchi2 = muNchi2;
438 fMVAVar_MuNValidHits = mu->NValidHits();
439 fMVAVar_MuNTrackerHits = muTrk->NHits();
440 fMVAVar_MuNPixelHits = muTrk->NPixelHits();
441 fMVAVar_MuNMatches = mu->NMatches();
442 fMVAVar_MuD0 = muTrk->D0Corrected(*vertex);
443 fMVAVar_MuIP3d = mu->Ip3dPV();
444 fMVAVar_MuIP3dSig = mu->Ip3dPVSignificance();
445 fMVAVar_MuTrkKink = mu->TrkKink();
446 fMVAVar_MuSegmentCompatibility = fMuonTools->GetSegmentCompatability(mu);
447 fMVAVar_MuCaloCompatibility = fMuonTools->GetCaloCompatability(mu, kTRUE, kTRUE);
448 fMVAVar_MuHadEnergyOverPt = (mu->HadEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadEnergy,muTrk->Eta()))/muTrk->Pt();
449 fMVAVar_MuHoEnergyOverPt = (mu->HoEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHoEnergy,muTrk->Eta()))/muTrk->Pt();
450 fMVAVar_MuEmEnergyOverPt = (mu->EmEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEmEnergy,muTrk->Eta()))/muTrk->Pt();
451 fMVAVar_MuHadS9EnergyOverPt = (mu->HadS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadS9Energy,muTrk->Eta()))/muTrk->Pt();
452 fMVAVar_MuHoS9EnergyOverPt = (mu->HoS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHoS9Energy,muTrk->Eta()))/muTrk->Pt();
453 fMVAVar_MuEmS9EnergyOverPt = (mu->EmS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEmS9Energy,muTrk->Eta()))/muTrk->Pt();
454 fMVAVar_MuChargedIso03OverPt = (ChargedIso03 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso03,muTrk->Eta()))/muTrk->Pt();
455 fMVAVar_MuNeutralIso03OverPt = (NeutralIso03_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03,muTrk->Eta()))/muTrk->Pt();
456 fMVAVar_MuChargedIso04OverPt = (ChargedIso04 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso04,muTrk->Eta()))/muTrk->Pt();
457 fMVAVar_MuNeutralIso04OverPt = (NeutralIso04_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso04,muTrk->Eta()))/muTrk->Pt();
458 fMVAVar_MuTrkIso03OverPt = (mu->IsoR03SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso03,muTrk->Eta()))/muTrk->Pt();
459 fMVAVar_MuEMIso03OverPt = (mu->IsoR03EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03,muTrk->Eta()))/muTrk->Pt();
460 fMVAVar_MuHadIso03OverPt = (mu->IsoR03HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03,muTrk->Eta()))/muTrk->Pt();
461 fMVAVar_MuTrkIso05OverPt = (mu->IsoR05SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso05,muTrk->Eta()))/muTrk->Pt();
462 fMVAVar_MuEMIso05OverPt = (mu->IsoR05EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso05,muTrk->Eta()))/muTrk->Pt();
463 fMVAVar_MuHadIso05OverPt = (mu->IsoR05HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso05,muTrk->Eta()))/muTrk->Pt();
464
465 Double_t mva = -9999;
466 TMVA::Reader *reader = 0;
467
468 Int_t MVABin = -1;
469 if (subdet == 0 && ptBin == 0) MVABin = 0;
470 if (subdet == 1 && ptBin == 0) MVABin = 1;
471 if (subdet == 0 && ptBin == 1) MVABin = 2;
472 if (subdet == 1 && ptBin == 1) MVABin = 3;
473 if (subdet == 0 && ptBin == 2) MVABin = 4;
474 if (subdet == 1 && ptBin == 2) MVABin = 5;
475 assert(MVABin >= 0 && MVABin <= 5);
476 reader = fTMVAReader[MVABin];
477
478 mva = reader->EvaluateMVA( fMethodname );
479
480 if (printDebug) {
481 std::cout << "Debug Muon MVA: "
482 << mu->Pt() << " " << mu->Eta() << " " << mu->Phi() << " : "
483 << muTrk->Pt() << " " << muTrk->Eta() << " --> MVABin " << MVABin << " : "
484 << fMVAVar_MuTkNchi2 << " "
485 << fMVAVar_MuGlobalNchi2 << " "
486 << fMVAVar_MuNValidHits << " "
487 << fMVAVar_MuNTrackerHits << " "
488 << fMVAVar_MuNPixelHits << " "
489 << fMVAVar_MuNMatches << " "
490 << fMVAVar_MuD0 << " "
491 << fMVAVar_MuIP3d << " "
492 << fMVAVar_MuIP3dSig << " "
493 << fMVAVar_MuTrkKink << " "
494 << fMVAVar_MuSegmentCompatibility << " "
495 << fMVAVar_MuCaloCompatibility << " "
496 << fMVAVar_MuHadEnergyOverPt << " "
497 << fMVAVar_MuHoEnergyOverPt << " "
498 << fMVAVar_MuEmEnergyOverPt << " "
499 << fMVAVar_MuHadS9EnergyOverPt << " "
500 << fMVAVar_MuHoS9EnergyOverPt << " "
501 << fMVAVar_MuEmS9EnergyOverPt << " "
502 << fMVAVar_MuChargedIso03OverPt << " "
503 << fMVAVar_MuNeutralIso03OverPt << " "
504 << fMVAVar_MuChargedIso04OverPt << " "
505 << fMVAVar_MuNeutralIso04OverPt << " "
506 << fMVAVar_MuTrkIso03OverPt << " "
507 << fMVAVar_MuEMIso03OverPt << " "
508 << fMVAVar_MuHadIso03OverPt << " "
509 << fMVAVar_MuTrkIso05OverPt << " "
510 << fMVAVar_MuEMIso05OverPt << " "
511 << fMVAVar_MuHadIso05OverPt << " "
512 << " === : === "
513 << mva
514 << std::endl;
515 }
516
517 return mva;
518 }