ATLAS Offline Software
Loading...
Searching...
No Matches
AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > Struct Template Reference

ATALS specific Implementation of the member functions needed by the measurement selector. More...

Inheritance diagram for AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >:
Collaboration diagram for AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >:

Classes

struct  CalibratedMeasurementTraits
struct  Empty

Public Types

using BASE
using traits = typename BASE::traits
template<std::size_t DIM>
using Measurement = typename traits::template CalibratedMeasurement<DIM>
using abstract_measurement_range_t = BASE::abstract_measurement_range_t
template<std::size_t DIM, typename measurement_t>
using Calibrator
using T_BoundState
using PreCalibrator
using PostCalibrator
using Base = MeasurementSelectorBase< NMeasMax, MeasurementSelectorTraits<derived_t>::s_dimMax, derived_t>
using trajectory_t = typename Base::trajectory_t
using TrackStateProxy = typename Base::TrackStateProxy
using Config

Public Member Functions

void setMeasurementRangesForced (const ActsTrk::detail::MeasurementRangeListFlat *measurementRangesForced)
 AtlasMeasurementSelector (typename BASE::Config &&config, const ActsTrk::detail::MeasurementRangeList &measurementRanges)
template<std::size_t DIM, typename T_ValueType>
void setCalibrator (const Calibrator< DIM, T_ValueType > &calibrator)
template<std::size_t DIM, typename T_ValueType>
void setPreCalibrator (typename std::enable_if< s_CanPreCalibrate< DIM >, const Calibrator< DIM, T_ValueType > & >::type calibrator)
template<std::size_t DIM>
ParameterMapping::type< DIM > parameterMap (const Acts::GeometryContext &geometryContext, const Acts::CalibrationContext &calibrationContext, const Acts::Surface &surface) const
template<std::size_t DIM, typename measurement_t>
const Calibrator< DIM, measurement_t > & postCalibrator () const
template<std::size_t DIM, typename measurement_t>
auto preCalibrator () const
std::tuple< const measurement_container_variant_t *, abstract_measurement_range_t, bool > containerAndRange (const Acts::Surface &surface) const
bool expectMeasurements (const Acts::Surface &surface, const measurement_container_variant_t *container_variant_ptr, const abstract_measurement_range_t &abstract_range) const
template<typename measurement_container_t>
auto rangeForContainer (const measurement_container_t &concrete_container, const abstract_measurement_range_t &abstract_range) const
ParameterMapping::type< DIM > parameterMap (const Acts::GeometryContext &, const Acts::CalibrationContext &, const Acts::Surface &)
Acts::Result< boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface > > createTrackStates (const Acts::GeometryContext &geometryContext, const Acts::CalibrationContext &calibrationContext, const Acts::Surface &surface, const T_BoundState &boundState, typename TrackStateProxy::IndexType prevTip, std::vector< TrackStateProxy > &trackStateCandidates, trajectory_t &trajectory, const Acts::Logger &logger) const
std::tuple< std::size_t, std::pair< float, float > > getCuts (const Acts::Surface &surface, const T_BoundState &boundState, const Acts::Logger &logger) const

Static Public Member Functions

template<typename T_Value>
static Acts::SourceLink makeSourceLink (T_Value &&value)
template<typename MeasurementRangeList_t>
static std::tuple< const measurement_container_variant_t *, abstract_measurement_range_t, bool > containerAndRangeSingle (const MeasurementRangeList_t &measurementRanges, const Acts::Surface &surface, bool forced)
static const MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::BoundTrackParameters & boundParams (const T_BoundState &boundState)
static const MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::BoundMatrix & boundJacobiMatrix (const T_BoundState &boundState)
static double pathLength (const T_BoundState &boundState)
static const auto & forwardToCalibrator (const T &a)
static auto rangeForContainer (const measurement_container_t &concrete_container, const abstract_measurement_range_t &abstract_range)
 Create a range over elements of the given container from an abstract range.
static constexpr std::size_t dimMax ()

Public Attributes

const ActsTrk::detail::MeasurementRangeListm_measurementRanges {}
const ActsTrk::detail::MeasurementRangeListFlatm_measurementRangesForced {}
ActsTrk::MeasurementParameterMap m_projector {}
CalibratorRegistry< CalibratedMeasurementTraits, typename traits::BoundTrackParameters, measurement_container_variant_t > m_calibrators {}
std::conditional< s_fullPreCalibration, CalibratorRegistry< CalibratedMeasurementTraits, typenametraits::BoundTrackParameters, measurement_container_variant_t >, Empty >::type m_preCalibrators {}
Config m_config

Static Public Attributes

template<std::size_t DIM>
static constexpr bool s_CanPreCalibrate
static constexpr std::size_t s_maxBranchesPerSurface = Base::s_maxBranchesPerSurface

Protected Member Functions

const derived_t & derived () const
Acts::Result< boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface > > selectMeasurementsCreateTrackStates (const Acts::GeometryContext &geometryContext, const Acts::CalibrationContext &calibrationContext, const Acts::Surface &surface, const T_BoundState &boundState, T_MeasurementRange &&measurement_range, std::size_t prevTip, trajectory_t &trajectory, const Acts::Logger &logger, const std::size_t numMeasurementsCut, const std::pair< float, float > &maxChi2Cut, bool forced) const

Static Protected Member Functions

static void createStates (std::size_t n_new_states, const T_BoundState &boundState, std::size_t prevTip, trajectory_t &trajectory, const Acts::BoundSubspaceIndices &subspaceIndices, boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface > &track_states, const Acts::Logger &logger, bool outlier_states)
static std::size_t getEtaBin (const parameters_t &boundParameters, const std::vector< float > &etaBins)

Detailed Description

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
struct AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >

ATALS specific Implementation of the member functions needed by the measurement selector.

Definition at line 155 of file AtlasMeasurementSelector.cxx.

Member Typedef Documentation

◆ abstract_measurement_range_t

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
using AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::abstract_measurement_range_t = BASE::abstract_measurement_range_t

Definition at line 170 of file AtlasMeasurementSelector.cxx.

◆ BASE

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
using AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::BASE
Initial value:
measurement_container_variant_t >
AtlasMeasurementSelector(typename BASE::Config &&config, const ActsTrk::detail::MeasurementRangeList &measurementRanges)

Definition at line 161 of file AtlasMeasurementSelector.cxx.

◆ Base

template<std::size_t NMeasMax, typename derived_t, typename measurement_container_variant_t>
using MeasurementSelectorWithDispatch< NMeasMax, derived_t, measurement_container_variant_t >::Base = MeasurementSelectorBase< NMeasMax, MeasurementSelectorTraits<derived_t>::s_dimMax, derived_t>
inherited

Definition at line 735 of file MeasurementSelector.h.

◆ Calibrator

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM, typename measurement_t>
using AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::Calibrator
Initial value:
Acts::Delegate<
std::pair < typename traits::template CalibratedMeasurement<DIM>,
typename traits::template CalibratedMeasurementCovariance<DIM> >
(const Acts::GeometryContext&,
const Acts::CalibrationContext&,
const measurement_t &,
const typename traits::BoundTrackParameters &)>

Definition at line 174 of file AtlasMeasurementSelector.cxx.

◆ Config

using MeasurementSelectorBase< NMeasMax, DIMMAX, derived_t >::Config
inherited

Definition at line 320 of file MeasurementSelector.h.

◆ Measurement

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM>
using AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::Measurement = typename traits::template CalibratedMeasurement<DIM>

Definition at line 168 of file AtlasMeasurementSelector.cxx.

◆ PostCalibrator

using MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::PostCalibrator
inherited

Definition at line 875 of file MeasurementSelector.h.

◆ PreCalibrator

using MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::PreCalibrator
inherited

Definition at line 864 of file MeasurementSelector.h.

◆ T_BoundState

using MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::T_BoundState
inherited

Definition at line 813 of file MeasurementSelector.h.

◆ TrackStateProxy

template<std::size_t NMeasMax, typename derived_t, typename measurement_container_variant_t>
using MeasurementSelectorWithDispatch< NMeasMax, derived_t, measurement_container_variant_t >::TrackStateProxy = typename Base::TrackStateProxy
inherited

Definition at line 738 of file MeasurementSelector.h.

◆ traits

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
using AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::traits = typename BASE::traits

Definition at line 165 of file AtlasMeasurementSelector.cxx.

◆ trajectory_t

template<std::size_t NMeasMax, typename derived_t, typename measurement_container_variant_t>
using MeasurementSelectorWithDispatch< NMeasMax, derived_t, measurement_container_variant_t >::trajectory_t = typename Base::trajectory_t
inherited

Definition at line 737 of file MeasurementSelector.h.

Constructor & Destructor Documentation

◆ AtlasMeasurementSelector()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::AtlasMeasurementSelector ( typename BASE::Config && config,
const ActsTrk::detail::MeasurementRangeList & measurementRanges )
inline

Definition at line 214 of file AtlasMeasurementSelector.cxx.

218 {}
ATALS specific Implementation of the member functions needed by the measurement selector.
MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t > BASE
const ActsTrk::detail::MeasurementRangeList * m_measurementRanges

Member Function Documentation

◆ boundJacobiMatrix()

const MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::BoundMatrix & MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::boundJacobiMatrix ( const T_BoundState & boundState)
inlinestaticinherited

Definition at line 822 of file MeasurementSelector.h.

822 {
823 return std::get<1>(boundState);
824 }

◆ boundParams()

const MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::BoundTrackParameters & MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::boundParams ( const T_BoundState & boundState)
inlinestaticinherited

Definition at line 817 of file MeasurementSelector.h.

817 {
818 return std::get<0>(boundState);
819 }

◆ containerAndRange()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
std::tuple< const measurement_container_variant_t *, abstract_measurement_range_t, bool > AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::containerAndRange ( const Acts::Surface & surface) const
inline

Definition at line 287 of file AtlasMeasurementSelector.cxx.

287 {
290 if (std::get<0>(ret)) return ret;
291 }
293 }
const ActsTrk::detail::MeasurementRangeListFlat * m_measurementRangesForced
static std::tuple< const measurement_container_variant_t *, abstract_measurement_range_t, bool > containerAndRangeSingle(const MeasurementRangeList_t &measurementRanges, const Acts::Surface &surface, bool forced)

◆ containerAndRangeSingle()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<typename MeasurementRangeList_t>
std::tuple< const measurement_container_variant_t *, abstract_measurement_range_t, bool > AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::containerAndRangeSingle ( const MeasurementRangeList_t & measurementRanges,
const Acts::Surface & surface,
bool forced )
inlinestatic

Definition at line 298 of file AtlasMeasurementSelector.cxx.

298 {
300 if (range_iter == measurementRanges.end())
301 {
302 return {nullptr, abstract_measurement_range_t{}, forced};
303 }
304 else {
305 abstract_measurement_range_t range{range_iter->second.elementBeginIndex(),
306 range_iter->second.elementEndIndex()};
307 assert( !range_iter->second.isMeasurementExpected() || range.begin() <= range.end());
308 // if surface marked as defect
309 return { forced || range_iter->second.isMeasurementExpected() ? &(measurementRanges.container(range_iter->second.containerIndex())) : nullptr,
311 }
312 }
BASE::abstract_measurement_range_t abstract_measurement_range_t

◆ createStates()

void MeasurementSelectorBase< NMeasMax, DIMMAX, derived_t >::createStates ( std::size_t n_new_states,
const T_BoundState & boundState,
std::size_t prevTip,
trajectory_t & trajectory,
const Acts::BoundSubspaceIndices & subspaceIndices,
boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface > & track_states,
const Acts::Logger & logger,
bool outlier_states )
inlinestaticprotectedinherited

Definition at line 357 of file MeasurementSelector.h.

364 {
365 // create track states for all compatible measurement candidates
368
370
371 track_states.reserve( n_new_states );
374 for (unsigned int state_i=0; state_i<n_new_states; ++state_i) {
376
377 if (firstTrackState.has_value()) {
378 // subsequent track states don't need storage for these as they will
379 // be shared
381 }
382
383 if (outlier_states) {
384 // outlier won't have separate filtered parameters
386 }
387
389 ACTS_VERBOSE("Create SourceLink output track state #"
390 << trackState.index() << " with mask: " << mask);
391
392 if (firstTrackState.has_value()) {
395 }
396 else {
397 // only set these for first
398 trackState.predicted() = boundParams.parameters();
399 if (boundParams.covariance()) {
400 trackState.predictedCovariance() = *boundParams.covariance();
401 }
404 }
405 trackState.pathLength() = pathLength;
406
407 trackState.setReferenceSurface(boundParams.referenceSurface().getSharedPtr());
408
409 trackState.setProjectorSubspaceIndices(subspaceIndices);
410
411 auto typeFlags = trackState.typeFlags();
412 if (trackState.referenceSurface().surfaceMaterial() != nullptr) {
413 typeFlags.setHasMaterial();
414 }
415 typeFlags.setHasParameters();
416
417 // @TODO these track states still need some additional processing. Should there be a special
418 // flag for this ?
419 track_states.push_back( trackState.index());
420 }
421 }

◆ createTrackStates()

template<std::size_t NMeasMax, typename derived_t, typename measurement_container_variant_t>
Acts::Result< boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface > > MeasurementSelectorWithDispatch< NMeasMax, derived_t, measurement_container_variant_t >::createTrackStates ( const Acts::GeometryContext & geometryContext,
const Acts::CalibrationContext & calibrationContext,
const Acts::Surface & surface,
const T_BoundState & boundState,
typename TrackStateProxy::IndexType prevTip,
std::vector< TrackStateProxy > & trackStateCandidates,
trajectory_t & trajectory,
const Acts::Logger & logger ) const
inlineinherited

Definition at line 747 of file MeasurementSelector.h.

754 {
755
758 // get associated measurement container and the relevant measurement range for the given surface.
759 auto [a_measurement_container_variant_ptr, range, forced] = this->derived().containerAndRange(surface);
762 return result;
763 }
764 if (!range.empty()) {
766 // numMeasurementsCut is == 0 in case getCuts failed
767 // anyway cannot select anything if numMeasurementsCut==0;
768 if (numMeasurementsCut>0) {
769
770 result = std::visit( [this,
773 &surface,
774 &boundState,
775 &range,
776 prevTip,
777 &trajectory,
778 &logger,
780 &maxChi2Cut,
783 constexpr std::size_t DIM = ArgType::dimension();
785 return
786 this->template
789 surface,
792 prevTip,
794 logger,
797 forced);
798 },
800 }
801 }
802 else {
804 }
805 return result;
806 }
std::tuple< std::size_t, std::pair< float, float > > getCuts(const Acts::Surface &surface, const T_BoundState &boundState, const Acts::Logger &logger) const
Acts::Result< boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface > > selectMeasurementsCreateTrackStates(const Acts::GeometryContext &geometryContext, const Acts::CalibrationContext &calibrationContext, const Acts::Surface &surface, const T_BoundState &boundState, T_MeasurementRange &&measurement_range, std::size_t prevTip, trajectory_t &trajectory, const Acts::Logger &logger, const std::size_t numMeasurementsCut, const std::pair< float, float > &maxChi2Cut, bool forced) const

◆ derived()

const derived_t & MeasurementSelectorBase< NMeasMax, DIMMAX, derived_t >::derived ( ) const
inlineprotectedinherited

Definition at line 331 of file MeasurementSelector.h.

331{ return *static_cast<const derived_t *>(this); }

◆ dimMax()

template<std::size_t NMeasMax, typename derived_t, typename measurement_container_variant_t>
constexpr std::size_t MeasurementSelectorWithDispatch< NMeasMax, derived_t, measurement_container_variant_t >::dimMax ( )
inlinestaticconstexprinherited

Definition at line 742 of file MeasurementSelector.h.

◆ expectMeasurements()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
bool AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::expectMeasurements ( const Acts::Surface & surface,
const measurement_container_variant_t * container_variant_ptr,
const abstract_measurement_range_t & abstract_range ) const
inline

Definition at line 314 of file AtlasMeasurementSelector.cxx.

316 {
317 return (abstract_range.begin()<=abstract_range.end());
318 }

◆ forwardToCalibrator()

const auto & MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::forwardToCalibrator ( const T & a)
inlinestaticinherited

Definition at line 840 of file MeasurementSelector.h.

840 {
842 return a;
843 }
844 else {
845 return *a;
846 }
847 }

◆ getCuts()

std::tuple< std::size_t, std::pair< float, float > > MeasurementSelectorBase< NMeasMax, DIMMAX, derived_t >::getCuts ( const Acts::Surface & surface,
const T_BoundState & boundState,
const Acts::Logger & logger ) const
inlineinherited

Definition at line 686 of file MeasurementSelector.h.

688 {
692 // Get geoID of this surface
693 auto geoID = surface.geometryId();
694 // Find the appropriate cuts
695 auto cuts = m_config.find(geoID);
696 if (cuts == m_config.end()) {
697 // indicates failure
699 }
700 else {
701 // num measurement Cut
702 // getchi2 cut
704 numMeasurementsCut = (!cuts->numMeasurementsCutOff.empty()
705 ? cuts->numMeasurementsCutOff[ std::min(cuts->numMeasurementsCutOff.size()-1, eta_bin) ]
706 : NMeasMax);
707 maxChi2Cut = ! cuts->chi2CutOff.empty()
708 ? cuts->chi2CutOff[ std::min(cuts->chi2CutOff.size()-1, eta_bin) ]
711 ACTS_VERBOSE("Get cut for eta-bin="
713 << ": chi2 (max,max-outlier) " << maxChi2Cut.first << ", " << maxChi2Cut.second
714 << " max.meas." << numMeasurementsCut);
715 }
716 return result;
717 }

◆ getEtaBin()

std::size_t MeasurementSelectorBase< NMeasMax, DIMMAX, derived_t >::getEtaBin ( const parameters_t & boundParameters,
const std::vector< float > & etaBins )
inlinestaticprotectedinherited

Definition at line 667 of file MeasurementSelector.h.

668 {
669 if (etaBins.empty()) {
670 return 0u; // shortcut if no etaBins
671 }
672 const float eta = std::abs(std::atanh(std::cos(boundParameters.parameters()[Acts::eBoundTheta])));
673 std::size_t bin = 0;
674 for (auto etaBin : etaBins) {
675 if (etaBin >= eta) {
676 break;
677 }
678 bin++;
679 }
680 return bin;
681 }

◆ makeSourceLink()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<typename T_Value>
Acts::SourceLink AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::makeSourceLink ( T_Value && value)
inlinestatic

Definition at line 239 of file AtlasMeasurementSelector.cxx.

239 {
240 // value is pointer
242 // ... and pointer to xAOD::UncalibgratedMeasurement
245 }
ATLASUncalibSourceLink makeATLASUncalibSourceLink(const xAOD::UncalibratedMeasurementContainer *container, std::size_t index, const EventContext &ctx)

◆ parameterMap() [1/2]

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM>
ParameterMapping::type< DIM > AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::parameterMap ( const Acts::GeometryContext & geometryContext,
const Acts::CalibrationContext & calibrationContext,
const Acts::Surface & surface ) const
inline

Definition at line 250 of file AtlasMeasurementSelector.cxx.

252 {
254 }
ActsTrk::MeasurementParameterMap m_projector

◆ parameterMap() [2/2]

ParameterMapping::type< DIM > MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::parameterMap ( const Acts::GeometryContext & ,
const Acts::CalibrationContext & ,
const Acts::Surface &  )
inlineinherited

Definition at line 856 of file MeasurementSelector.h.

858 {
860 }
static constexpr type< N > identity()

◆ pathLength()

double MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::pathLength ( const T_BoundState & boundState)
inlinestaticinherited

Definition at line 826 of file MeasurementSelector.h.

826 {
827 return std::get<2>(boundState);
828 }

◆ postCalibrator()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM, typename measurement_t>
const Calibrator< DIM, measurement_t > & AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::postCalibrator ( ) const
inline

Definition at line 259 of file AtlasMeasurementSelector.cxx.

259 {
261 }
CalibratorRegistry< CalibratedMeasurementTraits, typename traits::BoundTrackParameters, measurement_container_variant_t > m_calibrators

◆ preCalibrator()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM, typename measurement_t>
auto AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::preCalibrator ( ) const
inline

Definition at line 266 of file AtlasMeasurementSelector.cxx.

266 {
267 if constexpr(s_fullPreCalibration) {
268 // full calibration during selection
270 }
271 else {
272 // no calibration is performed before the measurement selection, so just Eigen maps to the stored location
273 // and covariance are returned.
274 // @TODO unfortunately the Eigen Maps cannot be used directly because they are incompatible with the
275 // temporary measurement storage used in the measurement selector, so need to convert to the
276 // above ConstVectorMapWithInvalidDef etc. Does this introduce some overhead ?
277 return []( [[maybe_unused]] const Acts::GeometryContext&,
280 [[maybe_unused]] const typename traits::BoundTrackParameters &) {
282 };
283 }
284 }
std::conditional< s_fullPreCalibration, CalibratorRegistry< CalibratedMeasurementTraits, typenametraits::BoundTrackParameters, measurement_container_variant_t >, Empty >::type m_preCalibrators

◆ rangeForContainer() [1/2]

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<typename measurement_container_t>
auto AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::rangeForContainer ( const measurement_container_t & concrete_container,
const abstract_measurement_range_t & abstract_range ) const
inline

Definition at line 322 of file AtlasMeasurementSelector.cxx.

323 {
324 unsigned int begin_idx = abstract_range.front();
325 auto begin_iter = concrete_container.container().begin() + begin_idx;
326 auto end_iter = begin_iter + static_cast<unsigned int>(abstract_range.size());
328 }

◆ rangeForContainer() [2/2]

auto MeasurementSelectorBaseImpl< NMeasMax, AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >, measurement_container_variant_t >::rangeForContainer ( const measurement_container_t & concrete_container,
const abstract_measurement_range_t & abstract_range )
staticinherited

Create a range over elements of the given container from an abstract range.

Template Parameters
measurement_container_ta concrete container type which is one of one of the possible types of measurement_container_variant_t
Parameters
abstract_rangethe range as returned by containerAndRange
Returns
an itrerable range over elements of the given specified by the abstract range.

◆ selectMeasurementsCreateTrackStates()

Acts::Result< boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface > > MeasurementSelectorBase< NMeasMax, DIMMAX, derived_t >::selectMeasurementsCreateTrackStates ( const Acts::GeometryContext & geometryContext,
const Acts::CalibrationContext & calibrationContext,
const Acts::Surface & surface,
const T_BoundState & boundState,
T_MeasurementRange && measurement_range,
std::size_t prevTip,
trajectory_t & trajectory,
const Acts::Logger & logger,
const std::size_t numMeasurementsCut,
const std::pair< float, float > & maxChi2Cut,
bool forced ) const
inlineprotectedinherited

Definition at line 442 of file MeasurementSelector.h.

452 {
455
456 using iterator_t = decltype(measurement_range.begin());
459 // get calibrator
462
465
466
467
468 // get prediction in the measurement domain
471 surface);
472 auto predicted
477
478 // select n measurents with the smallest chi2.
482 for ( const auto &measurement : measurement_range ) {
484 if (forced && postCalibrator) {
485 // skip preCalibrator and computeChi2, by doing everything else. We start with what's done if no preCalibrator.
486 const auto &m = derived().forwardToCalibrator(measurement);
487 matching_measurement.m_measurement = std::make_pair( m.template localPosition<DIM>(), m.template localCovariance<DIM>() );
488 matching_measurement.m_chi2 = 0.0f;
490 if (!selected_measurements.acceptNoSort()) break;
491 } else {
496 matching_measurement.m_chi2 = computeChi2(matching_measurement.m_measurement.first,
497 matching_measurement.m_measurement.second,
498 predicted.first,
499 predicted.second);
500 // only consider measurements which pass the outlier chi2 cut
501 if (matching_measurement.m_chi2<maxChi2Cut.second) {
503 selected_measurements.acceptAndSort([](const TheMatchingMeasurement &a,
504 const TheMatchingMeasurement &b) {
505 return a.m_chi2 < b.m_chi2;
506 });
507 }
508 }
509 }
510
511 // apply final calibration to n-best measurements
515
516 // need extra temporary buffer if the types to store "measurements" during measurement selection
517 // and calibrated measurements after the measurement selection are not identical
518 static constexpr bool pre_and_post_calib_types_agree
523
524 using Empty = struct {};
526 std::array< post_calib_meas_cov_pair_t, NMeasMax>, // @TODO could use boost static_vector instead
528 if (postCalibrator) {
530
531 // apply final calibration, recompute chi2
535
536 // helper to select the destination storage which is the extra temporary buffer
537 // if the measurement storage types during and after selection are different.
540 if constexpr(pre_and_post_calib_types_agree) {
543 return a_selected_measurement.m_measurement;
544 }
545 else {
549 }
550 }();
551
552 // apply the calibration
555 derived().forwardToCalibrator(a_selected_measurement.m_sourceLink.value()),
557 // update chi2 using calibrated measurement
560 predicted.first,
561 predicted.second);
562 // ... and set outlier flag
563 a_selected_measurement.m_isOutLier = (!forced && a_selected_measurement.m_chi2 >= maxChi2Cut.first);
564 if constexpr(!pre_and_post_calib_types_agree) {
566 }
567 }
568 }
569 else {
570 // if no final calibration is performed only the outlier flag still needs to be set
574 a_selected_measurement.m_isOutLier = (!forced && a_selected_measurement.m_chi2 >= maxChi2Cut.first);
575 }
576 }
577
578 // First Create states without setting information about the calibrated measurement for the selected measurements
579 // @TODO first create state then copy measurements, or crete state by state and set measurements ?
580 // the lastter has the "advantage" that the outlier flag can be set individually
581 // the former has the advantage that part of the state creation code is independent of the
582 // the measurement.
583
588 prevTip,
591 *result,
592 logger,
593 (!selected_measurements.empty()
594 ? selected_measurements.getSlot( *(selected_measurements.begin())).m_isOutLier
595 : false) );
596 assert( result->size() == selected_measurements.size() );
597
598 // helper to determine whether calibrated storeage is to be used
599 auto use_calibrated_storage = [&postCalibrator]() -> bool {
600 if constexpr(pre_and_post_calib_types_agree) {
602 return false;
603 }
604 else {
605 // this is only known during runtime
606 // but it should not be tested if the types agree.
607 return postCalibrator;
608 }
609 };
610
611 if (selected_measurements.empty()) {
612 auto config_for_surface = m_config.find(surface.geometryId());
613 if (config_for_surface != m_config.end()) {
614 if (config_for_surface->edgeTolerance.has_value()) {
615 // if the prediction failes the bound test, where the edgeTolerance is expected to be negative
616 // then the "hole" is considered to be an edge hole which is not treated as a hole.
617 auto local_coords = derived().boundParams(boundState).parameters().template block<2,1>(0,0);
618 if (!surface.insideBounds(local_coords,config_for_surface->edgeTolerance.value())) {
620 }
621 }
622 }
623 }
624 else {
625 // copy selected measurements to pre-created states
626 unsigned int state_i=0;
630 TrackStateProxy trackState( trajectory.getTrackState( (*result)[state_i] ) );
632 trackState.setUncalibratedSourceLink(derived().makeSourceLink(std::move(a_selected_measurement.m_sourceLink.value())));
633 // flag outliers accordingly, so that they are handled correctly by the post processing
634 if (a_selected_measurement.m_isOutLier) {
635 trackState.typeFlags().setIsOutlier();
636 } else {
637 trackState.typeFlags().setIsMeasurement();
638 }
639 trackState.allocateCalibrated(DIM);
641 // if the final clibration is performed after the selection then
642 // copy these measurements and covariances to the track states
644 if constexpr(!pre_and_post_calib_types_agree) {
645 assert( state_i < calibrated.size());
646 trackState.template calibrated<DIM>()
650 trackState.chi2() = a_selected_measurement.m_chi2;
651 }
652 }
653 else {
654 trackState.template calibrated<DIM>()
658 trackState.chi2() = a_selected_measurement.m_chi2;
659 }
660 ++state_i;
661 }
662 }
663 return result;
664 }
double computeChi2(const measurement_vector_t &a, const measurement_cov_matrix_t &a_cov, const predicted_vector_t &b, const predicted_cov_matrix_t &b_cov)

◆ setCalibrator()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM, typename T_ValueType>
void AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::setCalibrator ( const Calibrator< DIM, T_ValueType > & calibrator)
inline

Definition at line 222 of file AtlasMeasurementSelector.cxx.

222 {
224 }
void setCalibrator(const Calibrator< DIM, T_ValueType > &calibrator)

◆ setMeasurementRangesForced()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
void AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::setMeasurementRangesForced ( const ActsTrk::detail::MeasurementRangeListFlat * measurementRangesForced)
inline

◆ setPreCalibrator()

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM, typename T_ValueType>
void AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::setPreCalibrator ( typename std::enable_if< s_CanPreCalibrate< DIM >, const Calibrator< DIM, T_ValueType > & >::type calibrator)
inline

Definition at line 233 of file AtlasMeasurementSelector.cxx.

Member Data Documentation

◆ m_calibrators

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
CalibratorRegistry< CalibratedMeasurementTraits, typename traits::BoundTrackParameters, measurement_container_variant_t> AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::m_calibrators {}

Definition at line 207 of file AtlasMeasurementSelector.cxx.

207{};

◆ m_config

Config MeasurementSelectorBase< NMeasMax, DIMMAX, derived_t >::m_config
inherited

Definition at line 323 of file MeasurementSelector.h.

◆ m_measurementRanges

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
const ActsTrk::detail::MeasurementRangeList* AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::m_measurementRanges {}

Definition at line 196 of file AtlasMeasurementSelector.cxx.

196{};

◆ m_measurementRangesForced

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
const ActsTrk::detail::MeasurementRangeListFlat* AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::m_measurementRangesForced {}

Definition at line 197 of file AtlasMeasurementSelector.cxx.

197{};

◆ m_preCalibrators

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
std::conditional<s_fullPreCalibration,CalibratorRegistry<CalibratedMeasurementTraits,typenametraits::BoundTrackParameters,measurement_container_variant_t>,Empty>::type AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::m_preCalibrators {}

Definition at line 211 of file AtlasMeasurementSelector.cxx.

211{};

◆ m_projector

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
ActsTrk::MeasurementParameterMap AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::m_projector {}

Definition at line 206 of file AtlasMeasurementSelector.cxx.

206{};

◆ s_CanPreCalibrate

template<std::size_t NMeasMax, typename traj_t, typename measurement_container_variant_t>
template<std::size_t DIM>
bool AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t >::s_CanPreCalibrate
staticconstexpr
Initial value:
= std::is_same< typename traits::template PreSelectionMeasurement<DIM>,
typename traits::template CalibratedMeasurement<DIM> >::value
&& std::is_same< typename traits::template PreSelectionMeasurementCovariance<DIM>,
typename traits::template CalibratedMeasurementCovariance<DIM> >::value

Definition at line 227 of file AtlasMeasurementSelector.cxx.

◆ s_maxBranchesPerSurface

template<std::size_t NMeasMax, typename derived_t, typename measurement_container_variant_t>
std::size_t MeasurementSelectorWithDispatch< NMeasMax, derived_t, measurement_container_variant_t >::s_maxBranchesPerSurface = Base::s_maxBranchesPerSurface
staticconstexprinherited

Definition at line 739 of file MeasurementSelector.h.


The documentation for this struct was generated from the following file: