114 |
|
fTMVAReader[i]->AddVariable( "NeutralIso04OverPt", &fMVAVar_MuNeutralIso04OverPt ); |
115 |
|
} |
116 |
|
|
117 |
+ |
if (type == kIDIsoCombinedDetIso) { |
118 |
+ |
fTMVAReader[i]->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 ); |
119 |
+ |
fTMVAReader[i]->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 ); |
120 |
+ |
fTMVAReader[i]->AddVariable( "NValidHits", &fMVAVar_MuNValidHits ); |
121 |
+ |
fTMVAReader[i]->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits ); |
122 |
+ |
fTMVAReader[i]->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits ); |
123 |
+ |
fTMVAReader[i]->AddVariable( "NMatches", &fMVAVar_MuNMatches ); |
124 |
+ |
fTMVAReader[i]->AddVariable( "D0", &fMVAVar_MuD0 ); |
125 |
+ |
fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_MuIP3d ); |
126 |
+ |
fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig ); |
127 |
+ |
fTMVAReader[i]->AddVariable( "TrkKink", &fMVAVar_MuTrkKink ); |
128 |
+ |
fTMVAReader[i]->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility ); |
129 |
+ |
fTMVAReader[i]->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility ); |
130 |
+ |
fTMVAReader[i]->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt ); |
131 |
+ |
fTMVAReader[i]->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt ); |
132 |
+ |
fTMVAReader[i]->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt ); |
133 |
+ |
fTMVAReader[i]->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt ); |
134 |
+ |
fTMVAReader[i]->AddVariable( "TrkIso03OverPt", &fMVAVar_MuTrkIso03OverPt ); |
135 |
+ |
fTMVAReader[i]->AddVariable( "EMIso03OverPt", &fMVAVar_MuEMIso03OverPt ); |
136 |
+ |
fTMVAReader[i]->AddVariable( "HadIso03OverPt", &fMVAVar_MuHadIso03OverPt ); |
137 |
+ |
fTMVAReader[i]->AddVariable( "TrkIso05OverPt", &fMVAVar_MuTrkIso05OverPt ); |
138 |
+ |
fTMVAReader[i]->AddVariable( "EMIso05OverPt", &fMVAVar_MuEMIso05OverPt ); |
139 |
+ |
fTMVAReader[i]->AddVariable( "HadIso05OverPt", &fMVAVar_MuHadIso05OverPt ); |
140 |
+ |
|
141 |
+ |
} |
142 |
+ |
|
143 |
|
if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To14p5Weights ); |
144 |
|
if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To14p5Weights ); |
145 |
|
if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt14p5To20Weights ); |
273 |
|
} |
274 |
|
|
275 |
|
|
276 |
+ |
//-------------------------------------------------------------------------------------------------- |
277 |
+ |
Double_t MuonIDMVA::MVAValue(Double_t MuPt , Double_t MuEta, |
278 |
+ |
Double_t MuTkNchi2, |
279 |
+ |
Double_t MuGlobalNchi2, |
280 |
+ |
Double_t MuNValidHits, |
281 |
+ |
Double_t MuNTrackerHits, |
282 |
+ |
Double_t MuNPixelHits, |
283 |
+ |
Double_t MuNMatches, |
284 |
+ |
Double_t MuD0, |
285 |
+ |
Double_t MuIP3d, |
286 |
+ |
Double_t MuIP3dSig, |
287 |
+ |
Double_t MuTrkKink, |
288 |
+ |
Double_t MuSegmentCompatibility, |
289 |
+ |
Double_t MuCaloCompatibility, |
290 |
+ |
Double_t MuHadEnergyOverPt, |
291 |
+ |
Double_t MuHoEnergyOverPt, |
292 |
+ |
Double_t MuEmEnergyOverPt, |
293 |
+ |
Double_t MuHadS9EnergyOverPt, |
294 |
+ |
Double_t MuHoS9EnergyOverPt, |
295 |
+ |
Double_t MuEmS9EnergyOverPt, |
296 |
+ |
Double_t MuTrkIso03OverPt, |
297 |
+ |
Double_t MuEMIso03OverPt, |
298 |
+ |
Double_t MuHadIso03OverPt, |
299 |
+ |
Double_t MuTrkIso05OverPt, |
300 |
+ |
Double_t MuEMIso05OverPt, |
301 |
+ |
Double_t MuHadIso05OverPt, |
302 |
+ |
Bool_t printDebug |
303 |
+ |
) { |
304 |
+ |
|
305 |
+ |
if (!fIsInitialized) { |
306 |
+ |
std::cout << "Error: MuonIDMVA not properly initialized.\n"; |
307 |
+ |
return -9999; |
308 |
+ |
} |
309 |
+ |
|
310 |
+ |
Int_t subdet = 0; |
311 |
+ |
if (fabs(MuEta) < 1.479) subdet = 0; |
312 |
+ |
else subdet = 1; |
313 |
+ |
Int_t ptBin = 0; |
314 |
+ |
if (MuPt > 14.5) ptBin = 1; |
315 |
+ |
if (MuPt > 20.0) ptBin = 2; |
316 |
+ |
|
317 |
+ |
|
318 |
+ |
//set all input variables |
319 |
+ |
fMVAVar_MuTkNchi2 = MuTkNchi2; |
320 |
+ |
fMVAVar_MuGlobalNchi2 = MuGlobalNchi2; |
321 |
+ |
fMVAVar_MuNValidHits = MuNValidHits; |
322 |
+ |
fMVAVar_MuNTrackerHits = MuNTrackerHits; |
323 |
+ |
fMVAVar_MuNPixelHits = MuNPixelHits; |
324 |
+ |
fMVAVar_MuNMatches = MuNMatches; |
325 |
+ |
fMVAVar_MuD0 = MuD0; |
326 |
+ |
fMVAVar_MuIP3d = MuIP3d; |
327 |
+ |
fMVAVar_MuIP3dSig = MuIP3dSig; |
328 |
+ |
fMVAVar_MuTrkKink = MuTrkKink; |
329 |
+ |
fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility; |
330 |
+ |
fMVAVar_MuCaloCompatibility = MuCaloCompatibility; |
331 |
+ |
fMVAVar_MuHadEnergyOverPt = MuHadEnergyOverPt; |
332 |
+ |
fMVAVar_MuHoEnergyOverPt = MuHoEnergyOverPt; |
333 |
+ |
fMVAVar_MuEmEnergyOverPt = MuEmEnergyOverPt; |
334 |
+ |
fMVAVar_MuHadS9EnergyOverPt = MuHadS9EnergyOverPt; |
335 |
+ |
fMVAVar_MuHoS9EnergyOverPt = MuHoS9EnergyOverPt; |
336 |
+ |
fMVAVar_MuEmS9EnergyOverPt = MuEmS9EnergyOverPt; |
337 |
+ |
fMVAVar_MuTrkIso03OverPt = MuTrkIso03OverPt; |
338 |
+ |
fMVAVar_MuEMIso03OverPt = MuEMIso03OverPt; |
339 |
+ |
fMVAVar_MuHadIso03OverPt = MuHadIso03OverPt; |
340 |
+ |
fMVAVar_MuTrkIso05OverPt = MuTrkIso05OverPt; |
341 |
+ |
fMVAVar_MuEMIso05OverPt = MuEMIso05OverPt; |
342 |
+ |
fMVAVar_MuHadIso05OverPt = MuHadIso05OverPt; |
343 |
+ |
|
344 |
+ |
Double_t mva = -9999; |
345 |
+ |
TMVA::Reader *reader = 0; |
346 |
+ |
|
347 |
+ |
Int_t MVABin = -1; |
348 |
+ |
if (subdet == 0 && ptBin == 0) MVABin = 0; |
349 |
+ |
if (subdet == 1 && ptBin == 0) MVABin = 1; |
350 |
+ |
if (subdet == 0 && ptBin == 1) MVABin = 2; |
351 |
+ |
if (subdet == 1 && ptBin == 1) MVABin = 3; |
352 |
+ |
if (subdet == 0 && ptBin == 2) MVABin = 4; |
353 |
+ |
if (subdet == 1 && ptBin == 2) MVABin = 5; |
354 |
+ |
assert(MVABin >= 0 && MVABin <= 5); |
355 |
+ |
reader = fTMVAReader[MVABin]; |
356 |
+ |
|
357 |
+ |
mva = reader->EvaluateMVA( fMethodname ); |
358 |
+ |
|
359 |
+ |
if (printDebug) { |
360 |
+ |
std::cout << "Debug Muon MVA: " |
361 |
+ |
<< MuPt << " " << MuEta << " --> MVABin " << MVABin << " : " |
362 |
+ |
<< fMVAVar_MuTkNchi2 << " " |
363 |
+ |
<< fMVAVar_MuGlobalNchi2 << " " |
364 |
+ |
<< fMVAVar_MuNValidHits << " " |
365 |
+ |
<< fMVAVar_MuNTrackerHits << " " |
366 |
+ |
<< fMVAVar_MuNPixelHits << " " |
367 |
+ |
<< fMVAVar_MuNMatches << " " |
368 |
+ |
<< fMVAVar_MuD0 << " " |
369 |
+ |
<< fMVAVar_MuIP3d << " " |
370 |
+ |
<< fMVAVar_MuIP3dSig << " " |
371 |
+ |
<< fMVAVar_MuTrkKink << " " |
372 |
+ |
<< fMVAVar_MuSegmentCompatibility << " " |
373 |
+ |
<< fMVAVar_MuCaloCompatibility << " " |
374 |
+ |
<< fMVAVar_MuHadEnergyOverPt << " " |
375 |
+ |
<< fMVAVar_MuHoEnergyOverPt << " " |
376 |
+ |
<< fMVAVar_MuEmEnergyOverPt << " " |
377 |
+ |
<< fMVAVar_MuHadS9EnergyOverPt << " " |
378 |
+ |
<< fMVAVar_MuHoS9EnergyOverPt << " " |
379 |
+ |
<< fMVAVar_MuEmS9EnergyOverPt << " " |
380 |
+ |
<< fMVAVar_MuTrkIso03OverPt << " " |
381 |
+ |
<< fMVAVar_MuEMIso03OverPt << " " |
382 |
+ |
<< fMVAVar_MuHadIso03OverPt << " " |
383 |
+ |
<< fMVAVar_MuTrkIso05OverPt << " " |
384 |
+ |
<< fMVAVar_MuEMIso05OverPt << " " |
385 |
+ |
<< fMVAVar_MuHadIso05OverPt << " " |
386 |
+ |
<< " === : === " |
387 |
+ |
<< mva |
388 |
+ |
<< std::endl; |
389 |
+ |
} |
390 |
+ |
|
391 |
+ |
return mva; |
392 |
+ |
} |
393 |
+ |
|
394 |
+ |
|
395 |
|
|
396 |
|
//-------------------------------------------------------------------------------------------------- |
397 |
|
Double_t MuonIDMVA::MVAValue(const Muon *mu, const Vertex *vertex, MuonTools *fMuonTools, |
413 |
|
else if(mu->HasStandaloneTrk()) { muNchi2 = mu->StandaloneTrk()->RChi2(); } |
414 |
|
else if(mu->HasTrackerTrk()) { muNchi2 = mu->TrackerTrk()->RChi2(); } |
415 |
|
|
416 |
< |
Double_t ChargedIso03 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.3, 0.0, 0.0); |
417 |
< |
Double_t NeutralIso03_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.3, 0.0, 0.0); |
418 |
< |
Double_t ChargedIso04 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.4, 0.0, 0.0); |
419 |
< |
Double_t NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0); |
420 |
< |
|
416 |
> |
Double_t ChargedIso03 = 0; |
417 |
> |
Double_t NeutralIso03_05Threshold = 0; |
418 |
> |
Double_t ChargedIso04 = 0; |
419 |
> |
Double_t NeutralIso04_05Threshold = 0; |
420 |
> |
ChargedIso03 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.3, 0.0, 0.0); |
421 |
> |
NeutralIso03_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.3, 0.0, 0.0); |
422 |
> |
ChargedIso04 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.4, 0.0, 0.0); |
423 |
> |
NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0); |
424 |
> |
|
425 |
|
Double_t Rho = 0; |
426 |
|
if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho(); |
427 |
|
|
455 |
|
fMVAVar_MuNeutralIso03OverPt = (NeutralIso03_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03,muTrk->Eta()))/muTrk->Pt(); |
456 |
|
fMVAVar_MuChargedIso04OverPt = (ChargedIso04 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso04,muTrk->Eta()))/muTrk->Pt(); |
457 |
|
fMVAVar_MuNeutralIso04OverPt = (NeutralIso04_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso04,muTrk->Eta()))/muTrk->Pt(); |
458 |
+ |
fMVAVar_MuTrkIso03OverPt = (mu->IsoR03SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso03,muTrk->Eta()))/muTrk->Pt(); |
459 |
+ |
fMVAVar_MuEMIso03OverPt = (mu->IsoR03EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso03,muTrk->Eta()))/muTrk->Pt(); |
460 |
+ |
fMVAVar_MuHadIso03OverPt = (mu->IsoR03HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso03,muTrk->Eta()))/muTrk->Pt(); |
461 |
+ |
fMVAVar_MuTrkIso05OverPt = (mu->IsoR05SumPt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuTrkIso05,muTrk->Eta()))/muTrk->Pt(); |
462 |
+ |
fMVAVar_MuEMIso05OverPt = (mu->IsoR05EmEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEMIso05,muTrk->Eta()))/muTrk->Pt(); |
463 |
+ |
fMVAVar_MuHadIso05OverPt = (mu->IsoR05HadEt() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadIso05,muTrk->Eta()))/muTrk->Pt(); |
464 |
|
|
465 |
|
Double_t mva = -9999; |
466 |
|
TMVA::Reader *reader = 0; |
503 |
|
<< fMVAVar_MuNeutralIso03OverPt << " " |
504 |
|
<< fMVAVar_MuChargedIso04OverPt << " " |
505 |
|
<< fMVAVar_MuNeutralIso04OverPt << " " |
506 |
+ |
<< fMVAVar_MuTrkIso03OverPt << " " |
507 |
+ |
<< fMVAVar_MuEMIso03OverPt << " " |
508 |
+ |
<< fMVAVar_MuHadIso03OverPt << " " |
509 |
+ |
<< fMVAVar_MuTrkIso05OverPt << " " |
510 |
+ |
<< fMVAVar_MuEMIso05OverPt << " " |
511 |
+ |
<< fMVAVar_MuHadIso05OverPt << " " |
512 |
|
<< " === : === " |
513 |
|
<< mva |
514 |
|
<< std::endl; |