27#include "Acts/TrackFinding/TrackStateCreator.hpp"
28#include "Acts/Surfaces/PlaneSurface.hpp"
29#include "Acts/Surfaces/RectangleBounds.hpp"
30#include "Acts/Utilities/VectorHelpers.hpp"
35#include "GaudiKernel/PhysicalConstants.h"
81 auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
82 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry =
m_trackingGeometryTool->trackingGeometry();
85 detail::Navigator::Config cfg{trackingGeometry};
86 cfg.resolvePassive =
true;
87 cfg.resolveMaterial =
true;
88 cfg.resolveSensitive =
true;
96 Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg(std::vector<double>({0, 4}));
97 trackSelectorCfg.cutSets[0].ptMin = 500;
98 trackSelectorCfg.cutSets[0].ptMax = 1000000;
99 trackSelectorCfg.cutSets[0].minMeasurements = 1;
100 trackSelectorCfg.cutSets[0].maxHoles = 4;
101 trackSelectorCfg.cutSets[0].maxOutliers = 4;
102 trackSelectorCfg.cutSets[0].maxHolesAndOutliers = 4;
103 trackSelectorCfg.cutSets[0].maxSharedHits = 4;
104 trackSelectorCfg.cutSets[0].maxChi2 = 10000000.0;
109 std::move(extrapolator),
112 Acts::TrackSelector{trackSelectorCfg}};
114 m_trackFinder = std::make_unique<detail::CKF_config>(std::move(ckfConfig));
116 return StatusCode::SUCCESS;
171 std::unordered_set<uint32_t> hgtdVolumes {};
172 std::unordered_map<uint32_t, std::unordered_set<uint32_t>> hgtdLayers {};
175 const Acts::Surface* surface =
m_surfAcc.get(cluster);
178 Acts::GeometryIdentifier geoID = surface->geometryId();
179 uint32_t vol = geoID.volume();
180 uint32_t layer = geoID.layer();
182 hgtdVolumes.insert(vol);
183 hgtdLayers[vol].insert(layer);
187 ATH_MSG_ERROR(
"Failed to retrieve surface for cluster " << cluster->index());
188 return StatusCode::FAILURE;
192 ATH_MSG_DEBUG(
"Found " << hgtdVolumes.size() <<
" different HGTD volumes");
193 for (std::uint32_t vol : hgtdVolumes) {
194 ATH_MSG_DEBUG(
"HGTD Volume " << vol <<
" has " << hgtdLayers[vol].
size() <<
" layers:");
195 for (std::uint32_t lyr : hgtdLayers[vol]) {
204 using DefaultTrackStateCreator = Acts::TrackStateCreator<ActsTrk::detail::UncalibSourceLinkAccessor::Iterator,detail::RecoTrackContainer>;
207 DefaultTrackStateCreator::SourceLinkAccessor slAccessorDelegate;
213 <<
" source links from measurements in "
218 {uncalibratedMeasurementContainer},
222 Acts::PropagatorPlainOptions plainOptions(geoContext, mfContext);
223 plainOptions.direction = Acts::Direction::Forward();
239 defaultTrackStateCreator.sourceLinkAccessor = slAccessorDelegate;
240 defaultTrackStateCreator.calibrator.template connect<&detail::OnTrackCalibrator<detail::RecoTrackStateContainer>::calibrate>(&calibrator);
242 options.extensions.createTrackStates.template connect<
243 &DefaultTrackStateCreator::createTrackStates>(&defaultTrackStateCreator);
254 std::optional<ActsTrk::TrackContainer::ConstTrackProxy> optional_track =
getActsTrack(*trackParticle);
255 if (!optional_track.has_value()) {
256 ATH_MSG_ERROR(
"No valid ACTS track associated with TrackParticle " << trackParticle->index());
257 return StatusCode::FAILURE;
260 const ActsTrk::TrackContainer::ConstTrackProxy& track = optional_track.value();
262 Acts::VectorTrackContainer trackBackend;
263 Acts::VectorMultiTrajectory trackStateBackend;
267 float trackEta = Acts::VectorHelpers::eta(track.momentum());
274 <<
"], skipping extension ------ !!!!!");
277 layerHasExtensionHandle(*trackParticle) = trackData.
hasClusterVec;
278 layerExtensionChi2Handle(*trackParticle) = trackData.
chi2Vec;
279 layerClusterRawTimeHandle(*trackParticle) = trackData.
rawTimeVec;
280 layerClusterTimeHandle(*trackParticle) = trackData.
timeVec;
281 extrapXHandle(*trackParticle) = trackData.
extrapX;
282 extrapYHandle(*trackParticle) = trackData.
extrapY;
283 numHGTDHitsHandle(*trackParticle) = trackData.
numHGTDHits;
288 float trackpT = track.transverseMomentum();
289 float trackPhi = track.phi();
290 float trackNmeasurements = track.nMeasurements();
292 ATH_MSG_DEBUG(
"TrackParticle " << trackParticle->index() <<
" has ACTS track with eta: " << trackEta <<
", phi = " << trackPhi <<
" pT: " << trackpT <<
" and nMeasurements: " << trackNmeasurements);
297 ATH_MSG_ERROR(
"Problem finding last measurement state for acts track");
298 return StatusCode::FAILURE;
300 const Acts::BoundTrackParameters lastMeasurementStateParameters = track.createParametersFromState(*
lastMeasurementState);
303 const Acts::Surface& refSurface = track.referenceSurface();
304 const Acts::BoundTrackParameters parametersAtRefSurface(refSurface.getSharedPtr(),
307 track.particleHypothesis());
309 ATH_MSG_DEBUG(
"Initial track parameters for extension - lastMeasurementStateParameters:");
310 ATH_MSG_DEBUG(
" - eta: " << -1 * log(tan(lastMeasurementStateParameters.theta() * 0.5)));
311 ATH_MSG_DEBUG(
" - phi: " << lastMeasurementStateParameters.phi());
312 ATH_MSG_DEBUG(
" - pT: " << std::abs(1./lastMeasurementStateParameters.qOverP() * std::sin(lastMeasurementStateParameters.theta())));
313 ATH_MSG_DEBUG(
" - theta: " << lastMeasurementStateParameters.theta());
314 ATH_MSG_DEBUG(
" - qOverP: " << lastMeasurementStateParameters.qOverP());
315 ATH_MSG_DEBUG(
" - covariance exists: " << (lastMeasurementStateParameters.covariance().has_value() ?
"yes" :
"no"));
318 auto result =
m_trackFinder->ckf.findTracks(lastMeasurementStateParameters, options,tracksContainerTemp);
320 ATH_MSG_DEBUG(
"Built " << tracksContainerTemp.size() <<
" tracks from it");
322 for (
const detail::RecoTrackContainer::TrackProxy trackProxy : tracksContainerTemp) {
327 layerHasExtensionHandle(*trackParticle) = trackData.
hasClusterVec;
328 layerExtensionChi2Handle(*trackParticle) = trackData.
chi2Vec;
329 layerClusterRawTimeHandle(*trackParticle) = trackData.
rawTimeVec;
330 layerClusterTimeHandle(*trackParticle) = trackData.
timeVec;
331 extrapXHandle(*trackParticle) = trackData.
extrapX;
332 extrapYHandle(*trackParticle) = trackData.
extrapY;
333 numHGTDHitsHandle(*trackParticle) = trackData.
numHGTDHits;
337 return StatusCode::SUCCESS;
349 ATH_MSG_DEBUG(
"Measurements (HGTD only) size: " << HGTDClustersHandle->size());
359 const Acts::Surface* surface =
m_surfAcc.get(cluster);
360 if (not surface)
continue;
364 double clusterTime = cluster->time();
373 mon_cluster_x, mon_cluster_y, mon_cluster_z,
382 return StatusCode::SUCCESS;
386 const EventContext& ctx,
388 const detail::RecoTrackContainer::TrackProxy& trackProxy)
const {
400 std::size_t nMeasurements = 0;
401 std::size_t nHoles = 0;
402 std::size_t nOutliers = 0;
403 std::size_t nHGTDHits = 0;
405 std::vector<char> hasHitInLayer = {
false,
false,
false,
false};
406 std::vector<float> chi2PerLayer = {0.0, 0.0, 0.0, 0.0};
407 std::vector<float> timePerLayer = {0.0, 0.0, 0.0, 0.0};
408 std::vector<float> rawTimePerLayer = {0.0, 0.0, 0.0, 0.0};
414 bool foundExtrapolation =
false;
416 trackProxy.container().trackStateContainer().visitBackwards(
417 trackProxy.tipIndex(),
418 [&](
const auto& state) {
419 auto flags = state.typeFlags();
420 if (flags.isHole()) {
422 }
else if (flags.isOutlier()) {
424 }
else if (flags.isMeasurement()) {
429 const auto& surface = state.referenceSurface();
430 Acts::GeometryIdentifier geoID = surface.geometryId();
432 if (isHGTDSurface(geoID)) {
433 std::size_t layerIndex = getHGTDLayerIndex(geoID);
435 const auto& calibrated = state.template calibrated<3>();
436 const auto& predicted = state.predicted();
437 const auto& calibCov = state.template calibratedCovariance<3>();
441 Eigen::Vector2d residual2d;
442 residual2d(0) = calibrated(0) - predicted(Acts::eBoundLoc0);
443 residual2d(1) = calibrated(1) - predicted(Acts::eBoundLoc1);
446 AmgSymMatrix(2) cov_2d{calibCov.template block<2,2>(0,0)};
449 const auto& predictedCov = state.predictedCovariance();
450 AmgSymMatrix(2) predicted_cov_2d{predictedCov.template block<2,2>(0,0)};
453 AmgSymMatrix(2) residual_cov = cov_2d + predicted_cov_2d;
459 if (residual_cov.determinant() != 0)
461 chi2 = residual2d.transpose() * residual_cov.inverse() * residual2d;
468 if (layerIndex < 4) {
470 hasHitInLayer[layerIndex] = true;
471 chi2PerLayer[layerIndex] =chi2/ndf;
475 float rawTime = 0.0f;
476 float calibratedTime = 0.0f;
478 if (state.hasCalibrated()) {
481 const auto& calibrated = state.template calibrated<3>();
482 calibratedTime = static_cast<float>(calibrated(2));
483 ATH_MSG_DEBUG(
"Got time from calibrated<3>: " << calibratedTime);
484 } catch (const std::exception& e) {
485 ATH_MSG_WARNING(
"Failed to extract time from calibrated<3>: " << e.what());
491 const xAOD::HGTDCluster* cluster = getHGTDClusterFromState(ctx, state);
494 rawTime = cluster->time();
495 ATH_MSG_DEBUG(
"Got raw time from cluster: " << rawTime);
497 ATH_MSG_WARNING(
"Could not get cluster from state");
501 rawTimePerLayer[layerIndex] = rawTime;
505 auto [correctedTime, timeErr] = correctTOF(
510 acts_tracking_geometry,
512 timePerLayer[layerIndex] = correctedTime;
513 ATH_MSG_DEBUG(
"Applied TOF correction: " << calibratedTime <<
" -> " << correctedTime);
516 timePerLayer[layerIndex] = calibratedTime;
517 ATH_MSG_DEBUG(
"No cluster found for TOF correction, using calibrated time: " << calibratedTime);
522 ATH_MSG_DEBUG(
"State does not have calibrated data");
526 if (!foundExtrapolation) {
527 foundExtrapolation = true;
528 if (state.hasPredicted()) {
530 const auto& predicted = state.predicted();
531 Acts::Vector2 localPos(predicted[Acts::eBoundLoc0], predicted[Acts::eBoundLoc1]);
534 Acts::Vector3 globalPos = surface.localToGlobal(
537 Acts::Vector3::Zero());
539 extrapX = globalPos.x();
540 extrapY = globalPos.y();
541 extrapZ = globalPos.z();
543 ATH_MSG_DEBUG(
"Extrapolated position (predicted) at HGTD: x=" << extrapX
544 <<
", y=" << extrapY <<
", z=" << extrapZ);
547 Acts::Vector3 globalPos = surface.center(geoContext);
548 extrapX = globalPos.x();
549 extrapY = globalPos.y();
550 extrapZ = globalPos.z();
552 ATH_MSG_DEBUG(
"Extrapolated position (surface center) at HGTD: x=" << extrapX
553 <<
", y=" << extrapY <<
", z=" << extrapZ);
557 ATH_MSG_DEBUG(
"Found HGTD hit on layer " << layerIndex
558 <<
", chi2=" << chi2PerLayer[layerIndex]
559 <<
", time=" << timePerLayer[layerIndex]);
569 if (nHGTDHits == 0 && !foundExtrapolation) {
572 if (getExtrapolationPosition(ctx, trackProxy, extrapX, extrapY, extrapZ)) {
573 ATH_MSG_DEBUG(
"!!! Didn't find any HGTD hits but calculated extrapolation position: x=" << extrapX
574 <<
", y=" << extrapY <<
", z=" << extrapZ);
575 foundExtrapolation =
true;
580 <<
" nMeasurements=" << nMeasurements
581 <<
" nHGTDHits=" << nHGTDHits
582 <<
" nHoles=" << nHoles
583 <<
" nOutliers=" << nOutliers
584 <<
" extrapolation found: " << (foundExtrapolation ?
"yes" :
"no"));
588 data.hasClusterVec = std::move(hasHitInLayer);
589 data.chi2Vec = std::move(chi2PerLayer);
590 data.timeVec = std::move(timePerLayer);
591 data.rawTimeVec = std::move(rawTimePerLayer);
592 data.extrapX = extrapX;
593 data.extrapY = extrapY;
594 data.extrapZ = extrapZ;
595 data.numHGTDHits = nHGTDHits;
602 std::uint32_t volume = geoID.volume();
603 std::uint32_t layer = geoID.layer();
606 bool isPositiveEndcap = (volume == 25);
607 bool isNegativeEndcap = (volume == 2);
610 if (isPositiveEndcap) {
619 }
else if (isNegativeEndcap) {
634 const EventContext& ctx,
635 const detail::RecoTrackContainer::TrackProxy& track,
636 float&
x,
float&
y,
float&
z)
const {
644 bool foundHGTDSurface =
false;
648 track.container().trackStateContainer().visitBackwards(
650 [
this, &foundHGTDSurface, &
x, &
y, &
z, geoContext](
const auto& state) {
652 if (foundHGTDSurface || !state.hasReferenceSurface()) {
656 const auto& surface = state.referenceSurface();
657 Acts::GeometryIdentifier geoID = surface.geometryId();
662 if (state.hasPredicted()) {
664 const auto& predicted = state.predicted();
668 Acts::Vector2 localPos(predicted[Acts::eBoundLoc0], predicted[Acts::eBoundLoc1]);
671 Acts::Vector3 globalPos = surface.localToGlobal(
674 Acts::Vector3::Zero());
681 ATH_MSG_DEBUG(
"Predicted position on HGTD surface: (" <<
x <<
", " <<
y <<
", " <<
z <<
")");
682 foundHGTDSurface =
true;
685 Acts::Vector3 globalPos = surface.center(geoContext);
690 ATH_MSG_DEBUG(
"Fallback to surface center for HGTD: (" <<
x <<
", " <<
y <<
", " <<
z <<
")");
691 foundHGTDSurface =
true;
696 return foundHGTDSurface;
702 std::uint32_t volume = geoID.volume();
703 std::uint32_t layer = geoID.layer();
706 if (volume == 2 || volume == 25) {
708 if (layer == 2 || layer == 4 || layer == 6 || layer == 8) {
722 float measuredTimeErr,
723 const Acts::TrackingGeometry* ,
724 const Acts::GeometryContext& geoContext)
const {
728 if (!trackParticle || !cluster) {
730 return {measuredTime, measuredTimeErr};
734 const Acts::Surface* surface =
nullptr;
737 }
catch (
const std::exception& e) {
739 return {measuredTime, measuredTimeErr};
743 ATH_MSG_WARNING(
"Could not determine surface for HGTD cluster with id "
745 return {measuredTime, measuredTimeErr};
749 Acts::Vector3 globalHitPos;
754 globalHitPos = surface->localToGlobal(
756 Acts::Vector2(localPos[0], localPos[1]),
757 Acts::Vector3::Zero());
758 }
catch (
const std::exception& e) {
761 globalHitPos = surface->center(geoContext);
773 double d0 = trackParticle->
d0();
774 double z0 = trackParticle->
z0();
775 double phi0 = trackParticle->
phi0();
777 Amg::Vector3D trackOrigin(-d0 * std::sin(phi0), d0 * std::cos(phi0), z0);
778 ATH_MSG_DEBUG(
"Track perigee: d0=" << d0 <<
", z0=" << z0 <<
", phi0=" << phi0);
779 ATH_MSG_DEBUG(
"Track origin (perigee): (" << trackOrigin.x() <<
", "
780 << trackOrigin.y() <<
", " << trackOrigin.z() <<
")");
783 float dx = globalHitPos.x() - trackOrigin.x();
784 float dy = globalHitPos.y() - trackOrigin.y();
785 float dz = globalHitPos.z() - trackOrigin.z();
788 float distance = std::sqrt(dx*dx + dy*dy + dz*dz);
789 float tof = distance / Gaudi::Units::c_light;
792 float correctedTime = measuredTime - tof;
795 << trackOrigin.y() <<
", " << trackOrigin.z() <<
")");
797 << globalHitPos.y() <<
", " << globalHitPos.z() <<
")");
798 ATH_MSG_DEBUG(
"Distance = " << distance <<
" mm, TOF = " << tof
799 <<
" ns, Corrected time = " << correctedTime);
801 return {correctedTime, measuredTimeErr};
805 if (state.hasUncalibratedSourceLink()) {
807 assert( uncalib_cluster !=
nullptr);
815 ATH_MSG_DEBUG(
"Source link contains non-HGTD measurement type: " <<
static_cast<int>(clusterType));
819 if (state.hasReferenceSurface()) {
820 const auto& surface = state.referenceSurface();
821 Acts::GeometryIdentifier geoID = surface.geometryId();
825 ATH_MSG_DEBUG(
"This is an HGTD surface with ID: " << geoID.volume() <<
":" << geoID.layer());
838 Acts::Vector3 statePos = surface.center(geoContext);
842 double minDistance = 100.0;
846 const Acts::Surface* clusterSurface =
m_surfAcc.get(cluster);
848 if (!clusterSurface)
continue;
851 Acts::GeometryIdentifier clusterGeoID = clusterSurface->geometryId();
852 if (clusterGeoID.volume() == geoID.volume() && clusterGeoID.layer() == geoID.layer()) {
854 Acts::Vector3 clusterPos = clusterSurface->center(geoContext);
857 double dx = clusterPos.x() - statePos.x();
858 double dy = clusterPos.y() - statePos.y();
859 double distance = std::sqrt(dx*dx + dy*dy);
862 if (distance < minDistance) {
863 minDistance = distance;
864 closestCluster = cluster;
865 ATH_MSG_DEBUG(
"Found possible cluster match at distance " << distance <<
" mm");
870 if (closestCluster) {
871 ATH_MSG_DEBUG(
"Found closest cluster at distance " << minDistance <<
" mm");
872 return closestCluster;
879 ATH_MSG_DEBUG(
"State doesn't have uncalibrated source link");
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration.
Header file to be included by clients of the Monitored infrastructure.
Handle class for reading a decoration on an object.
Handle class for adding a decoration to an object.
size_t size() const
Number of registered mappings.
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
bool isHGTDSurface(const Acts::GeometryIdentifier &geoID) const
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerName
StatusCode collectMeasurements(const EventContext &context, detail::TrackFindingMeasurements &measurements) const
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_layerClusterRawTimeKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_numHGTDHitsKey
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
SG::ReadHandleKey< xAOD::UncalibratedMeasurementContainer > m_uncalibratedMeasurementContainerKey_HGTD
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_layerExtensionChi2Key
bool getExtrapolationPosition(const EventContext &ctx, const detail::RecoTrackContainer::TrackProxy &track, float &x, float &y, float &z) const
Gaudi::Property< float > m_minEtaAcceptance
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_layerHasExtensionKey
Acts::CombinatorialKalmanFilterOptions< detail::RecoTrackContainer > CKFOptions
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_extrapYKey
ToolHandle< ActsTrk::IExtrapolationTool > m_extrapolationTool
Acts::CalibrationContext m_calibrationContext
const Acts::Logger & logger() const
Private access to the logger.
std::pair< float, float > correctTOF(const xAOD::TrackParticle *trackParticle, const xAOD::HGTDCluster *cluster, float measuredTime, float measuredTimeErr, const Acts::TrackingGeometry *trackingGeometry, const Acts::GeometryContext &geoContext) const
std::size_t getHGTDLayerIndex(const Acts::GeometryIdentifier &geoID) const
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_actsTrackLinkKey
virtual StatusCode initialize() override
Gaudi::Property< float > m_maxEtaAcceptance
const xAOD::HGTDCluster * getHGTDClusterFromState(const EventContext &ctx, const ActsTrk::detail::RecoConstTrackStateContainerProxy &state) const
ToolHandle< ActsTrk::IPixelOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_pixelCalibTool
std::unique_ptr< detail::CKF_config > m_trackFinder
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_layerClusterTimeKey
std::unique_ptr< const Acts::Logger > m_logger
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_extrapXKey
ActsTrk::detail::xAODUncalibMeasSurfAcc m_surfAcc
ToolHandle< GenericMonitoringTool > m_monTool
ToolHandle< ActsTrk::IStripOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_stripCalibTool
ToolHandle< ActsTrk::IHGTDOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_hgtdCalibTool
SG::ReadHandleKey< xAOD::HGTDClusterContainer > m_HGTDClusterContainerName
virtual StatusCode execute(const EventContext &) const override
ToolHandle< ActsTrk::TrackStatePrinterTool > m_trackStatePrinter
TrackExtensionData processTrackExtension(const EventContext &ctx, const xAOD::TrackParticle *trackParticle, const detail::RecoTrackContainer::TrackProxy &trackProxy) const
std::pair< Iterator, Iterator > range(const Acts::Surface &surface) const
Inner detector / ITk calibrator implementation used in the KalmanFilterTool.
const std::vector< std::size_t > & measurementOffsets() const
void addMeasurements(std::size_t typeIndex, const xAOD::UncalibratedMeasurementContainer &clusterContainer, const DetectorElementToActsGeometryIdMap &detectorElementToGeoid, const MeasurementIndex *measurementIndex=nullptr)
const MeasurementRangeList & measurementRanges() const
static const xAOD::UncalibratedMeasurement * unpack(const Acts::SourceLink &sl)
Helper method to unpack an Acts source link to an uncalibrated measurement.
Helper class to access the Acts::surface associated with an Uncalibrated xAOD measurement.
bool msgLvl(const MSG::Level lvl) const
size_type size() const noexcept
Returns the number of elements in the collection.
Group of local monitoring quantities and retain correlation when filling histograms
Declare a monitored scalar variable.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
Handle class for adding a decoration to an object.
float z0() const
Returns the parameter.
float d0() const
Returns the parameter.
float phi0() const
Returns the parameter, which has range to .
DetectorIdentType identifier() const
Returns the full Identifier of the measurement.
ConstVectorMap< N > localPosition() const
Returns the local position of the measurement.
Acts::Propagator< Stepper, Navigator > Propagator
Acts::SympyStepper Stepper
Adapted from Acts Examples/Algorithms/TrackFinding/src/TrackFindingAlgorithmFunction....
Acts::Navigator Navigator
GenUncalibSourceLinkAccessor< MeasurementRangeList > UncalibSourceLinkAccessor
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
RecoTrackStateContainer::ConstTrackStateProxy RecoConstTrackStateContainerProxy
Acts::CombinatorialKalmanFilter< Propagator, RecoTrackContainer > CKF
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
std::optional< ActsTrk::TrackContainer::ConstTrackStateProxy > lastMeasurementState(const xAOD::TrackParticle &trkPart, const bool skipOutlier=true)
Returns the track state proxy corresponding to the last measurement on track.
std::optional< ActsTrk::TrackContainer::ConstTrackProxy > getActsTrack(const xAOD::TrackParticle &trkPart)
Return the proxy to the Acts track from which the track particle was made frome.
Acts::TrackStateCreator< ActsTrk::detail::UncalibSourceLinkAccessor::Iterator, detail::RecoTrackContainer > DefaultTrackStateCreator
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Eigen::Matrix< double, 3, 1 > Vector3D
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
HGTDClusterContainer_v1 HGTDClusterContainer
Define the version of the HGTD cluster container.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
UncalibMeasType
Define the type of the uncalibrated measurement.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
UncalibratedMeasurementContainer_v1 UncalibratedMeasurementContainer
Define the version of the uncalibrated measurement container.
HGTDCluster_v1 HGTDCluster
Define the version of the pixel cluster class.
Data structure to hold HGTD track extension results Contains information about hits,...
std::vector< float > chi2Vec
Chi2 contribution per HGTD layer.
std::vector< float > timeVec
TOF-corrected time per HGTD layer.
float extrapY
Extrapolated Y position at HGTD.
float extrapX
Extrapolated X position at HGTD.
std::vector< float > rawTimeVec
Raw measured time per HGTD layer.
int numHGTDHits
Total number of HGTD hits on extended track.
std::vector< char > hasClusterVec
Whether track has cluster in each HGTD layer.