diff --git a/FTagDumper/src/JetTrackDecorator.cxx b/FTagDumper/src/JetTrackDecorator.cxx index 4e7951e5bd7f77705ea0ff5b721dde5a5ab45375..913a4baab5b9b9d6b0fb377a0e3547aff8aea6f8 100644 --- a/FTagDumper/src/JetTrackDecorator.cxx +++ b/FTagDumper/src/JetTrackDecorator.cxx @@ -8,6 +8,15 @@ JetTrackDecorator::JetTrackDecorator(const std::string& suffix, const std::string& writer_name) : m_ftagTruthOriginLabel("ftagTruthOriginLabel"+suffix), m_n_tracks("n_"+writer_name), + m_n_b_tracks("n_b_"+writer_name), + m_n_c_tracks("n_c_"+writer_name), + m_n_bc_tracks("n_bc_"+writer_name), + m_n_hf_tracks("n_hf_"+writer_name), + m_n_tau_tracks("n_tau_"+writer_name), + m_n_pv_tracks("n_pv_"+writer_name), + m_n_othersec_tracks("n_othersec_"+writer_name), + m_n_pu_tracks("n_pu_"+writer_name), + m_n_fake_tracks("n_fake_"+writer_name), m_PU_track_fraction("PU_fraction_"+writer_name) {} // this call actually does the work on the jet @@ -15,15 +24,62 @@ void JetTrackDecorator::decorate (const xAOD::Jet& jet, const std::vector<const xAOD::TrackParticle*>& tracks) const { - int n_PU_tracks = 0; + int n_pu_tracks = 0; + int n_fake_tracks = 0; + int n_b_tracks = 0; + int n_bc_tracks = 0; + int n_c_tracks = 0; + int n_pv_tracks = 0; + int n_tau_tracks = 0; + int n_other_sec_tracks = 0; for(const auto& track : tracks){ - if(m_ftagTruthOriginLabel.withDefault(*track, -1)==InDet::ExclusiveOrigin::Pileup || - m_ftagTruthOriginLabel.withDefault(*track, -1)==InDet::ExclusiveOrigin::Fake) - n_PU_tracks++; + int origin = m_ftagTruthOriginLabel.withDefault(*track, -1); + switch(origin){ + case InDet::ExclusiveOrigin::Pileup: + n_pu_tracks++; + break; + case InDet::ExclusiveOrigin::Fake: + n_fake_tracks++; + break; + case InDet::ExclusiveOrigin::Primary: + n_pv_tracks++; + break; + case InDet::ExclusiveOrigin::FromB: + n_b_tracks++; + break; + case InDet::ExclusiveOrigin::FromBC: + n_bc_tracks++; + break; + case InDet::ExclusiveOrigin::FromC: + n_c_tracks++; + break; + case InDet::ExclusiveOrigin::FromTau: + n_tau_tracks++; + break; + case InDet::ExclusiveOrigin::OtherSecondary: + n_other_sec_tracks++; + break; + case -1: + case -2: + break; + default: + throw std::runtime_error("Unknown ftagTruthOrigin label " + std::to_string(origin)); + } } + int n_hf_tracks = n_b_tracks + n_bc_tracks + n_c_tracks; m_n_tracks(jet) = tracks.size(); + m_n_b_tracks(jet) = n_b_tracks; + m_n_c_tracks(jet) = n_c_tracks; + m_n_bc_tracks(jet) = n_bc_tracks; + m_n_hf_tracks(jet) = n_hf_tracks; + m_n_tau_tracks(jet) = n_tau_tracks; + m_n_pv_tracks(jet) = n_pv_tracks; + m_n_othersec_tracks(jet) = n_other_sec_tracks; + m_n_pu_tracks(jet) = n_pu_tracks; + m_n_fake_tracks(jet) = n_fake_tracks; - m_PU_track_fraction(jet) = static_cast<float>(n_PU_tracks)/tracks.size(); + + m_PU_track_fraction(jet) = static_cast<float>(n_pu_tracks + n_fake_tracks)/tracks.size(); } diff --git a/FTagDumper/src/JetTrackDecorator.hh b/FTagDumper/src/JetTrackDecorator.hh index 8cbb90fbc3b9966ed3de2d0411ef70b5235d442d..11ca681ed5921725d56112343c232af69927783b 100644 --- a/FTagDumper/src/JetTrackDecorator.hh +++ b/FTagDumper/src/JetTrackDecorator.hh @@ -17,7 +17,17 @@ class JetTrackDecorator { private: AE::ConstAccessor<int> m_ftagTruthOriginLabel; + AE::Decorator<int> m_n_tracks; + AE::Decorator<int> m_n_b_tracks; + AE::Decorator<int> m_n_c_tracks; + AE::Decorator<int> m_n_bc_tracks; + AE::Decorator<int> m_n_hf_tracks; + AE::Decorator<int> m_n_tau_tracks; + AE::Decorator<int> m_n_pv_tracks; + AE::Decorator<int> m_n_othersec_tracks; + AE::Decorator<int> m_n_pu_tracks; + AE::Decorator<int> m_n_fake_tracks; AE::Decorator<float> m_PU_track_fraction; }; diff --git a/configs/GN3_dev.json b/configs/GN3_dev.json index 04f7f344c03e2c1544f6f196bc4ce92320384b72..7b6152b040c8e5387399091dceb7ec5c4c90d676 100644 --- a/configs/GN3_dev.json +++ b/configs/GN3_dev.json @@ -26,7 +26,13 @@ "file": "fragments/pflow-variables-slim.json", "default_mapping": {"file": "fragments/default-mapping.json"}, "jet" : { - "ints" : ["n_tracks_dr", "n_tracks_ghost", "HadronConeExclTruthLabelIDFromNearestJet"], + "ints" : [ + "n_tracks_dr", "n_tracks_ghost", "HadronConeExclTruthLabelIDFromNearestJet", + "n_b_tracks_ghost", + "n_bc_tracks_ghost", + "n_c_tracks_ghost", + "n_hf_tracks_ghost" + ], "uints": ["jetFoldHash", "jetFoldHash_noHits", "classifierParticleOutComeFromTruthTaus"], "floats": [ "ptFromTruthJet",