diff --git a/Muon/MuonTools/CMakeLists.txt b/Muon/MuonTools/CMakeLists.txt index 36d48efd7101e2f4c05bd76a95e42766603558e8..f5a2033c0044bf99a49c91a17e133017c33b63ae 100644 --- a/Muon/MuonTools/CMakeLists.txt +++ b/Muon/MuonTools/CMakeLists.txt @@ -17,7 +17,6 @@ gaudi_add_module(MuonTools SOURCES src/MuonFastHWTool.cpp src/MuonFastPosTool.cpp - src/MuonPIDConverter.cpp src/MuonPIDToMuonTracks.cpp src/MuonPIDV2ToMuonTracks.cpp src/MergeMuonPIDs.cpp diff --git a/Muon/MuonTools/src/MuonPIDConverter.cpp b/Muon/MuonTools/src/MuonPIDConverter.cpp deleted file mode 100644 index 215cf72118b5fb95712325e74fd8d5c944701f65..0000000000000000000000000000000000000000 --- a/Muon/MuonTools/src/MuonPIDConverter.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/*****************************************************************************\ -* (c) Copyright 2000-2018 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. * -\*****************************************************************************/ - -// Gaudi -#include "GaudiAlg/Transformer.h" - -// LHCb -#include "Event/MuonPID.h" -#include "Event/MuonPIDs_v2.h" -#include "Event/Track.h" - -/** - * Converter from MuonPID SoA PoD to LHCb::MuonPIDs (KeyedContainer) - * - * @author Ricardo Vazquez Gomez (UB) - * - * Based on https://gitlab.cern.ch/lhcb/Rec/blob/master/Pr/PrConverters/src/fromPrVeloUTTrack.cpp - * from Michel De Cian - */ - -// Use the functional framework -using namespace Gaudi::Functional; -using TType = LHCb::Event::Enum::Track::Type; -using MuonPIDs = LHCb::Event::v2::Muon::PIDs; - -class MuonPIDConverter - : public Transformer<LHCb::MuonPIDs( const MuonPIDs&, const LHCb::Tracks&, const LHCb::Tracks& )> { - -public: - MuonPIDConverter( const std::string& name, ISvcLocator* pSvcLocator ) - : Transformer( name, pSvcLocator, - {KeyValue{"InputMuonPIDs", LHCb::MuonPIDLocation::Default}, - KeyValue{"InputTracks", LHCb::TrackLocation::Default}, KeyValue{"InputMuonTracks", ""}}, - KeyValue{"OutputMuonPIDs", "Rec/Muon/MuonPID"} ) {} - - LHCb::MuonPIDs operator()( const MuonPIDs& muonPIDs, const LHCb::Tracks& tracks, - const LHCb::Tracks& muontracks ) const override { - LHCb::MuonPIDs out; - out.reserve( muonPIDs.size() ); - - m_nbMuonPIDsCounter += muonPIDs.size(); - if ( !tracks.empty() && !muonPIDs.empty() ) { - auto offsetTrack = std::find_if( tracks.begin(), tracks.end(), - [&]( const auto& tk ) { return tk->type() == m_track_type.value(); } ); - auto offsetIndex = ( *offsetTrack )->index(); - - for ( auto const& muonPID : muonPIDs.scalar() ) { - auto newMuonPID = new LHCb::MuonPID(); - newMuonPID->setChi2Corr( muonPID.Chi2Corr().cast() ); - newMuonPID->setIsMuon( muonPID.IsMuon().cast() ); - newMuonPID->setIsMuonTight( muonPID.IsMuonTight().cast() ); - newMuonPID->setInAcceptance( muonPID.InAcceptance().cast() ); - newMuonPID->setPreSelMomentum( muonPID.PreSelMomentum().cast() ); - newMuonPID->setMuonLLMu( muonPID.LLMu().cast() ); - newMuonPID->setMuonLLBg( muonPID.LLBg().cast() ); - newMuonPID->setMuonMVA2( muonPID.CatBoost().cast() ); - - auto index = muonPID.indices(); - // get the correct track - auto it = tracks.begin() + index.cast() + offsetIndex; - newMuonPID->setIDTrack( ( *it ) ); - auto muonit = muontracks.begin() + index.cast(); - newMuonPID->setMuonTrack( *muonit ); - out.insert( newMuonPID ); - } - } - return out; - }; - -private: - Gaudi::Property<TType> m_track_type{ - this, "RestrictToType", TType::Unknown, - "If set, filter the input tracks and only write those of the given type. Otherwise the full set is processed"}; - mutable Gaudi::Accumulators::SummingCounter<> m_nbMuonPIDsCounter{this, "Nb of Produced MuonPIDs"}; -}; - -DECLARE_COMPONENT( MuonPIDConverter ) diff --git a/Pr/PrConverters/src/fromV2MuonPIDV1MuonPID.cpp b/Pr/PrConverters/src/fromV2MuonPIDV1MuonPID.cpp index 63b4a13b755db224bfa9004380a97d27742591d8..e89c9d128652650dcc9a1e725a1fb600081f9444 100644 --- a/Pr/PrConverters/src/fromV2MuonPIDV1MuonPID.cpp +++ b/Pr/PrConverters/src/fromV2MuonPIDV1MuonPID.cpp @@ -1,5 +1,5 @@ /*****************************************************************************\ -* (c) Copyright 2018 CERN for the benefit of the LHCb Collaboration * +* (c) Copyright 2000-2022 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". * @@ -9,50 +9,75 @@ * or submit itself to any jurisdiction. * \*****************************************************************************/ -// Include files -// from Gaudi +// Gaudi +#include "LHCbAlgs/Transformer.h" + +// LHCb #include "Event/MuonPID.h" -#include "Event/MuonPID_v2.h" #include "Event/MuonPIDs_v2.h" -#include "LHCbAlgs/Transformer.h" -#include "PrKernel/PrSelection.h" +#include "Event/Track.h" -namespace LHCb::Converters::MuonPID::v1 { +/** + * Converter from MuonPID SoA PoD to LHCb::MuonPIDs (KeyedContainer) + * + * @author Ricardo Vazquez Gomez (UB) + * + * Based on https://gitlab.cern.ch/lhcb/Rec/blob/master/Pr/PrConverters/src/fromPrVeloUTTrack.cpp + * from Michel De Cian + */ - struct fromV2MuonPIDV1MuonPID - : public LHCb::Algorithm::Transformer<LHCb::MuonPIDs( LHCb::Event::v2::Muon::PIDs const& )> { +namespace LHCb::Converters::Muon { - fromV2MuonPIDV1MuonPID( std::string const& name, ISvcLocator* pSvcLocator ) - : Transformer( name, pSvcLocator, KeyValue{"InputMuonPIDs", ""}, KeyValue{"OutputMuonPIDs", ""} ) {} + class fromV2MuonPIDV1MuonPID : public Algorithm::Transformer<LHCb::MuonPIDs( + const Event::v2::Muon::PIDs&, const LHCb::Tracks&, const LHCb::Tracks& )> { - LHCb::MuonPIDs operator()( LHCb::Event::v2::Muon::PIDs const& muonPids ) const override { + public: + fromV2MuonPIDV1MuonPID( const std::string& name, ISvcLocator* pSvcLocator ) + : Transformer( name, pSvcLocator, + {KeyValue{"InputMuonPIDs", LHCb::MuonPIDLocation::Default}, + KeyValue{"InputTracks", LHCb::TrackLocation::Default}, KeyValue{"InputMuonTracks", ""}}, + KeyValue{"OutputMuonPIDs", "Rec/Muon/MuonPID"} ) {} + + LHCb::MuonPIDs operator()( const Event::v2::Muon::PIDs& muonPIDs, const LHCb::Tracks& tracks, + const LHCb::Tracks& muontracks ) const override { LHCb::MuonPIDs out; - out.reserve( muonPids.size() ); - for ( auto const& muonPid : muonPids.scalar() ) { - auto* outPid = new LHCb::MuonPID{}; - outPid->setMuonLLMu( 0 ); - outPid->setMuonLLBg( 0 ); - outPid->setNShared( -1 ); - outPid->setStatus( 0 ); - outPid->setIsMuon( muonPid.IsMuon().cast() ); - outPid->setInAcceptance( muonPid.InAcceptance().cast() ); - outPid->setPreSelMomentum( muonPid.PreSelMomentum().cast() ); - outPid->setInAcceptance( 0 ); - outPid->setPreSelMomentum( 0 ); - outPid->setIsMuonLoose( 1 ); - outPid->setIsMuonTight( muonPid.IsMuonTight().cast() ); - outPid->setIsMuonTight( 0 ); - outPid->setChi2Corr( muonPid.Chi2Corr().cast() ); - outPid->setMuonMVA1( 0 ); - outPid->setMuonMVA2( 0 ); - outPid->setMuonMVA3( 0 ); - outPid->setMuonMVA4( 0 ); - outPid->setIDTrack( nullptr ); - outPid->setMuonTrack( nullptr ); - out.add( outPid ); + out.reserve( muonPIDs.size() ); + + m_nbMuonPIDsCounter += muonPIDs.size(); + + if ( !tracks.empty() && !muonPIDs.empty() ) { + auto offsetTrack = std::find_if( tracks.begin(), tracks.end(), + [&]( const auto& tk ) { return tk->type() == m_track_type.value(); } ); + auto offsetIndex = ( *offsetTrack )->index(); + + for ( auto const& muonPID : muonPIDs.scalar() ) { + auto newMuonPID = new LHCb::MuonPID(); + newMuonPID->setChi2Corr( muonPID.Chi2Corr().cast() ); + newMuonPID->setIsMuon( muonPID.IsMuon().cast() ); + newMuonPID->setIsMuonTight( muonPID.IsMuonTight().cast() ); + newMuonPID->setInAcceptance( muonPID.InAcceptance().cast() ); + newMuonPID->setPreSelMomentum( muonPID.PreSelMomentum().cast() ); + newMuonPID->setMuonLLMu( muonPID.LLMu().cast() ); + newMuonPID->setMuonLLBg( muonPID.LLBg().cast() ); + newMuonPID->setMuonMVA2( muonPID.CatBoost().cast() ); + auto index = muonPID.indices(); + // get the correct track + auto it = tracks.begin() + index.cast() + offsetIndex; + newMuonPID->setIDTrack( ( *it ) ); + auto muonit = muontracks.begin() + index.cast(); + newMuonPID->setMuonTrack( *muonit ); + out.insert( newMuonPID ); + } } return out; - } + }; + + private: + Gaudi::Property<Event::Enum::Track::Type> m_track_type{ + this, "RestrictToType", Event::Enum::Track::Type::Unknown, + "If set, filter the input tracks and only write those of the given type. Otherwise the full set is processed"}; + mutable Gaudi::Accumulators::SummingCounter<> m_nbMuonPIDsCounter{this, "Nb of Produced MuonPIDs"}; }; - DECLARE_COMPONENT( fromV2MuonPIDV1MuonPID ) -} // namespace LHCb::Converters::MuonPID::v1 + + DECLARE_COMPONENT_WITH_ID( fromV2MuonPIDV1MuonPID, "fromV2MuonPIDV1MuonPID" ) +} // namespace LHCb::Converters::Muon diff --git a/Rec/RecConf/python/RecConf/Configuration.py b/Rec/RecConf/python/RecConf/Configuration.py index 8b7e2690117d29654a5245acb0f5f9fc00a9218f..5209feb01e7fff15f2f3ece0bfa2b819e95cffc2 100755 --- a/Rec/RecConf/python/RecConf/Configuration.py +++ b/Rec/RecConf/python/RecConf/Configuration.py @@ -228,7 +228,7 @@ class RecSysConf(LHCbConfigurableUser): # MUON if "MUON" in recoSeq: - from Configurables import RawBankReadoutStatusConverter, RawBankReadoutStatusFilter, MuonIDHlt2Alg, MuonPIDConverter, PrepareMuonHits, UniqueIDGeneratorAlg, MergeMuonPIDsV1, MuonPIDToMuonTracks, MuonPIDV2ToMuonTracks + from Configurables import RawBankReadoutStatusConverter, RawBankReadoutStatusFilter, MuonIDHlt2Alg, fromV2MuonPIDV1MuonPID, PrepareMuonHits, UniqueIDGeneratorAlg, MergeMuonPIDsV1, MuonPIDToMuonTracks, MuonPIDV2ToMuonTracks from Configurables import LHCb__Converters__Track__SOA__fromV1Track as TrackSOAFromV1 longTrackAlg = TrackSOAFromV1( "longTrackAlg", @@ -247,7 +247,7 @@ class RecSysConf(LHCbConfigurableUser): InputTracks="/Event/Rec/Track/Best", OutputMuonTracks="/Event/Rec/Muon/LongMuonTracks", RestrictToType="Long") - longMuonPIDv1Alg = MuonPIDConverter( + longMuonPIDv1Alg = fromV2MuonPIDV1MuonPID( "longMuonPIDv1Alg", InputMuonPIDs="/Event/Muon/LongMuonPIDs", InputTracks="/Event/Rec/Track/Best", @@ -272,7 +272,7 @@ class RecSysConf(LHCbConfigurableUser): InputTracks="/Event/Rec/Track/Best", OutputMuonTracks="/Event/Rec/Muon/DownMuonTracks", RestrictToType="Downstream") - downMuonPIDv1Alg = MuonPIDConverter( + downMuonPIDv1Alg = fromV2MuonPIDV1MuonPID( "downMuonPIDv1Alg", InputMuonPIDs="/Event/Muon/DownMuonPIDs", InputTracks="/Event/Rec/Track/Best",