ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MuonIDMVA.cc
Revision: 1.16
Committed: Sat May 12 00:05:30 2012 UTC (12 years, 11 months ago) by anlevin
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_029c, Mit_029b, Mit_029a, Mit_028a, Mit_028, Mit_027, Mit_027a, HEAD
Changes since 1.15: +4 -2 lines
Log Message:
fixed a problem with the MuonIDMVA get bin function

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 sixie 1.8 fIsInitialized(kFALSE),
19     fMVAType(MuonIDMVA::kUninitialized),
20     fUseBinnedVersion(kTRUE),
21 ceballos 1.15 fNMVABins(0),
22     fTheRhoType(RhoUtilities::DEFAULT)
23 sixie 1.1 {
24     }
25    
26    
27     //--------------------------------------------------------------------------------------------------
28     MuonIDMVA::~MuonIDMVA()
29     {
30 sixie 1.8 for(UInt_t i=0; i<fTMVAReader.size(); ++i) {
31 sixie 1.1 if (fTMVAReader[i]) delete fTMVAReader[i];
32     }
33     }
34    
35     //--------------------------------------------------------------------------------------------------
36 sixie 1.8 void MuonIDMVA::Initialize( std::string methodName,
37 ceballos 1.15 std::string weightsfile,
38     MuonIDMVA::MVAType type,
39     RhoUtilities::RhoType theRhoType)
40 sixie 1.8 {
41    
42     std::vector<std::string> tempWeightFileVector;
43     tempWeightFileVector.push_back(weightsfile);
44 ceballos 1.15 Initialize(methodName,type,kFALSE,tempWeightFileVector,theRhoType);
45 sixie 1.8 }
46    
47     //--------------------------------------------------------------------------------------------------
48 sixie 1.1 void MuonIDMVA::Initialize( TString methodName,
49 ceballos 1.15 TString Subdet0Pt10To20Weights ,
50     TString Subdet1Pt10To20Weights ,
51     TString Subdet2Pt10To20Weights,
52     TString Subdet0Pt20ToInfWeights,
53     TString Subdet1Pt20ToInfWeights,
54     TString Subdet2Pt20ToInfWeights,
55     MuonIDMVA::MVAType type,
56     RhoUtilities::RhoType theRhoType) {
57 sixie 1.8
58     std::vector<std::string> tempWeightFileVector;
59     tempWeightFileVector.push_back(std::string(Subdet0Pt10To20Weights.Data()));
60     tempWeightFileVector.push_back(std::string(Subdet1Pt10To20Weights.Data()));
61     tempWeightFileVector.push_back(std::string(Subdet2Pt10To20Weights.Data()));
62     tempWeightFileVector.push_back(std::string(Subdet0Pt20ToInfWeights.Data()));
63     tempWeightFileVector.push_back(std::string(Subdet1Pt20ToInfWeights.Data()));
64     tempWeightFileVector.push_back(std::string(Subdet2Pt20ToInfWeights.Data()));
65 ceballos 1.15 Initialize(std::string(methodName.Data()),type,kTRUE,tempWeightFileVector,theRhoType);
66 sixie 1.8
67     }
68    
69    
70     //--------------------------------------------------------------------------------------------------
71 ceballos 1.15 void MuonIDMVA::Initialize( std::string methodName,
72     MuonIDMVA::MVAType type,
73     Bool_t useBinnedVersion,
74     std::vector<std::string> weightsfiles,
75     RhoUtilities::RhoType theRhoType) {
76 sixie 1.1
77 sixie 1.8 //clean up first
78     for (uint i=0;i<fTMVAReader.size(); ++i) {
79     if (fTMVAReader[i]) delete fTMVAReader[i];
80     }
81     fTMVAReader.clear();
82    
83    
84     //initialize
85 sixie 1.1 fIsInitialized = kTRUE;
86     fMethodname = methodName;
87 sixie 1.8 fMVAType = type;
88     fUseBinnedVersion = useBinnedVersion;
89 ceballos 1.15 fTheRhoType = theRhoType;
90 sixie 1.8
91     //Define expected number of bins
92     UInt_t ExpectedNBins = 0;
93     if (!fUseBinnedVersion) {
94     ExpectedNBins = 1;
95 ceballos 1.12 } else if (type == kV2
96 sixie 1.9 || type == kV3
97     || type == kV8
98     || type == kIDIsoCombinedDetIso
99     || type == kIsoRingsV0
100     || type == kIDV0
101     || type == kIDIsoCombinedIsoRingsV0
102     ) {
103 sixie 1.8 ExpectedNBins = 6;
104 ceballos 1.12 } else if (type == kIsoDeltaR){
105     ExpectedNBins = 4;
106     }
107    
108 sixie 1.8 fNMVABins = ExpectedNBins;
109    
110     //Check number of weight files given
111     if (fNMVABins != weightsfiles.size() ) {
112     std::cout << "Error: Expected Number of bins = " << fNMVABins << " does not equal to weightsfiles.size() = "
113     << weightsfiles.size() << std::endl;
114     assert(fNMVABins == weightsfiles.size());
115     }
116 sixie 1.1
117 sixie 1.8 for(UInt_t i=0; i<fNMVABins; ++i) {
118     TMVA::Reader *tmpTMVAReader = new TMVA::Reader( "!Color:!Silent:Error" );
119     tmpTMVAReader->SetVerbose(kTRUE);
120 sixie 1.1
121 sixie 1.2 if (type == kV2) {
122 sixie 1.8 tmpTMVAReader->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
123     tmpTMVAReader->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
124     tmpTMVAReader->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
125     tmpTMVAReader->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
126     tmpTMVAReader->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
127     tmpTMVAReader->AddVariable( "NMatches", &fMVAVar_MuNMatches );
128     tmpTMVAReader->AddVariable( "D0", &fMVAVar_MuD0 );
129     tmpTMVAReader->AddVariable( "IP3d", &fMVAVar_MuIP3d );
130     tmpTMVAReader->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
131     tmpTMVAReader->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
132     tmpTMVAReader->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
133 sixie 1.2 }
134    
135 sixie 1.1 if (type == kV3) {
136 sixie 1.8 tmpTMVAReader->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
137     tmpTMVAReader->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
138     tmpTMVAReader->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
139     tmpTMVAReader->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
140     tmpTMVAReader->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
141     tmpTMVAReader->AddVariable( "NMatches", &fMVAVar_MuNMatches );
142     tmpTMVAReader->AddVariable( "D0", &fMVAVar_MuD0 );
143     tmpTMVAReader->AddVariable( "IP3d", &fMVAVar_MuIP3d );
144     tmpTMVAReader->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
145     tmpTMVAReader->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
146     tmpTMVAReader->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
147     tmpTMVAReader->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
148     tmpTMVAReader->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt );
149 sixie 1.1 if (i==0 || i==2 || i==4) {
150 sixie 1.8 tmpTMVAReader->AddVariable( "HoEnergyOverPt", &fMVAVar_MuHoEnergyOverPt );
151 sixie 1.1 }
152 sixie 1.8 tmpTMVAReader->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt );
153     tmpTMVAReader->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt );
154 sixie 1.1 if (i==0 || i==2 || i==4) {
155 sixie 1.8 tmpTMVAReader->AddVariable( "HoS9EnergyOverPt", &fMVAVar_MuHoS9EnergyOverPt );
156 sixie 1.1 }
157 sixie 1.8 tmpTMVAReader->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt );
158 sixie 1.1 }
159 sixie 1.2
160     if (type == kV8) {
161 sixie 1.8 tmpTMVAReader->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
162     tmpTMVAReader->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
163     tmpTMVAReader->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
164     tmpTMVAReader->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
165     tmpTMVAReader->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
166     tmpTMVAReader->AddVariable( "NMatches", &fMVAVar_MuNMatches );
167     tmpTMVAReader->AddVariable( "D0", &fMVAVar_MuD0 );
168     tmpTMVAReader->AddVariable( "IP3d", &fMVAVar_MuIP3d );
169     tmpTMVAReader->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
170     tmpTMVAReader->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
171     tmpTMVAReader->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
172     tmpTMVAReader->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
173     tmpTMVAReader->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt );
174     tmpTMVAReader->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt );
175     tmpTMVAReader->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt );
176     tmpTMVAReader->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt );
177     tmpTMVAReader->AddVariable( "ChargedIso03OverPt", &fMVAVar_MuChargedIso03OverPt );
178     tmpTMVAReader->AddVariable( "NeutralIso03OverPt", &fMVAVar_MuNeutralIso03OverPt );
179     tmpTMVAReader->AddVariable( "ChargedIso04OverPt", &fMVAVar_MuChargedIso04OverPt );
180     tmpTMVAReader->AddVariable( "NeutralIso04OverPt", &fMVAVar_MuNeutralIso04OverPt );
181 sixie 1.2 }
182 sixie 1.1
183 sixie 1.7 if (type == kIDIsoCombinedDetIso) {
184 sixie 1.8 tmpTMVAReader->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
185     tmpTMVAReader->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
186     tmpTMVAReader->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
187     tmpTMVAReader->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
188     tmpTMVAReader->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
189     tmpTMVAReader->AddVariable( "NMatches", &fMVAVar_MuNMatches );
190     tmpTMVAReader->AddVariable( "D0", &fMVAVar_MuD0 );
191     tmpTMVAReader->AddVariable( "IP3d", &fMVAVar_MuIP3d );
192     tmpTMVAReader->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
193     tmpTMVAReader->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
194     tmpTMVAReader->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
195     tmpTMVAReader->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
196     tmpTMVAReader->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt );
197     tmpTMVAReader->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt );
198     tmpTMVAReader->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt );
199     tmpTMVAReader->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt );
200     tmpTMVAReader->AddVariable( "TrkIso03OverPt", &fMVAVar_MuTrkIso03OverPt );
201     tmpTMVAReader->AddVariable( "EMIso03OverPt", &fMVAVar_MuEMIso03OverPt );
202     tmpTMVAReader->AddVariable( "HadIso03OverPt", &fMVAVar_MuHadIso03OverPt );
203     tmpTMVAReader->AddVariable( "TrkIso05OverPt", &fMVAVar_MuTrkIso05OverPt );
204     tmpTMVAReader->AddVariable( "EMIso05OverPt", &fMVAVar_MuEMIso05OverPt );
205     tmpTMVAReader->AddVariable( "HadIso05OverPt", &fMVAVar_MuHadIso05OverPt );
206     }
207    
208 sixie 1.9 if (type == kIDV0) {
209     tmpTMVAReader->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
210     if (i!=4) tmpTMVAReader->AddVariable( "GlobalNchi2",&fMVAVar_MuGlobalNchi2 );
211     if (i!=4) tmpTMVAReader->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
212     tmpTMVAReader->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
213     tmpTMVAReader->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
214     if (i!=5) tmpTMVAReader->AddVariable( "NMatches", &fMVAVar_MuNMatches );
215     tmpTMVAReader->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
216     tmpTMVAReader->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
217     tmpTMVAReader->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
218     tmpTMVAReader->AddVariable( "HadEnergy", &fMVAVar_MuHadEnergy );
219     tmpTMVAReader->AddVariable( "EmEnergy", &fMVAVar_MuEmEnergy );
220     tmpTMVAReader->AddVariable( "HadS9Energy", &fMVAVar_MuHadS9Energy );
221     tmpTMVAReader->AddVariable( "EmS9Energy", &fMVAVar_MuEmS9Energy );
222     }
223    
224 sixie 1.8 if (type == kIsoRingsV0) {
225     tmpTMVAReader->AddVariable( "ChargedIso_DR0p0To0p1", &fMVAVar_ChargedIso_DR0p0To0p1 );
226     tmpTMVAReader->AddVariable( "ChargedIso_DR0p1To0p2", &fMVAVar_ChargedIso_DR0p1To0p2 );
227     tmpTMVAReader->AddVariable( "ChargedIso_DR0p2To0p3", &fMVAVar_ChargedIso_DR0p2To0p3 );
228     tmpTMVAReader->AddVariable( "ChargedIso_DR0p3To0p4", &fMVAVar_ChargedIso_DR0p3To0p4 );
229     tmpTMVAReader->AddVariable( "ChargedIso_DR0p4To0p5", &fMVAVar_ChargedIso_DR0p4To0p5 );
230     tmpTMVAReader->AddVariable( "GammaIso_DR0p0To0p1", &fMVAVar_GammaIso_DR0p0To0p1 );
231     tmpTMVAReader->AddVariable( "GammaIso_DR0p1To0p2", &fMVAVar_GammaIso_DR0p1To0p2 );
232     tmpTMVAReader->AddVariable( "GammaIso_DR0p2To0p3", &fMVAVar_GammaIso_DR0p2To0p3 );
233     tmpTMVAReader->AddVariable( "GammaIso_DR0p3To0p4", &fMVAVar_GammaIso_DR0p3To0p4 );
234     tmpTMVAReader->AddVariable( "GammaIso_DR0p4To0p5", &fMVAVar_GammaIso_DR0p4To0p5 );
235     tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p0To0p1", &fMVAVar_NeutralHadronIso_DR0p0To0p1 );
236     tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p1To0p2", &fMVAVar_NeutralHadronIso_DR0p1To0p2 );
237     tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p2To0p3", &fMVAVar_NeutralHadronIso_DR0p2To0p3 );
238     tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p3To0p4", &fMVAVar_NeutralHadronIso_DR0p3To0p4 );
239     tmpTMVAReader->AddVariable( "NeutralHadronIso_DR0p4To0p5", &fMVAVar_NeutralHadronIso_DR0p4To0p5 );
240 sixie 1.7 }
241 ceballos 1.12
242     if (type == kIsoDeltaR) {
243     tmpTMVAReader->AddVariable("PFCharged", &fMVAVar_MuRelIsoPFCharged );
244     tmpTMVAReader->AddVariable("PFNeutral", &fMVAVar_MuRelIsoPFNeutral );
245     tmpTMVAReader->AddVariable("PFPhotons", &fMVAVar_MuRelIsoPFPhotons );
246     tmpTMVAReader->AddVariable("SumDeltaR", &fMVAVar_MuDeltaRSum );
247     tmpTMVAReader->AddVariable("DeltaRMean", &fMVAVar_MuDeltaRMean );
248     tmpTMVAReader->AddVariable("Density", &fMVAVar_MuDensity );
249     }
250 sixie 1.7
251 sixie 1.8 tmpTMVAReader->BookMVA(fMethodname , weightsfiles[i] );
252     std::cout << "MVABin " << i << " : MethodName = " << fMethodname
253     << " , type == " << type << " , "
254     << "Load weights file : " << weightsfiles[i]
255     << std::endl;
256     fTMVAReader.push_back(tmpTMVAReader);
257 sixie 1.1
258     }
259 sixie 1.8 std::cout << "Muon ID MVA Completed\n";
260     }
261    
262     //--------------------------------------------------------------------------------------------------
263     UInt_t MuonIDMVA::GetMVABin( double eta, double pt,
264     Bool_t isGlobal, Bool_t isTrackerMuon) const {
265    
266     //Default is to return the first bin
267     uint bin = 0;
268    
269     //return the first bin if not using binned version
270     if (!fUseBinnedVersion) return 0;
271    
272     if (fMVAType == MuonIDMVA::kV2
273     || fMVAType == MuonIDMVA::kV3
274     || fMVAType == MuonIDMVA::kV8
275     || fMVAType == MuonIDMVA::kIDIsoCombinedDetIso) {
276     if (pt < 14.5 && fabs(eta) < 1.5) bin = 0;
277     if (pt < 14.5 && fabs(eta) >= 1.5) bin = 1;
278     if (pt >= 14.5 && pt < 20 && fabs(eta) < 1.5) bin = 2;
279     if (pt >= 14.5 && pt < 20 && fabs(eta) >= 1.5) bin = 3;
280     if (pt >= 20 && fabs(eta) < 1.5) bin = 4;
281     if (pt >= 20 && fabs(eta) >= 1.5) bin = 5;
282     }
283    
284 sixie 1.9 if (fMVAType == MuonIDMVA::kIsoRingsV0 || fMVAType == MuonIDMVA::kIDV0
285     || fMVAType == MuonIDMVA::kIDIsoCombinedIsoRingsV0) {
286 sixie 1.8 if (isGlobal && isTrackerMuon) {
287     if (pt < 10 && fabs(eta) < 1.479) bin = 0;
288 sixie 1.9 if (pt >= 10 && fabs(eta) < 1.479) bin = 1;
289     if (pt < 10 && fabs(eta) >= 1.479) bin = 2;
290 sixie 1.8 if (pt >= 10 && fabs(eta) >= 1.479) bin = 3;
291     } else if (!isGlobal && isTrackerMuon) {
292     bin = 4;
293 sixie 1.9 } else if (isGlobal && !isTrackerMuon) {
294     bin = 5;
295 sixie 1.8 } else {
296     std::cout << "Warning: Muon is not a tracker muon. Such muons are not supported. \n";
297     bin = 0;
298     }
299     }
300 sixie 1.1
301 ceballos 1.12 if (fMVAType == MuonIDMVA::kIsoDeltaR){
302     if (pt < 20 && fabs(eta) < 1.479) bin = 0;
303     if (pt < 20 && fabs(eta) >= 1.479) bin = 1;
304     if (pt >= 20 && fabs(eta) < 1.479) bin = 2;
305     if (pt >= 20 && fabs(eta) >= 1.479) bin = 3;
306     }
307    
308 sixie 1.8 return bin;
309 sixie 1.1 }
310    
311     //--------------------------------------------------------------------------------------------------
312     Double_t MuonIDMVA::MVAValue(Double_t MuPt , Double_t MuEta,
313 sixie 1.2 Double_t MuTkNchi2,
314     Double_t MuGlobalNchi2,
315     Double_t MuNValidHits,
316     Double_t MuNTrackerHits,
317     Double_t MuNPixelHits,
318     Double_t MuNMatches,
319     Double_t MuD0,
320     Double_t MuIP3d,
321     Double_t MuIP3dSig,
322     Double_t MuTrkKink,
323     Double_t MuSegmentCompatibility,
324     Double_t MuCaloCompatibility,
325     Double_t MuHadEnergyOverPt,
326     Double_t MuHoEnergyOverPt,
327     Double_t MuEmEnergyOverPt,
328     Double_t MuHadS9EnergyOverPt,
329     Double_t MuHoS9EnergyOverPt,
330     Double_t MuEmS9EnergyOverPt,
331     Double_t MuChargedIso03OverPt,
332     Double_t MuNeutralIso03OverPt,
333     Double_t MuChargedIso04OverPt,
334 sixie 1.6 Double_t MuNeutralIso04OverPt,
335     Bool_t printDebug
336 sixie 1.1 ) {
337    
338     if (!fIsInitialized) {
339     std::cout << "Error: MuonIDMVA not properly initialized.\n";
340     return -9999;
341     }
342    
343    
344     //set all input variables
345     fMVAVar_MuTkNchi2 = MuTkNchi2;
346     fMVAVar_MuGlobalNchi2 = MuGlobalNchi2;
347     fMVAVar_MuNValidHits = MuNValidHits;
348     fMVAVar_MuNTrackerHits = MuNTrackerHits;
349     fMVAVar_MuNPixelHits = MuNPixelHits;
350     fMVAVar_MuNMatches = MuNMatches;
351     fMVAVar_MuD0 = MuD0;
352     fMVAVar_MuIP3d = MuIP3d;
353     fMVAVar_MuIP3dSig = MuIP3dSig;
354     fMVAVar_MuTrkKink = MuTrkKink;
355     fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility;
356     fMVAVar_MuCaloCompatibility = MuCaloCompatibility;
357     fMVAVar_MuHadEnergyOverPt = MuHadEnergyOverPt;
358     fMVAVar_MuHoEnergyOverPt = MuHoEnergyOverPt;
359     fMVAVar_MuEmEnergyOverPt = MuEmEnergyOverPt;
360     fMVAVar_MuHadS9EnergyOverPt = MuHadS9EnergyOverPt;
361     fMVAVar_MuHoS9EnergyOverPt = MuHoS9EnergyOverPt;
362     fMVAVar_MuEmS9EnergyOverPt = MuEmS9EnergyOverPt;
363 sixie 1.2 fMVAVar_MuChargedIso03OverPt = MuChargedIso03OverPt;
364     fMVAVar_MuNeutralIso03OverPt = MuNeutralIso03OverPt;
365     fMVAVar_MuChargedIso04OverPt = MuChargedIso04OverPt;
366     fMVAVar_MuNeutralIso04OverPt = MuNeutralIso04OverPt;
367 sixie 1.1
368     Double_t mva = -9999;
369     TMVA::Reader *reader = 0;
370 sixie 1.8 reader = fTMVAReader[GetMVABin(MuEta, MuPt, kTRUE, kTRUE )];
371 sixie 1.1
372     mva = reader->EvaluateMVA( fMethodname );
373    
374 sixie 1.6 if (printDebug) {
375 sixie 1.3 std::cout << "Debug Muon MVA: "
376 sixie 1.8 << MuPt << " " << MuEta << " --> MVABin " << GetMVABin(MuEta, MuPt, kTRUE, kTRUE ) << " : "
377 sixie 1.3 << fMVAVar_MuTkNchi2 << " "
378     << fMVAVar_MuGlobalNchi2 << " "
379     << fMVAVar_MuNValidHits << " "
380     << fMVAVar_MuNTrackerHits << " "
381     << fMVAVar_MuNPixelHits << " "
382     << fMVAVar_MuNMatches << " "
383     << fMVAVar_MuD0 << " "
384     << fMVAVar_MuIP3d << " "
385     << fMVAVar_MuIP3dSig << " "
386     << fMVAVar_MuTrkKink << " "
387     << fMVAVar_MuSegmentCompatibility << " "
388     << fMVAVar_MuCaloCompatibility << " "
389     << fMVAVar_MuHadEnergyOverPt << " "
390     << fMVAVar_MuHoEnergyOverPt << " "
391     << fMVAVar_MuEmEnergyOverPt << " "
392     << fMVAVar_MuHadS9EnergyOverPt << " "
393     << fMVAVar_MuHoS9EnergyOverPt << " "
394     << fMVAVar_MuEmS9EnergyOverPt << " "
395     << fMVAVar_MuChargedIso03OverPt << " "
396     << fMVAVar_MuNeutralIso03OverPt << " "
397     << fMVAVar_MuChargedIso04OverPt << " "
398     << fMVAVar_MuNeutralIso04OverPt << " "
399     << " === : === "
400     << mva
401     << std::endl;
402     }
403    
404 sixie 1.1 return mva;
405     }
406    
407    
408 sixie 1.7 //--------------------------------------------------------------------------------------------------
409     Double_t MuonIDMVA::MVAValue(Double_t MuPt , Double_t MuEta,
410     Double_t MuTkNchi2,
411     Double_t MuGlobalNchi2,
412     Double_t MuNValidHits,
413     Double_t MuNTrackerHits,
414     Double_t MuNPixelHits,
415     Double_t MuNMatches,
416     Double_t MuD0,
417     Double_t MuIP3d,
418     Double_t MuIP3dSig,
419     Double_t MuTrkKink,
420     Double_t MuSegmentCompatibility,
421     Double_t MuCaloCompatibility,
422     Double_t MuHadEnergyOverPt,
423     Double_t MuHoEnergyOverPt,
424     Double_t MuEmEnergyOverPt,
425     Double_t MuHadS9EnergyOverPt,
426     Double_t MuHoS9EnergyOverPt,
427     Double_t MuEmS9EnergyOverPt,
428     Double_t MuTrkIso03OverPt,
429     Double_t MuEMIso03OverPt,
430     Double_t MuHadIso03OverPt,
431     Double_t MuTrkIso05OverPt,
432     Double_t MuEMIso05OverPt,
433     Double_t MuHadIso05OverPt,
434     Bool_t printDebug
435     ) {
436    
437     if (!fIsInitialized) {
438     std::cout << "Error: MuonIDMVA not properly initialized.\n";
439     return -9999;
440     }
441    
442     //set all input variables
443     fMVAVar_MuTkNchi2 = MuTkNchi2;
444     fMVAVar_MuGlobalNchi2 = MuGlobalNchi2;
445     fMVAVar_MuNValidHits = MuNValidHits;
446     fMVAVar_MuNTrackerHits = MuNTrackerHits;
447     fMVAVar_MuNPixelHits = MuNPixelHits;
448     fMVAVar_MuNMatches = MuNMatches;
449     fMVAVar_MuD0 = MuD0;
450     fMVAVar_MuIP3d = MuIP3d;
451     fMVAVar_MuIP3dSig = MuIP3dSig;
452     fMVAVar_MuTrkKink = MuTrkKink;
453     fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility;
454     fMVAVar_MuCaloCompatibility = MuCaloCompatibility;
455     fMVAVar_MuHadEnergyOverPt = MuHadEnergyOverPt;
456     fMVAVar_MuHoEnergyOverPt = MuHoEnergyOverPt;
457     fMVAVar_MuEmEnergyOverPt = MuEmEnergyOverPt;
458     fMVAVar_MuHadS9EnergyOverPt = MuHadS9EnergyOverPt;
459     fMVAVar_MuHoS9EnergyOverPt = MuHoS9EnergyOverPt;
460     fMVAVar_MuEmS9EnergyOverPt = MuEmS9EnergyOverPt;
461     fMVAVar_MuTrkIso03OverPt = MuTrkIso03OverPt;
462     fMVAVar_MuEMIso03OverPt = MuEMIso03OverPt;
463     fMVAVar_MuHadIso03OverPt = MuHadIso03OverPt;
464     fMVAVar_MuTrkIso05OverPt = MuTrkIso05OverPt;
465     fMVAVar_MuEMIso05OverPt = MuEMIso05OverPt;
466     fMVAVar_MuHadIso05OverPt = MuHadIso05OverPt;
467    
468     Double_t mva = -9999;
469     TMVA::Reader *reader = 0;
470 sixie 1.8 reader = fTMVAReader[GetMVABin(MuEta, MuPt, kTRUE, kTRUE )];
471 sixie 1.7
472     mva = reader->EvaluateMVA( fMethodname );
473    
474     if (printDebug) {
475     std::cout << "Debug Muon MVA: "
476 sixie 1.8 << MuPt << " " << MuEta << " --> MVABin " << GetMVABin(MuEta, MuPt, kTRUE, kTRUE ) << " : "
477 sixie 1.7 << fMVAVar_MuTkNchi2 << " "
478     << fMVAVar_MuGlobalNchi2 << " "
479     << fMVAVar_MuNValidHits << " "
480     << fMVAVar_MuNTrackerHits << " "
481     << fMVAVar_MuNPixelHits << " "
482     << fMVAVar_MuNMatches << " "
483     << fMVAVar_MuD0 << " "
484     << fMVAVar_MuIP3d << " "
485     << fMVAVar_MuIP3dSig << " "
486     << fMVAVar_MuTrkKink << " "
487     << fMVAVar_MuSegmentCompatibility << " "
488     << fMVAVar_MuCaloCompatibility << " "
489     << fMVAVar_MuHadEnergyOverPt << " "
490     << fMVAVar_MuHoEnergyOverPt << " "
491     << fMVAVar_MuEmEnergyOverPt << " "
492     << fMVAVar_MuHadS9EnergyOverPt << " "
493     << fMVAVar_MuHoS9EnergyOverPt << " "
494     << fMVAVar_MuEmS9EnergyOverPt << " "
495     << fMVAVar_MuTrkIso03OverPt << " "
496     << fMVAVar_MuEMIso03OverPt << " "
497     << fMVAVar_MuHadIso03OverPt << " "
498     << fMVAVar_MuTrkIso05OverPt << " "
499     << fMVAVar_MuEMIso05OverPt << " "
500     << fMVAVar_MuHadIso05OverPt << " "
501     << " === : === "
502     << mva
503     << std::endl;
504     }
505    
506     return mva;
507     }
508    
509    
510 sixie 1.9 Double_t MuonIDMVA::MVAValue_IsoRings( Double_t MuPt,
511     Double_t MuEta,
512 anlevin 1.16 Bool_t MuIsGlobal,
513     Bool_t MuIsTracker,
514 sixie 1.9 Double_t ChargedIso_DR0p0To0p1,
515     Double_t ChargedIso_DR0p1To0p2,
516     Double_t ChargedIso_DR0p2To0p3,
517     Double_t ChargedIso_DR0p3To0p4,
518     Double_t ChargedIso_DR0p4To0p5,
519     Double_t GammaIso_DR0p0To0p1,
520     Double_t GammaIso_DR0p1To0p2,
521     Double_t GammaIso_DR0p2To0p3,
522     Double_t GammaIso_DR0p3To0p4,
523     Double_t GammaIso_DR0p4To0p5,
524     Double_t NeutralHadronIso_DR0p0To0p1,
525     Double_t NeutralHadronIso_DR0p1To0p2,
526     Double_t NeutralHadronIso_DR0p2To0p3,
527     Double_t NeutralHadronIso_DR0p3To0p4,
528     Double_t NeutralHadronIso_DR0p4To0p5,
529     Bool_t printDebug) {
530    
531     if (fMVAType != MuonIDMVA::kIsoRingsV0) {
532     std::cout << "Error: This function is only supported for MVAType == kIsoRingsV0.\n" << std::endl;
533     assert(kFALSE);
534     }
535    
536     fMVAVar_MuPt = MuPt;
537     fMVAVar_MuEta = MuEta;
538     fMVAVar_ChargedIso_DR0p0To0p1 = ChargedIso_DR0p0To0p1;
539     fMVAVar_ChargedIso_DR0p1To0p2 = ChargedIso_DR0p1To0p2;
540     fMVAVar_ChargedIso_DR0p2To0p3 = ChargedIso_DR0p2To0p3;
541     fMVAVar_ChargedIso_DR0p3To0p4 = ChargedIso_DR0p3To0p4;
542     fMVAVar_ChargedIso_DR0p4To0p5 = ChargedIso_DR0p4To0p5;
543     fMVAVar_GammaIso_DR0p0To0p1 = GammaIso_DR0p0To0p1;
544     fMVAVar_GammaIso_DR0p1To0p2 = GammaIso_DR0p1To0p2;
545     fMVAVar_GammaIso_DR0p2To0p3 = GammaIso_DR0p2To0p3;
546     fMVAVar_GammaIso_DR0p3To0p4 = GammaIso_DR0p3To0p4;
547     fMVAVar_GammaIso_DR0p4To0p5 = GammaIso_DR0p4To0p5;
548     fMVAVar_NeutralHadronIso_DR0p0To0p1 = NeutralHadronIso_DR0p0To0p1;
549     fMVAVar_NeutralHadronIso_DR0p1To0p2 = NeutralHadronIso_DR0p1To0p2;
550     fMVAVar_NeutralHadronIso_DR0p2To0p3 = NeutralHadronIso_DR0p2To0p3;
551     fMVAVar_NeutralHadronIso_DR0p3To0p4 = NeutralHadronIso_DR0p3To0p4;
552     fMVAVar_NeutralHadronIso_DR0p4To0p5 = NeutralHadronIso_DR0p4To0p5;
553    
554     Double_t mva = -9999;
555     TMVA::Reader *reader = 0;
556    
557     if (printDebug == kTRUE) {
558     std::cout <<" -> BIN: " << fMVAVar_MuEta << " " << fMVAVar_MuPt << " : "
559 anlevin 1.16 << GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker) << std::endl;
560 sixie 1.9 }
561 anlevin 1.16 reader = fTMVAReader[GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker)];
562 sixie 1.9 mva = reader->EvaluateMVA( fMethodname );
563    
564     if (printDebug == kTRUE) {
565    
566     std::cout << "Debug Muon MVA: \n";
567     std::cout << fMVAVar_ChargedIso_DR0p0To0p1 << " "
568     << fMVAVar_ChargedIso_DR0p1To0p2 << " "
569     << fMVAVar_ChargedIso_DR0p2To0p3 << " "
570     << fMVAVar_ChargedIso_DR0p3To0p4 << " "
571     << fMVAVar_ChargedIso_DR0p4To0p5 << " "
572     << fMVAVar_GammaIso_DR0p0To0p1 << " "
573     << fMVAVar_GammaIso_DR0p1To0p2 << " "
574     << fMVAVar_GammaIso_DR0p2To0p3 << " "
575     << fMVAVar_GammaIso_DR0p3To0p4 << " "
576     << fMVAVar_GammaIso_DR0p4To0p5 << " "
577     << fMVAVar_NeutralHadronIso_DR0p0To0p1 << " "
578     << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
579     << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
580     << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
581     << fMVAVar_NeutralHadronIso_DR0p4To0p5 << " "
582     << std::endl;
583     std::cout << "MVA: " << mva << " "
584     << std::endl;
585     }
586     return mva;
587     }
588    
589    
590    
591     Double_t MuonIDMVA::MVAValue_ID( Double_t MuPt,
592     Double_t MuEta,
593     Bool_t MuIsGlobal,
594     Bool_t MuIsTracker,
595     Double_t MuTkNchi2,
596     Double_t MuGlobalNchi2,
597     Double_t MuNValidHits,
598     Double_t MuNTrackerHits,
599     Double_t MuNPixelHits,
600     Double_t MuNMatches,
601     Double_t MuTrkKink,
602     Double_t MuSegmentCompatibility,
603     Double_t MuCaloCompatibility,
604     Double_t MuHadEnergy,
605     Double_t MuEmEnergy,
606     Double_t MuHadS9Energy,
607     Double_t MuEmS9Energy,
608     Bool_t printDebug) {
609    
610     if (fMVAType != MuonIDMVA::kIDV0) {
611     std::cout << "Error: This function is only supported for MVAType == kIDV0.\n" << std::endl;
612     assert(kFALSE);
613     }
614    
615     fMVAVar_MuPt = MuPt;
616     fMVAVar_MuEta = MuEta;
617    
618     fMVAVar_MuTkNchi2 = MuTkNchi2;
619     fMVAVar_MuGlobalNchi2 = MuGlobalNchi2;
620     fMVAVar_MuNValidHits = MuNValidHits;
621     fMVAVar_MuNTrackerHits = MuNTrackerHits;
622     fMVAVar_MuNPixelHits = MuNPixelHits;
623     fMVAVar_MuNMatches = MuNMatches;
624     fMVAVar_MuTrkKink = MuTrkKink;
625     fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility;
626     fMVAVar_MuCaloCompatibility = MuCaloCompatibility;
627     fMVAVar_MuHadEnergy = MuHadEnergy;
628     fMVAVar_MuEmEnergy = MuEmEnergy;
629     fMVAVar_MuHadS9Energy = MuHadS9Energy;
630     fMVAVar_MuEmS9Energy = MuEmS9Energy;
631    
632     Double_t mva = -9999;
633     TMVA::Reader *reader = 0;
634    
635     if (printDebug == kTRUE) {
636     std::cout <<" -> BIN: " << fMVAVar_MuEta << " " << fMVAVar_MuPt << " : "
637     << GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker) << std::endl;
638     }
639     reader = fTMVAReader[GetMVABin( fMVAVar_MuEta , fMVAVar_MuPt, MuIsGlobal, MuIsTracker)];
640     mva = reader->EvaluateMVA( fMethodname );
641    
642     if (printDebug == kTRUE) {
643    
644     std::cout << "Debug Muon MVA: \n";
645     std::cout << fMVAVar_MuTkNchi2 << " "
646     << fMVAVar_MuGlobalNchi2 << " "
647     << fMVAVar_MuNValidHits << " "
648     << fMVAVar_MuNTrackerHits << " "
649     << fMVAVar_MuNPixelHits << " "
650     << fMVAVar_MuNMatches << " "
651     << fMVAVar_MuTrkKink << " "
652     << fMVAVar_MuSegmentCompatibility << " "
653     << fMVAVar_MuCaloCompatibility << " "
654     << fMVAVar_MuHadEnergy << " "
655     << fMVAVar_MuEmEnergy << " "
656     << fMVAVar_MuHadS9Energy << " "
657     << fMVAVar_MuEmS9Energy << " "
658     << std::endl;
659     std::cout << "MVA: " << mva << " "
660     << std::endl;
661     }
662     return mva;
663     }
664    
665    
666 sixie 1.1
667 sixie 1.4 //--------------------------------------------------------------------------------------------------
668     Double_t MuonIDMVA::MVAValue(const Muon *mu, const Vertex *vertex, MuonTools *fMuonTools,
669     const PFCandidateCol *PFCands,
670 sixie 1.6 const PileupEnergyDensityCol *PileupEnergyDensity,
671     Bool_t printDebug) {
672 sixie 1.1
673 sixie 1.4 if (!fIsInitialized) {
674     std::cout << "Error: MuonIDMVA not properly initialized.\n";
675     return -9999;
676     }
677    
678     const Track *muTrk=0;
679     if(mu->HasTrackerTrk()) { muTrk = mu->TrackerTrk(); }
680     else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
681 sixie 1.1
682 sixie 1.4 Double_t muNchi2 = 0.0;
683     if(mu->HasGlobalTrk()) { muNchi2 = mu->GlobalTrk()->RChi2(); }
684     else if(mu->HasStandaloneTrk()) { muNchi2 = mu->StandaloneTrk()->RChi2(); }
685     else if(mu->HasTrackerTrk()) { muNchi2 = mu->TrackerTrk()->RChi2(); }
686    
687 sixie 1.7 Double_t ChargedIso03 = 0;
688     Double_t NeutralIso03_05Threshold = 0;
689     Double_t ChargedIso04 = 0;
690     Double_t NeutralIso04_05Threshold = 0;
691     ChargedIso03 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.3, 0.0, 0.0);
692     NeutralIso03_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.3, 0.0, 0.0);
693     ChargedIso04 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.4, 0.0, 0.0);
694     NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0);
695    
696 sixie 1.4 Double_t Rho = 0;
697 ceballos 1.15 switch(fTheRhoType) {
698     case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
699     Rho = PileupEnergyDensity->At(0)->Rho();
700     break;
701     case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
702     Rho = PileupEnergyDensity->At(0)->RhoLowEta();
703     break;
704     case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
705     Rho = PileupEnergyDensity->At(0)->RhoRandom();
706     break;
707     case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
708     Rho = PileupEnergyDensity->At(0)->RhoRandomLowEta();
709     break;
710     case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
711     Rho = PileupEnergyDensity->At(0)->RhoKt6PFJets();
712     break;
713     default:
714     // use the old default
715     Rho = PileupEnergyDensity->At(0)->Rho();
716     break;
717     }
718 sixie 1.8
719 sixie 1.4 //set all input variables
720     fMVAVar_MuTkNchi2 = muTrk->RChi2();
721     fMVAVar_MuGlobalNchi2 = muNchi2;
722     fMVAVar_MuNValidHits = mu->NValidHits();
723     fMVAVar_MuNTrackerHits = muTrk->NHits();
724     fMVAVar_MuNPixelHits = muTrk->NPixelHits();
725     fMVAVar_MuNMatches = mu->NMatches();
726     fMVAVar_MuD0 = muTrk->D0Corrected(*vertex);
727     fMVAVar_MuIP3d = mu->Ip3dPV();
728     fMVAVar_MuIP3dSig = mu->Ip3dPVSignificance();
729     fMVAVar_MuTrkKink = mu->TrkKink();
730     fMVAVar_MuSegmentCompatibility = fMuonTools->GetSegmentCompatability(mu);
731     fMVAVar_MuCaloCompatibility = fMuonTools->GetCaloCompatability(mu, kTRUE, kTRUE);
732     fMVAVar_MuHadEnergyOverPt = (mu->HadEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadEnergy,muTrk->Eta()))/muTrk->Pt();
733     fMVAVar_MuHoEnergyOverPt = (mu->HoEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHoEnergy,muTrk->Eta()))/muTrk->Pt();
734     fMVAVar_MuEmEnergyOverPt = (mu->EmEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEmEnergy,muTrk->Eta()))/muTrk->Pt();
735     fMVAVar_MuHadS9EnergyOverPt = (mu->HadS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadS9Energy,muTrk->Eta()))/muTrk->Pt();
736     fMVAVar_MuHoS9EnergyOverPt = (mu->HoS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHoS9Energy,muTrk->Eta()))/muTrk->Pt();
737     fMVAVar_MuEmS9EnergyOverPt = (mu->EmS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEmS9Energy,muTrk->Eta()))/muTrk->Pt();
738     fMVAVar_MuChargedIso03OverPt = (ChargedIso03 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso03,muTrk->Eta()))/muTrk->Pt();
739     fMVAVar_MuNeutralIso03OverPt = (NeutralIso03_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03,muTrk->Eta()))/muTrk->Pt();
740     fMVAVar_MuChargedIso04OverPt = (ChargedIso04 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso04,muTrk->Eta()))/muTrk->Pt();
741     fMVAVar_MuNeutralIso04OverPt = (NeutralIso04_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso04,muTrk->Eta()))/muTrk->Pt();
742 sixie 1.7 fMVAVar_MuTrkIso03OverPt = (mu->IsoR03SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso03,muTrk->Eta()))/muTrk->Pt();
743     fMVAVar_MuEMIso03OverPt = (mu->IsoR03EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03,muTrk->Eta()))/muTrk->Pt();
744     fMVAVar_MuHadIso03OverPt = (mu->IsoR03HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03,muTrk->Eta()))/muTrk->Pt();
745     fMVAVar_MuTrkIso05OverPt = (mu->IsoR05SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso05,muTrk->Eta()))/muTrk->Pt();
746     fMVAVar_MuEMIso05OverPt = (mu->IsoR05EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso05,muTrk->Eta()))/muTrk->Pt();
747     fMVAVar_MuHadIso05OverPt = (mu->IsoR05HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso05,muTrk->Eta()))/muTrk->Pt();
748 sixie 1.4
749     Double_t mva = -9999;
750     TMVA::Reader *reader = 0;
751 sixie 1.8 reader = fTMVAReader[GetMVABin(muTrk->Eta(), muTrk->Pt(), mu->IsGlobalMuon(), mu->IsTrackerMuon())];
752 sixie 1.1
753 sixie 1.4 mva = reader->EvaluateMVA( fMethodname );
754    
755 sixie 1.6 if (printDebug) {
756 sixie 1.4 std::cout << "Debug Muon MVA: "
757     << mu->Pt() << " " << mu->Eta() << " " << mu->Phi() << " : "
758 sixie 1.8 << muTrk->Pt() << " " << muTrk->Eta() << " --> MVABin " << GetMVABin(muTrk->Eta(), muTrk->Pt(), mu->IsGlobalMuon(), mu->IsTrackerMuon()) << " : "
759 sixie 1.4 << fMVAVar_MuTkNchi2 << " "
760     << fMVAVar_MuGlobalNchi2 << " "
761     << fMVAVar_MuNValidHits << " "
762     << fMVAVar_MuNTrackerHits << " "
763     << fMVAVar_MuNPixelHits << " "
764     << fMVAVar_MuNMatches << " "
765     << fMVAVar_MuD0 << " "
766     << fMVAVar_MuIP3d << " "
767     << fMVAVar_MuIP3dSig << " "
768     << fMVAVar_MuTrkKink << " "
769     << fMVAVar_MuSegmentCompatibility << " "
770     << fMVAVar_MuCaloCompatibility << " "
771     << fMVAVar_MuHadEnergyOverPt << " "
772     << fMVAVar_MuHoEnergyOverPt << " "
773     << fMVAVar_MuEmEnergyOverPt << " "
774     << fMVAVar_MuHadS9EnergyOverPt << " "
775     << fMVAVar_MuHoS9EnergyOverPt << " "
776     << fMVAVar_MuEmS9EnergyOverPt << " "
777     << fMVAVar_MuChargedIso03OverPt << " "
778     << fMVAVar_MuNeutralIso03OverPt << " "
779     << fMVAVar_MuChargedIso04OverPt << " "
780     << fMVAVar_MuNeutralIso04OverPt << " "
781 sixie 1.7 << fMVAVar_MuTrkIso03OverPt << " "
782     << fMVAVar_MuEMIso03OverPt << " "
783     << fMVAVar_MuHadIso03OverPt << " "
784     << fMVAVar_MuTrkIso05OverPt << " "
785     << fMVAVar_MuEMIso05OverPt << " "
786     << fMVAVar_MuHadIso05OverPt << " "
787 sixie 1.4 << " === : === "
788     << mva
789     << std::endl;
790     }
791 sixie 1.1
792 sixie 1.4 return mva;
793     }
794 sixie 1.8
795    
796     //--------------------------------------------------------------------------------------------------
797     Double_t MuonIDMVA::MVAValue(const Muon *mu, const Vertex *vertex, MuonTools *fMuonTools,
798     const PFCandidateCol *PFCands,
799     const PileupEnergyDensityCol *PileupEnergyDensity,
800     MuonTools::EMuonEffectiveAreaTarget EffectiveAreaTarget,
801     const ElectronCol *goodElectrons,
802     const MuonCol *goodMuons,
803     Bool_t printDebug) {
804    
805     if (!fIsInitialized) {
806     std::cout << "Error: MuonIDMVA not properly initialized.\n";
807     return -9999;
808     }
809    
810     const Track *muTrk=0;
811     if(mu->HasTrackerTrk()) { muTrk = mu->TrackerTrk(); }
812     else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
813    
814     Double_t muNchi2 = 0.0;
815     if(mu->HasGlobalTrk()) { muNchi2 = mu->GlobalTrk()->RChi2(); }
816     else if(mu->HasStandaloneTrk()) { muNchi2 = mu->StandaloneTrk()->RChi2(); }
817     else if(mu->HasTrackerTrk()) { muNchi2 = mu->TrackerTrk()->RChi2(); }
818    
819     Double_t ChargedIso03 = 0;
820     Double_t NeutralIso03_05Threshold = 0;
821     Double_t ChargedIso04 = 0;
822     Double_t NeutralIso04_05Threshold = 0;
823     ChargedIso03 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.3, 0.0, 0.0);
824     NeutralIso03_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.3, 0.0, 0.0);
825     ChargedIso04 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.4, 0.0, 0.0);
826     NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0);
827    
828     Double_t Rho = 0;
829 ceballos 1.15 switch(fTheRhoType) {
830     case RhoUtilities::MIT_RHO_VORONOI_HIGH_ETA:
831     Rho = PileupEnergyDensity->At(0)->Rho();
832     break;
833     case RhoUtilities::MIT_RHO_VORONOI_LOW_ETA:
834     Rho = PileupEnergyDensity->At(0)->RhoLowEta();
835     break;
836     case RhoUtilities::MIT_RHO_RANDOM_HIGH_ETA:
837     Rho = PileupEnergyDensity->At(0)->RhoRandom();
838     break;
839     case RhoUtilities::MIT_RHO_RANDOM_LOW_ETA:
840     Rho = PileupEnergyDensity->At(0)->RhoRandomLowEta();
841     break;
842     case RhoUtilities::CMS_RHO_RHOKT6PFJETS:
843     Rho = PileupEnergyDensity->At(0)->RhoKt6PFJets();
844     break;
845     default:
846     // use the old default
847     Rho = PileupEnergyDensity->At(0)->Rho();
848     break;
849     }
850 sixie 1.8
851     //set all input variables
852     fMVAVar_MuPt = muTrk->Pt();
853     fMVAVar_MuEta = muTrk->Eta();
854     fMVAVar_MuTkNchi2 = muTrk->RChi2();
855     fMVAVar_MuGlobalNchi2 = muNchi2;
856     fMVAVar_MuNValidHits = mu->NValidHits();
857     fMVAVar_MuNTrackerHits = muTrk->NHits();
858     fMVAVar_MuNPixelHits = muTrk->NPixelHits();
859     fMVAVar_MuNMatches = mu->NMatches();
860     fMVAVar_MuD0 = muTrk->D0Corrected(*vertex);
861     fMVAVar_MuIP3d = mu->Ip3dPV();
862     fMVAVar_MuIP3dSig = mu->Ip3dPVSignificance();
863     fMVAVar_MuTrkKink = mu->TrkKink();
864     fMVAVar_MuSegmentCompatibility = fMuonTools->GetSegmentCompatability(mu);
865     fMVAVar_MuCaloCompatibility = fMuonTools->GetCaloCompatability(mu, kTRUE, kTRUE);
866     fMVAVar_MuHadEnergy = mu->HadEnergy() ;
867     fMVAVar_MuEmEnergy = mu->EmEnergy();
868     fMVAVar_MuHadS9Energy = mu->HadS9Energy();
869     fMVAVar_MuEmS9Energy = mu->EmS9Energy();
870     fMVAVar_MuChargedIso03OverPt = (ChargedIso03 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso03,muTrk->Eta()))/muTrk->Pt();
871     fMVAVar_MuNeutralIso03OverPt = (NeutralIso03_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03,muTrk->Eta()))/muTrk->Pt();
872     fMVAVar_MuChargedIso04OverPt = (ChargedIso04 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso04,muTrk->Eta()))/muTrk->Pt();
873     fMVAVar_MuNeutralIso04OverPt = (NeutralIso04_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso04,muTrk->Eta()))/muTrk->Pt();
874     fMVAVar_MuTrkIso03OverPt = (mu->IsoR03SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso03,muTrk->Eta()))/muTrk->Pt();
875     fMVAVar_MuEMIso03OverPt = (mu->IsoR03EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03,muTrk->Eta()))/muTrk->Pt();
876     fMVAVar_MuHadIso03OverPt = (mu->IsoR03HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03,muTrk->Eta()))/muTrk->Pt();
877     fMVAVar_MuTrkIso05OverPt = (mu->IsoR05SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso05,muTrk->Eta()))/muTrk->Pt();
878     fMVAVar_MuEMIso05OverPt = (mu->IsoR05EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso05,muTrk->Eta()))/muTrk->Pt();
879     fMVAVar_MuHadIso05OverPt = (mu->IsoR05HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso05,muTrk->Eta()))/muTrk->Pt();
880    
881    
882     Double_t tmpChargedIso_DR0p0To0p1 = 0;
883     Double_t tmpChargedIso_DR0p1To0p2 = 0;
884     Double_t tmpChargedIso_DR0p2To0p3 = 0;
885     Double_t tmpChargedIso_DR0p3To0p4 = 0;
886     Double_t tmpChargedIso_DR0p4To0p5 = 0;
887     Double_t tmpGammaIso_DR0p0To0p1 = 0;
888     Double_t tmpGammaIso_DR0p1To0p2 = 0;
889     Double_t tmpGammaIso_DR0p2To0p3 = 0;
890     Double_t tmpGammaIso_DR0p3To0p4 = 0;
891     Double_t tmpGammaIso_DR0p4To0p5 = 0;
892     Double_t tmpNeutralHadronIso_DR0p0To0p1 = 0;
893     Double_t tmpNeutralHadronIso_DR0p1To0p2 = 0;
894     Double_t tmpNeutralHadronIso_DR0p2To0p3 = 0;
895     Double_t tmpNeutralHadronIso_DR0p3To0p4 = 0;
896     Double_t tmpNeutralHadronIso_DR0p4To0p5 = 0;
897    
898 ceballos 1.12 Double_t tmpMuDeltaRMean = 0;
899     Double_t tmpMuDeltaRSum = 0;
900     Double_t tmpMuDensity = 0;
901     Double_t tmpMuNPFCand = 0;
902    
903 sixie 1.8 for (UInt_t p=0; p<PFCands->GetEntries();p++) {
904     const PFCandidate *pf = PFCands->At(p);
905    
906     //exclude the muon itself
907     if(pf->TrackerTrk() && mu->TrackerTrk() &&
908     pf->TrackerTrk() == mu->TrackerTrk()) continue;
909    
910     //************************************************************
911     // New Isolation Calculations
912     //************************************************************
913     Double_t dr = MathUtils::DeltaR(mu->Mom(), pf->Mom());
914    
915     if (dr < 0.5) {
916     Bool_t IsLeptonFootprint = kFALSE;
917     //************************************************************
918     // Lepton Footprint Removal
919     //************************************************************
920 vdutta 1.11 if(goodElectrons) {
921     for (UInt_t q=0; q < goodElectrons->GetEntries() ; ++q) {
922     //if pf candidate matches an electron passing ID cuts, then veto it
923     if(pf->GsfTrk() && goodElectrons->At(q)->GsfTrk() &&
924     pf->GsfTrk() == goodElectrons->At(q)->GsfTrk()) IsLeptonFootprint = kTRUE;
925     if(pf->TrackerTrk() && goodElectrons->At(q)->TrackerTrk() &&
926     pf->TrackerTrk() == goodElectrons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
927     //if pf candidate lies in veto regions of electron passing ID cuts, then veto it
928     if(pf->BestTrk() && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479
929     && MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.015) IsLeptonFootprint = kTRUE;
930     if(pf->PFType() == PFCandidate::eGamma && fabs(goodElectrons->At(q)->SCluster()->Eta()) >= 1.479 &&
931     MathUtils::DeltaR(goodElectrons->At(q)->Mom(), pf->Mom()) < 0.08) IsLeptonFootprint = kTRUE;
932     }
933 sixie 1.8 }
934 vdutta 1.11 if(goodMuons) {
935     for (UInt_t q=0; q < goodMuons->GetEntries() ; ++q) {
936     //if pf candidate matches an muon passing ID cuts, then veto it
937     if(pf->TrackerTrk() && goodMuons->At(q)->TrackerTrk() &&
938     pf->TrackerTrk() == goodMuons->At(q)->TrackerTrk()) IsLeptonFootprint = kTRUE;
939     //if pf candidate lies in veto regions of muon passing ID cuts, then veto it
940     if(pf->BestTrk() && MathUtils::DeltaR(goodMuons->At(q)->Mom(), pf->Mom()) < 0.01) IsLeptonFootprint = kTRUE;
941     }
942 sixie 1.8 }
943    
944     if (!IsLeptonFootprint) {
945     Bool_t passVeto = kTRUE;
946     //Charged
947     if(pf->BestTrk()) {
948     if (!(fabs(pf->BestTrk()->DzCorrected(*vertex) - mu->BestTrk()->DzCorrected(*vertex)) < 0.2)) passVeto = kFALSE;
949     //************************************************************
950     // Veto any PFmuon, or PFEle
951     if (pf->PFType() == PFCandidate::eElectron || pf->PFType() == PFCandidate::eMuon) passVeto = kFALSE;
952     //************************************************************
953     //************************************************************
954     // Footprint Veto
955     if (dr < 0.01) passVeto = kFALSE;
956     //************************************************************
957     if (passVeto) {
958     if (dr < 0.1) tmpChargedIso_DR0p0To0p1 += pf->Pt();
959     if (dr >= 0.1 && dr < 0.2) tmpChargedIso_DR0p1To0p2 += pf->Pt();
960     if (dr >= 0.2 && dr < 0.3) tmpChargedIso_DR0p2To0p3 += pf->Pt();
961     if (dr >= 0.3 && dr < 0.4) tmpChargedIso_DR0p3To0p4 += pf->Pt();
962     if (dr >= 0.4 && dr < 0.5) tmpChargedIso_DR0p4To0p5 += pf->Pt();
963     } //pass veto
964     }
965     //Gamma
966     else if (pf->PFType() == PFCandidate::eGamma) {
967     if (dr < 0.1) tmpGammaIso_DR0p0To0p1 += pf->Pt();
968     if (dr >= 0.1 && dr < 0.2) tmpGammaIso_DR0p1To0p2 += pf->Pt();
969     if (dr >= 0.2 && dr < 0.3) tmpGammaIso_DR0p2To0p3 += pf->Pt();
970     if (dr >= 0.3 && dr < 0.4) tmpGammaIso_DR0p3To0p4 += pf->Pt();
971     if (dr >= 0.4 && dr < 0.5) tmpGammaIso_DR0p4To0p5 += pf->Pt();
972     }
973     //NeutralHadron
974     else {
975     if (dr < 0.1) tmpNeutralHadronIso_DR0p0To0p1 += pf->Pt();
976     if (dr >= 0.1 && dr < 0.2) tmpNeutralHadronIso_DR0p1To0p2 += pf->Pt();
977     if (dr >= 0.2 && dr < 0.3) tmpNeutralHadronIso_DR0p2To0p3 += pf->Pt();
978     if (dr >= 0.3 && dr < 0.4) tmpNeutralHadronIso_DR0p3To0p4 += pf->Pt();
979     if (dr >= 0.4 && dr < 0.5) tmpNeutralHadronIso_DR0p4To0p5 += pf->Pt();
980     }
981 ceballos 1.12
982     if (dr < 0.5) {
983     tmpMuNPFCand++;
984     tmpMuDeltaRMean += dr;
985     tmpMuDeltaRSum += dr;
986     tmpMuDensity += pf->Pt() / dr;
987     }
988 sixie 1.8 } //not lepton footprint
989     } //in 1.0 dr cone
990     } //loop over PF candidates
991    
992 anlevin 1.10 // Double_t fMVAVar_ChargedIso_DR0p0To0p1 = 0;
993     // Double_t fMVAVar_ChargedIso_DR0p1To0p2 = 0;
994     // Double_t fMVAVar_ChargedIso_DR0p2To0p3 = 0;
995     // Double_t fMVAVar_ChargedIso_DR0p3To0p4 = 0;
996     // Double_t fMVAVar_ChargedIso_DR0p4To0p5 = 0;
997     // Double_t fMVAVar_GammaIso_DR0p0To0p1 = 0;
998     // Double_t fMVAVar_GammaIso_DR0p1To0p2 = 0;
999     // Double_t fMVAVar_GammaIso_DR0p2To0p3 = 0;
1000     // Double_t fMVAVar_GammaIso_DR0p3To0p4 = 0;
1001     // Double_t fMVAVar_GammaIso_DR0p4To0p5 = 0;
1002     // Double_t fMVAVar_NeutralHadronIso_DR0p0To0p1 = 0;
1003     // Double_t fMVAVar_NeutralHadronIso_DR0p1To0p2 = 0;
1004     // Double_t fMVAVar_NeutralHadronIso_DR0p2To0p3 = 0;
1005     // Double_t fMVAVar_NeutralHadronIso_DR0p3To0p4 = 0;
1006     // Double_t fMVAVar_NeutralHadronIso_DR0p4To0p5 = 0;
1007 sixie 1.8
1008 ceballos 1.12 fMVAVar_ChargedIso_DR0p0To0p1 = TMath::Min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
1009     fMVAVar_ChargedIso_DR0p1To0p2 = TMath::Min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
1010 sixie 1.8 fMVAVar_ChargedIso_DR0p2To0p3 = TMath::Min((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
1011     fMVAVar_ChargedIso_DR0p3To0p4 = TMath::Min((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
1012     fMVAVar_ChargedIso_DR0p4To0p5 = TMath::Min((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
1013     fMVAVar_GammaIso_DR0p0To0p1 = TMath::Max(TMath::Min((tmpGammaIso_DR0p0To0p1 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p0To0p1, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1014     fMVAVar_GammaIso_DR0p1To0p2 = TMath::Max(TMath::Min((tmpGammaIso_DR0p1To0p2 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p1To0p2, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1015     fMVAVar_GammaIso_DR0p2To0p3 = TMath::Max(TMath::Min((tmpGammaIso_DR0p2To0p3 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p2To0p3, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1016     fMVAVar_GammaIso_DR0p3To0p4 = TMath::Max(TMath::Min((tmpGammaIso_DR0p3To0p4 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p3To0p4, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1017     fMVAVar_GammaIso_DR0p4To0p5 = TMath::Max(TMath::Min((tmpGammaIso_DR0p4To0p5 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p4To0p5, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1018     fMVAVar_NeutralHadronIso_DR0p0To0p1 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p0To0p1 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p0To0p1, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1019     fMVAVar_NeutralHadronIso_DR0p1To0p2 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p1To0p2 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p1To0p2, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1020     fMVAVar_NeutralHadronIso_DR0p2To0p3 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p2To0p3 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p2To0p3, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1021     fMVAVar_NeutralHadronIso_DR0p3To0p4 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p3To0p4 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p3To0p4, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1022     fMVAVar_NeutralHadronIso_DR0p4To0p5 = TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p4To0p5 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p4To0p5, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1023    
1024 ceballos 1.12 // Variables for dR MVA
1025     fMVAVar_MuRelIsoPFCharged = 0.;
1026     fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p0To0p1)/mu->Pt(), 2.5);
1027     fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p1To0p2)/mu->Pt(), 2.5);
1028     fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p2To0p3)/mu->Pt(), 2.5);
1029     fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p3To0p4)/mu->Pt(), 2.5);
1030     fMVAVar_MuRelIsoPFCharged += TMath::Min((tmpChargedIso_DR0p4To0p5)/mu->Pt(), 2.5);
1031    
1032     fMVAVar_MuRelIsoPFNeutral = 0.;
1033     fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p0To0p1 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p0To0p1, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1034     fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p1To0p2 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p1To0p2, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1035     fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p2To0p3 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p2To0p3, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1036     fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p3To0p4 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p3To0p4, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1037     fMVAVar_MuRelIsoPFNeutral += TMath::Max(TMath::Min((tmpNeutralHadronIso_DR0p4To0p5 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralHadronIsoDR0p4To0p5, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1038    
1039     fMVAVar_MuRelIsoPFPhotons = 0.;
1040     fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p0To0p1 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p0To0p1, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1041     fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p1To0p2 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p1To0p2, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1042     fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p2To0p3 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p2To0p3, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1043     fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p3To0p4 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p3To0p4, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1044     fMVAVar_MuRelIsoPFPhotons += TMath::Max(TMath::Min((tmpGammaIso_DR0p4To0p5 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuGammaIsoDR0p4To0p5, mu->Eta(), EffectiveAreaTarget))/mu->Pt(), 2.5), 0.0);
1045    
1046     fMVAVar_MuDeltaRMean = tmpMuDeltaRMean/TMath::Max(1.0,tmpMuNPFCand);
1047     fMVAVar_MuDeltaRSum = tmpMuDeltaRSum;
1048     fMVAVar_MuDensity = tmpMuDensity;
1049 sixie 1.8
1050     Double_t mva = -9999;
1051     TMVA::Reader *reader = 0;
1052    
1053     if (printDebug) {
1054     std::cout <<" -> BIN: " << fMVAVar_MuEta << " " << fMVAVar_MuPt << " : "
1055     << GetMVABin(muTrk->Eta(), muTrk->Pt(), mu->IsGlobalMuon(), mu->IsTrackerMuon() )
1056     << std::endl;
1057     }
1058    
1059     reader = fTMVAReader[GetMVABin(muTrk->Eta(), muTrk->Pt(), mu->IsGlobalMuon(), mu->IsTrackerMuon() )];
1060    
1061     mva = reader->EvaluateMVA( fMethodname );
1062    
1063     if (printDebug) {
1064 ceballos 1.14 std::cout << "Debug Muon MVA: ";
1065 sixie 1.8 std::cout << " MuTkNchi2 " << fMVAVar_MuTkNchi2
1066     << " MuGlobalNchi2 " << fMVAVar_MuGlobalNchi2
1067     << " MuNValidHits " << fMVAVar_MuNValidHits
1068     << " MuNTrackerHits " << fMVAVar_MuNTrackerHits
1069     << " MuNPixelHits " << fMVAVar_MuNPixelHits
1070     << " MuNMatches " << fMVAVar_MuNMatches
1071     << " MuD0 " << fMVAVar_MuD0
1072     << " MuIP3d " << fMVAVar_MuIP3d
1073     << " MuIP3dSig " << fMVAVar_MuIP3dSig
1074     << " MuTrkKink " << fMVAVar_MuTrkKink
1075     << " MuSegmentCompatibility " << fMVAVar_MuSegmentCompatibility
1076     << " MuCaloCompatibility " << fMVAVar_MuCaloCompatibility
1077     << " MuHadEnergy " << fMVAVar_MuHadEnergy
1078     << " MuEmEnergy " << fMVAVar_MuEmEnergy
1079     << " MuHadS9Energy " << fMVAVar_MuHadS9Energy
1080     << " MuEmS9Energy " << fMVAVar_MuEmS9Energy
1081     << " eta " << fMVAVar_MuEta
1082 ceballos 1.12 << " pt " << fMVAVar_MuPt
1083     << " isoInfo: ";
1084 sixie 1.8 std::cout << fMVAVar_ChargedIso_DR0p0To0p1 << " "
1085     << fMVAVar_ChargedIso_DR0p1To0p2 << " "
1086     << fMVAVar_ChargedIso_DR0p2To0p3 << " "
1087     << fMVAVar_ChargedIso_DR0p3To0p4 << " "
1088     << fMVAVar_ChargedIso_DR0p4To0p5 << " "
1089     << fMVAVar_GammaIso_DR0p0To0p1 << " "
1090     << fMVAVar_GammaIso_DR0p1To0p2 << " "
1091     << fMVAVar_GammaIso_DR0p2To0p3 << " "
1092     << fMVAVar_GammaIso_DR0p3To0p4 << " "
1093     << fMVAVar_GammaIso_DR0p4To0p5 << " "
1094     << fMVAVar_NeutralHadronIso_DR0p0To0p1 << " "
1095     << fMVAVar_NeutralHadronIso_DR0p1To0p2 << " "
1096     << fMVAVar_NeutralHadronIso_DR0p2To0p3 << " "
1097     << fMVAVar_NeutralHadronIso_DR0p3To0p4 << " "
1098 ceballos 1.12 << fMVAVar_NeutralHadronIso_DR0p4To0p5;
1099     std::cout << " MuRelIsoPFCharged: " << fMVAVar_MuRelIsoPFCharged
1100     << " MuRelIsoPFNeutral: " << fMVAVar_MuRelIsoPFNeutral
1101     << " MuRelIsoPFPhotons: " << fMVAVar_MuRelIsoPFPhotons
1102     << " MuDeltaRMean: " << fMVAVar_MuDeltaRMean
1103     << " MuDeltaRMean: " << fMVAVar_MuDeltaRMean
1104     << " MuDensity: " << fMVAVar_MuDensity;
1105 ceballos 1.13 std::cout << " MVA: " << mva
1106 sixie 1.8 << std::endl;
1107     }
1108    
1109     return mva;
1110     }