5#include <Acts/Geometry/GeometryIdentifier.hpp>
13constexpr uint64_t
InvalidGeoID = std::numeric_limits<uint64_t>::max();
16 "chi2",
"pathLength",
"typeFlags",
"previous",
"next",
"predicted",
"filtered",
"smoothed",
"jacobian",
"calibrated",
"measDim",
17 "uncalibratedMeasurement",
"uncalibratedMeasurementLink" ,
"geometryId",
"surfaceIndex"
21constexpr std::optional<bool> has_impl(
24 using namespace Acts::HashedStringLiteral;
25 using Acts::MultiTrajectoryTraits::kInvalid;
30 return trackStates->
previous[istate] < kInvalid;
35 case "pathLength"_hash:{
39 case "typeFlags"_hash:{
43 case "predicted"_hash:{
45 return trackStates->
predicted[istate] < kInvalid;
47 case "filtered"_hash:{
49 return trackStates->
filtered[istate] < kInvalid;
51 case "smoothed"_hash:{
53 return trackStates->
smoothed[istate] < kInvalid;
55 case "jacobian"_hash:{
57 return trackStates->
jacobian[istate] < kInvalid;
59 case "projector"_hash:{
61 return trackStates->
calibrated[istate] < kInvalid;
63 case "calibrated"_hash:{
65 return trackStates->
measDim[istate] < kInvalid;
67 case "calibratedCov"_hash: {
68 INSPECTCALL(key <<
" " << istate <<
" calibratedCov");
69 return trackStates->
measDim[istate] < kInvalid;
71 case "measdim"_hash: {
75 case "referenceSurface"_hash: {
76 INSPECTCALL(key <<
" " << istate <<
" referenceSurfaceEnco");
83 INSPECTCALL(key <<
" " << istate <<
" not a predefined component");
84 return std::optional<bool>();
112 INSPECTCALL(
"copy c-tor " <<
this <<
" src " << &other <<
" " << other.size())
136 template<
typename CONT>
137 void stepResize( CONT* auxPtr,
const size_t realSize,
const size_t sizeStep = 20) {
138 if( realSize >= auxPtr->size() ) auxPtr->resize(auxPtr->size()+sizeStep);
143 Acts::TrackStatePropMask mask,
145 using namespace Acts::HashedStringLiteral;
152 using Acts::MultiTrajectoryTraits::kInvalid;
154 if (previous >= kInvalid - 1)
157 using namespace Acts;
184 if (ACTS_CHECK_BIT(mask, TrackStatePropMask::Predicted)) {
189 if (ACTS_CHECK_BIT(mask, TrackStatePropMask::Filtered)) {
194 if (ACTS_CHECK_BIT(mask, TrackStatePropMask::Smoothed)) {
199 if (ACTS_CHECK_BIT(mask, TrackStatePropMask::Jacobian)) {
207 if (ACTS_CHECK_BIT(mask, TrackStatePropMask::Calibrated)) {
220 Acts::TrackStatePropMask mask) {
221 using namespace Acts::HashedStringLiteral;
227 using Acts::MultiTrajectoryTraits::kInvalid;
229 using namespace Acts;
256 ACTS_CHECK_BIT(mask, TrackStatePropMask::Predicted)) {
261 ACTS_CHECK_BIT(mask, TrackStatePropMask::Filtered)) {
266 ACTS_CHECK_BIT(mask, TrackStatePropMask::Smoothed)) {
271 ACTS_CHECK_BIT(mask, TrackStatePropMask::Jacobian)) {
276 ACTS_CHECK_BIT(mask, TrackStatePropMask::Calibrated)) {
286 Acts::TrackStatePropMask shareSource,
287 Acts::TrackStatePropMask shareTarget) {
289 assert(ACTS_CHECK_BIT(this->getTrackState(iother).getMask(), shareSource) &&
290 "Source has incompatible allocation");
292 using PM = Acts::TrackStatePropMask;
294 using Acts::MultiTrajectoryTraits::kInvalid;
297 switch (shareSource) {
311 throw std::domain_error{
"MutableMultiTrajectory Unable to share this component"};
314 assert(sourceIndex != kInvalid);
316 switch (shareTarget) {
318 assert(shareSource != PM::Jacobian);
322 assert(shareSource != PM::Jacobian);
326 assert(shareSource != PM::Jacobian);
330 assert(shareSource == PM::Jacobian);
334 throw std::domain_error{
"MutableMultiTrajectory Unable to share this component"};
340 Acts::TrackStatePropMask target,
343 using PM = Acts::TrackStatePropMask;
345 using Acts::MultiTrajectoryTraits::kInvalid;
369 throw std::domain_error{
"MutableMultiTrajectory Unable to unset this component"};
375 using namespace Acts::HashedStringLiteral;
377 "Attempt to reach beyond the Track States container size");
378 INSPECTCALL(key <<
" " << istate <<
" non-const component_impl")
381 case "previous"_hash:
387 case "pathLength"_hash:
389 case "predicted"_hash:
391 case "filtered"_hash:
393 case "smoothed"_hash:
395 case "projector"_hash: {
401 case "typeFlags"_hash:
410 throw std::runtime_error(
"MutableMultiTrajectory::component_impl no such component " + std::to_string(key));
417 Acts::HashedString key,
419 using namespace Acts::HashedStringLiteral;
421 "Attempt to reach beyond the Track States container size");
422 INSPECTCALL(key <<
" " << istate <<
" const component_impl")
424 case "previous"_hash:
430 case "pathLength"_hash:
432 case "predicted"_hash:
434 case "filtered"_hash:
436 case "smoothed"_hash:
438 case "jacobian"_hash:
440 case "projector"_hash:{
444 case "calibrated"_hash: {
447 case "calibratedCov"_hash: {
452 case "typeFlags"_hash:
457 INSPECTCALL(
"getting dynamic variable " << d.name <<
" " << istate);
461 throw std::runtime_error(
"MutableMultiTrajectory::component_impl const no such component " + std::to_string(key));
469 if (inTrackState.has_value())
470 return inTrackState.value();
473 using namespace Acts::HashedStringLiteral;
474 if (key ==
"uncalibratedSourceLink"_hash){
475 INSPECTCALL(key <<
" " << istate <<
" uncalibratedSourceLink")
523 const Acts::SourceLink& sourceLink) {
527 static const Decor_t decor{
"uncalibratedMeasurement"};
529 throw std::range_error(
"istate out of range on TrackStates when attempting to access uncalibrated measurements");
542 catch (std::bad_any_cast &err) {
549 std::shared_ptr<const Acts::Surface> surface) {
554 if (surface->geometryId().value() == 0) {
568 if ( std::holds_alternative<const Acts::Surface*>(surfaceVariant))
569 return std::get<const Acts::Surface*>(surfaceVariant);
570 return std::get<std::shared_ptr<const Acts::Surface>>(surfaceVariant).
get();
575 if ( istate >=
m_surfaces.size() )
throw std::out_of_range(
"MutableMultiTrajectory index " + std::to_string(istate) +
" out of range " + std::to_string(
m_surfaces.size()) +
" when accessing reference surface");
580 Acts::HashedString key,
581 const std::any& src_ptr) {
582 INSPECTCALL(
"copy dynamic decoration of key " << key <<
" destination MTJ has " <<
m_decorations.size() <<
" decorations");
584 INSPECTCALL(
"checking for destination of dynamic decoration " << d.name <<
" hash " << d.hash <<
" while looking for the key " << key);
590 throw std::invalid_argument(
"MultiTrajectory::copyDynamicFrom_impl no such decoration in destination MTJ " + std::to_string(key));
594 std::vector<Acts::HashedString> keys;
596 keys.push_back(d.hash);
597 INSPECTCALL(
"collecting dynamic decoration " << d.name <<
" hash " << d.hash);
650 if (inTrackState.has_value())
651 return inTrackState.value();
653 using namespace Acts::HashedStringLiteral;
654 if (key ==
"uncalibratedSourceLink"_hash) {
668 using namespace Acts::HashedStringLiteral;
670 case "previous"_hash:
676 case "pathLength"_hash:
678 case "predicted"_hash:
680 case "filtered"_hash:
682 case "smoothed"_hash:
684 case "jacobian"_hash:
686 case "projector"_hash: {
689 case "calibrated"_hash: {
692 case "calibratedCov"_hash: {
697 case "typeFlags"_hash:
706 throw std::runtime_error(
"MultiTrajectory::component_impl no such component " + std::to_string(key));
712 Acts::HashedString key)
const {
713 using namespace Acts::HashedStringLiteral;
716 case "previous"_hash:
719 case "pathLength"_hash:
720 case "predicted"_hash:
721 case "filtered"_hash:
722 case "smoothed"_hash:
723 case "jacobian"_hash:
724 case "projector"_hash:
725 case "uncalibratedSourceLink"_hash:
726 case "calibrated"_hash:
727 case "calibratedCov"_hash:
729 case "typeFlags"_hash:
756 std::vector<Acts::HashedString> keys;
758 keys.push_back(d.hash);
775 m_surfaces[i] = geo->findSurface(Acts::GeometryIdentifier{geoID});
788 if ( istate >=
m_surfaces.size() )
throw std::out_of_range(
"MultiTrajectory index " + std::to_string(istate) +
" out of range " + std::to_string(
m_surfaces.size()) +
" when accessing reference surface");
792typename Acts::SourceLink
804 return Acts::SourceLink( ptr );
809typename Acts::SourceLink
821 return Acts::SourceLink( ptr );
const T * to_const_ptr(const std::unique_ptr< T > &ptr)
constexpr uint64_t InvalidGeoID
#define INSPECTCALL(_INFO)
std::vector< std::optional< Acts::SourceLink > > m_uncalibratedSourceLinks
bool has_impl(Acts::HashedString key, ActsTrk::IndexType istate) const
const DataLink< xAOD::TrackParametersAuxContainer > m_trackParametersAux
Acts::SourceLink getUncalibratedSourceLink_impl(ActsTrk::IndexType istate) const
const DataLink< xAOD::TrackMeasurementAuxContainer > m_trackMeasurementsAux
std::vector< ActsTrk::detail::Decoration > m_decorations
xAOD::TrackStateContainer m_trackStatesIface
const DataLink< xAOD::TrackStateAuxContainer > m_trackStatesAux
std::vector< Acts::HashedString > dynamicKeys_impl() const
std::vector< std::optional< Acts::SourceLink > > m_calibratedSourceLinks
std::vector< StoredSurface > m_surfaces
ActsTrk::IndexType calibratedSize_impl(ActsTrk::IndexType istate) const
std::any component_impl(Acts::HashedString key, ActsTrk::IndexType istate) const
void moveSurfaces(const ActsTrk::MutableMultiTrajectory *mtj)
reuse surfaces from MutableMultiTrajectory
const Acts::Surface * referenceSurface_impl(IndexType) const
const DataLink< xAOD::TrackSurfaceAuxContainer > m_trackSurfacesAux
const DataLink< xAOD::TrackJacobianAuxContainer > m_trackJacobiansAux
MultiTrajectory(DataLink< xAOD::TrackStateAuxContainer > trackStates, DataLink< xAOD::TrackParametersAuxContainer > trackParameters, DataLink< xAOD::TrackJacobianAuxContainer > trackJacobians, DataLink< xAOD::TrackMeasurementAuxContainer > trackMeasurements, DataLink< xAOD::TrackSurfaceAuxContainer > trackSurfaces)
void fillSurfaces(const Acts::TrackingGeometry *geo)
Fill surfaces either from persistency or from geometry If the surfaces are already there it means tha...
void moveLinks(const ActsTrk::MutableMultiTrajectory *mtj)
bool hasColumn_impl(Acts::HashedString key) const
Athena implementation of ACTS::MultiTrajectory (ReadWrite version) The data is stored in 4 external b...
std::vector< StoredSurface > m_surfaces
static const std::set< std::string > s_staticVariables
GeometryContext m_geoContext
std::vector< std::optional< Acts::SourceLink > > m_calibratedSourceLinks
size_t m_trackMeasurementsSize
bool has_impl(Acts::HashedString key, ActsTrk::IndexType istate) const
checks if given state has requested component
std::vector< ActsTrk::detail::Decoration > m_decorations
Acts::SourceLink getUncalibratedSourceLink_impl(ActsTrk::IndexType istate) const
Implementation of uncalibrated link fetch.
void setReferenceSurface_impl(IndexType, std::shared_ptr< const Acts::Surface >)
std::unique_ptr< xAOD::TrackParametersAuxContainer > m_trackParametersAux
ActsTrk::IndexType addTrackState_impl(Acts::TrackStatePropMask mask, ActsTrk::IndexType iprevious)
Add state with stograge for data that depends on the mask.
void unset_impl(Acts::TrackStatePropMask target, ActsTrk::IndexType istate)
unsets a given state
std::any component_impl(Acts::HashedString key, ActsTrk::IndexType istate) const
Access component by key.
MutableMultiTrajectory()
Construct a new Multi Trajectory object owning backends.
size_t m_trackParametersSize
xAOD::TrackStateContainer m_trackStatesIface
std::vector< Acts::HashedString > dynamicKeys_impl() const
returns the keys of all the dynamic columns
std::unique_ptr< xAOD::TrackStateAuxContainer > m_trackStatesAux
std::unique_ptr< xAOD::TrackSurfaceAuxContainer > m_surfacesBackendAux
const Acts::Surface * referenceSurface_impl(IndexType) const
std::vector< std::optional< Acts::SourceLink > > m_uncalibratedSourceLinks
std::unique_ptr< xAOD::TrackMeasurementAuxContainer > m_trackMeasurementsAux
void addTrackStateComponents_impl(ActsTrk::IndexType istate, Acts::TrackStatePropMask mask)
Add state components for the given mask.
void copyDynamicFrom_impl(ActsTrk::IndexType istate, Acts::HashedString key, const std::any &src_ptr)
copy dynamic data from another MTJ
std::unique_ptr< xAOD::TrackSurfaceContainer > m_surfacesBackend
bool has_backends() const
checks if the backends are connected (i.e.
void shareFrom_impl(ActsTrk::IndexType iself, ActsTrk::IndexType iother, Acts::TrackStatePropMask shareSource, Acts::TrackStatePropMask shareTarget)
shares from a given state
ActsTrk::IndexType calibratedSize_impl(ActsTrk::IndexType istate) const
Implementation of calibrated size.
size_t m_trackJacobiansSize
std::unique_ptr< xAOD::TrackJacobianAuxContainer > m_trackJacobiansAux
void setUncalibratedSourceLink_impl(ActsTrk::IndexType istate, const Acts::SourceLink &sourceLink)
Implementation of uncalibrated link insertion.
void clear_impl()
clears backends decoration columns are still declared
Object reference supporting deferred reading from StoreGate.
const_pointer cptr() const
Dereference the link.
Helper class to provide constant type-safe access to aux data.
Helper class to provide type-safe access to aux data.
span getDecorationSpan(const AuxVectorData &container) const
Get a span over the auxilary data array.
std::vector< TrackStateIndexType > measDim
std::vector< TrackStateIndexType > filtered
std::vector< TrackStateIndexType > calibrated
std::vector< TrackStateIndexType > smoothed
std::vector< TrackStateIndexType > predicted
std::vector< TrackStateIndexType > jacobian
std::vector< TrackStateIndexType > previous
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
std::vector< Decoration > restoreDecorations(const SG::IConstAuxStore *container, const std::set< std::string > &staticVariables)
void encodeSurface(xAOD::TrackSurfaceAuxContainer *backend, size_t index, const Acts::Surface *surface, const Acts::GeometryContext &geoContext)
Prepares persistifiable representation of surface into xAOD::TrackSurface object.
std::shared_ptr< const Acts::Surface > decodeSurface(const xAOD::TrackSurface *backend)
Creates transient Acts Surface objects given a surface backend implementation should be exact mirror ...
std::variant< const Acts::Surface *, std::shared_ptr< const Acts::Surface > > StoredSurface
const xAOD::UncalibratedMeasurement * ATLASUncalibSourceLink
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
TrackStateAuxContainer_v1 TrackStateAuxContainer
TrackSurface_v1 TrackSurface
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.