From 2ff189840f0cce51a98b6eb2c5d567f46f4d54ff Mon Sep 17 00:00:00 2001 From: scott snyder <sss@karma> Date: Fri, 16 Sep 2022 13:23:57 -0400 Subject: [PATCH] InDetTrackSelectionTool: Fix thread-safety checker warnings. Fix some new thread-safety checker warnings. Const fixes. --- .../InDetTrackSelectionTool.h | 10 +- .../Root/InDetAccessor.cxx | 4 +- .../Root/InDetAccessor.h | 88 +++++++------- .../Root/InDetTrackSelectionTool.cxx | 110 +++++++++--------- 4 files changed, 106 insertions(+), 106 deletions(-) diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/InDetTrackSelectionTool/InDetTrackSelectionTool.h b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/InDetTrackSelectionTool/InDetTrackSelectionTool.h index 715fca6bf78c..f4964e151872 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/InDetTrackSelectionTool/InDetTrackSelectionTool.h +++ b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/InDetTrackSelectionTool/InDetTrackSelectionTool.h @@ -1,7 +1,7 @@ // -*- c++ -*- /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #ifndef INDETTRACKSELECTIONTOOL_INDETTRACKSELECTIONTOOL_H @@ -108,18 +108,18 @@ namespace InDet { // helper method to setup the cut functions for TrackParticles and Trk::Tracks template <int VERBOSE, class Trk_Helper> - StatusCode setupCuts(std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, asg::AsgMessaging &msgHelper)> > > &trackCuts); + StatusCode setupCuts(std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, const asg::AsgMessaging &msgHelper)> > > &trackCuts); template <class Trk_Helper> - asg::AcceptData accept(Trk_Helper helper, const std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, asg::AsgMessaging &msgHelper)> > > &trackCuts) const; + asg::AcceptData accept(Trk_Helper helper, const std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, const asg::AsgMessaging &msgHelper)> > > &trackCuts) const; std::unordered_map< std::string, std::shared_ptr<TrackAccessor> > m_trackAccessors; //!< list of the accessors that need to be run for each track std::unique_ptr<asg::AsgMessaging> m_msgHelper; - std::map< std::string, std::vector< std::function<bool(InDetAccessor::TrackParticleHelper helper, asg::AsgMessaging &msgHelper)> > > + std::map< std::string, std::vector< std::function<bool(InDetAccessor::TrackParticleHelper helper, const asg::AsgMessaging &msgHelper)> > > m_trackParticleCuts; //!< First element is the name of the cut family, second element is the set of cuts #ifndef XAOD_ANALYSIS - std::map< std::string, std::vector< std::function<bool(InDetAccessor::TrkTrackHelper helper, asg::AsgMessaging &msgHelper)> > > + std::map< std::string, std::vector< std::function<bool(InDetAccessor::TrkTrackHelper helper, const asg::AsgMessaging &msgHelper)> > > m_trkTrackCuts; //!< First element is the name of the cut family, second element is the set of cuts #endif diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.cxx index 75bf31a92343..a138e438c169 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.cxx +++ b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "InDetAccessor.h" #ifndef XAOD_ANALYSIS @@ -8,7 +8,7 @@ #include "InDetRIO_OnTrack/SCT_ClusterOnTrack.h" namespace InDetAccessor { - std::tuple<uint8_t,uint8_t> getSiHitsTopBottom( const Trk::Track& track, asg::AsgMessaging &msgHelper) { + std::tuple<uint8_t,uint8_t> getSiHitsTopBottom( const Trk::Track& track, const asg::AsgMessaging &msgHelper) { std::tuple<uint8_t, uint8_t> top_bottom {0,0}; const DataVector<const Trk::MeasurementBase>* trkMeasurements = track.measurementsOnTrack(); diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.h b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.h index d6eb3d71d7db..6dce571e1564 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.h +++ b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetAccessor.h @@ -39,12 +39,12 @@ namespace InDetAccessor { // so define functsion for TrackParticles, and TrkTracks class TrackParticleHelper; template <short index> - double getDefiningParameters(TrackParticleHelper helper, asg::AsgMessaging &msgHelper); + double getDefiningParameters(TrackParticleHelper helper, const asg::AsgMessaging &msgHelper); #ifndef XAOD_ANALYSIS class TrkTrackHelper; template <short index> - double getDefiningParameters(TrkTrackHelper helper, asg::AsgMessaging &msgHelper); + double getDefiningParameters(TrkTrackHelper helper, const asg::AsgMessaging &msgHelper); #endif class TrackParticleHelper { @@ -55,12 +55,12 @@ namespace InDetAccessor { const xAOD::TrackParticle &track() const { return *m_track;} const xAOD::Vertex *vertex() const { return m_vtx; } - double pt(asg::AsgMessaging &) const { return track().pt(); } - double eta(asg::AsgMessaging &) const { return track().eta(); } - double theta(asg::AsgMessaging &msgHelper)const { return getDefiningParameters<InDetAccessor::theta>(*this,msgHelper); } - double qOverP(asg::AsgMessaging &) const { return track().qOverP(); } - double d0(asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::d0>(*this,msgHelper);} - double z0(asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::z0>(*this,msgHelper);} + double pt(const asg::AsgMessaging &) const { return track().pt(); } + double eta(const asg::AsgMessaging &) const { return track().eta(); } + double theta(const asg::AsgMessaging &msgHelper)const { return getDefiningParameters<InDetAccessor::theta>(*this,msgHelper); } + double qOverP(const asg::AsgMessaging &) const { return track().qOverP(); } + double d0(const asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::d0>(*this,msgHelper);} + double z0(const asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::z0>(*this,msgHelper);} private: const xAOD::TrackParticle *m_track; @@ -77,27 +77,27 @@ namespace InDetAccessor { const Trk::TrackSummary &summary() const { return *m_summary;} const Trk::TrackParameters *perigee() const { return m_perigee; } - double pt(asg::AsgMessaging &msgHelper) const { + double pt(const asg::AsgMessaging &msgHelper) const { return hasPerigeeOrError(msgHelper) ? perigee()->momentum().perp() : std::nan(""); } - double eta(asg::AsgMessaging &msgHelper) const { + double eta(const asg::AsgMessaging &msgHelper) const { return hasPerigeeOrError(msgHelper) ? perigee()->momentum().eta() : std::nan(""); } - double theta(asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::theta>(*this,msgHelper);} - double qOverP(asg::AsgMessaging &msgHelper) const { + double theta(const asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::theta>(*this,msgHelper);} + double qOverP(const asg::AsgMessaging &msgHelper) const { return hasPerigeeOrError(msgHelper) ? 1./perigee()->momentum().mag() : std::nan(""); } - double d0(asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::d0>(*this,msgHelper);} - double z0(asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::z0>(*this,msgHelper);} + double d0(const asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::d0>(*this,msgHelper);} + double z0(const asg::AsgMessaging &msgHelper) const { return getDefiningParameters<InDetAccessor::z0>(*this,msgHelper);} - bool hasPerigeeOrError(asg::AsgMessaging &msgHelper) const { + bool hasPerigeeOrError(const asg::AsgMessaging &msgHelper) const { bool ret = perigee(); if (!ret) { IDTRKSEL_MSG_ERROR( "Received zero pointer to perigee." ); } return ret; } - bool hasSummaryOrError(asg::AsgMessaging &msgHelper) const { + bool hasSummaryOrError(const asg::AsgMessaging &msgHelper) const { bool ret = perigee(); if (!ret) { IDTRKSEL_MSG_ERROR( "Received null pointer to track summary." ); @@ -115,10 +115,10 @@ namespace InDetAccessor { // summary accessor template <typename T_TrkHelper> - uint8_t getSummary(const T_TrkHelper & helper, asg::AsgMessaging &msgHelper, xAOD::SummaryType sumType); + uint8_t getSummary(const T_TrkHelper & helper, const asg::AsgMessaging &msgHelper, xAOD::SummaryType sumType); template <> - inline uint8_t getSummary(const TrackParticleHelper & helper, asg::AsgMessaging &msgHelper, xAOD::SummaryType summaryType) { + inline uint8_t getSummary(const TrackParticleHelper & helper, const asg::AsgMessaging &msgHelper, xAOD::SummaryType summaryType) { uint8_t summaryValue = 0; if (!helper.track().summaryValue(summaryValue, summaryType)) { IDTRKSEL_MSG_DEBUG( "Failed to get SummaryType " << std::to_string(summaryType) << " from xAOD::TrackParticle summary. A value of zero will be used instead." ); @@ -129,7 +129,7 @@ namespace InDetAccessor { #ifndef XAOD_ANALYSIS template <> - inline uint8_t getSummary(const TrkTrackHelper & helper, asg::AsgMessaging &msgHelper, xAOD::SummaryType summaryType) { + inline uint8_t getSummary(const TrkTrackHelper & helper, const asg::AsgMessaging &msgHelper, xAOD::SummaryType summaryType) { Int_t summaryTypeInt = static_cast<Int_t>(summaryType); Int_t checkSummaryValue = helper.summary().get( static_cast<Trk::SummaryType>(summaryTypeInt) ); if (checkSummaryValue < 0) { @@ -142,7 +142,7 @@ namespace InDetAccessor { #endif template <std::size_t n_summary_types, typename T_TrkHelper> - inline uint8_t getSummarySum(const T_TrkHelper helper, asg::AsgMessaging &msgHelper, std::array<xAOD::SummaryType,n_summary_types> sumTypes) { + inline uint8_t getSummarySum(const T_TrkHelper helper, const asg::AsgMessaging &msgHelper, std::array<xAOD::SummaryType,n_summary_types> sumTypes) { uint8_t sum=0; for (xAOD::SummaryType sum_type: sumTypes) { sum += getSummary(helper, msgHelper, sum_type); @@ -153,16 +153,16 @@ namespace InDetAccessor { // fit quality accessor template <typename Trk_Helper> - double getFitChiSquare(const Trk_Helper & helper, asg::AsgMessaging &msgHelper); + double getFitChiSquare(const Trk_Helper & helper, const asg::AsgMessaging &msgHelper); template <> - inline double getFitChiSquare(const TrackParticleHelper & helper, asg::AsgMessaging &) { + inline double getFitChiSquare(const TrackParticleHelper & helper, const asg::AsgMessaging &) { return helper.track().chiSquared(); } #ifndef XAOD_ANALYSIS template <> - inline double getFitChiSquare(const TrkTrackHelper & helper, asg::AsgMessaging &msgHelper) { + inline double getFitChiSquare(const TrkTrackHelper & helper, const asg::AsgMessaging &msgHelper) { if (!helper.track().fitQuality()) { IDTRKSEL_MSG_WARNING( "Zero pointer to fit quality received." ); return std::nan(""); @@ -172,16 +172,16 @@ namespace InDetAccessor { #endif template <typename TrkHelper> - double getFitNDoF(const TrkHelper & helper, asg::AsgMessaging &msgHelper); + double getFitNDoF(const TrkHelper & helper, const asg::AsgMessaging &msgHelper); template <> - inline double getFitNDoF(const TrackParticleHelper & helper, asg::AsgMessaging &) { + inline double getFitNDoF(const TrackParticleHelper & helper, const asg::AsgMessaging &) { return helper.track().numberDoF(); } #ifndef XAOD_ANALYSIS template <> - inline double getFitNDoF(const TrkTrackHelper & helper, asg::AsgMessaging &msgHelper) { + inline double getFitNDoF(const TrkTrackHelper & helper, const asg::AsgMessaging &msgHelper) { if (!helper.track().fitQuality()) { IDTRKSEL_MSG_WARNING( "Zero pointer to fit quality received." ); return std::nan(""); @@ -193,10 +193,10 @@ namespace InDetAccessor { // eProbabilityHT accessor template <typename Trk_Helper> - float getEProbabilityHT(const Trk_Helper & helper, asg::AsgMessaging &msgHelper); + float getEProbabilityHT(const Trk_Helper & helper, const asg::AsgMessaging &msgHelper); template <> - inline float getEProbabilityHT(const TrackParticleHelper & helper, asg::AsgMessaging &msgHelper) { + inline float getEProbabilityHT(const TrackParticleHelper & helper, const asg::AsgMessaging &msgHelper) { float eProbHT =0.f; if (!helper.track().summaryValue(eProbHT, xAOD::SummaryType::eProbabilityHT)) { IDTRKSEL_MSG_DEBUG( "Failed to get eProbabilityHT from xAOD::TrackParticle summary. A value of zero will be used instead." ); @@ -207,7 +207,7 @@ namespace InDetAccessor { #ifndef XAOD_ANALYSIS template <> - inline float getEProbabilityHT(const TrkTrackHelper &, asg::AsgMessaging &) { + inline float getEProbabilityHT(const TrkTrackHelper &, const asg::AsgMessaging &) { throw std::runtime_error("eProbabilityHT only available in xAOD::TrackParticle not for Trk::Track."); return 0.f; } @@ -216,7 +216,7 @@ namespace InDetAccessor { //defining parameters accessor template <short index> - inline double getDefiningParameters(TrackParticleHelper helper, asg::AsgMessaging &) { + inline double getDefiningParameters(TrackParticleHelper helper, const asg::AsgMessaging &) { static_assert(index<5); double param = helper.track().definingParameters()[index]; if (index==1) { @@ -230,7 +230,7 @@ namespace InDetAccessor { #ifndef XAOD_ANALYSIS template <short index> //cppcheck-suppress passedByValue - inline double getDefiningParameters(TrkTrackHelper helper, asg::AsgMessaging &msgHelper) { + inline double getDefiningParameters(TrkTrackHelper helper, const asg::AsgMessaging &msgHelper) { assert(index<5); return helper.hasPerigeeOrError(msgHelper) ? helper.perigee()->parameters()[index] : std::nan(""); } @@ -238,62 +238,62 @@ namespace InDetAccessor { // defining parameters covariance accessor template <typename Trk_Helper> - inline double getDefiningParametersCov(Trk_Helper & helper, [[maybe_unused]] asg::AsgMessaging &msgHelper, unsigned int index_i, unsigned int index_j); + inline double getDefiningParametersCov(Trk_Helper & helper, [[maybe_unused]] const asg::AsgMessaging &msgHelper, unsigned int index_i, unsigned int index_j); template <> - inline double getDefiningParametersCov(TrackParticleHelper & helper, [[maybe_unused]] asg::AsgMessaging &msgHelper, unsigned int index_i, unsigned int index_j) { + inline double getDefiningParametersCov(TrackParticleHelper & helper, [[maybe_unused]] const asg::AsgMessaging &msgHelper, unsigned int index_i, unsigned int index_j) { assert( index_i<5 && index_j<5); return helper.track().definingParametersCovMatrix()(index_i, index_j); } #ifndef XAOD_ANALYSIS template <> - inline double getDefiningParametersCov(TrkTrackHelper & helper, asg::AsgMessaging &msgHelper, unsigned int index_i, unsigned int index_j) { + inline double getDefiningParametersCov(TrkTrackHelper & helper, const asg::AsgMessaging &msgHelper, unsigned int index_i, unsigned int index_j) { assert( index_i<5 && index_j<5); return helper.hasPerigeeOrError(msgHelper) ? (*helper.perigee()->covariance())(index_i, index_j) : std::nan(""); } #endif template <typename Trk_Helper> - inline Int_t getNumberOfUsedHitsdEdx(Trk_Helper & helper, asg::AsgMessaging &msgHelper); + inline Int_t getNumberOfUsedHitsdEdx(Trk_Helper & helper, const asg::AsgMessaging &msgHelper); template <> - inline Int_t getNumberOfUsedHitsdEdx(TrackParticleHelper & helper, [[maybe_unused]] asg::AsgMessaging &msgHelper) { + inline Int_t getNumberOfUsedHitsdEdx(TrackParticleHelper & helper, [[maybe_unused]] const asg::AsgMessaging &msgHelper) { return helper.track().numberOfUsedHitsdEdx(); } #ifndef XAOD_ANALYSIS template <> - inline Int_t getNumberOfUsedHitsdEdx(TrkTrackHelper &, asg::AsgMessaging &) { + inline Int_t getNumberOfUsedHitsdEdx(TrkTrackHelper &, const asg::AsgMessaging &) { throw std::runtime_error("umberOfUsedHitsdEdx only available in xAOD::TrackParticle not for Trk::Track."); return 0; } #endif template <typename Trk_Helper> - inline Int_t getNumberOfIBLOverflowsdEdx(Trk_Helper & helper, asg::AsgMessaging &msgHelper); + inline Int_t getNumberOfIBLOverflowsdEdx(Trk_Helper & helper, const asg::AsgMessaging &msgHelper); template <> - inline Int_t getNumberOfIBLOverflowsdEdx(TrackParticleHelper & helper, [[maybe_unused]] asg::AsgMessaging &msgHelper) { + inline Int_t getNumberOfIBLOverflowsdEdx(TrackParticleHelper & helper, [[maybe_unused]] const asg::AsgMessaging &msgHelper) { return helper.track().numberOfUsedHitsdEdx(); } #ifndef XAOD_ANALYSIS template <> - inline Int_t getNumberOfIBLOverflowsdEdx(TrkTrackHelper & , asg::AsgMessaging &) { + inline Int_t getNumberOfIBLOverflowsdEdx(TrkTrackHelper & , const asg::AsgMessaging &) { throw std::runtime_error("NumberOfIBLOverflowsdEdx only available in xAOD::TrackParticle not for Trk::Track."); return 0; } #endif #ifndef XAOD_ANALYSIS - std::tuple<uint8_t,uint8_t> getSiHitsTopBottom( const Trk::Track& track, asg::AsgMessaging &msgHelper); + std::tuple<uint8_t,uint8_t> getSiHitsTopBottom( const Trk::Track& track, const asg::AsgMessaging &msgHelper); template <typename Trk_Helper> - inline std::tuple<uint8_t,uint8_t> getSiHitsTopBottom(Trk_Helper & helper, asg::AsgMessaging &msgHelper); + inline std::tuple<uint8_t,uint8_t> getSiHitsTopBottom(Trk_Helper & helper, const asg::AsgMessaging &msgHelper); template <> - inline std::tuple<uint8_t,uint8_t> getSiHitsTopBottom(TrackParticleHelper & helper, asg::AsgMessaging &msgHelper) { + inline std::tuple<uint8_t,uint8_t> getSiHitsTopBottom(TrackParticleHelper & helper, const asg::AsgMessaging &msgHelper) { const Trk::Track* trkTrack = helper.track().track(); if (!trkTrack) { IDTRKSEL_MSG_WARNING( "xAOD::TrackParticle has a null pointer to a Trk::Track." ); @@ -306,7 +306,7 @@ namespace InDetAccessor { } template <> - inline std::tuple<uint8_t,uint8_t> getSiHitsTopBottom(TrkTrackHelper & helper, asg::AsgMessaging &msgHelper) { + inline std::tuple<uint8_t,uint8_t> getSiHitsTopBottom(TrkTrackHelper & helper, const asg::AsgMessaging &msgHelper) { return getSiHitsTopBottom(helper.track(),msgHelper); } #endif diff --git a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetTrackSelectionTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetTrackSelectionTool.cxx index 78a38c157067..0edd263e3c8d 100644 --- a/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetTrackSelectionTool.cxx +++ b/InnerDetector/InDetRecTools/InDetTrackSelectionTool/Root/InDetTrackSelectionTool.cxx @@ -38,10 +38,10 @@ namespace { m_summaryTypes(summary_types) {} - uint8_t nHits(Trk_Helper helper, asg::AsgMessaging &msgHelper) const { + uint8_t nHits(Trk_Helper helper, const asg::AsgMessaging &msgHelper) const { return getSummarySum(helper,msgHelper,m_summaryTypes); } - bool operator()(Trk_Helper helper, asg::AsgMessaging &msgHelper) { + bool operator()(Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double absEta = std::abs( helper.eta( msgHelper) ); return (absEta <= m_maxTrtEtaAcceptance || absEta > m_maxEtaForTrtHitCuts) || nHits(helper,msgHelper) >=m_minNHits; } @@ -290,50 +290,50 @@ namespace { inline T sqr(T a) { return a *a;} } template <int VERBOSE, class Trk_Helper> -StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, asg::AsgMessaging &msgHelper)> > > &trackCuts) { +StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, const asg::AsgMessaging &msgHelper)> > > &trackCuts) { // track parameter cuts if (m_minPt > 0.) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum Pt: " << m_minPt << " MeV" ); - trackCuts["Pt"].push_back( [minPt = m_minPt](Trk_Helper helper, asg::AsgMessaging &msgHelper) -> bool { return helper.pt(msgHelper) >= minPt; } ); + trackCuts["Pt"].push_back( [minPt = m_minPt](Trk_Helper helper, const asg::AsgMessaging &msgHelper) -> bool { return helper.pt(msgHelper) >= minPt; } ); } if (maxDoubleIsSet(m_maxAbsEta)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum |Eta|: " << m_maxAbsEta ); - trackCuts["Eta"].push_back( [maxAbsEta = m_maxAbsEta](Trk_Helper helper, asg::AsgMessaging &msgHelper) { return std::abs(helper.eta(msgHelper)) <= maxAbsEta; } ); + trackCuts["Eta"].push_back( [maxAbsEta = m_maxAbsEta](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return std::abs(helper.eta(msgHelper)) <= maxAbsEta; } ); } if (m_minP > 0.) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum P: " << m_minP << " MeV" ); - trackCuts["P"].push_back( [maxInvP = 1./m_minP](Trk_Helper helper, asg::AsgMessaging &msgHelper) { return std::abs(helper.qOverP(msgHelper)) <= maxInvP; } ); + trackCuts["P"].push_back( [maxInvP = 1./m_minP](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return std::abs(helper.qOverP(msgHelper)) <= maxInvP; } ); } if (maxDoubleIsSet(m_maxD0)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum d0: " << m_maxD0 << " mm" ); - trackCuts["D0"].push_back( [maxD0 = m_maxD0](Trk_Helper helper, asg::AsgMessaging &msgHelper) { return std::abs(helper.d0(msgHelper)) <= maxD0; } ); + trackCuts["D0"].push_back( [maxD0 = m_maxD0](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return std::abs(helper.d0(msgHelper)) <= maxD0; } ); } if (maxDoubleIsSet(m_maxZ0)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum z0: " << m_maxZ0 << " mm"); - trackCuts["Z0"].push_back( [maxZ0 = m_maxZ0](Trk_Helper helper, asg::AsgMessaging &msgHelper) { return std::abs(helper.z0(msgHelper)) <= maxZ0; } ); + trackCuts["Z0"].push_back( [maxZ0 = m_maxZ0](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return std::abs(helper.z0(msgHelper)) <= maxZ0; } ); } if (maxDoubleIsSet(m_maxZ0SinTheta)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum z0*sin(theta): " << m_maxZ0SinTheta << " mm" ); - trackCuts["Z0SinTheta"].push_back([maxZ0SinTheta = m_maxZ0SinTheta](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["Z0SinTheta"].push_back([maxZ0SinTheta = m_maxZ0SinTheta](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return std::abs( helper.z0(msgHelper) * std::sin(helper.theta(msgHelper))) <= maxZ0SinTheta; }); } if (maxDoubleIsSet(m_maxSigmaD0)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum uncertainty on d0: " << m_maxSigmaD0 << " mm" ); - trackCuts["D0"].push_back([maxSigmaD0Squared = sqr(m_maxSigmaD0)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["D0"].push_back([maxSigmaD0Squared = sqr(m_maxSigmaD0)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getDefiningParametersCov(helper,msgHelper, InDetAccessor::d0,InDetAccessor::d0) <= maxSigmaD0Squared; }); } if (maxDoubleIsSet(m_maxSigmaZ0)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum uncertainty on z0: " << m_maxSigmaZ0 << " mm" ); - trackCuts["Z0"].push_back([maxSigmaZ0Squared = sqr(m_maxSigmaZ0)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["Z0"].push_back([maxSigmaZ0Squared = sqr(m_maxSigmaZ0)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getDefiningParametersCov(helper,msgHelper, InDetAccessor::z0,InDetAccessor::z0) <= maxSigmaZ0Squared; }); } if (maxDoubleIsSet(m_maxSigmaZ0SinTheta)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum uncertainty on z0*sin(theta): " << m_maxSigmaZ0SinTheta << " mm" ); - trackCuts["Z0SinTheta"].push_back([maxSigmaZ0SinThetaSquared = sqr(m_maxSigmaZ0SinTheta)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["Z0SinTheta"].push_back([maxSigmaZ0SinThetaSquared = sqr(m_maxSigmaZ0SinTheta)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double theta = helper.theta(msgHelper); double sinTheta = std::sin(theta); double cosTheta = std::cos(theta); @@ -346,20 +346,20 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: } if (maxDoubleIsSet(m_maxD0overSigmaD0)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum significance on d0: " << m_maxD0overSigmaD0 ); - trackCuts["D0"].push_back([maxD0overSigmaD0Squared = sqr(m_maxD0overSigmaD0)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["D0"].push_back([maxD0overSigmaD0Squared = sqr(m_maxD0overSigmaD0)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return sqr(helper.d0(msgHelper)) <= maxD0overSigmaD0Squared * getDefiningParametersCov(helper,msgHelper, InDetAccessor::d0,InDetAccessor::d0); }); } if (maxDoubleIsSet(m_maxZ0overSigmaZ0)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum significance on z0: " << m_maxZ0overSigmaZ0 ); - trackCuts["Z0"].push_back([maxZ0overSigmaZ0Squared = sqr(m_maxZ0overSigmaZ0)](Trk_Helper helper, asg::AsgMessaging &msgHelper) -> bool { + trackCuts["Z0"].push_back([maxZ0overSigmaZ0Squared = sqr(m_maxZ0overSigmaZ0)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) -> bool { return sqr(helper.z0(msgHelper)) <= maxZ0overSigmaZ0Squared * getDefiningParametersCov(helper,msgHelper, InDetAccessor::z0,InDetAccessor::z0); }); } if (maxDoubleIsSet(m_maxZ0SinThetaoverSigmaZ0SinTheta)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum significance on z0*sin(theta): " << m_maxZ0SinThetaoverSigmaZ0SinTheta ); - trackCuts["Z0SinTheta"].push_back([maxZ0SinThetaoverSigmaZ0SinThetaSquared = sqr(m_maxZ0SinThetaoverSigmaZ0SinTheta)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["Z0SinTheta"].push_back([maxZ0SinThetaoverSigmaZ0SinThetaSquared = sqr(m_maxZ0SinThetaoverSigmaZ0SinTheta)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double theta = helper.theta(msgHelper); double sinTheta = std::sin(theta); @@ -377,7 +377,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (m_minNInnermostLayerHits > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum hits from innermost pixel layer: " << m_minNInnermostLayerHits ); if (VERBOSE>0) ATH_MSG_INFO( " (Track will pass if no hit is expected.)" ); - trackCuts["InnermostLayersHits"].push_back([minNInnermostLayerHits = m_minNInnermostLayerHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["InnermostLayersHits"].push_back([minNInnermostLayerHits = m_minNInnermostLayerHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return ( getSummary(helper, msgHelper, xAOD::numberOfInnermostPixelLayerHits) >= minNInnermostLayerHits || getSummary(helper, msgHelper, xAOD::expectInnermostPixelLayerHit) == 0); }); @@ -385,7 +385,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (m_minNNextToInnermostLayerHits > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum hits from next to innermost pixel layer: " << m_minNNextToInnermostLayerHits ); if (VERBOSE>0) ATH_MSG_INFO( " (Track will pass if no hit is expected.)" ); - trackCuts["InnermostLayersHits"].push_back([minNNextToInnermostLayerHits = m_minNNextToInnermostLayerHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["InnermostLayersHits"].push_back([minNNextToInnermostLayerHits = m_minNNextToInnermostLayerHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return ( getSummary(helper, msgHelper, xAOD::numberOfNextToInnermostPixelLayerHits) >= minNNextToInnermostLayerHits || getSummary(helper, msgHelper, xAOD::expectNextToInnermostPixelLayerHit) == 0); }); @@ -398,7 +398,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_WARNING( "A value of minNBothInnermostLayersHits above 2 does not make sense." ); if (VERBOSE>0) ATH_MSG_WARNING( " Use 1 for \"or\" or 2 for \"and\"." ); } - trackCuts["InnermostLayersHits"].push_back([minNBothInnermostLayersHits = m_minNBothInnermostLayersHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["InnermostLayersHits"].push_back([minNBothInnermostLayersHits = m_minNBothInnermostLayersHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return ( std::max( getSummary(helper, msgHelper, xAOD::numberOfInnermostPixelLayerHits), static_cast<uint8_t>( !getSummary(helper, msgHelper, xAOD::expectInnermostPixelLayerHit) )) +std::max( getSummary(helper, msgHelper, xAOD::numberOfNextToInnermostPixelLayerHits), @@ -409,7 +409,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (m_useMinBiasInnermostLayersCut > 0 ) { // less than zero indicates this cut is manually turned off if (VERBOSE>0) ATH_MSG_INFO( " An innermost layer hit is required if expected, otherwise" ); if (VERBOSE>0) ATH_MSG_INFO( " a next-to-innermost layer hit is required if it is expected." ); - trackCuts["InnermostLayersHits"].push_back([](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["InnermostLayersHits"].push_back([](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { uint8_t expected_innermost_pixel_layer_hit = getSummary(helper, msgHelper, xAOD::expectInnermostPixelLayerHit); return (expected_innermost_pixel_layer_hit > 0 && getSummary(helper, msgHelper, xAOD::numberOfInnermostPixelLayerHits)>=1) || (expected_innermost_pixel_layer_hit == 0 && ( getSummary(helper, msgHelper, xAOD::expectNextToInnermostPixelLayerHit)==0 @@ -418,69 +418,69 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: } if (maxIntIsSet(m_maxNInnermostLayerSharedHits)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum shared hits in innermost pixel layer: " << m_maxNInnermostLayerSharedHits ); - trackCuts["InnermostLayersHits"].push_back([maxNInnermostLayerSharedHits = m_maxNInnermostLayerSharedHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["InnermostLayersHits"].push_back([maxNInnermostLayerSharedHits = m_maxNInnermostLayerSharedHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfInnermostPixelLayerSharedHits) <= maxNInnermostLayerSharedHits; }); } if (m_minNPixelHits > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum pixel hits: " << m_minNPixelHits ); - trackCuts["PixelHits"].push_back( [minNPixelHits = m_minNPixelHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["PixelHits"].push_back( [minNPixelHits = m_minNPixelHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<2,Trk_Helper>(helper, msgHelper, {xAOD::numberOfPixelHits,xAOD::numberOfPixelDeadSensors}) >= minNPixelHits; }); } if (m_minNPixelHitsPhysical > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum physical pixel hits (i.e. dead sensors do not count): " << m_minNPixelHitsPhysical ); - trackCuts["PixelHits"].push_back([minNPixelHitsPhysical = m_minNPixelHitsPhysical](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["PixelHits"].push_back([minNPixelHitsPhysical = m_minNPixelHitsPhysical](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfPixelHits) >= minNPixelHitsPhysical; }); } if (maxIntIsSet(m_maxNPixelHoles)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum pixel holes: " << m_maxNPixelHoles ); - trackCuts["PixelHits"].push_back([maxNPixelHoles = m_maxNPixelHoles](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["PixelHits"].push_back([maxNPixelHoles = m_maxNPixelHoles](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfPixelHoles) <= maxNPixelHoles; }); } if (maxIntIsSet(m_maxNPixelSharedHits)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum pixel shared hits: " << m_maxNPixelSharedHits ); - trackCuts["PixelHits"].push_back([maxNPixelSharedHits = m_maxNPixelSharedHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["PixelHits"].push_back([maxNPixelSharedHits = m_maxNPixelSharedHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfPixelSharedHits) <= maxNPixelSharedHits; }); } if (m_minNSctHits > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum SCT hits: " << m_minNSctHits ); - trackCuts["SctHits"].push_back( [minNSctHits = m_minNSctHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SctHits"].push_back( [minNSctHits = m_minNSctHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<2,Trk_Helper>(helper, msgHelper, {xAOD::numberOfSCTHits, xAOD::numberOfSCTDeadSensors}) >= minNSctHits; }); } if (m_minNSctHitsPhysical > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum physical SCT hits (i.e. dead sensors do not count): " << m_minNSctHitsPhysical ); - trackCuts["SctHits"].push_back([minNSctHitsPhysical = m_minNSctHitsPhysical](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SctHits"].push_back([minNSctHitsPhysical = m_minNSctHitsPhysical](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfSCTHits) >= minNSctHitsPhysical; }); } if (maxIntIsSet(m_maxNSctHoles)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum SCT holes: " << m_maxNSctHoles ); - trackCuts["SctHits"].push_back([maxNSctHoles = m_maxNSctHoles](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SctHits"].push_back([maxNSctHoles = m_maxNSctHoles](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfSCTHoles) <= maxNSctHoles; }); } if (maxIntIsSet(m_maxNSctSharedHits)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum SCT shared hits: " << m_maxNSctSharedHits ); - trackCuts["SctHits"].push_back([maxNSctSharedHits = m_maxNSctSharedHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SctHits"].push_back([maxNSctSharedHits = m_maxNSctSharedHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfSCTSharedHits) <= maxNSctSharedHits; }); } if (maxIntIsSet(m_maxNSctDoubleHoles)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum SCT double holes: " << m_maxNSctDoubleHoles ); - trackCuts["SctHits"].push_back([maxNSctDoubleHoles = m_maxNSctDoubleHoles](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SctHits"].push_back([maxNSctDoubleHoles = m_maxNSctDoubleHoles](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper, xAOD::numberOfSCTDoubleHoles) <= maxNSctDoubleHoles ; }); } if (m_minNSiHits > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum silicon (pixel + SCT) hits: " << m_minNSiHits ); - trackCuts["SiHits"].push_back([minNSiHits = m_minNSiHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SiHits"].push_back([minNSiHits = m_minNSiHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<4,Trk_Helper>(helper, msgHelper, {xAOD::numberOfPixelHits, xAOD::numberOfSCTHits, xAOD::numberOfPixelDeadSensors, @@ -490,19 +490,19 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (m_minNSiHitsPhysical > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum physical silicon hits (i.e. dead sensors do not count): " << m_minNSiHitsPhysical ); - trackCuts["SiHits"].push_back([minNSiHitsPhysical = m_minNSiHitsPhysical](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SiHits"].push_back([minNSiHitsPhysical = m_minNSiHitsPhysical](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<2,Trk_Helper>(helper, msgHelper,{xAOD::numberOfPixelHits, xAOD::numberOfSCTHits} ) >= minNSiHitsPhysical ; }); } if (maxIntIsSet(m_maxNSiHoles)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum silicon holes: " << m_maxNSiHoles ); - trackCuts["SiHits"].push_back([maxNSiHoles = m_maxNSiHoles](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SiHits"].push_back([maxNSiHoles = m_maxNSiHoles](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<2,Trk_Helper>(helper, msgHelper,{xAOD::numberOfPixelHoles, xAOD::numberOfSCTHoles} ) <= maxNSiHoles ; }); } if (maxIntIsSet(m_maxNSiSharedHits)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum silicon shared hits: " << m_maxNSiSharedHits ); - trackCuts["SiHits"].push_back([maxNSiSharedHits = m_maxNSiSharedHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SiHits"].push_back([maxNSiSharedHits = m_maxNSiSharedHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<2,Trk_Helper>(helper, msgHelper,{xAOD::numberOfPixelSharedHits, xAOD::numberOfSCTSharedHits} ) <= maxNSiSharedHits ; }); } @@ -510,7 +510,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_INFO( " No more than one shared module:" ); if (VERBOSE>0) ATH_MSG_INFO( " i.e. max 1 shared pixel hit or" ); if (VERBOSE>0) ATH_MSG_INFO( " 2 shared SCT hits, and not both." ); - trackCuts["SiHits"].push_back([](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SiHits"].push_back([](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummary(helper, msgHelper,xAOD::numberOfPixelSharedHits ) + getSummary(helper, msgHelper,xAOD::numberOfSCTSharedHits )/2 <= 1 ; }); @@ -518,7 +518,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (m_minNSiHitsIfSiSharedHits > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum silicon hits if the track has shared hits: " << m_minNSiHitsIfSiSharedHits ); - trackCuts["SiHits"].push_back([minNSiHitsIfSiSharedHits = m_minNSiHitsIfSiSharedHits](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SiHits"].push_back([minNSiHitsIfSiSharedHits = m_minNSiHitsIfSiSharedHits](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<2,Trk_Helper>(helper, msgHelper,{xAOD::numberOfPixelSharedHits, xAOD::numberOfSCTSharedHits} ) == 0 || getSummarySum<4,Trk_Helper>(helper, msgHelper,{xAOD::numberOfPixelHits, xAOD::numberOfSCTHits, @@ -531,7 +531,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_INFO( " Require " << m_minNSiHitsAboveEtaCutoff << " silicon hits above eta = " << m_minEtaForStrictNSiHitsCut ); trackCuts["SiHits"].push_back([minEtaForStrictNSiHitsCut = m_minEtaForStrictNSiHitsCut, - minNSiHitsAboveEtaCutoff = m_minNSiHitsAboveEtaCutoff](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + minNSiHitsAboveEtaCutoff = m_minNSiHitsAboveEtaCutoff](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return std::abs(helper.eta(msgHelper)) <= minEtaForStrictNSiHitsCut || getSummarySum<4,Trk_Helper>(helper, msgHelper,{xAOD::numberOfPixelHits, xAOD::numberOfSCTHits, @@ -541,7 +541,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: } if (m_useExperimentalInnermostLayersCut) { if (VERBOSE>0) ATH_MSG_INFO( " Zero pixel holes allowed, except one pix hole is allowed if there is a physical IBL hit and a BLayer hit is expected but there is no BLayer hit." ); - trackCuts["PixHits"].push_back([](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["PixHits"].push_back([](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { uint8_t pixel_holes = getSummary(helper, msgHelper,xAOD::numberOfPixelHoles); return pixel_holes == 0 || ( pixel_holes<=1 && getSummary(helper, msgHelper,xAOD::numberOfInnermostPixelLayerHits) >= 1 && getSummary(helper, msgHelper,xAOD::expectNextToInnermostPixelLayerHit) > 0 @@ -552,7 +552,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (m_minNSiHitsMod > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum modified Si hits (2*pix + sct) (does not include dead sensors)= " << m_minNSiHitsMod ); - trackCuts["SiHits"].push_back([minNSiHitsMod = m_minNSiHitsMod](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["SiHits"].push_back([minNSiHitsMod = m_minNSiHitsMod](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<3,Trk_Helper>(helper, msgHelper,{xAOD::numberOfPixelHits, xAOD::numberOfPixelHits, // pixel hits count twice in this definition xAOD::numberOfSCTHits}) >= minNSiHitsMod; @@ -564,7 +564,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_INFO( " Minimum modified Si hits in bottom half = " << m_minNSiHitsModBottom ); trackCuts["SiHits"].push_back([minNSiHitsModTop = m_minNSiHitsModTop, - minNSiHitsModBottom = m_minNSiHitsModBottom](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + minNSiHitsModBottom = m_minNSiHitsModBottom](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { auto [top,bottom] = getSiHitsTopBottom(helper, msgHelper); return top >= minNSiHitsModTop && bottom >= minNSiHitsModBottom; }); @@ -600,7 +600,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: << m_maxTrtHighEFraction); trackCuts["TrtHits"].push_back([maxTrtEtaAcceptance = m_maxTrtEtaAcceptance, maxEtaForTrtHitCuts = m_maxEtaForTrtHitCuts, - maxTrtHighEFraction = m_maxTrtHighEFraction](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + maxTrtHighEFraction = m_maxTrtHighEFraction](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double absEta = std::abs( helper.eta( msgHelper) ); return (absEta <= maxTrtEtaAcceptance || absEta > maxEtaForTrtHitCuts) || getSummary(helper, msgHelper,xAOD::numberOfTRTHighThresholdHits ) @@ -612,7 +612,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: << m_maxTrtHighEFractionWithOutliers); trackCuts["TrtHits"].push_back([maxTrtEtaAcceptance = m_maxTrtEtaAcceptance, maxEtaForTrtHitCuts = m_maxEtaForTrtHitCuts, - maxTrtHighEFractionWithOutliers = m_maxTrtHighEFractionWithOutliers](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + maxTrtHighEFractionWithOutliers = m_maxTrtHighEFractionWithOutliers](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double absEta = std::abs( helper.eta( msgHelper) ); return (absEta <= maxTrtEtaAcceptance || absEta > maxEtaForTrtHitCuts) || ( getSummarySum<2,Trk_Helper>(helper, msgHelper,{xAOD::numberOfTRTHighThresholdHits, xAOD::numberOfTRTHighThresholdOutliers} )) @@ -623,7 +623,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: ATH_MSG_INFO( " Maximum fraction of TRT hits that are outliers: " << m_maxTrtOutlierFraction ); trackCuts["TrtHits"].push_back([maxTrtEtaAcceptance = m_maxTrtEtaAcceptance, maxEtaForTrtHitCuts = m_maxEtaForTrtHitCuts, - maxTrtOutlierFraction = m_maxTrtOutlierFraction](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + maxTrtOutlierFraction = m_maxTrtOutlierFraction](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double absEta = std::abs( helper.eta( msgHelper) ); uint8_t trt_outliers = getSummary(helper, msgHelper,xAOD::numberOfTRTOutliers ); return ( absEta <= maxTrtEtaAcceptance || absEta > maxEtaForTrtHitCuts) @@ -635,7 +635,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: // fit quality cuts if (m_useEtaDependentMaxChiSq) { if (VERBOSE>0) ATH_MSG_INFO( " Using pre-defined eta-dependent maximum chi squared (no longer recommended)." ); - trackCuts["FitQuality"].push_back([](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["FitQuality"].push_back([](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double eta = helper.eta(msgHelper); double fit_chi_square = getFitChiSquare(helper,msgHelper); double fit_ndof = getFitNDoF(helper,msgHelper); @@ -649,19 +649,19 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: } if (maxDoubleIsSet(m_maxChiSq)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum chi squared: " << m_maxChiSq ); - trackCuts["FitQuality"].push_back([maxChiSq = m_maxChiSq](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["FitQuality"].push_back([maxChiSq = m_maxChiSq](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getFitChiSquare(helper,msgHelper) <= maxChiSq; }); } if (maxDoubleIsSet(m_maxChiSqperNdf)) { if (VERBOSE>0) ATH_MSG_INFO( " Maximum chi squared per degree of freedom: " << m_maxChiSqperNdf ); - trackCuts["FitQuality"].push_back([maxChiSqperNdf = m_maxChiSqperNdf](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["FitQuality"].push_back([maxChiSqperNdf = m_maxChiSqperNdf](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getFitChiSquare(helper,msgHelper) <= maxChiSqperNdf * getFitNDoF(helper,msgHelper); }); } if (m_minProb > 0.) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum chi squared probability: " << m_minProb ); - trackCuts["FitQuality"].push_back([minProb = m_minProb](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["FitQuality"].push_back([minProb = m_minProb](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return TMath::Prob( getFitChiSquare(helper,msgHelper),getFitNDoF(helper,msgHelper)) >= minProb; }); } @@ -669,7 +669,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_INFO( " Minimum chi-sq probability of " << m_minProbAbovePtCutoff << " above pt of " << m_minPtForProbCut*1e-3 << " GeV." ); trackCuts["FitQuality"].push_back([minPtForProbCut = m_minPtForProbCut, - minProbAbovePtCutoff = m_minProbAbovePtCutoff](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + minProbAbovePtCutoff = m_minProbAbovePtCutoff](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return helper.pt(msgHelper) <= minPtForProbCut || TMath::Prob( getFitChiSquare(helper,msgHelper),getFitNDoF(helper,msgHelper)) >= minProbAbovePtCutoff; }); @@ -678,13 +678,13 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: // dE/dx cuts if (m_minNUsedHitsdEdx > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum used hits for dEdx: " << m_minNUsedHitsdEdx ); - trackCuts["dEdxHits"].push_back([minNUsedHitsdEdx = m_minNUsedHitsdEdx](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["dEdxHits"].push_back([minNUsedHitsdEdx = m_minNUsedHitsdEdx](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getNumberOfUsedHitsdEdx(helper,msgHelper) >= minNUsedHitsdEdx; }); } if (m_minNOverflowHitsdEdx > 0) { if (VERBOSE>0) ATH_MSG_INFO( " Minimum IBL overflow hits for dEdx: " << m_minNOverflowHitsdEdx ); - trackCuts["dEdxHits"].push_back([minNOverflowHitsdEdx = m_minNOverflowHitsdEdx](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["dEdxHits"].push_back([minNOverflowHitsdEdx = m_minNOverflowHitsdEdx](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getNumberOfIBLOverflowsdEdx(helper,msgHelper) >= minNOverflowHitsdEdx; }); } @@ -692,13 +692,13 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_INFO( " Minimum high threshold electron probability: " << m_minEProbabilityHT ); if (m_eProbHTonlyForXe) { if (VERBOSE>0) ATH_MSG_INFO( " (only applied on tracks where all TRT hits are Xenon)" ); - trackCuts["eProbHT"].push_back([minEProbabilityHT = m_minEProbabilityHT](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["eProbHT"].push_back([minEProbabilityHT = m_minEProbabilityHT](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getSummarySum<2,Trk_Helper>(helper, msgHelper, {xAOD::numberOfTRTHits, xAOD::numberOfTRTOutliers}) > getSummary(helper, msgHelper, xAOD::numberOfTRTXenonHits) || getEProbabilityHT(helper,msgHelper) >= minEProbabilityHT; }); } else { - trackCuts["eProbHT"].push_back([minEProbabilityHT = m_minEProbabilityHT](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + trackCuts["eProbHT"].push_back([minEProbabilityHT = m_minEProbabilityHT](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { return getEProbabilityHT(helper,msgHelper) >= minEProbabilityHT; }); } @@ -725,7 +725,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: << " ,Silicon hits >= " << m_vecMinNSiHitsAboveEta.at(cutSize-1) ); trackCuts["SiHits"].push_back([p_vecEtaCutoffsForSiHitsCut = &std::as_const(m_vecEtaCutoffsForSiHitsCut), - p_vecMinNSiHitsAboveEta = &std::as_const(m_vecMinNSiHitsAboveEta)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + p_vecMinNSiHitsAboveEta = &std::as_const(m_vecMinNSiHitsAboveEta)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double abs_eta = std::abs(helper.eta(msgHelper)); unsigned int bin_i = findBin(*p_vecEtaCutoffsForSiHitsCut, abs_eta); return bin_i >= p_vecMinNSiHitsAboveEta->size() @@ -757,7 +757,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_INFO( " for eta > " << m_vecEtaCutoffsForPtCut.at(cutSize-1) << " ,transverse momentum >= " << m_vecMinPtAboveEta.at(cutSize-1) ); trackCuts["Pt"].push_back([p_vecEtaCutoffsForPtCut = &std::as_const(m_vecEtaCutoffsForPtCut), - p_vecMinPtAboveEta = &std::as_const(m_vecMinPtAboveEta)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + p_vecMinPtAboveEta = &std::as_const(m_vecMinPtAboveEta)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double abs_eta = std::abs(helper.eta(msgHelper)); unsigned int bin_i = findBin(*p_vecEtaCutoffsForPtCut, abs_eta); return bin_i >= p_vecMinPtAboveEta->size() || abs_eta > 5.0 || helper.pt(msgHelper) >= (*p_vecMinPtAboveEta)[bin_i]; @@ -786,7 +786,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: if (VERBOSE>0) ATH_MSG_INFO( " for pt > " << m_vecPtCutoffsForSctHitsCut.at(cutSize-1) << " MeV,\t\tSCT hits >= " << m_vecMinNSctHitsAbovePt.at(cutSize-1) ); trackCuts["SctHits"].push_back([p_vecPtCutoffsForSctHitsCut = &std::as_const(m_vecPtCutoffsForSctHitsCut), - p_vecMinNSctHitsAbovePt = &std::as_const(m_vecMinNSctHitsAbovePt)](Trk_Helper helper, asg::AsgMessaging &msgHelper) { + p_vecMinNSctHitsAbovePt = &std::as_const(m_vecMinNSctHitsAbovePt)](Trk_Helper helper, const asg::AsgMessaging &msgHelper) { double pt = helper.pt(msgHelper); unsigned int bin_i = findBin(*p_vecPtCutoffsForSctHitsCut, pt); return bin_i >= p_vecPtCutoffsForSctHitsCut->size() @@ -799,7 +799,7 @@ StatusCode InDet::InDetTrackSelectionTool::setupCuts(std::map< std::string, std: template <class Trk_Helper> asg::AcceptData InDet::InDetTrackSelectionTool::accept(Trk_Helper helper, - const std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, asg::AsgMessaging &msgHelper)> > > &trackCuts) const { + const std::map< std::string, std::vector< std::function<bool(Trk_Helper helper, const asg::AsgMessaging &msgHelper)> > > &trackCuts) const { if (!m_isInitialized) { if (!m_warnInit) { ATH_MSG_WARNING( "Tool is not initialized! Calling accept() will not be very helpful." ); -- GitLab