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

# User Rev Content
1 sixie 1.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 sixie 1.2 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 sixie 1.1 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 sixie 1.2
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 sixie 1.1
117 sixie 1.7 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 sixie 1.1 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 sixie 1.2 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 sixie 1.6 Double_t MuNeutralIso04OverPt,
187     Bool_t printDebug
188 sixie 1.1 ) {
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 sixie 1.2 fMVAVar_MuChargedIso03OverPt = MuChargedIso03OverPt;
223     fMVAVar_MuNeutralIso03OverPt = MuNeutralIso03OverPt;
224     fMVAVar_MuChargedIso04OverPt = MuChargedIso04OverPt;
225     fMVAVar_MuNeutralIso04OverPt = MuNeutralIso04OverPt;
226 sixie 1.1
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 sixie 1.6 if (printDebug) {
243 sixie 1.3 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 sixie 1.1 return mva;
273     }
274    
275    
276 sixie 1.7 //--------------------------------------------------------------------------------------------------
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 sixie 1.1
396 sixie 1.4 //--------------------------------------------------------------------------------------------------
397     Double_t MuonIDMVA::MVAValue(const Muon *mu, const Vertex *vertex, MuonTools *fMuonTools,
398     const PFCandidateCol *PFCands,
399 sixie 1.6 const PileupEnergyDensityCol *PileupEnergyDensity,
400     Bool_t printDebug) {
401 sixie 1.1
402 sixie 1.4 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 sixie 1.1
411 sixie 1.4 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 sixie 1.7 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 sixie 1.4 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 sixie 1.7 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 sixie 1.4
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 sixie 1.1
478 sixie 1.4 mva = reader->EvaluateMVA( fMethodname );
479    
480 sixie 1.6 if (printDebug) {
481 sixie 1.4 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 sixie 1.7 << fMVAVar_MuTrkIso03OverPt << " "
507     << fMVAVar_MuEMIso03OverPt << " "
508     << fMVAVar_MuHadIso03OverPt << " "
509     << fMVAVar_MuTrkIso05OverPt << " "
510     << fMVAVar_MuEMIso05OverPt << " "
511     << fMVAVar_MuHadIso05OverPt << " "
512 sixie 1.4 << " === : === "
513     << mva
514     << std::endl;
515     }
516 sixie 1.1
517 sixie 1.4 return mva;
518     }