15#include "Acts/Utilities/Result.hpp"
16#include "Acts/Utilities/Delegate.hpp"
17#include "Acts/EventData/SourceLink.hpp"
18#include "Acts/TrackFinding/CombinatorialKalmanFilterError.hpp"
19#include "Acts/Surfaces/Surface.hpp"
20#include "Acts/Geometry/GeometryHierarchyMap.hpp"
21#include "Acts/EventData/Types.hpp"
22#include "Acts/EventData/TrackStatePropMask.hpp"
23#include "boost/container/small_vector.hpp"
26#include "Acts/EventData/TrackStateProxy.hpp"
27#include "Acts/Utilities/CalibrationContext.hpp"
28#include "Acts/EventData/BoundTrackParameters.hpp"
31#include "Acts/EventData/MultiTrajectory.hpp"
44template <
typename derived_t>
48 template <std::
size_t N>
52 template <std::
size_t N>
57 template <std::
size_t N>
62 template <std::
size_t N>
66 template <std::
size_t N>
67 using Predicted =
typename Acts::detail_tsp::FixedSizeTypes<N>::Coefficients;
70 template <std::
size_t N>
76 template <
typename T_MeasurementRangeIterator>
78 using value_type =
typename T_MeasurementRangeIterator::value_type;
97 using BoundState = std::tuple<BoundTrackParameters, BoundMatrix, double>;
111 template <
class T_Matrix>
112 static constexpr std::size_t
matrixColumns() {
return T_Matrix::ColsAtCompileTime;}
113 template <
class T_Matrix>
114 static constexpr std::size_t
matrixRows() {
return T_Matrix::RowsAtCompileTime;}
116 template <
typename T_Float,
class T_Matrix>
117 static auto matrixTypeCast(
const T_Matrix &matrix) {
return matrix.template cast<T_Float>(); }
119 template <
class T_Matrix>
120 static auto transpose(
const T_Matrix &matrix) {
return matrix.transpose(); }
122 template <
class T_Matrix>
123 static auto invert(
const T_Matrix &matrix) {
return matrix.inverse(); }
136 template <std::
size_t N>
137 using type = std::array<unsigned char, N>;
139 template <std::
size_t N>
142 for(
int i=0; i<N; ++i) {
151template <std::
size_t N,
class T_ResultType,
class T_Matrix>
154 using MatrixIndexMapType =
unsigned char;
156 using MatrixIndexType =
unsigned int;
165 for (MatrixIndexType meas_i=0; meas_i<N; ++meas_i) {
166 assert( meas_i < parameter_map.size() );
167 ret(meas_i,0) = matrix( parameter_map[meas_i], 0);
173 for (MatrixIndexType meas_i=0; meas_i<N; ++meas_i) {
174 assert( meas_i < parameter_map.size());
175 MatrixIndexType param_i = parameter_map[meas_i];
176 for (MatrixIndexType meas_j=0; meas_j<N; ++meas_j) {
177 assert( meas_j < parameter_map.size());
178 ret(meas_i,meas_j) = matrix(param_i, parameter_map[meas_j]);
189template <
typename measurement_vector_t,
typename measurement_cov_matrix_t,
190 typename predicted_vector_t,
typename predicted_cov_matrix_t>
192 const measurement_cov_matrix_t &a_cov,
193 const predicted_vector_t &b,
194 const predicted_cov_matrix_t &b_cov) {
221template <std::
size_t N,
class PayloadType >
260 void acceptAndSort(std::function<
bool(
const PayloadType &
a,
const PayloadType &b)> comparison) {
290 typename std::array<IndexType, N+1>::const_iterator
begin() {
return m_order.begin(); }
322template <std::size_t NMeasMax,
327 using Config = Acts::GeometryHierarchyMap<AtlasMeasurementSelectorCuts>;
338 const derived_t &
derived()
const {
return *
static_cast<const derived_t *
>(
this); }
342 template <std::
size_t N>
345 constexpr std::size_t nrows = Acts::kMeasurementSizeMax;
346 constexpr std::size_t ncols = Acts::eBoundSize;
348 std::bitset<nrows * ncols> proj_bitset {};
350 for (
unsigned int col_i=0; col_i<N; ++col_i) {
351 unsigned int row_i = parameter_map[col_i];
352 unsigned int idx = col_i *nrows + row_i;
353 proj_bitset[ (nrows * ncols - 1) - idx ] = 1;
355 return proj_bitset.to_ullong();
368 const Acts::BoundSubspaceIndices& subspaceIndices,
369 boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface> &track_states,
370 const Acts::Logger&
logger,
371 bool outlier_states) {
373 const auto &boundParams = derived_t::boundParams(boundState);
374 const auto &pathLength = derived_t::pathLength(boundState);
376 using PM = Acts::TrackStatePropMask;
378 track_states.reserve( n_new_states );
379 std::optional<TrackStateProxy> firstTrackState{
381 for (
unsigned int state_i=0; state_i<n_new_states; ++state_i) {
382 PM mask = PM::Predicted | PM::Filtered | PM::Jacobian | PM::Calibrated;
384 if (firstTrackState.has_value()) {
387 mask &= ~PM::Predicted & ~PM::Jacobian;
390 if (outlier_states) {
392 mask &= ~PM::Filtered;
396 ACTS_VERBOSE(
"Create SourceLink output track state #"
397 << trackState.index() <<
" with mask: " << mask);
399 if (firstTrackState.has_value()) {
400 trackState.shareFrom(*firstTrackState, PM::Predicted);
401 trackState.shareFrom(*firstTrackState, PM::Jacobian);
405 trackState.predicted() = boundParams.parameters();
406 if (boundParams.covariance()) {
407 trackState.predictedCovariance() = *boundParams.covariance();
409 trackState.jacobian() = derived_t::boundJacobiMatrix(boundState);
410 firstTrackState = trackState;
412 trackState.pathLength() = pathLength;
414 trackState.setReferenceSurface(boundParams.referenceSurface().getSharedPtr());
416 trackState.setProjectorSubspaceIndices(subspaceIndices);
418 auto typeFlags = trackState.typeFlags();
419 if (trackState.referenceSurface().surfaceMaterial() !=
nullptr) {
420 typeFlags.setHasMaterial();
422 typeFlags.setHasParameters();
426 track_states.push_back( trackState.index());
434 operator unsigned int() {
return flags; }
438 template <
typename T1,
typename T2>
441 std::tuple<T1,T2,unsigned int>::operator=(std::move(
a));
445 const T1 &
position()
const {
return std::get<0>(*
this); }
450 unsigned int makeOutlierFlag(
bool value) {
return static_cast<unsigned int>(value)<<2u; }
452 template <std::
size_t DIM,
typename T_SourceLink>
454 using MeasCovPair = PairWithFlags < typename MeasurementSelectorTraits<derived_t>::template PreSelectionMeasurement<DIM>,
466 template <std::
size_t DIM,
typename T_MeasurementRange>
467 Acts::Result<boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface> >
469 const Acts::CalibrationContext& calibrationContext,
470 const Acts::Surface& surface,
472 T_MeasurementRange &&measurement_range,
475 const Acts::Logger&
logger,
476 const std::size_t numMeasurementsCut,
477 const std::pair<float,float>& maxChi2Cut,
479 Acts::Result<boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface> >
480 result = boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface>{};
482 using iterator_t =
decltype(measurement_range.begin());
484 using BaseElementType = std::remove_cv_t<std::remove_pointer_t< container_value_t > >;
486 using TheMatchingMeasurement = MatchingMeasurement<DIM, container_value_t >;
487 using MeasCovPair = TheMatchingMeasurement::MeasCovPair;
495 Acts::SubspaceIndices<DIM> parameter_map =
derived().template parameterMap<DIM>(geometryContext,
500 derived().boundParams(boundState).parameters()),
502 derived().boundParams(boundState).covariance().value()));
505 auto preCalibrator =
derived().template preCalibrator<DIM, BaseElementType>();
506 auto postCalibrator =
derived().template postCalibrator<DIM, BaseElementType>();
508 for (
const auto &measurement : measurement_range ) {
509 TheMatchingMeasurement &matching_measurement=selected_measurements.
slot();
510 if (forced && postCalibrator) {
512 const auto &m =
derived().forwardToCalibrator(measurement);
513 matching_measurement.m_measurement = std::make_tuple( m.template localPosition<DIM>(), m.template localCovariance<DIM>(), 0u );
514 matching_measurement.m_chi2 = 0.0f;
515 matching_measurement.m_sourceLink=measurement;
518 matching_measurement.m_measurement = preCalibrator(geometryContext,
521 derived().forwardToCalibrator(measurement),
522 derived().boundParams(boundState));
523 matching_measurement.m_chi2 =
computeChi2(matching_measurement.m_measurement.position(),
524 matching_measurement.m_measurement.covariance(),
528 if (matching_measurement.m_chi2<maxChi2Cut.second) {
529 matching_measurement.m_sourceLink=measurement;
530 selected_measurements.
acceptAndSort([](
const TheMatchingMeasurement &
a,
531 const TheMatchingMeasurement &b) {
532 return a.m_chi2 < b.m_chi2;
538 if (selected_measurements.
empty()) {
539 auto config_for_surface =
m_config.find(surface.geometryId());
540 if (config_for_surface !=
m_config.end()) {
541 if (config_for_surface->edgeTolerance.has_value()) {
544 auto local_coords =
derived().boundParams(boundState).parameters().template block<2,1>(0,0);
545 if (!surface.insideBounds(local_coords,config_for_surface->edgeTolerance.value())) {
546 result = result.failure(Acts::CombinatorialKalmanFilterError::NoMeasurementExpected);
560 Acts::BoundSubspaceIndices boundSubspaceIndices{};
561 std::copy(parameter_map.begin(), parameter_map.end(), boundSubspaceIndices.begin());
566 boundSubspaceIndices,
569 (!selected_measurements.
empty()
570 ? selected_measurements.
getSlot( *(selected_measurements.
begin())).m_measurement.flags().isOutlier() || postCalibrator
572 assert( result->size() == selected_measurements.
size() );
574 if (postCalibrator) {
577 auto predicted_pos_dbl = predicted.first.template cast<double>();
578 auto predicted_cov_dbl = predicted.second.template cast<double>();
579 unsigned int state_i=0u;
581 idx: selected_measurements) {
582 assert( state_i < result->
size());
583 TrackStateProxy trackState( trajectory.getTrackState( (*result)[state_i] ) );
584 TheMatchingMeasurement &a_selected_measurement = selected_measurements.
getSlot(idx);
588 postCalibrator(geometryContext,
590 derived().forwardToCalibrator(a_selected_measurement.m_sourceLink.value()),
594 trackState.chi2() =
computeChi2(trackState.template calibrated<DIM>(),
595 trackState.template calibratedCovariance<DIM>(),
600 bool is_outlier = !forced && trackState.chi2() >= maxChi2Cut.first;
602 trackState.typeFlags().setIsOutlier();
603 trackState.shareFrom(trackState, Acts::TrackStatePropMask::Predicted,
604 Acts::TrackStatePropMask::Filtered);
606 trackState.typeFlags().setIsMeasurement();
607 trackState.addComponents(Acts::TrackStatePropMask::Filtered);
615 unsigned int state_i=0u;
617 idx: selected_measurements) {
618 assert( state_i < result->
size());
619 TrackStateProxy trackState( trajectory.getTrackState( (*result)[state_i] ) );
620 TheMatchingMeasurement &a_selected_measurement = selected_measurements.
getSlot(idx);
622 bool is_outlier = !forced && a_selected_measurement.m_chi2 >= maxChi2Cut.first;
623 auto type_flags = trackState.typeFlags();
626 type_flags.setIsOutlier();
627 trackState.shareFrom(trackState, Acts::TrackStatePropMask::Predicted,
628 Acts::TrackStatePropMask::Filtered);
631 type_flags.setIsMeasurement();
632 trackState.addComponents(Acts::TrackStatePropMask::Filtered);
634 if (a_selected_measurement.m_measurement.flags().isSplitHit()) {
635 type_flags.setIsSplitHit();
639 ::pack(std::move(a_selected_measurement.m_sourceLink.value())));
641 trackState.allocateCalibrated(DIM);
642 trackState.template calibrated<DIM>()
644 ::MatrixFloatType>(a_selected_measurement.m_measurement.position());
645 trackState.template calibratedCovariance<DIM>()
647 ::MatrixFloatType>(a_selected_measurement.m_measurement.covariance());
648 trackState.chi2() = a_selected_measurement.m_chi2;
657 template <
typename parameters_t>
658 static std::size_t
getEtaBin(
const parameters_t& boundParameters,
659 const std::vector<float> &etaBins) {
660 if (etaBins.empty()) {
663 const float eta = std::abs(std::atanh(std::cos(boundParameters.parameters()[Acts::eBoundTheta])));
665 for (
auto etaBin : etaBins) {
677 std::tuple< std::size_t, AtlasMeasurementSelectorCuts::Chi2CutsPerDim >
680 const Acts::Logger&
logger)
const {
681 std::tuple< std::size_t, AtlasMeasurementSelectorCuts::Chi2CutsPerDim > result;
682 std::size_t &numMeasurementsCut = std::get<0>(result);
685 auto geoID = surface.geometryId();
690 numMeasurementsCut = 0;
695 std::size_t eta_bin =
getEtaBin(
derived().boundParams(boundState), cuts->etaBins);
696 numMeasurementsCut = (!cuts->numMeasurementsCutOff.empty()
697 ? cuts->numMeasurementsCutOff[ std::min(cuts->numMeasurementsCutOff.size()-1, eta_bin) ]
699 if (!cuts->chi2CutOff.empty()) {
700 maxChi2Cut = cuts->chi2CutOff[ std::min(cuts->chi2CutOff.size()-1, eta_bin) ];
703 maxChi2Cut.fill(std::make_pair(std::numeric_limits<float>::max(),
704 std::numeric_limits<float>::max()));
706 ACTS_VERBOSE(
"Get cut for eta-bin="
707 << (eta_bin < cuts->etaBins.size() ? cuts->etaBins[eta_bin] : std::numeric_limits<float>::max())
708 <<
": chi2 (max,max-outlier) for 1D " << maxChi2Cut[1].first <<
", " << maxChi2Cut[1].second
709 <<
", 2D " << maxChi2Cut[2].first <<
", " << maxChi2Cut[2].second
710 <<
" max.meas." << numMeasurementsCut);
726template <std::size_t NMeasMax,
728 typename measurement_container_variant_t >
742 Acts::Result<boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface> >
744 const Acts::CalibrationContext& calibrationContext,
745 const Acts::Surface& surface,
747 typename TrackStateProxy::IndexType prevTip,
748 [[maybe_unused]] std::vector<TrackStateProxy>& trackStateCandidates,
750 const Acts::Logger&
logger)
const {
752 Acts::Result<boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface> >
753 result = Acts::CombinatorialKalmanFilterError::MeasurementSelectionFailed;
755 auto [a_measurement_container_variant_ptr, range, forced] = this->
derived().containerAndRange(surface);
756 if (!forced && !this->
derived().expectMeasurements( surface, a_measurement_container_variant_ptr, range)) {
757 result = result.failure(Acts::CombinatorialKalmanFilterError::NoMeasurementExpected);
760 if (!range.empty()) {
761 auto [numMeasurementsCut, maxChi2Cut] = this->
getCuts(surface,boundState,
logger);
764 if (numMeasurementsCut>0) {
766 result = std::visit( [
this,
777 forced] (
const auto &measurement_container_with_dimension) {
778 using ArgType = std::remove_cv_t<std::remove_reference_t<
decltype(measurement_container_with_dimension) > >;
779 constexpr std::size_t DIM = ArgType::dimension();
780 static_assert(DIM < std::tuple_size_v<AtlasMeasurementSelectorCuts::Chi2CutsPerDim>);
781 auto measurement_range = this->
derived().rangeForContainer(measurement_container_with_dimension,range);
788 std::move(measurement_range),
796 *a_measurement_container_variant_ptr);
800 result = Acts::Result<boost::container::small_vector< typename TrackStateProxy::IndexType, s_maxBranchesPerSurface> >::success({});
806template <std::size_t NMeasMax,
808 typename measurement_container_variant_t>
816 return std::get<0>(boundState);
821 return std::get<1>(boundState);
825 return std::get<2>(boundState);
831 template <
typename T>
833 if constexpr( std::is_same<T, std::remove_pointer_t<T> >::value ) {
846 template <std::
size_t DIM>
849 const Acts::CalibrationContext&,
850 const Acts::Surface&) {
856 template <std::
size_t DIM>
858 template <std::
size_t DIM>
863 template <std::
size_t DIM,
typename measurement_t>
865 std::tuple < typename MeasurementSelectorTraits<derived_t>::template PreSelectionMeasurement<DIM>,
868 (
const Acts::GeometryContext&,
869 const Acts::CalibrationContext&,
870 const Acts::Surface&,
871 const measurement_t &,
876 template <std::
size_t DIM,
typename measurement_t>
879 (
const Acts::GeometryContext&,
880 const Acts::CalibrationContext&,
881 const measurement_t &,
887 template <std::
size_t DIM,
typename measurement_t>
895 template <std::
size_t DIM,
typename measurement_t>
904 std::tuple<const measurement_container_variant_t &, abstract_measurement_range_t>
912 [[maybe_unused]]
const measurement_container_variant_t *container_variant_ptr,
919 template <
typename measurement_container_t>
Scalar eta() const
pseudorapidity method
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)
T_ResultType project(ParameterMapping::type< N > parameter_map, const T_Matrix &matrix)
size_t size() const
Number of registered mappings.
void diff(const TrigCaloCluster &a, const TrigCaloCluster &b, std::map< std::string, double > &varChange)
Base class providing the boiler code to fill the Acts multi trajectory track states.
static Acts::SourceLink pack(const Ptr_t &measurement)
Pack the measurement type pointer to an Acts::SourceLink including the intermediate conversion into a...
static Root::TMsgLogger logger("iLumiCalc")
constexpr bool testTrackStateFlag(Acts::TrackStateFlag flag, unsigned int flags)
void swap(ElementLinkVector< DOBJ > &lhs, ElementLinkVector< DOBJ > &rhs)
std::vector< std::size_t > numMeasurementsCutOff
Maximum number of associated measurements on a single surface.
std::vector< Chi2CutsPerDim > chi2CutOff
Maximum local chi2 contribution for each eta bin.
std::optional< Acts::BoundaryTolerance > edgeTolerance
Optional (expected negative) boundary tolerance to label edge holes as no measurement expected.
std::array< std::pair< float, float >, 4 > Chi2CutsPerDim
Maximum local chi2 contribution (measurement, outlier) for each measurement dimension.
std::vector< float > etaBins
bins in |eta| to specify variable selections
typename MeasurementSelectorTraits< derived_t >::template CalibratedMeasurementCovariance< DIM > MeasurementCovariance
typename MeasurementSelectorTraits< derived_t >::template CalibratedMeasurement< DIM > Measurement
MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::abstract_measurement_range_t abstract_measurement_range_t
static const MeasurementSelectorTraits< derived_t >::BoundMatrix & boundJacobiMatrix(const T_BoundState &boundState)
MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::BoundState T_BoundState
bool expectMeasurements(const Acts::Surface &surface, const measurement_container_variant_t *container_variant_ptr, const abstract_measurement_range_t &abstract_range) const
const PreCalibrator< DIM, measurement_t > & preCalibrator() const
const PostCalibrator< DIM, measurement_t > & postCalibrator() const
the calibrator used after the measurement selection which does not have to be "connected"
static double pathLength(const T_BoundState &boundState)
std::tuple< const measurement_container_variant_t &, abstract_measurement_range_t > containerAndRange(const Acts::Surface &surface) const
Get container and index range for measurements on the given surface.
static const auto & forwardToCalibrator(const T &a)
MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::TrackStateProxy TrackStateProxy
Acts::Delegate< void(const Acts::GeometryContext &, const Acts::CalibrationContext &, const measurement_t &, TrackStateProxy &)> PostCalibrator
Acts::Delegate< std::tuple< typename MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::template PreSelectionMeasurement< DIM >, typename MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::template PreSelectionMeasurementCovariance< DIM >, unsigned int >(const Acts::GeometryContext &, const Acts::CalibrationContext &, const Acts::Surface &, const measurement_t &, const typename MeasurementSelectorTraits< AtlasMeasurementSelector< NMeasMax, traj_t, measurement_container_variant_t > >::BoundTrackParameters &)> PreCalibrator
static const MeasurementSelectorTraits< derived_t >::BoundTrackParameters & boundParams(const T_BoundState &boundState)
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.
ParameterMapping::type< DIM > parameterMap(const Acts::GeometryContext &, const Acts::CalibrationContext &, const Acts::Surface &)
PairWithFlags< typename MeasurementSelectorTraits< derived_t >::template PreSelectionMeasurement< DIM >, typename MeasurementSelectorTraits< derived_t >::template PreSelectionMeasurementCovariance< DIM > > MeasCovPair
std::optional< T_SourceLink > m_sourceLink
MeasCovPair m_measurement
PairWithFlags< T1, T2 > & operator=(std::tuple< T1, T2, unsigned int > &&a)
const T1 & position() const
const T2 & covariance() const
static Acts::ProjectorBitset create(const ParameterMapping::type< N > ¶meter_map)
const derived_t & derived() const
MeasurementSelectorTraits< derived_t > traits
unsigned int makeOutlierFlag(bool value)
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)
std::tuple< std::size_t, AtlasMeasurementSelectorCuts::Chi2CutsPerDim > getCuts(const Acts::Surface &surface, const T_BoundState &boundState, const Acts::Logger &logger) const
static std::size_t getEtaBin(const parameters_t &boundParameters, const std::vector< float > &etaBins)
typename MeasurementSelectorTraits< derived_t >::trajectory_t trajectory_t
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 constexpr std::size_t s_maxBranchesPerSurface
typename MeasurementSelectorTraits< derived_t >::BoundState T_BoundState
typename MeasurementSelectorTraits< derived_t >::TrackStateProxy TrackStateProxy
Acts::GeometryHierarchyMap< AtlasMeasurementSelectorCuts > Config
static constexpr std::size_t matrixRows()
static constexpr std::size_t matrixColumns()
matrix adapter for Eigen additionally need +,- and *
static auto transpose(const T_Matrix &matrix)
static auto matrixTypeCast(const T_Matrix &matrix)
static auto invert(const T_Matrix &matrix)
typename T_MeasurementRangeIterator::value_type value_type
typename Acts::detail_tsp::FixedSizeTypes< N >::Covariance PredictedCovariance
Acts::BoundTrackParameters BoundTrackParameters
typename Acts::detail_tsp::FixedSizeTypes< N >::Coefficients CalibratedMeasurement
typename Acts::detail_tsp::FixedSizeTypes< N >::Coefficients PreSelectionMeasurement
trajectory_t::TrackStateProxy TrackStateProxy
typename Acts::detail_tsp::FixedSizeTypes< N >::Coefficients Predicted
typename Acts::detail_tsp::FixedSizeTypes< N >::Covariance PreSelectionMeasurementCovariance
std::ranges::iota_view< unsigned int, unsigned int > abstract_measurement_range_t
typename Acts::detail_tsp::FixedSizeTypes< N >::Covariance CalibratedMeasurementCovariance
static constexpr std::size_t s_maxBranchesPerSurface
typename derived_t::traj_t trajectory_t
static const std::size_t s_dimMax
Acts::BoundMatrix BoundMatrix
std::tuple< BoundTrackParameters, BoundMatrix, double > BoundState
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
typename Base::trajectory_t trajectory_t
MeasurementSelectorBase< NMeasMax, MeasurementSelectorTraits< derived_t >::s_dimMax, derived_t > Base
static constexpr std::size_t dimMax()
typename Base::T_BoundState T_BoundState
static constexpr std::size_t s_maxBranchesPerSurface
typename Base::TrackStateProxy TrackStateProxy
static constexpr type< N > identity()
std::array< unsigned char, N > type
std::array< PayloadType, N+1 > m_slots
std::array< IndexType, N+1 >::const_iterator begin()
std::array< IndexType, N+1 > m_order
const PayloadType & getSlot(IndexType idx) const
TopCollection(std::size_t max_n)
bool isValid(IndexType idx) const
void acceptAndSort(std::function< bool(const PayloadType &a, const PayloadType &b)> comparison)
std::array< IndexType, N+1 >::const_iterator end()
PayloadType & getSlot(IndexType idx)
void init(std::size_t max_n)