From 0b6e515f223a6ff55eada6d751587f26a8d47d31 Mon Sep 17 00:00:00 2001 From: Vukan Jevtic <vukan.jevtic@cern.ch> Date: Wed, 19 Mar 2025 13:23:16 +0100 Subject: [PATCH 1/3] New enums for DevelopmentTagger flavour tagger --- Event/PhysEvent/include/Event/Tagger.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Event/PhysEvent/include/Event/Tagger.h b/Event/PhysEvent/include/Event/Tagger.h index 8c09528c234..b8c2919daf2 100644 --- a/Event/PhysEvent/include/Event/Tagger.h +++ b/Event/PhysEvent/include/Event/Tagger.h @@ -55,6 +55,7 @@ namespace LHCb { OS_Charm = 15, SS_PionBDT = 16, Inclusive_Tagger = 17, + Development_Tagger = 18, OSMuon = 10100, OSMuonLatest = 10101, OSMuonLatestB2OC = 10102, @@ -93,6 +94,8 @@ namespace LHCb { SSLambdaDev = 20499, InclusiveTagger = 30100, InclusiveTaggerDev = 30199, + DevelopmentTagger = 40100, + DevelopmentTaggerDev = 40199, }; /// Copy Constructor @@ -220,6 +223,8 @@ namespace LHCb { return s << "SS_PionBDT"; case LHCb::Tagger::Inclusive_Tagger: return s << "InclusiveTagger"; + case LHCb::Tagger::Development_Tagger: + return s << "DevelopmentTagger"; case LHCb::Tagger::OSMuon: return s << "OSMuon"; case LHCb::Tagger::OSMuonLatest: @@ -296,6 +301,10 @@ namespace LHCb { return s << "IFT"; case LHCb::Tagger::InclusiveTaggerDev: return s << "IFTDev"; + case LHCb::Tagger::DevelopmentTagger: + return s << "DevTagger"; + case LHCb::Tagger::DevelopmentTaggerDev: + return s << "DevTaggerDev"; default: return s << "ERROR wrong value " << int( e ) << " for enum LHCb::Tagger::TaggerType"; } @@ -339,6 +348,7 @@ inline const GaudiUtils::VectorMap<std::string, LHCb::Tagger::TaggerType>& LHCb: {"OS_Charm", OS_Charm}, {"SS_PionBDT", SS_PionBDT}, {"InclusiveTagger", Inclusive_Tagger}, + {"DevelopmentTagger", Development_Tagger}, {"OSMuon", OSMuon}, {"OSMuonLatest", OSMuonLatest}, {"OSMuonLatestB2OC", OSMuonLatestB2OC}, @@ -375,8 +385,10 @@ inline const GaudiUtils::VectorMap<std::string, LHCb::Tagger::TaggerType>& LHCb: {"SSLambda", SSLambda}, {"SSLambdaLatest", SSLambdaLatest}, {"SSLambdaDev", SSLambdaDev}, - {"IFT", InclusiveTagger}, - {"IFTDev", InclusiveTaggerDev}}; + {"InclusiveTagger", InclusiveTagger}, + {"InclusiveTaggerDev", InclusiveTaggerDev}, + {"DevelopmentTagger", DevelopmentTagger}, + {"DevelopmentTaggerDev", DevelopmentTaggerDev}}; return m; } -- GitLab From 0019e85d47b6a56ccc2e2bbad93ab903e79f02ac Mon Sep 17 00:00:00 2001 From: Vukan Jevtic <vukan.jevtic@cern.ch> Date: Fri, 21 Mar 2025 22:18:34 +0100 Subject: [PATCH 2/3] Modernized Tagger.h, hopefully fixed lb-dev linking --- Event/PhysEvent/include/Event/Tagger.h | 271 +++++++------------------ 1 file changed, 76 insertions(+), 195 deletions(-) diff --git a/Event/PhysEvent/include/Event/Tagger.h b/Event/PhysEvent/include/Event/Tagger.h index b8c2919daf2..d96573b75ad 100644 --- a/Event/PhysEvent/include/Event/Tagger.h +++ b/Event/PhysEvent/include/Event/Tagger.h @@ -12,11 +12,11 @@ // Include files #include "GaudiKernel/SmartRefVector.h" -#include "GaudiKernel/VectorMap.h" #include <Event/Particle.h> #include <algorithm> #include <ostream> #include <string> +#include <unordered_map> #include <vector> // Forward declarations @@ -120,7 +120,7 @@ namespace LHCb { static LHCb::Tagger::TaggerType TaggerTypeToType( const std::string& aName ); /// conversion to string for enum type TaggerType - static const std::string& TaggerTypeToString( int aEnum ); + static const std::string& TaggerTypeToString( Tagger::TaggerType aEnum ); /// Retrieve const The type of tagger unsigned short int type() const; @@ -128,6 +128,9 @@ namespace LHCb { /// Update The type of tagger void setType( unsigned short int value ); + /// Update The type of tagger + void setType( TaggerType value ); + /// Retrieve const decision of tagger short int decision() const; @@ -181,133 +184,72 @@ namespace LHCb { float m_charge; ///< (weighted) charge of the tagging particle SmartRefVector<LHCb::Particle> m_taggerParts; ///< Vector of Particle(s) used to build the Tagger - static const GaudiUtils::VectorMap<std::string, TaggerType>& s_TaggerTypeTypMap(); + static inline const std::unordered_map<std::string, TaggerType> m_tagger_type_map{ + {"none", TaggerType::none}, + {"unknown", TaggerType::unknown}, + {"OS_Muon", TaggerType::OS_Muon}, + {"OS_Electron", TaggerType::OS_Electron}, + {"OS_Kaon", TaggerType::OS_Kaon}, + {"SS_Kaon", TaggerType::SS_Kaon}, + {"SS_Pion", TaggerType::SS_Pion}, + {"jetCharge", TaggerType::jetCharge}, + {"OS_jetCharge", TaggerType::OS_jetCharge}, + {"SS_jetCharge", TaggerType::SS_jetCharge}, + {"VtxCharge", TaggerType::VtxCharge}, + {"Topology", TaggerType::Topology}, + {"OS_nnetKaon", TaggerType::OS_nnetKaon}, + {"SS_nnetKaon", TaggerType::SS_nnetKaon}, + {"SS_Proton", TaggerType::SS_Proton}, + {"OS_Charm", TaggerType::OS_Charm}, + {"SS_PionBDT", TaggerType::SS_PionBDT}, + {"InclusiveTagger", TaggerType::Inclusive_Tagger}, + {"DevelopmentTagger", TaggerType::Development_Tagger}, + {"OSMuon", TaggerType::OSMuon}, + {"OSMuonLatest", TaggerType::OSMuonLatest}, + {"OSMuonLatestB2OC", TaggerType::OSMuonLatestB2OC}, + {"OSMuonLatestB2CC", TaggerType::OSMuonLatestB2CC}, + {"OSMuonDev", TaggerType::OSMuonDev}, + {"OSElectron", TaggerType::OSElectron}, + {"OSElectronLatest", TaggerType::OSElectronLatest}, + {"OSElectronLatestB2OC", TaggerType::OSElectronLatestB2OC}, + {"OSElectronLatestB2CC", TaggerType::OSElectronLatestB2CC}, + {"OSElectronDev", TaggerType::OSElectronDev}, + {"OSKaon", TaggerType::OSKaon}, + {"OSKaonLatest", TaggerType::OSKaonLatest}, + {"OSKaonLatestB2OC", TaggerType::OSKaonLatestB2OC}, + {"OSKaonLatestB2CC", TaggerType::OSKaonLatestB2CC}, + {"OSKaonDev", TaggerType::OSKaonDev}, + {"OSVtxCh", TaggerType::OSVtxCh}, + {"OSVtxChLatest", TaggerType::OSVtxChLatest}, + {"OSVtxChDev", TaggerType::OSVtxChDev}, + {"OSCharm", TaggerType::OSCharm}, + {"OSCharmLatest", TaggerType::OSCharmLatest}, + {"OSCharmDev", TaggerType::OSCharmDev}, + {"OSProton", TaggerType::OSProton}, + {"OSProtonLatest", TaggerType::OSProtonLatest}, + {"OSProtonDev", TaggerType::OSProtonDev}, + {"SSKaon", TaggerType::SSKaon}, + {"SSKaonLatest", TaggerType::SSKaonLatest}, + {"SSKaonDev", TaggerType::SSKaonDev}, + {"SSPion", TaggerType::SSPion}, + {"SSPionLatest", TaggerType::SSPionLatest}, + {"SSPionDev", TaggerType::SSPionDev}, + {"SSProton", TaggerType::SSProton}, + {"SSProtonLatest", TaggerType::SSProtonLatest}, + {"SSProtonDev", TaggerType::SSProtonDev}, + {"SSLambda", TaggerType::SSLambda}, + {"SSLambdaLatest", TaggerType::SSLambdaLatest}, + {"SSLambdaDev", TaggerType::SSLambdaDev}, + {"InclusiveTagger", TaggerType::InclusiveTagger}, + {"InclusiveTaggerDev", TaggerType::InclusiveTaggerDev}, + {"DevelopmentTagger", TaggerType::DevelopmentTagger}, + {"DevelopmentTaggerDev", TaggerType::DevelopmentTaggerDev}}; }; // class Tagger - inline std::ostream& operator<<( std::ostream& s, LHCb::Tagger::TaggerType e ) { - switch ( e ) { - case LHCb::Tagger::none: - return s << "none"; - case LHCb::Tagger::unknown: - return s << "unknown"; - case LHCb::Tagger::OS_Muon: - return s << "OS_Muon"; - case LHCb::Tagger::OS_Electron: - return s << "OS_Electron"; - case LHCb::Tagger::OS_Kaon: - return s << "OS_Kaon"; - case LHCb::Tagger::SS_Kaon: - return s << "SS_Kaon"; - case LHCb::Tagger::SS_Pion: - return s << "SS_Pion"; - case LHCb::Tagger::jetCharge: - return s << "jetCharge"; - case LHCb::Tagger::OS_jetCharge: - return s << "OS_jetCharge"; - case LHCb::Tagger::SS_jetCharge: - return s << "SS_jetCharge"; - case LHCb::Tagger::VtxCharge: - return s << "VtxCharge"; - case LHCb::Tagger::Topology: - return s << "Topology"; - case LHCb::Tagger::OS_nnetKaon: - return s << "OS_nnetKaon"; - case LHCb::Tagger::SS_nnetKaon: - return s << "SS_nnetKaon"; - case LHCb::Tagger::SS_Proton: - return s << "SS_Proton"; - case LHCb::Tagger::OS_Charm: - return s << "OS_Charm"; - case LHCb::Tagger::SS_PionBDT: - return s << "SS_PionBDT"; - case LHCb::Tagger::Inclusive_Tagger: - return s << "InclusiveTagger"; - case LHCb::Tagger::Development_Tagger: - return s << "DevelopmentTagger"; - case LHCb::Tagger::OSMuon: - return s << "OSMuon"; - case LHCb::Tagger::OSMuonLatest: - return s << "OSMuonLatest"; - case LHCb::Tagger::OSMuonLatestB2OC: - return s << "OSMuonLatestB2OC"; - case LHCb::Tagger::OSMuonLatestB2CC: - return s << "OSMuonLatestB2CC"; - case LHCb::Tagger::OSMuonDev: - return s << "OSMuonDev"; - case LHCb::Tagger::OSElectron: - return s << "OSElectron"; - case LHCb::Tagger::OSElectronLatest: - return s << "OSElectronLatest"; - case LHCb::Tagger::OSElectronLatestB2OC: - return s << "OSElectronLatestB2OC"; - case LHCb::Tagger::OSElectronLatestB2CC: - return s << "OSElectronLatestB2CC"; - case LHCb::Tagger::OSElectronDev: - return s << "OSElectronDev"; - case LHCb::Tagger::OSKaon: - return s << "OSKaon"; - case LHCb::Tagger::OSKaonLatest: - return s << "OSKaonLatest"; - case LHCb::Tagger::OSKaonLatestB2OC: - return s << "OSKaonLatestB2OC"; - case LHCb::Tagger::OSKaonLatestB2CC: - return s << "OSKaonLatestB2CC"; - case LHCb::Tagger::OSKaonDev: - return s << "OSKaonDev"; - case LHCb::Tagger::OSVtxCh: - return s << "OSVtxCh"; - case LHCb::Tagger::OSVtxChLatest: - return s << "OSVtxChLatest"; - case LHCb::Tagger::OSVtxChDev: - return s << "OSVtxChDev"; - case LHCb::Tagger::OSCharm: - return s << "OSCharm"; - case LHCb::Tagger::OSCharmLatest: - return s << "OSCharmLatest"; - case LHCb::Tagger::OSCharmDev: - return s << "OSCharmDev"; - case LHCb::Tagger::OSProton: - return s << "OSProton"; - case LHCb::Tagger::OSProtonLatest: - return s << "OSProtonLatest"; - case LHCb::Tagger::OSProtonDev: - return s << "OSProtonDev"; - case LHCb::Tagger::SSKaon: - return s << "SSKaon"; - case LHCb::Tagger::SSKaonLatest: - return s << "SSKaonLatest"; - case LHCb::Tagger::SSKaonDev: - return s << "SSKaonDev"; - case LHCb::Tagger::SSPion: - return s << "SSPion"; - case LHCb::Tagger::SSPionLatest: - return s << "SSPionLatest"; - case LHCb::Tagger::SSPionDev: - return s << "SSPionDev"; - case LHCb::Tagger::SSProton: - return s << "SSProton"; - case LHCb::Tagger::SSProtonLatest: - return s << "SSProtonLatest"; - case LHCb::Tagger::SSProtonDev: - return s << "SSProtonDev"; - case LHCb::Tagger::SSLambda: - return s << "SSLambda"; - case LHCb::Tagger::SSLambdaLatest: - return s << "SSLambdaLatest"; - case LHCb::Tagger::SSLambdaDev: - return s << "SSLambdaDev"; - case LHCb::Tagger::InclusiveTagger: - return s << "IFT"; - case LHCb::Tagger::InclusiveTaggerDev: - return s << "IFTDev"; - case LHCb::Tagger::DevelopmentTagger: - return s << "DevTagger"; - case LHCb::Tagger::DevelopmentTaggerDev: - return s << "DevTaggerDev"; - default: - return s << "ERROR wrong value " << int( e ) << " for enum LHCb::Tagger::TaggerType"; - } + inline std::ostream& operator<<( std::ostream& s, Tagger::TaggerType e ) { + s << Tagger::TaggerTypeToString( e ); + return s; } } // namespace LHCb @@ -329,85 +271,24 @@ inline std::ostream& LHCb::Tagger::fillStream( std::ostream& s ) const { return s; } -inline const GaudiUtils::VectorMap<std::string, LHCb::Tagger::TaggerType>& LHCb::Tagger::s_TaggerTypeTypMap() { - static const GaudiUtils::VectorMap<std::string, TaggerType> m = {{"none", none}, - {"unknown", unknown}, - {"OS_Muon", OS_Muon}, - {"OS_Electron", OS_Electron}, - {"OS_Kaon", OS_Kaon}, - {"SS_Kaon", SS_Kaon}, - {"SS_Pion", SS_Pion}, - {"jetCharge", jetCharge}, - {"OS_jetCharge", OS_jetCharge}, - {"SS_jetCharge", SS_jetCharge}, - {"VtxCharge", VtxCharge}, - {"Topology", Topology}, - {"OS_nnetKaon", OS_nnetKaon}, - {"SS_nnetKaon", SS_nnetKaon}, - {"SS_Proton", SS_Proton}, - {"OS_Charm", OS_Charm}, - {"SS_PionBDT", SS_PionBDT}, - {"InclusiveTagger", Inclusive_Tagger}, - {"DevelopmentTagger", Development_Tagger}, - {"OSMuon", OSMuon}, - {"OSMuonLatest", OSMuonLatest}, - {"OSMuonLatestB2OC", OSMuonLatestB2OC}, - {"OSMuonLatestB2CC", OSMuonLatestB2CC}, - {"OSMuonDev", OSMuonDev}, - {"OSElectron", OSElectron}, - {"OSElectronLatest", OSElectronLatest}, - {"OSElectronLatestB2OC", OSElectronLatestB2OC}, - {"OSElectronLatestB2CC", OSElectronLatestB2CC}, - {"OSElectronDev", OSElectronDev}, - {"OSKaon", OSKaon}, - {"OSKaonLatest", OSKaonLatest}, - {"OSKaonLatestB2OC", OSKaonLatestB2OC}, - {"OSKaonLatestB2CC", OSKaonLatestB2CC}, - {"OSKaonDev", OSKaonDev}, - {"OSVtxCh", OSVtxCh}, - {"OSVtxChLatest", OSVtxChLatest}, - {"OSVtxChDev", OSVtxChDev}, - {"OSCharm", OSCharm}, - {"OSCharmLatest", OSCharmLatest}, - {"OSCharmDev", OSCharmDev}, - {"OSProton", OSProton}, - {"OSProtonLatest", OSProtonLatest}, - {"OSProtonDev", OSProtonDev}, - {"SSKaon", SSKaon}, - {"SSKaonLatest", SSKaonLatest}, - {"SSKaonDev", SSKaonDev}, - {"SSPion", SSPion}, - {"SSPionLatest", SSPionLatest}, - {"SSPionDev", SSPionDev}, - {"SSProton", SSProton}, - {"SSProtonLatest", SSProtonLatest}, - {"SSProtonDev", SSProtonDev}, - {"SSLambda", SSLambda}, - {"SSLambdaLatest", SSLambdaLatest}, - {"SSLambdaDev", SSLambdaDev}, - {"InclusiveTagger", InclusiveTagger}, - {"InclusiveTaggerDev", InclusiveTaggerDev}, - {"DevelopmentTagger", DevelopmentTagger}, - {"DevelopmentTaggerDev", DevelopmentTaggerDev}}; - return m; -} - inline LHCb::Tagger::TaggerType LHCb::Tagger::TaggerTypeToType( const std::string& aName ) { - auto iter = s_TaggerTypeTypMap().find( aName ); - return iter != s_TaggerTypeTypMap().end() ? iter->second : unknown; + auto iter = m_tagger_type_map.find( aName ); + return iter != m_tagger_type_map.end() ? iter->second : TaggerType::unknown; } -inline const std::string& LHCb::Tagger::TaggerTypeToString( int aEnum ) { +inline const std::string& LHCb::Tagger::TaggerTypeToString( Tagger::TaggerType aEnum ) { static const std::string s_unknown = "unknown"; - auto iter = std::find_if( s_TaggerTypeTypMap().begin(), s_TaggerTypeTypMap().end(), - [&]( const std::pair<const std::string, TaggerType>& i ) { return i.second == aEnum; } ); - return iter != s_TaggerTypeTypMap().end() ? iter->first : s_unknown; + auto iter = std::find_if( m_tagger_type_map.begin(), m_tagger_type_map.end(), + [aEnum]( const auto& pair ) { return pair.second == aEnum; } ); + return iter != m_tagger_type_map.end() ? iter->first : s_unknown; } inline unsigned short int LHCb::Tagger::type() const { return m_type; } inline void LHCb::Tagger::setType( unsigned short int value ) { m_type = value; } +inline void LHCb::Tagger::setType( TaggerType value ) { m_type = static_cast<unsigned short>( value ); } + inline short int LHCb::Tagger::decision() const { return m_decision; } inline void LHCb::Tagger::setDecision( short int value ) { m_decision = value; } -- GitLab From 231731fc46a9824085e795bb0bc7dbb98e7387e2 Mon Sep 17 00:00:00 2001 From: Vukan Jevtic <vukan.jevtic@cern.ch> Date: Mon, 24 Mar 2025 17:07:36 +0100 Subject: [PATCH 3/3] Separate implementation of class Tagger. --- Event/PhysEvent/CMakeLists.txt | 1 + Event/PhysEvent/include/Event/Tagger.h | 185 +++++++------------------ Event/PhysEvent/src/Tagger.cpp | 93 +++++++++++++ 3 files changed, 141 insertions(+), 138 deletions(-) create mode 100644 Event/PhysEvent/src/Tagger.cpp diff --git a/Event/PhysEvent/CMakeLists.txt b/Event/PhysEvent/CMakeLists.txt index feda598ce4e..8b79cd897b4 100644 --- a/Event/PhysEvent/CMakeLists.txt +++ b/Event/PhysEvent/CMakeLists.txt @@ -17,6 +17,7 @@ gaudi_add_library(PhysEvent SOURCES src/Particle.cpp src/Vertex.cpp + src/Tagger.cpp LINK PUBLIC Gaudi::GaudiKernel diff --git a/Event/PhysEvent/include/Event/Tagger.h b/Event/PhysEvent/include/Event/Tagger.h index d96573b75ad..fbd23e31034 100644 --- a/Event/PhysEvent/include/Event/Tagger.h +++ b/Event/PhysEvent/include/Event/Tagger.h @@ -16,7 +16,6 @@ #include <algorithm> #include <ostream> #include <string> -#include <unordered_map> #include <vector> // Forward declarations @@ -33,7 +32,7 @@ namespace LHCb { * */ - class Tagger { + class Tagger final { public: /// The type of tagger which has produced this decision enum TaggerType { @@ -98,23 +97,12 @@ namespace LHCb { DevelopmentTaggerDev = 40199, }; - /// Copy Constructor - Tagger( const Tagger& c ) - : m_type( c.type() ) - , m_decision( c.decision() ) - , m_omega( c.omega() ) - , m_mvaValue( c.mvaValue() ) - , m_charge( c.charge() ) - , m_taggerParts( c.taggerParts() ) {} - - /// Default Constructor - Tagger() : m_type( 0 ), m_decision( 0 ), m_omega( 0.50 ), m_mvaValue( 0.0 ), m_charge( 0.0 ) {} - - /// Default Destructor - virtual ~Tagger() {} + Tagger() = default; + Tagger( const Tagger& c ) = default; + ~Tagger() = default; /// Fill the ASCII output stream - virtual std::ostream& fillStream( std::ostream& s ) const; + std::ostream& fillStream( std::ostream& s ) const; /// conversion of string to enum for type TaggerType static LHCb::Tagger::TaggerType TaggerTypeToType( const std::string& aName ); @@ -177,147 +165,68 @@ namespace LHCb { protected: private: - unsigned short int m_type; ///< The type of tagger - short int m_decision; ///< decision of tagger - float m_omega; ///< wrong tag fraction of tagger from MC tuning - float m_mvaValue; ///< raw output of the mva - float m_charge; ///< (weighted) charge of the tagging particle - SmartRefVector<LHCb::Particle> m_taggerParts; ///< Vector of Particle(s) used to build the Tagger - - static inline const std::unordered_map<std::string, TaggerType> m_tagger_type_map{ - {"none", TaggerType::none}, - {"unknown", TaggerType::unknown}, - {"OS_Muon", TaggerType::OS_Muon}, - {"OS_Electron", TaggerType::OS_Electron}, - {"OS_Kaon", TaggerType::OS_Kaon}, - {"SS_Kaon", TaggerType::SS_Kaon}, - {"SS_Pion", TaggerType::SS_Pion}, - {"jetCharge", TaggerType::jetCharge}, - {"OS_jetCharge", TaggerType::OS_jetCharge}, - {"SS_jetCharge", TaggerType::SS_jetCharge}, - {"VtxCharge", TaggerType::VtxCharge}, - {"Topology", TaggerType::Topology}, - {"OS_nnetKaon", TaggerType::OS_nnetKaon}, - {"SS_nnetKaon", TaggerType::SS_nnetKaon}, - {"SS_Proton", TaggerType::SS_Proton}, - {"OS_Charm", TaggerType::OS_Charm}, - {"SS_PionBDT", TaggerType::SS_PionBDT}, - {"InclusiveTagger", TaggerType::Inclusive_Tagger}, - {"DevelopmentTagger", TaggerType::Development_Tagger}, - {"OSMuon", TaggerType::OSMuon}, - {"OSMuonLatest", TaggerType::OSMuonLatest}, - {"OSMuonLatestB2OC", TaggerType::OSMuonLatestB2OC}, - {"OSMuonLatestB2CC", TaggerType::OSMuonLatestB2CC}, - {"OSMuonDev", TaggerType::OSMuonDev}, - {"OSElectron", TaggerType::OSElectron}, - {"OSElectronLatest", TaggerType::OSElectronLatest}, - {"OSElectronLatestB2OC", TaggerType::OSElectronLatestB2OC}, - {"OSElectronLatestB2CC", TaggerType::OSElectronLatestB2CC}, - {"OSElectronDev", TaggerType::OSElectronDev}, - {"OSKaon", TaggerType::OSKaon}, - {"OSKaonLatest", TaggerType::OSKaonLatest}, - {"OSKaonLatestB2OC", TaggerType::OSKaonLatestB2OC}, - {"OSKaonLatestB2CC", TaggerType::OSKaonLatestB2CC}, - {"OSKaonDev", TaggerType::OSKaonDev}, - {"OSVtxCh", TaggerType::OSVtxCh}, - {"OSVtxChLatest", TaggerType::OSVtxChLatest}, - {"OSVtxChDev", TaggerType::OSVtxChDev}, - {"OSCharm", TaggerType::OSCharm}, - {"OSCharmLatest", TaggerType::OSCharmLatest}, - {"OSCharmDev", TaggerType::OSCharmDev}, - {"OSProton", TaggerType::OSProton}, - {"OSProtonLatest", TaggerType::OSProtonLatest}, - {"OSProtonDev", TaggerType::OSProtonDev}, - {"SSKaon", TaggerType::SSKaon}, - {"SSKaonLatest", TaggerType::SSKaonLatest}, - {"SSKaonDev", TaggerType::SSKaonDev}, - {"SSPion", TaggerType::SSPion}, - {"SSPionLatest", TaggerType::SSPionLatest}, - {"SSPionDev", TaggerType::SSPionDev}, - {"SSProton", TaggerType::SSProton}, - {"SSProtonLatest", TaggerType::SSProtonLatest}, - {"SSProtonDev", TaggerType::SSProtonDev}, - {"SSLambda", TaggerType::SSLambda}, - {"SSLambdaLatest", TaggerType::SSLambdaLatest}, - {"SSLambdaDev", TaggerType::SSLambdaDev}, - {"InclusiveTagger", TaggerType::InclusiveTagger}, - {"InclusiveTaggerDev", TaggerType::InclusiveTaggerDev}, - {"DevelopmentTagger", TaggerType::DevelopmentTagger}, - {"DevelopmentTaggerDev", TaggerType::DevelopmentTaggerDev}}; + unsigned short int m_type = TaggerType::none; ///< The type of tagger + short int m_decision = 0; ///< decision of tagger + float m_omega = 0.5; ///< wrong tag fraction of tagger from MC tuning + float m_mvaValue = 0; ///< raw output of the mva + float m_charge = 0; ///< (weighted) charge of the tagging particle + SmartRefVector<LHCb::Particle> m_taggerParts; ///< Vector of Particle(s) used to build the Tagger }; // class Tagger - inline std::ostream& operator<<( std::ostream& s, Tagger::TaggerType e ) { - s << Tagger::TaggerTypeToString( e ); - return s; - } - -} // namespace LHCb - -// ----------------------------------------------------------------------------- -// end of class -// ----------------------------------------------------------------------------- - -// Including forward declarations + inline std::ostream& operator<<( std::ostream& s, Tagger::TaggerType e ); -inline std::ostream& LHCb::Tagger::fillStream( std::ostream& s ) const { - s << "{ " - << "type : " << m_type << std::endl - << "decision : " << m_decision << std::endl - << "omega : " << m_omega << std::endl - << "mvaValue : " << m_mvaValue << std::endl - << "charge : " << m_charge << std::endl - << " }"; - return s; -} + // ----------------------------------------------------------------------------- + // end of class + // ----------------------------------------------------------------------------- -inline LHCb::Tagger::TaggerType LHCb::Tagger::TaggerTypeToType( const std::string& aName ) { - auto iter = m_tagger_type_map.find( aName ); - return iter != m_tagger_type_map.end() ? iter->second : TaggerType::unknown; -} + // Including forward declarations -inline const std::string& LHCb::Tagger::TaggerTypeToString( Tagger::TaggerType aEnum ) { - static const std::string s_unknown = "unknown"; - auto iter = std::find_if( m_tagger_type_map.begin(), m_tagger_type_map.end(), - [aEnum]( const auto& pair ) { return pair.second == aEnum; } ); - return iter != m_tagger_type_map.end() ? iter->first : s_unknown; -} + inline std::ostream& LHCb::Tagger::fillStream( std::ostream& s ) const { + s << "{ " + << "type : " << m_type << std::endl + << "decision : " << m_decision << std::endl + << "omega : " << m_omega << std::endl + << "mvaValue : " << m_mvaValue << std::endl + << "charge : " << m_charge << std::endl + << " }"; + return s; + } -inline unsigned short int LHCb::Tagger::type() const { return m_type; } + inline unsigned short int Tagger::type() const { return m_type; } -inline void LHCb::Tagger::setType( unsigned short int value ) { m_type = value; } + inline void Tagger::setType( unsigned short int value ) { m_type = value; } -inline void LHCb::Tagger::setType( TaggerType value ) { m_type = static_cast<unsigned short>( value ); } + inline void Tagger::setType( TaggerType value ) { m_type = static_cast<unsigned short>( value ); } -inline short int LHCb::Tagger::decision() const { return m_decision; } + inline short int Tagger::decision() const { return m_decision; } -inline void LHCb::Tagger::setDecision( short int value ) { m_decision = value; } + inline void Tagger::setDecision( short int value ) { m_decision = value; } -inline float LHCb::Tagger::omega() const { return m_omega; } + inline float Tagger::omega() const { return m_omega; } -inline void LHCb::Tagger::setOmega( float value ) { m_omega = value; } + inline void Tagger::setOmega( float value ) { m_omega = value; } -inline float LHCb::Tagger::mvaValue() const { return m_mvaValue; } + inline float Tagger::mvaValue() const { return m_mvaValue; } -inline void LHCb::Tagger::setMvaValue( float value ) { m_mvaValue = value; } + inline void Tagger::setMvaValue( float value ) { m_mvaValue = value; } -inline float LHCb::Tagger::charge() const { return m_charge; } + inline float Tagger::charge() const { return m_charge; } -inline void LHCb::Tagger::setCharge( float value ) { m_charge = value; } + inline void Tagger::setCharge( float value ) { m_charge = value; } -inline const SmartRefVector<LHCb::Particle>& LHCb::Tagger::taggerParts() const { return m_taggerParts; } + inline const SmartRefVector<Particle>& Tagger::taggerParts() const { return m_taggerParts; } -inline void LHCb::Tagger::setTaggerParts( const SmartRefVector<LHCb::Particle>& value ) { m_taggerParts = value; } + inline void Tagger::setTaggerParts( const SmartRefVector<Particle>& value ) { m_taggerParts = value; } -inline void LHCb::Tagger::addToTaggerParts( const SmartRef<LHCb::Particle>& value ) { - m_taggerParts.push_back( value ); -} + inline void Tagger::addToTaggerParts( const SmartRef<Particle>& value ) { m_taggerParts.push_back( value ); } -inline void LHCb::Tagger::addToTaggerParts( const LHCb::Particle* value ) { m_taggerParts.push_back( value ); } + inline void Tagger::addToTaggerParts( const Particle* value ) { m_taggerParts.push_back( value ); } -inline void LHCb::Tagger::removeFromTaggerParts( const SmartRef<LHCb::Particle>& value ) { - auto i = std::remove( m_taggerParts.begin(), m_taggerParts.end(), value ); - m_taggerParts.erase( i, m_taggerParts.end() ); -} + inline void Tagger::removeFromTaggerParts( const SmartRef<Particle>& value ) { + auto i = std::remove( m_taggerParts.begin(), m_taggerParts.end(), value ); + m_taggerParts.erase( i, m_taggerParts.end() ); + } -inline void LHCb::Tagger::clearTaggerParts() { m_taggerParts.clear(); } + inline void Tagger::clearTaggerParts() { m_taggerParts.clear(); } +} // namespace LHCb diff --git a/Event/PhysEvent/src/Tagger.cpp b/Event/PhysEvent/src/Tagger.cpp new file mode 100644 index 00000000000..cb3f738bd3d --- /dev/null +++ b/Event/PhysEvent/src/Tagger.cpp @@ -0,0 +1,93 @@ +/*****************************************************************************\ +* (c) Copyright 2025 CERN for the benefit of the LHCb Collaboration * +* * +* This software is distributed under the terms of the GNU General Public * +* Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". * +* * +* In applying this licence, CERN does not waive the privileges and immunities * +* granted to it by virtue of its status as an Intergovernmental Organization * +* or submit itself to any jurisdiction. * +\*****************************************************************************/ +#include "Event/Tagger.h" +#include "GaudiKernel/VectorMap.h" + +namespace { + using TType = LHCb::Tagger::TaggerType; + const GaudiUtils::VectorMap<std::string, TType> m_tagger_type_map = { + {"none", TType::none}, + {"unknown", TType::unknown}, + {"OS_Muon", TType::OS_Muon}, + {"OS_Electron", TType::OS_Electron}, + {"OS_Kaon", TType::OS_Kaon}, + {"SS_Kaon", TType::SS_Kaon}, + {"SS_Pion", TType::SS_Pion}, + {"jetCharge", TType::jetCharge}, + {"OS_jetCharge", TType::OS_jetCharge}, + {"SS_jetCharge", TType::SS_jetCharge}, + {"VtxCharge", TType::VtxCharge}, + {"Topology", TType::Topology}, + {"OS_nnetKaon", TType::OS_nnetKaon}, + {"SS_nnetKaon", TType::SS_nnetKaon}, + {"SS_Proton", TType::SS_Proton}, + {"OS_Charm", TType::OS_Charm}, + {"SS_PionBDT", TType::SS_PionBDT}, + {"InclusiveTagger", TType::Inclusive_Tagger}, + {"DevelopmentTagger", TType::Development_Tagger}, + {"OSMuon", TType::OSMuon}, + {"OSMuonLatest", TType::OSMuonLatest}, + {"OSMuonLatestB2OC", TType::OSMuonLatestB2OC}, + {"OSMuonLatestB2CC", TType::OSMuonLatestB2CC}, + {"OSMuonDev", TType::OSMuonDev}, + {"OSElectron", TType::OSElectron}, + {"OSElectronLatest", TType::OSElectronLatest}, + {"OSElectronLatestB2OC", TType::OSElectronLatestB2OC}, + {"OSElectronLatestB2CC", TType::OSElectronLatestB2CC}, + {"OSElectronDev", TType::OSElectronDev}, + {"OSKaon", TType::OSKaon}, + {"OSKaonLatest", TType::OSKaonLatest}, + {"OSKaonLatestB2OC", TType::OSKaonLatestB2OC}, + {"OSKaonLatestB2CC", TType::OSKaonLatestB2CC}, + {"OSKaonDev", TType::OSKaonDev}, + {"OSVtxCh", TType::OSVtxCh}, + {"OSVtxChLatest", TType::OSVtxChLatest}, + {"OSVtxChDev", TType::OSVtxChDev}, + {"OSCharm", TType::OSCharm}, + {"OSCharmLatest", TType::OSCharmLatest}, + {"OSCharmDev", TType::OSCharmDev}, + {"OSProton", TType::OSProton}, + {"OSProtonLatest", TType::OSProtonLatest}, + {"OSProtonDev", TType::OSProtonDev}, + {"SSKaon", TType::SSKaon}, + {"SSKaonLatest", TType::SSKaonLatest}, + {"SSKaonDev", TType::SSKaonDev}, + {"SSPion", TType::SSPion}, + {"SSPionLatest", TType::SSPionLatest}, + {"SSPionDev", TType::SSPionDev}, + {"SSProton", TType::SSProton}, + {"SSProtonLatest", TType::SSProtonLatest}, + {"SSProtonDev", TType::SSProtonDev}, + {"SSLambda", TType::SSLambda}, + {"SSLambdaLatest", TType::SSLambdaLatest}, + {"SSLambdaDev", TType::SSLambdaDev}, + {"InclusiveTagger", TType::InclusiveTagger}, + {"InclusiveTaggerDev", TType::InclusiveTaggerDev}, + {"DevelopmentTagger", TType::DevelopmentTagger}, + {"DevelopmentTaggerDev", TType::DevelopmentTaggerDev}}; +} // namespace + +std::ostream& operator<<( std::ostream& s, LHCb::Tagger::TaggerType e ) { + s << LHCb::Tagger::TaggerTypeToString( e ); + return s; +} + +LHCb::Tagger::TaggerType LHCb::Tagger::TaggerTypeToType( const std::string& aName ) { + auto iter = m_tagger_type_map.find( aName ); + return iter != m_tagger_type_map.end() ? iter->second : TaggerType::unknown; +} + +const std::string& LHCb::Tagger::TaggerTypeToString( Tagger::TaggerType aEnum ) { + static const std::string s_unknown = "unknown"; + auto iter = std::find_if( m_tagger_type_map.begin(), m_tagger_type_map.end(), + [aEnum]( const auto& pair ) { return pair.second == aEnum; } ); + return iter != m_tagger_type_map.end() ? iter->first : s_unknown; +} -- GitLab