ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MuonIDMVA.cc
Revision: 1.13
Committed: Fri May 4 21:56:29 2012 UTC (13 years ago) by ceballos
Content type: text/plain
Branch: MAIN
Changes since 1.12: +1 -1 lines
Log Message:
new dr iso

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