From 26d48988421912a436567c25a5c818596cd42eab Mon Sep 17 00:00:00 2001 From: Hideyuki Oide <Hideyuki.Oide@cern.ch> Date: Thu, 21 Sep 2017 15:37:59 +0200 Subject: [PATCH] VrtSecInclusive: added track selection using electrons Former-commit-id: 4e91a71dded76753c9ad67319fe0bdafcee616c8 --- .../VrtSecInclusive/VrtSecInclusive.h | 4 +++- .../src/TrackSelectionAlgs.cxx | 22 +++++++++++++++++++ .../VKalVrt/VrtSecInclusive/src/Utilities.cxx | 3 ++- .../VrtSecInclusive/src/VrtSecInclusive.cxx | 20 ++++++++++++----- 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/Reconstruction/VKalVrt/VrtSecInclusive/VrtSecInclusive/VrtSecInclusive.h b/Reconstruction/VKalVrt/VrtSecInclusive/VrtSecInclusive/VrtSecInclusive.h index 7a22fb21eef3..d76bec130245 100755 --- a/Reconstruction/VKalVrt/VrtSecInclusive/VrtSecInclusive/VrtSecInclusive.h +++ b/Reconstruction/VKalVrt/VrtSecInclusive/VrtSecInclusive/VrtSecInclusive.h @@ -196,6 +196,7 @@ namespace VKalVrtAthena { // vertexing using muons (test implementation) bool doSelectTracksFromMuons; + bool doSelectTracksFromElectrons; // Additional dressing option bool doAugmentDVimpactParametersToMuons; // potentially useful for DV + muon search @@ -312,9 +313,10 @@ namespace VKalVrtAthena { /** select tracks which become seeds for vertex finding */ StatusCode selectTracks(); StatusCode selectTracksFromMuons(); + StatusCode selectTracksFromElectrons(); using TrackSelectionAlg = StatusCode (VrtSecInclusive::*)(); - TrackSelectionAlg m_trackSelectionAlg; + std::vector<TrackSelectionAlg> m_trackSelectionAlgs; /** track-by-track selection strategies */ bool selectTrack_notPVassociated ( const xAOD::TrackParticle* ) const; diff --git a/Reconstruction/VKalVrt/VrtSecInclusive/src/TrackSelectionAlgs.cxx b/Reconstruction/VKalVrt/VrtSecInclusive/src/TrackSelectionAlgs.cxx index b0aea2e22d4a..65ae7be4f75c 100644 --- a/Reconstruction/VKalVrt/VrtSecInclusive/src/TrackSelectionAlgs.cxx +++ b/Reconstruction/VKalVrt/VrtSecInclusive/src/TrackSelectionAlgs.cxx @@ -202,4 +202,26 @@ namespace VKalVrtAthena { return StatusCode::SUCCESS; } + //____________________________________________________________________________________________________ + StatusCode VrtSecInclusive::selectTracksFromElectrons() { + + const xAOD::ElectronContainer *electrons( nullptr ); + ATH_CHECK( evtStore()->retrieve( electrons, "Electrons" ) ); + + static SG::AuxElement::Decorator< char > decor_isSelected( "is_selected" ); + + for( const auto& electron : *electrons ) { + if( 0 == electron->nTrackParticles() ) continue; + + // The first track is the best-matched track + const auto* trk = electron->trackParticle(0); + if( trk ) { + decor_isSelected( *trk ) = true; + m_selectedTracks->emplace_back( trk ); + } + } + + return StatusCode::SUCCESS; + } + } // end of namespace VKalVrtAthena diff --git a/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx b/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx index 5081c4c13444..cb44cdcb39e2 100644 --- a/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx +++ b/Reconstruction/VKalVrt/VrtSecInclusive/src/Utilities.cxx @@ -702,9 +702,10 @@ namespace VKalVrtAthena { // A test implementation for muon vertices declareProperty("doSelectTracksFromMuons", m_jp.doSelectTracksFromMuons = false ); + declareProperty("doSelectTracksFromElectrons", m_jp.doSelectTracksFromElectrons = false ); // Additional dressing option - declareProperty("doAugmentDVimpactParametersToMuons", m_jp.doAugmentDVimpactParametersToMuons = false ); + declareProperty("doAugmentDVimpactParametersToMuons", m_jp.doAugmentDVimpactParametersToMuons = false ); declareProperty("doAugmentDVimpactParametersToElectrons", m_jp.doAugmentDVimpactParametersToElectrons = false ); // Additional ToolHandles diff --git a/Reconstruction/VKalVrt/VrtSecInclusive/src/VrtSecInclusive.cxx b/Reconstruction/VKalVrt/VrtSecInclusive/src/VrtSecInclusive.cxx index 835733775bee..ff1aff1fb66b 100644 --- a/Reconstruction/VKalVrt/VrtSecInclusive/src/VrtSecInclusive.cxx +++ b/Reconstruction/VKalVrt/VrtSecInclusive/src/VrtSecInclusive.cxx @@ -150,13 +150,21 @@ namespace VKalVrtAthena { } // Track selection algorithm configuration - if( !m_jp.doSelectTracksFromMuons ) { + if( m_jp.doSelectTracksFromMuons ) { - m_trackSelectionAlg = &VrtSecInclusive::selectTracks; + m_trackSelectionAlgs.emplace_back( &VrtSecInclusive::selectTracksFromMuons ); - } else { + } + + if( m_jp.doSelectTracksFromElectrons ) { + + m_trackSelectionAlgs.emplace_back( &VrtSecInclusive::selectTracksFromElectrons ); - m_trackSelectionAlg = &VrtSecInclusive::selectTracksFromMuons; + } + + if( !m_jp.doSelectTracksFromMuons && !m_jp.doSelectTracksFromElectrons ) { + + m_trackSelectionAlgs.emplace_back( &VrtSecInclusive::selectTracks ); } @@ -361,7 +369,9 @@ namespace VKalVrtAthena { } // Perform track selection and store it to selectedBaseTracks - ATH_CHECK( (this->*m_trackSelectionAlg)() ); + for( auto alg : m_trackSelectionAlgs ) { + ATH_CHECK( (this->*alg)() ); + } if( m_jp.FillNtuple ) m_ntupleVars->get<unsigned int>( "NumSelTrks" ) = static_cast<int>( m_selectedTracks->size() ); -- GitLab