diff --git a/interface/MuonAnalyzer.h b/interface/MuonAnalyzer.h index dfa5342..3697711 100644 --- a/interface/MuonAnalyzer.h +++ b/interface/MuonAnalyzer.h @@ -73,6 +73,9 @@ class MuonAnalyzer: public JME::LeptonAnalyzer { std::vector& isTight_ = tree["isTight"].write>(); std::vector& isHighPt_ = tree["isHighPt"].write>(); + std::vector& isTruthMatch_PromptMuon_ = tree["isTruthMatch_PromptMuon"].write>(); + std::vector& isTruthMatch_NonTauPromptMuon_ = tree["isTruthMatch_NonTauPromptMuon"].write>(); + std::vector>& ids_ = tree["ids"].write>>(); std::vector& neutralHadronIsoR04_pfWeighted_ = tree["neutralHadronIsoR04_pfWeighted"].write>(); diff --git a/src/MuonAnalyzer.cc b/src/MuonAnalyzer.cc index c4a0502..0195885 100644 --- a/src/MuonAnalyzer.cc +++ b/src/MuonAnalyzer.cc @@ -79,6 +79,27 @@ void MuonAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSet extractBasicProperties(muon); extractGenProperties(muon.genLepton()); + { + const long PDGID_MUON = 13 ; + const reco::GenParticle * truth_mu = muon.genLepton(); + + const bool b_matched_to_prompt_muon = + ( truth_mu != 0 ) + && + abs( truth_mu -> pdgId())== PDGID_MUON // just a sanity check. + && + truth_mu -> isPromptFinalState() ; + + const bool b_matched_to_nonTauprompt_muon = + b_matched_to_prompt_muon + && + ( ! ( truth_mu -> isDirectPromptTauDecayProductFinalState() ) ) ; + + isTruthMatch_PromptMuon_ . push_back ( b_matched_to_prompt_muon ); + isTruthMatch_NonTauPromptMuon_ . push_back ( b_matched_to_nonTauprompt_muon ); + } + + reco::MuonPFIsolation pfIso = muon.pfIsolationR03(); computeRelativeIsolationR03(muon, pfIso.sumChargedHadronPt, pfIso.sumNeutralHadronEt, pfIso.sumPhotonEt, pfIso.sumPUPt, muon.eta(), rho);