212 |
|
|
213 |
|
mva = reader->EvaluateMVA( fMethodname ); |
214 |
|
|
215 |
+ |
Bool_t printdebug = kFALSE; |
216 |
+ |
if (printdebug == kTRUE) { |
217 |
+ |
std::cout << "Debug Muon MVA: " |
218 |
+ |
<< MuPt << " " << MuEta << " --> MVABin " << MVABin << " : " |
219 |
+ |
<< fMVAVar_MuTkNchi2 << " " |
220 |
+ |
<< fMVAVar_MuGlobalNchi2 << " " |
221 |
+ |
<< fMVAVar_MuNValidHits << " " |
222 |
+ |
<< fMVAVar_MuNTrackerHits << " " |
223 |
+ |
<< fMVAVar_MuNPixelHits << " " |
224 |
+ |
<< fMVAVar_MuNMatches << " " |
225 |
+ |
<< fMVAVar_MuD0 << " " |
226 |
+ |
<< fMVAVar_MuIP3d << " " |
227 |
+ |
<< fMVAVar_MuIP3dSig << " " |
228 |
+ |
<< fMVAVar_MuTrkKink << " " |
229 |
+ |
<< fMVAVar_MuSegmentCompatibility << " " |
230 |
+ |
<< fMVAVar_MuCaloCompatibility << " " |
231 |
+ |
<< fMVAVar_MuHadEnergyOverPt << " " |
232 |
+ |
<< fMVAVar_MuHoEnergyOverPt << " " |
233 |
+ |
<< fMVAVar_MuEmEnergyOverPt << " " |
234 |
+ |
<< fMVAVar_MuHadS9EnergyOverPt << " " |
235 |
+ |
<< fMVAVar_MuHoS9EnergyOverPt << " " |
236 |
+ |
<< fMVAVar_MuEmS9EnergyOverPt << " " |
237 |
+ |
<< fMVAVar_MuChargedIso03OverPt << " " |
238 |
+ |
<< fMVAVar_MuNeutralIso03OverPt << " " |
239 |
+ |
<< fMVAVar_MuChargedIso04OverPt << " " |
240 |
+ |
<< fMVAVar_MuNeutralIso04OverPt << " " |
241 |
+ |
<< " === : === " |
242 |
+ |
<< mva |
243 |
+ |
<< std::endl; |
244 |
+ |
} |
245 |
+ |
|
246 |
|
return mva; |
247 |
|
} |
248 |
|
|
249 |
|
|
250 |
|
|
251 |
< |
// //-------------------------------------------------------------------------------------------------- |
252 |
< |
// Double_t MuonIDMVA::MVAValue(const Muon *ele, const Vertex *vertex) { |
251 |
> |
//-------------------------------------------------------------------------------------------------- |
252 |
> |
Double_t MuonIDMVA::MVAValue(const Muon *mu, const Vertex *vertex, MuonTools *fMuonTools, |
253 |
> |
const PFCandidateCol *PFCands, |
254 |
> |
const PileupEnergyDensityCol *PileupEnergyDensity) { |
255 |
|
|
256 |
< |
// if (!fIsInitialized) { |
257 |
< |
// std::cout << "Error: MuonIDMVA not properly initialized.\n"; |
258 |
< |
// return -9999; |
259 |
< |
// } |
260 |
< |
|
261 |
< |
// Int_t subdet = 0; |
262 |
< |
// if (ele->SCluster()->AbsEta() < 1.0) subdet = 0; |
263 |
< |
// else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1; |
231 |
< |
// else subdet = 2; |
232 |
< |
// Int_t ptBin = 0; |
233 |
< |
// if (ele->Pt() > 20.0) ptBin = 1; |
256 |
> |
if (!fIsInitialized) { |
257 |
> |
std::cout << "Error: MuonIDMVA not properly initialized.\n"; |
258 |
> |
return -9999; |
259 |
> |
} |
260 |
> |
|
261 |
> |
const Track *muTrk=0; |
262 |
> |
if(mu->HasTrackerTrk()) { muTrk = mu->TrackerTrk(); } |
263 |
> |
else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); } |
264 |
|
|
265 |
< |
// //set all input variables |
266 |
< |
// fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ; |
267 |
< |
// fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx(); |
268 |
< |
// fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx(); |
269 |
< |
// fMVAVar_EleHoverE = ele->HadronicOverEm(); |
270 |
< |
// fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex); |
271 |
< |
// fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex); |
272 |
< |
// fMVAVar_EleFBrem = ele->FBrem(); |
273 |
< |
// fMVAVar_EleEOverP = ele->ESuperClusterOverP(); |
274 |
< |
// fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout(); |
275 |
< |
// if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi()); |
276 |
< |
// else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta(); |
277 |
< |
// fMVAVar_EleNBrem = ele->NumberOfClusters() - 1; |
278 |
< |
// fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P(); |
279 |
< |
// fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn(); |
280 |
< |
// fMVAVar_EleIP3d = ele->Ip3dPV(); |
281 |
< |
// fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance(); |
282 |
< |
|
283 |
< |
// Double_t mva = -9999; |
284 |
< |
// TMVA::Reader *reader = 0; |
285 |
< |
// Int_t MVABin = -1; |
286 |
< |
// if (subdet == 0 && ptBin == 0) MVABin = 0; |
287 |
< |
// if (subdet == 1 && ptBin == 0) MVABin = 1; |
288 |
< |
// if (subdet == 2 && ptBin == 0) MVABin = 2; |
289 |
< |
// if (subdet == 0 && ptBin == 1) MVABin = 3; |
290 |
< |
// if (subdet == 1 && ptBin == 1) MVABin = 4; |
291 |
< |
// if (subdet == 2 && ptBin == 1) MVABin = 5; |
292 |
< |
// assert(MVABin >= 0 && MVABin <= 5); |
293 |
< |
// reader = fTMVAReader[MVABin]; |
265 |
> |
Double_t muNchi2 = 0.0; |
266 |
> |
if(mu->HasGlobalTrk()) { muNchi2 = mu->GlobalTrk()->RChi2(); } |
267 |
> |
else if(mu->HasStandaloneTrk()) { muNchi2 = mu->StandaloneTrk()->RChi2(); } |
268 |
> |
else if(mu->HasTrackerTrk()) { muNchi2 = mu->TrackerTrk()->RChi2(); } |
269 |
> |
|
270 |
> |
Double_t ChargedIso03 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.3, 0.0, 0.0); |
271 |
> |
Double_t NeutralIso03_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.3, 0.0, 0.0); |
272 |
> |
Double_t ChargedIso04 = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.1, 99999, 0.4, 0.0, 0.0); |
273 |
> |
Double_t NeutralIso04_05Threshold = IsolationTools::PFMuonIsolation(mu, PFCands, vertex, 0.0, 0.5, 0.4, 0.0, 0.0); |
274 |
> |
|
275 |
> |
Double_t Rho = 0; |
276 |
> |
if (!(TMath::IsNaN(PileupEnergyDensity->At(0)->Rho()) || isinf(PileupEnergyDensity->At(0)->Rho()))) Rho = PileupEnergyDensity->At(0)->Rho(); |
277 |
> |
|
278 |
> |
Int_t subdet = 0; |
279 |
> |
if (fabs(muTrk->Eta()) < 1.479) subdet = 0; |
280 |
> |
else subdet = 1; |
281 |
> |
Int_t ptBin = 0; |
282 |
> |
if (muTrk->Pt() > 14.5) ptBin = 1; |
283 |
> |
if (muTrk->Pt() > 20.0) ptBin = 2; |
284 |
> |
|
285 |
> |
//set all input variables |
286 |
> |
fMVAVar_MuTkNchi2 = muTrk->RChi2(); |
287 |
> |
fMVAVar_MuGlobalNchi2 = muNchi2; |
288 |
> |
fMVAVar_MuNValidHits = mu->NValidHits(); |
289 |
> |
fMVAVar_MuNTrackerHits = muTrk->NHits(); |
290 |
> |
fMVAVar_MuNPixelHits = muTrk->NPixelHits(); |
291 |
> |
fMVAVar_MuNMatches = mu->NMatches(); |
292 |
> |
fMVAVar_MuD0 = muTrk->D0Corrected(*vertex); |
293 |
> |
fMVAVar_MuIP3d = mu->Ip3dPV(); |
294 |
> |
fMVAVar_MuIP3dSig = mu->Ip3dPVSignificance(); |
295 |
> |
fMVAVar_MuTrkKink = mu->TrkKink(); |
296 |
> |
fMVAVar_MuSegmentCompatibility = fMuonTools->GetSegmentCompatability(mu); |
297 |
> |
fMVAVar_MuCaloCompatibility = fMuonTools->GetCaloCompatability(mu, kTRUE, kTRUE); |
298 |
> |
fMVAVar_MuHadEnergyOverPt = (mu->HadEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadEnergy,muTrk->Eta()))/muTrk->Pt(); |
299 |
> |
fMVAVar_MuHoEnergyOverPt = (mu->HoEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHoEnergy,muTrk->Eta()))/muTrk->Pt(); |
300 |
> |
fMVAVar_MuEmEnergyOverPt = (mu->EmEnergy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEmEnergy,muTrk->Eta()))/muTrk->Pt(); |
301 |
> |
fMVAVar_MuHadS9EnergyOverPt = (mu->HadS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHadS9Energy,muTrk->Eta()))/muTrk->Pt(); |
302 |
> |
fMVAVar_MuHoS9EnergyOverPt = (mu->HoS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuHoS9Energy,muTrk->Eta()))/muTrk->Pt(); |
303 |
> |
fMVAVar_MuEmS9EnergyOverPt = (mu->EmS9Energy() - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuEmS9Energy,muTrk->Eta()))/muTrk->Pt(); |
304 |
> |
fMVAVar_MuChargedIso03OverPt = (ChargedIso03 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso03,muTrk->Eta()))/muTrk->Pt(); |
305 |
> |
fMVAVar_MuNeutralIso03OverPt = (NeutralIso03_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso03,muTrk->Eta()))/muTrk->Pt(); |
306 |
> |
fMVAVar_MuChargedIso04OverPt = (ChargedIso04 - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuChargedIso04,muTrk->Eta()))/muTrk->Pt(); |
307 |
> |
fMVAVar_MuNeutralIso04OverPt = (NeutralIso04_05Threshold - Rho*MuonTools::MuonEffectiveArea(MuonTools::kMuNeutralIso04,muTrk->Eta()))/muTrk->Pt(); |
308 |
> |
|
309 |
> |
Double_t mva = -9999; |
310 |
> |
TMVA::Reader *reader = 0; |
311 |
> |
|
312 |
> |
Int_t MVABin = -1; |
313 |
> |
if (subdet == 0 && ptBin == 0) MVABin = 0; |
314 |
> |
if (subdet == 1 && ptBin == 0) MVABin = 1; |
315 |
> |
if (subdet == 0 && ptBin == 1) MVABin = 2; |
316 |
> |
if (subdet == 1 && ptBin == 1) MVABin = 3; |
317 |
> |
if (subdet == 0 && ptBin == 2) MVABin = 4; |
318 |
> |
if (subdet == 1 && ptBin == 2) MVABin = 5; |
319 |
> |
assert(MVABin >= 0 && MVABin <= 5); |
320 |
> |
reader = fTMVAReader[MVABin]; |
321 |
|
|
322 |
< |
// mva = reader->EvaluateMVA( fMethodname ); |
322 |
> |
mva = reader->EvaluateMVA( fMethodname ); |
323 |
> |
|
324 |
> |
Bool_t printdebug = kFALSE; |
325 |
> |
if (printdebug == kTRUE) { |
326 |
> |
std::cout << "Debug Muon MVA: " |
327 |
> |
<< mu->Pt() << " " << mu->Eta() << " " << mu->Phi() << " : " |
328 |
> |
<< muTrk->Pt() << " " << muTrk->Eta() << " --> MVABin " << MVABin << " : " |
329 |
> |
<< fMVAVar_MuTkNchi2 << " " |
330 |
> |
<< fMVAVar_MuGlobalNchi2 << " " |
331 |
> |
<< fMVAVar_MuNValidHits << " " |
332 |
> |
<< fMVAVar_MuNTrackerHits << " " |
333 |
> |
<< fMVAVar_MuNPixelHits << " " |
334 |
> |
<< fMVAVar_MuNMatches << " " |
335 |
> |
<< fMVAVar_MuD0 << " " |
336 |
> |
<< fMVAVar_MuIP3d << " " |
337 |
> |
<< fMVAVar_MuIP3dSig << " " |
338 |
> |
<< fMVAVar_MuTrkKink << " " |
339 |
> |
<< fMVAVar_MuSegmentCompatibility << " " |
340 |
> |
<< fMVAVar_MuCaloCompatibility << " " |
341 |
> |
<< fMVAVar_MuHadEnergyOverPt << " " |
342 |
> |
<< fMVAVar_MuHoEnergyOverPt << " " |
343 |
> |
<< fMVAVar_MuEmEnergyOverPt << " " |
344 |
> |
<< fMVAVar_MuHadS9EnergyOverPt << " " |
345 |
> |
<< fMVAVar_MuHoS9EnergyOverPt << " " |
346 |
> |
<< fMVAVar_MuEmS9EnergyOverPt << " " |
347 |
> |
<< fMVAVar_MuChargedIso03OverPt << " " |
348 |
> |
<< fMVAVar_MuNeutralIso03OverPt << " " |
349 |
> |
<< fMVAVar_MuChargedIso04OverPt << " " |
350 |
> |
<< fMVAVar_MuNeutralIso04OverPt << " " |
351 |
> |
<< " === : === " |
352 |
> |
<< mva |
353 |
> |
<< std::endl; |
354 |
> |
} |
355 |
|
|
356 |
< |
// return mva; |
357 |
< |
// } |
356 |
> |
return mva; |
357 |
> |
} |