diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h index 2dccea7173127ca0b421e43685cae60ec087d9a8..9539b074c4350f32aa7016124dbf52eb08378b6b 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h @@ -24,6 +24,8 @@ namespace FlavorTagDiscriminants { StatusCode initialize() override; virtual void decorate(const xAOD::Jet& jet) const override; + + virtual std::set<std::string> getDecoratorKeys() const override; private: std::string m_flipTagConfig; std::unique_ptr<BTagJetAugmenter> m_aug; //! diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenter.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenter.h index fe60ee7d813211018d35ffe61c3e5a1e328185f5..e52024bf1aa8792813a219c451ff0989aaac73d2 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenter.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenter.h @@ -29,6 +29,7 @@ namespace FlavorTagDiscriminants { ~BTagMuonAugmenter(); BTagMuonAugmenter(BTagMuonAugmenter&&); void augment(const xAOD::Jet& jet) const; + std::set<std::string> getDecoratorKeys() const; private: // You'll probably have to add some accessors here BTagTrackIpAccessor m_btag_track_aug; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenterTool.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenterTool.h index 3ac936f4d8aa3154ced0010ff5d796afb610143c..b31a8a74c0e152a7ab7ca54229861c1cdc5f2ac7 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenterTool.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagMuonAugmenterTool.h @@ -24,6 +24,8 @@ namespace FlavorTagDiscriminants { // returns 0 for success virtual void decorate(const xAOD::Jet& jet) const override; + + virtual std::set<std::string> getDecoratorKeys() const override; private: std::unique_ptr<BTagMuonAugmenter> m_aug; std::string m_muonAssociationName; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h index ca12cdadd51cf86b455ecea725ed2714b5fdd472..cbf746fefa3b41bf692c2c1658956317a7a43f80 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/DL2Tool.h @@ -29,6 +29,8 @@ namespace FlavorTagDiscriminants { // returns 0 for success virtual void decorate(const xAOD::Jet& jet) const override; + + virtual std::set<std::string> getDecoratorKeys() const override; private: DL2Properties m_props; //! std::unique_ptr<DL2HighLevel> m_dl2; //! diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/ISingleJetDecorator.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/ISingleJetDecorator.h index 2d13b4b32b5879691320671db7f360c96f7f4097..a90885a9b44b976c38260e691007ef5eaaefd54e 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/ISingleJetDecorator.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/ISingleJetDecorator.h @@ -20,6 +20,8 @@ public: /// Method to decorate a jet. virtual void decorate(const xAOD::Jet& jet) const = 0; + // Names of the decorations being added + virtual std::set<std::string> getDecoratorKeys() const = 0; }; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx index 5daf2dbcdadb3b93551f62f2baf6a794e6580353..ec0bea99966d8be9360caf6b165f0d065530bf6a 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx @@ -27,4 +27,9 @@ namespace FlavorTagDiscriminants { m_aug->augment(jet); } + std::set<std::string> BTagAugmenterTool::getDecoratorKeys() const { + const auto keys{m_aug->getDecoratorKeys()}; + return std::set<std::string>(keys.begin(), keys.end()); + } + } diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx index 81a2fb6996361d57495203827d4dd0ff3e688e9c..1c20b56e6990bc6470f9a3f68f7287eddd583fe0 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenter.cxx @@ -163,4 +163,29 @@ namespace FlavorTagDiscriminants { } +std::set<std::string> BTagMuonAugmenter::getDecoratorKeys() const { + const auto& type_registry = SG::AuxTypeRegistry::instance(); + std::set<std::string> keys; + for (const auto& auxid: { + m_dec_muon_isDefaults.auxid(), + m_dec_muon_pt.auxid(), + m_dec_muon_dR.auxid(), + m_dec_muon_eta.auxid(), + m_dec_muon_phi.auxid(), + m_dec_muon_qOverPratio.auxid(), + m_dec_muon_mombalsignif.auxid(), + m_dec_muon_scatneighsignif.auxid(), + m_dec_muon_pTrel.auxid(), + m_dec_muon_ip3d_d0.auxid(), + m_dec_muon_ip3d_z0.auxid(), + m_dec_muon_ip3d_d0_significance.auxid(), + m_dec_muon_ip3d_z0_significance.auxid(), + m_dec_muon_ip3d_sigma_d0.auxid(), + m_dec_muon_ip3d_sigma_z0.auxid(), + m_dec_muon_link.auxid()}) { + keys.insert(type_registry.getName(auxid)); + } + return keys; +} + } diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenterTool.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenterTool.cxx index 8616b719b49282a1af183e757f294a52266fd2eb..0b1926fd91969be7ea29533c5c458b9d5fd9421b 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenterTool.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagMuonAugmenterTool.cxx @@ -31,4 +31,8 @@ namespace FlavorTagDiscriminants { m_aug->augment(jet); } + std::set<std::string> BTagMuonAugmenterTool::getDecoratorKeys() const { + return m_aug->getDecoratorKeys(); + } + } diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx index 818ab6c1dc4696b681aaa123d93f7a27a7c872de..32f219f8a82d8329f4d9af1da34d1f97abb0fb20 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/DL2Tool.cxx @@ -32,4 +32,8 @@ namespace FlavorTagDiscriminants { m_dl2->decorate(jet); } + std::set<std::string> DL2Tool::getDecoratorKeys() const { + return m_dl2->getDataDependencyNames().bTagOutputs; + } + } diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/HighLevelBTagAlg.h b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/HighLevelBTagAlg.h index eec3d81b75b7d135d56e7d353186496fed664d72..8c23a51e79b08d86408aa8497fb304b59bac92ef 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/HighLevelBTagAlg.h +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/BTagging/HighLevelBTagAlg.h @@ -55,6 +55,7 @@ namespace Analysis SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_dec_track_pos {this, "trackDisplacement","trackDisplacement","trackDisplacement of tracks" }; SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_dec_track_mom {this, "trackMomentum","trackMomentum","trackMomentum of tracks" }; + std::vector<std::unique_ptr<SG::WriteDecorHandleKey<xAOD::BTaggingContainer>>> m_outputKeys; }; // End class diff --git a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/HighLevelBTagAlg.cxx b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/HighLevelBTagAlg.cxx index 0f88f4e5737182dfb6525c49194d7f9ce826962c..9aca1b66364752a76f85e1df2ea52d4522a6d4c3 100644 --- a/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/HighLevelBTagAlg.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagAlgs/BTagging/src/HighLevelBTagAlg.cxx @@ -61,6 +61,14 @@ namespace Analysis { CHECK( m_dec_track_pos.initialize() ); CHECK( m_dec_track_mom.initialize() ); + // create and initialize write handles + for (const std::string key: m_jetDecorator->getDecoratorKeys()) { + std::string full_key = m_BTagCollectionName.key() + "." + key; + ATH_MSG_DEBUG("Adding " << full_key); + m_outputKeys.emplace_back(std::make_unique<SG::WriteDecorHandleKey<xAOD::BTaggingContainer>>(this, key, full_key, "")); + ATH_MSG_DEBUG("Initializing " << full_key); + ATH_CHECK(m_outputKeys.back()->initialize()); + } return StatusCode::SUCCESS; } diff --git a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx index bffb1d02ae036c091f9724c89952a309e6c2f367..e1b1bd77bfdaa55119ccec78c57370ade43f5557 100755 --- a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.cxx @@ -80,6 +80,7 @@ JetTagMonitorAlgorithm::~JetTagMonitorAlgorithm() {} StatusCode JetTagMonitorAlgorithm::initialize() { + ATH_CHECK(AthMonitorAlgorithm::initialize()); ATH_CHECK(m_jetContainerKey.initialize()); ATH_CHECK(m_muonContainerKey.initialize()); ATH_CHECK(m_electronContainerKey.initialize()); @@ -87,7 +88,24 @@ StatusCode JetTagMonitorAlgorithm::initialize() { ATH_CHECK(m_vertContainerKey.initialize()); ATH_CHECK(m_trackContainerKey.initialize()); - return AthMonitorAlgorithm::initialize(); + if (m_btagLinkKey.empty()) { + m_btagLinkKey = m_jetContainerKey.key() + ".btaggingLink"; + } + ATH_CHECK(m_btagLinkKey.initialize()); + + if (m_btagResultKey.empty()) { + if (m_mv_algorithmName=="DL1" || m_mv_algorithmName=="DL1r" || m_mv_algorithmName=="DL1rnn") { + std::string rawJetContainerName = m_jetContainerKey.key(); + const size_t jetStringItr = rawJetContainerName.find("Jets"); + if (jetStringItr != std::string::npos) { + rawJetContainerName = rawJetContainerName.replace(jetStringItr, std::string::npos, ""); + } + m_btagResultKey = "BTagging_" + rawJetContainerName + "." + m_mv_algorithmName + "_pb"; + } + } + ATH_CHECK(m_btagResultKey.initialize(SG::AllowEmpty)); + + return StatusCode::SUCCESS; } @@ -745,7 +763,9 @@ double JetTagMonitorAlgorithm::getMVweight(const xAOD::Jet *jet) const { bTaggingObject->pc(m_mv_algorithmName,mv_pc); bTaggingObject->pb(m_mv_algorithmName,mv_pb); //DL1* formula (standard) - mv = log( mv_pb / ( mv_pu * ( 1 - m_mv_cFraction ) + mv_pc * m_mv_cFraction ) ); + if ( mv_pb != 0 && (mv_pu != 0 || mv_pc || 0)) { + mv = log( mv_pb / ( mv_pu * ( 1 - m_mv_cFraction ) + mv_pc * m_mv_cFraction ) ); + } //DL1*c formula (for DL1c) //mv = log( mv_pb / ( mv_pu * ( 1 - m_mv_bFraction ) + mv_pc * m_mv_bFraction ) ); } diff --git a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.h b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.h index 9864bd41640e808efadc06819c9a725696771be0..d8e8ea769698cce70411d3c085e1357b40bdf6fb 100755 --- a/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.h +++ b/PhysicsAnalysis/JetTagging/JetTagMonitoring/src/JetTagMonitorAlgorithm.h @@ -42,6 +42,8 @@ class JetTagMonitorAlgorithm : public AthMonitorAlgorithm { SG::ReadHandleKey<xAOD::JetContainer> m_jetContainerKey; SG::ReadHandleKey<xAOD::MuonContainer> m_muonContainerKey; SG::ReadHandleKey<xAOD::ElectronContainer> m_electronContainerKey; + SG::ReadDecorHandleKey<xAOD::JetContainer> m_btagLinkKey{this,"BTagLinkKey","","RDHK for btag links"}; + SG::ReadDecorHandleKey<xAOD::BTaggingContainer> m_btagResultKey{this,"BTagResultKey","","RDHK for monitored BTag variables"}; bool m_skipJetFilter; //true for HI/HI-p collisions, false for pp collisions std::string m_trackParticleName;