ATLAS Offline Software
Loading...
Searching...
No Matches
ActsTrk::HGTDTrackExtensionAlg Class Reference

#include <HGTDTrackExtensionAlg.h>

Inheritance diagram for ActsTrk::HGTDTrackExtensionAlg:
Collaboration diagram for ActsTrk::HGTDTrackExtensionAlg:

Classes

struct  TrackExtensionData
 Data structure to hold HGTD track extension results Contains information about hits, timing, and extrapolation for each HGTD layer. More...

Public Types

using CKFOptions = Acts::CombinatorialKalmanFilterOptions<detail::RecoTrackContainer>

Public Member Functions

virtual ~HGTDTrackExtensionAlg ()=default
virtual StatusCode initialize () override
virtual StatusCode execute (const EventContext &) const override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

xAOD::TrackParticleCKFTrackExtension (const Acts::BoundTrackParameters *parameters)
const Acts::Logger & logger () const
 Private access to the logger.
StatusCode collectMeasurements (const EventContext &context, detail::TrackFindingMeasurements &measurements) const
TrackExtensionData processTrackExtension (const EventContext &ctx, const xAOD::TrackParticle *trackParticle, const detail::RecoTrackContainer::TrackProxy &trackProxy) const
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
const xAOD::HGTDClustergetHGTDClusterFromState (const EventContext &ctx, const ActsTrk::detail::RecoConstTrackStateContainerProxy &state) const
std::size_t getHGTDLayerIndex (const Acts::GeometryIdentifier &geoID) const
bool isHGTDSurface (const Acts::GeometryIdentifier &geoID) const
bool getExtrapolationPosition (const EventContext &ctx, const detail::RecoTrackContainer::TrackProxy &track, float &x, float &y, float &z) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< xAOD::TrackParticleContainerm_trackParticleContainerName {this, "TrackParticleContainerName", "", "Name of the TrackParticle container"}
SG::ReadHandleKey< xAOD::HGTDClusterContainerm_HGTDClusterContainerName {this, "HGTDClusterContainerName", "", "the HGTD clusters"}
SG::WriteDecorHandleKey< xAOD::TrackParticleContainerm_numHGTDHitsKey {this, "numHGTDHits", m_trackParticleContainerName, "numHGTDHits", "Number of HGTD hits on the track extension"}
SG::WriteDecorHandleKey< xAOD::TrackParticleContainerm_layerHasExtensionKey { this, "HGTD_has_extension", m_trackParticleContainerName, "HGTD_has_extension", "Decoration for layer extension" }
SG::WriteDecorHandleKey< xAOD::TrackParticleContainerm_layerExtensionChi2Key { this, "HGTD_extension_chi2", m_trackParticleContainerName, "HGTD_extension_chi2", "Decoration for chi2 of extension" }
SG::WriteDecorHandleKey< xAOD::TrackParticleContainerm_layerClusterRawTimeKey { this, "HGTD_cluster_raw_time", m_trackParticleContainerName, "HGTD_cluster_raw_time", "Decoration for raw time of cluster" }
SG::WriteDecorHandleKey< xAOD::TrackParticleContainerm_layerClusterTimeKey { this, "HGTD_cluster_time", m_trackParticleContainerName, "HGTD_cluster_time", "Decoration for cluster time" }
SG::WriteDecorHandleKey< xAOD::TrackParticleContainerm_extrapXKey { this, "HGTD_extrap_x", m_trackParticleContainerName, "HGTD_extrap_x", "Decoration for extrapolated X coordinate" }
SG::WriteDecorHandleKey< xAOD::TrackParticleContainerm_extrapYKey { this, "HGTD_extrap_y", m_trackParticleContainerName, "HGTD_extrap_y", "Decoration for extrapolated Y coordinate" }
SG::ReadDecorHandleKey< xAOD::TrackParticleContainerm_actsTrackLinkKey {this, "ActsTrackLink", m_trackParticleContainerName, "actsTrack", "Link to Acts track"}
Gaudi::Property< float > m_minEtaAcceptance {this, "MinEtaAcceptance", 2.38, "Minimum eta to consider a track for extension"}
Gaudi::Property< float > m_maxEtaAcceptance {this, "MaxEtaAcceptance", 4.00, "Maximum eta to consider a track for extension"}
ToolHandle< GenericMonitoringToolm_monTool {this, "MonTool", "", "Monitoring tool"}
PublicToolHandle< ActsTrk::ITrackingGeometryToolm_trackingGeometryTool {this, "TrackingGeometryTool", ""}
ToolHandle< ActsTrk::IExtrapolationToolm_extrapolationTool {this, "ExtrapolationTool", ""}
ToolHandle< ActsTrk::IPixelOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_pixelCalibTool {this, "PixelCalibrator", "", "Opt. pixel measurement calibrator"}
ToolHandle< ActsTrk::IStripOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_stripCalibTool {this, "StripCalibrator", "", "Opt. strip measurement calibrator"}
ToolHandle< ActsTrk::IHGTDOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_hgtdCalibTool {this, "HGTDCalibrator", "", "Opt. HGTD measurement calibrator"}
ToolHandle< ActsTrk::TrackStatePrinterToolm_trackStatePrinter {this, "TrackStatePrinter", "", "optional track state printer"}
ActsTrk::detail::xAODUncalibMeasSurfAcc m_surfAcc {}
SG::ReadHandleKey< xAOD::UncalibratedMeasurementContainerm_uncalibratedMeasurementContainerKey_HGTD {this, "UncalibratedMeasurementContainerKey_HGTD", "", "input cluster collections for HGTD"}
std::unique_ptr< const Acts::Logger > m_logger
std::unique_ptr< detail::CKF_configm_trackFinder
Acts::CalibrationContext m_calibrationContext
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 63 of file HGTDTrackExtensionAlg.h.

Member Typedef Documentation

◆ CKFOptions

using ActsTrk::HGTDTrackExtensionAlg::CKFOptions = Acts::CombinatorialKalmanFilterOptions<detail::RecoTrackContainer>

Definition at line 70 of file HGTDTrackExtensionAlg.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ ~HGTDTrackExtensionAlg()

virtual ActsTrk::HGTDTrackExtensionAlg::~HGTDTrackExtensionAlg ( )
virtualdefault

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

62{
63 return 0;
64}

◆ CKFTrackExtension()

xAOD::TrackParticle * ActsTrk::HGTDTrackExtensionAlg::CKFTrackExtension ( const Acts::BoundTrackParameters * parameters)
private

◆ collectMeasurements()

StatusCode ActsTrk::HGTDTrackExtensionAlg::collectMeasurements ( const EventContext & context,
detail::TrackFindingMeasurements & measurements ) const
private

Definition at line 349 of file HGTDTrackExtensionAlg.cxx.

350 {
351
352 SG::ReadHandle<xAOD::HGTDClusterContainer> HGTDClustersHandle = SG::makeHandle(m_HGTDClusterContainerName, context);
353 ATH_CHECK( HGTDClustersHandle.isValid() );
354 const xAOD::HGTDClusterContainer* HGTDClusters = HGTDClustersHandle.cptr();
355
356 ATH_MSG_DEBUG("Measurements (HGTD only) size: " << HGTDClustersHandle->size());
357
358 if (not m_monTool.empty()) {
359 {
360 auto mon_nclusters = Monitored::Scalar("n_hgtd_clusters", HGTDClusters->size());
361 auto mon = Monitored::Group(m_monTool, mon_nclusters);
362 }
363
364 // Add cluster position to monitoring tool
365 for (const xAOD::HGTDCluster* cluster : *HGTDClustersHandle) {
366 const Acts::Surface* surface = m_surfAcc.get(cluster);
367 if (not surface) continue;
368
369 Acts::Vector3 globalPos = surface->center(m_trackingGeometryTool->getGeometryContext(context).context());
370
371 // Get the time from local position (3rd coordinate)
372 auto localPosition = cluster->localPosition<3>(); // Get 3D local position
373 double clusterTime = localPosition[2]; // Time is in the third coordinate
374
375 ATH_MSG_DEBUG("HGTD Cluster: "<< Amg::toString(globalPos) );
376
377 auto mon_cluster_x = Monitored::Scalar("cluster_x", globalPos.x());
378 auto mon_cluster_y = Monitored::Scalar("cluster_y", globalPos.y());
379 auto mon_cluster_z = Monitored::Scalar("cluster_z", globalPos.z());
380 auto mon_cluster_t = Monitored::Scalar("cluster_t", clusterTime);
381 auto mon = Monitored::Group(m_monTool,
382 mon_cluster_x, mon_cluster_y, mon_cluster_z,
383 mon_cluster_t);
384 }
385 } // MONITORING
386
387 measurements.addMeasurements(0,
388 *HGTDClusters,
389 *m_trackingGeometryTool->surfaceIdMap());
390
391 return StatusCode::SUCCESS;
392}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
ActsTrk::detail::xAODUncalibMeasSurfAcc m_surfAcc
ToolHandle< GenericMonitoringTool > m_monTool
SG::ReadHandleKey< xAOD::HGTDClusterContainer > m_HGTDClusterContainerName
size_type size() const noexcept
Returns the number of elements in the collection.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
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.
HGTDCluster_v1 HGTDCluster
Define the version of the pixel cluster class.
Definition HGTDCluster.h:13

◆ correctTOF()

std::pair< float, float > ActsTrk::HGTDTrackExtensionAlg::correctTOF ( const xAOD::TrackParticle * trackParticle,
const xAOD::HGTDCluster * cluster,
float measuredTime,
float measuredTimeErr,
const Acts::TrackingGeometry * trackingGeometry,
const Acts::GeometryContext & geoContext ) const
private

Definition at line 733 of file HGTDTrackExtensionAlg.cxx.

739 {
740
741 ATH_MSG_DEBUG("Correcting input time: " << measuredTime);
742
743 if (!trackParticle || !cluster) {
744 ATH_MSG_WARNING("Null pointer provided to correctTOF");
745 return {measuredTime, measuredTimeErr}; // Return uncorrected values
746 }
747
748 // Get the surface for this HGTD cluster
749 const Acts::Surface* surface = nullptr;
750 try {
751 surface = m_surfAcc.get(cluster);
752 } catch (const std::exception& e) {
753 ATH_MSG_WARNING("Exception getting surface: " << e.what());
754 return {measuredTime, measuredTimeErr}; // Return uncorrected values
755 }
756
757 if (!surface) {
758 ATH_MSG_WARNING("Could not determine surface for HGTD cluster with id "
759 << cluster->identifier());
760 return {measuredTime, measuredTimeErr}; // Return uncorrected values
761 }
762
763 // Get the global position of the hit
764 Acts::Vector3 globalHitPos;
765 try {
766 // Try to get the cluster's local position
767 auto localPos = cluster->localPosition<3>();
768 // Transform to global coordinates
769 globalHitPos = surface->localToGlobal(
770 geoContext,
771 Acts::Vector2(localPos[0], localPos[1]),
772 Acts::Vector3::Zero());
773 } catch (const std::exception& e) {
774 ATH_MSG_WARNING("Failed to transform position: " << e.what());
775 // Fall back to surface center
776 globalHitPos = surface->center(geoContext);
777 }
778
779 // Get track origin (vertex position)
780 //option 1 - use beamspot
781 //Amg::Vector3D trackOrigin(trackParticle->vx(), trackParticle->vy(), trackParticle->vz());
782
783 //option 2 - use perigee - this is what is done in legacy code: https://gitlab.cern.ch/atlas/athena/-/blob/main/HighGranularityTimingDetector/HGTD_Reconstruction/HGTD_RecTools/src/StraightLineTOFcorrectionTool.cxx
784 // Get track origin from perigee parameters instead of vertex
785 // In ACTS, this is the d0 and z0 parameter with reference to the beamline
786
787 // Get the perigee position (the point of closest approach to the beamline)
788 double d0 = trackParticle->d0();
789 double z0 = trackParticle->z0();
790 double phi0 = trackParticle->phi0();
791
792 Amg::Vector3D trackOrigin(-d0 * std::sin(phi0), d0 * std::cos(phi0), z0);
793 ATH_MSG_DEBUG("Track perigee: d0=" << d0 << ", z0=" << z0 << ", phi0=" << phi0);
794 ATH_MSG_DEBUG("Track origin (perigee): (" << trackOrigin.x() << ", "
795 << trackOrigin.y() << ", " << trackOrigin.z() << ")");
796
797 // Calculate distance components
798 float dx = globalHitPos.x() - trackOrigin.x();
799 float dy = globalHitPos.y() - trackOrigin.y();
800 float dz = globalHitPos.z() - trackOrigin.z();
801
802 // Calculate distance and time of flight
803 float distance = std::sqrt(dx*dx + dy*dy + dz*dz);
804 float tof = distance / Gaudi::Units::c_light;
805
806 // Apply TOF correction
807 float correctedTime = measuredTime - tof;
808
809 ATH_MSG_DEBUG("Track origin: (" << trackOrigin.x() << ", "
810 << trackOrigin.y() << ", " << trackOrigin.z() << ")");
811 ATH_MSG_DEBUG("Hit position: (" << globalHitPos.x() << ", "
812 << globalHitPos.y() << ", " << globalHitPos.z() << ")");
813 ATH_MSG_DEBUG("Distance = " << distance << " mm, TOF = " << tof
814 << " ns, Corrected time = " << correctedTime);
815
816 return {correctedTime, measuredTimeErr};
817}
#define ATH_MSG_WARNING(x)
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.
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Eigen::Matrix< double, 3, 1 > Vector3D

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode ActsTrk::HGTDTrackExtensionAlg::execute ( const EventContext & ctx) const
overridevirtual

Definition at line 120 of file HGTDTrackExtensionAlg.cxx.

121{
122 ATH_MSG_DEBUG("Executing " << name() << "...");
123
124 auto timer = Monitored::Timer<std::chrono::milliseconds>("TIME_execute");
125 auto mon_nTracks = Monitored::Scalar<int>("nTracks");
126 auto mon = Monitored::Group(m_monTool, timer, mon_nTracks);
127
128 // ================================================== //
129 // ========= RETRIEVE TRACK PARTICLES =============== //
130 // ================================================== //
131
132 const xAOD::TrackParticleContainer* trackParticles{nullptr};
133 ATH_CHECK(SG::get(trackParticles, m_trackParticleContainerName, ctx));
134
135 ATH_MSG_DEBUG("Size of trackParticles collection " << trackParticles->size());
136
137 // Create WriteDecorHandles for all decorations
138 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<bool>> layerHasExtensionHandle(m_layerHasExtensionKey, ctx);
139 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<float>> layerExtensionChi2Handle(m_layerExtensionChi2Key, ctx);
140 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<float>> layerClusterRawTimeHandle(m_layerClusterRawTimeKey, ctx);
141 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<float>> layerClusterTimeHandle(m_layerClusterTimeKey, ctx);
142 SG::WriteDecorHandle<xAOD::TrackParticleContainer, float> extrapXHandle(m_extrapXKey, ctx);
143 SG::WriteDecorHandle<xAOD::TrackParticleContainer, float> extrapYHandle(m_extrapYKey, ctx);
144 SG::WriteDecorHandle<xAOD::TrackParticleContainer, int> numHGTDHitsHandle(m_numHGTDHitsKey, ctx);
145
146 SG::ReadDecorHandle<xAOD::TrackParticleContainer, ElementLink<ActsTrk::TrackContainer>> actsTrackLink( m_actsTrackLinkKey, ctx );
147 ATH_CHECK( actsTrackLink.isValid() );
148 // ================================================== //
149 // ============ RETRIEVE MEASUREMENTS =============== //
150 // ================================================== //
151
152 ATH_MSG_DEBUG("Reading input collection with key " << m_uncalibratedMeasurementContainerKey_HGTD.key());
153
154 const xAOD::UncalibratedMeasurementContainer* uncalibratedMeasurementContainer{nullptr};
155 ATH_CHECK(SG::get(uncalibratedMeasurementContainer ,m_uncalibratedMeasurementContainerKey_HGTD, ctx));
156 ATH_MSG_DEBUG("Retrieved " << uncalibratedMeasurementContainer->size()
157 << " input elements from key " << m_uncalibratedMeasurementContainerKey_HGTD.key());
158
159 // Modern approach uses surface accessor instead of detector element map
160
161 ATH_MSG_DEBUG("Investigating HGTD geometry structure");
162
163 Acts::GeometryContext geoContext = m_trackingGeometryTool->getGeometryContext(ctx).context();
164 Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(ctx);
165
166
167 // Get a list of all identifiers associated with HGTD clusters
168 if (msgLvl(MSG::DEBUG)) { // DEBUG
169 const xAOD::HGTDClusterContainer* hgtdInitHandle{nullptr};
170 ATH_CHECK(SG::get(hgtdInitHandle, m_HGTDClusterContainerName, ctx));
171
172 std::unordered_set<uint32_t> hgtdVolumes {};
173 std::unordered_map<uint32_t, std::unordered_set<uint32_t>> hgtdLayers {}; // volume -> layers
174
175 for (const xAOD::HGTDCluster* cluster : *hgtdInitHandle) {
176 const Acts::Surface* surface = m_surfAcc.get(cluster);
177
178 if (surface) {
179 Acts::GeometryIdentifier geoID = surface->geometryId();
180 uint32_t vol = geoID.volume();
181 uint32_t layer = geoID.layer();
182
183 hgtdVolumes.insert(vol);
184 hgtdLayers[vol].insert(layer);
185
186 }
187 else {
188 ATH_MSG_ERROR("Failed to retrieve surface for cluster " << cluster->index());
189 return StatusCode::FAILURE;
190 }
191 }
192
193 ATH_MSG_DEBUG("Found " << hgtdVolumes.size() << " different HGTD volumes");
194 for (std::uint32_t vol : hgtdVolumes) {
195 ATH_MSG_DEBUG("HGTD Volume " << vol << " has " << hgtdLayers[vol].size() << " layers:");
196 for (std::uint32_t lyr : hgtdLayers[vol]) {
197 ATH_MSG_DEBUG(" - Layer " << lyr);
198 }
199 }
200 } // DEBUG
201
202 detail::TrackFindingMeasurements measurements(1ul); // only one measurement collection: HGTD clusters
203 ATH_CHECK( collectMeasurements(ctx, measurements) );
204
205 using DefaultTrackStateCreator = Acts::TrackStateCreator<ActsTrk::detail::UncalibSourceLinkAccessor::Iterator,detail::RecoTrackContainer>;
206
207 ActsTrk::detail::UncalibSourceLinkAccessor slAccessor(measurements.measurementRanges());
208 DefaultTrackStateCreator::SourceLinkAccessor slAccessorDelegate;
209 slAccessorDelegate.connect<&ActsTrk::detail::UncalibSourceLinkAccessor::range>(&slAccessor);
210
211 // acts_tracking_geometry is already declared in processTrackExtension function
212
213 ATH_MSG_DEBUG("Create " << uncalibratedMeasurementContainer->size()
214 << " source links from measurements in "
216
217 if (m_trackStatePrinter.isSet()) {
218 m_trackStatePrinter->printMeasurements(ctx,
219 {uncalibratedMeasurementContainer}, //wrap in a braced initializer list to make a vector
220 measurements.measurementOffsets());
221 }
222
223 Acts::PropagatorPlainOptions plainOptions(geoContext, mfContext);
224 plainOptions.direction = Acts::Direction::Forward();
225
227 mfContext,
229 //slAccessorDelegate,
230 m_trackFinder->ckfExtensions,
231 plainOptions);
232
233 auto calibrator = detail::OnTrackCalibrator<detail::RecoTrackStateContainer>(ctx,
238
239 DefaultTrackStateCreator defaultTrackStateCreator{};
240 defaultTrackStateCreator.sourceLinkAccessor = slAccessorDelegate;
241 defaultTrackStateCreator.calibrator.template connect<&detail::OnTrackCalibrator<detail::RecoTrackStateContainer>::calibrate>(&calibrator);
242
243 options.extensions.createTrackStates.template connect<
244 &DefaultTrackStateCreator::createTrackStates>(&defaultTrackStateCreator);
245
246 // ================================================== //
247 // ============ LOOP OVER TRACKPARTICLES ============ //
248 // ================================================== //
249
250 // Loop over each track particle and decorate it with various information
251 for (const xAOD::TrackParticle* trackParticle : *trackParticles) {
252 // Default to empty track data
253 TrackExtensionData trackData;
254 // Check if the TrackParticle has a link to an ACTS track
255 ElementLink<ActsTrk::TrackContainer> link_to_track = actsTrackLink(*trackParticle);
256 if (!link_to_track.isValid()) {
257 ATH_MSG_ERROR("Invalid ACTS track link for TrackParticle " << trackParticle->index());
258 return StatusCode::FAILURE;
259 }
260
261 std::optional<ActsTrk::TrackContainer::ConstTrackProxy> optional_track = *link_to_track;
262 if (!optional_track.has_value()) {
263 ATH_MSG_ERROR("No valid ACTS track associated with TrackParticle " << trackParticle->index());
264 return StatusCode::FAILURE;
265 }
266
267 const ActsTrk::TrackContainer::ConstTrackProxy& track = optional_track.value();
268
269 Acts::VectorTrackContainer trackBackend;
270 Acts::VectorMultiTrajectory trackStateBackend;
271 detail::RecoTrackContainer tracksContainerTemp(trackBackend, trackStateBackend);
272
273 // Retrieve quantities for ACTS track
274 float trackEta = Acts::VectorHelpers::eta(track.momentum());
275
276 // Check eta coverage first
277 if (std::abs(trackEta) < m_minEtaAcceptance or
278 std::abs(trackEta) > m_maxEtaAcceptance) {
279 ATH_MSG_DEBUG("!!!!! ------ Track eta " << trackEta
280 << " outside eta range [" << m_minEtaAcceptance.value() << ", " << m_maxEtaAcceptance.value()
281 << "], skipping extension ------ !!!!!");
282
283 // set default values
284 layerHasExtensionHandle(*trackParticle) = trackData.hasClusterVec;
285 layerExtensionChi2Handle(*trackParticle) = trackData.chi2Vec;
286 layerClusterRawTimeHandle(*trackParticle) = trackData.rawTimeVec;
287 layerClusterTimeHandle(*trackParticle) = trackData.timeVec;
288 extrapXHandle(*trackParticle) = trackData.extrapX;
289 extrapYHandle(*trackParticle) = trackData.extrapY;
290 numHGTDHitsHandle(*trackParticle) = trackData.numHGTDHits;
291
292 continue;
293 }
294
295 float trackpT = track.transverseMomentum();
296 float trackPhi = track.phi();
297 float trackNmeasurements = track.nMeasurements();
298
299 ATH_MSG_DEBUG("TrackParticle " << trackParticle->index() << " has ACTS track with eta: " << trackEta << ", phi = " << trackPhi << " pT: " << trackpT << " and nMeasurements: " << trackNmeasurements);
300
301 // Parameters at last measurement state
302 const auto lastMeasurementState = Acts::findLastMeasurementState(track);
303 if (not lastMeasurementState.ok()) {
304 ATH_MSG_ERROR("Problem finding last measurement state for acts track");
305 return StatusCode::FAILURE;
306 }
307 const Acts::BoundTrackParameters lastMeasurementStateParameters = track.createParametersFromState(*lastMeasurementState);
308
309 // Parameters at reference state of track - not necessarily a measurement state!!!
310 const Acts::Surface& refSurface = track.referenceSurface();
311 const Acts::BoundTrackParameters parametersAtRefSurface(refSurface.getSharedPtr(),
312 track.parameters(),
313 track.covariance(),
314 track.particleHypothesis());
315
316 ATH_MSG_DEBUG("Initial track parameters for extension - lastMeasurementStateParameters:");
317 ATH_MSG_DEBUG(" - eta: " << -1 * log(tan(lastMeasurementStateParameters.theta() * 0.5)));
318 ATH_MSG_DEBUG(" - phi: " << lastMeasurementStateParameters.phi());
319 ATH_MSG_DEBUG(" - pT: " << std::abs(1./lastMeasurementStateParameters.qOverP() * std::sin(lastMeasurementStateParameters.theta())));
320 ATH_MSG_DEBUG(" - theta: " << lastMeasurementStateParameters.theta());
321 ATH_MSG_DEBUG(" - qOverP: " << lastMeasurementStateParameters.qOverP());
322 ATH_MSG_DEBUG(" - covariance exists: " << (lastMeasurementStateParameters.covariance().has_value() ? "yes" : "no"));
323
324 // Now use the *last measurement parameters* parameters for the CKF
325 auto result = m_trackFinder->ckf.findTracks(lastMeasurementStateParameters, options,tracksContainerTemp);
326
327 ATH_MSG_DEBUG("Built " << tracksContainerTemp.size() << " tracks from it");
328
329 for (const detail::RecoTrackContainer::TrackProxy trackProxy : tracksContainerTemp) {
330 trackData = processTrackExtension(ctx, trackParticle, trackProxy);
331 }
332
333 // Apply decorations from the track data
334 layerHasExtensionHandle(*trackParticle) = trackData.hasClusterVec;
335 layerExtensionChi2Handle(*trackParticle) = trackData.chi2Vec;
336 layerClusterRawTimeHandle(*trackParticle) = trackData.rawTimeVec;
337 layerClusterTimeHandle(*trackParticle) = trackData.timeVec;
338 extrapXHandle(*trackParticle) = trackData.extrapX;
339 extrapYHandle(*trackParticle) = trackData.extrapY;
340 numHGTDHitsHandle(*trackParticle) = trackData.numHGTDHits;
341 } // loop on tracks
342
343
344 return StatusCode::SUCCESS;
345}
#define ATH_MSG_ERROR(x)
size_t size() const
Number of registered mappings.
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
SG::ReadHandleKey< xAOD::UncalibratedMeasurementContainer > m_uncalibratedMeasurementContainerKey_HGTD
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_layerExtensionChi2Key
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
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_actsTrackLinkKey
Gaudi::Property< float > m_maxEtaAcceptance
ToolHandle< ActsTrk::IPixelOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_pixelCalibTool
std::unique_ptr< detail::CKF_config > m_trackFinder
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_layerClusterTimeKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_extrapXKey
ToolHandle< ActsTrk::IStripOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_stripCalibTool
ToolHandle< ActsTrk::IHGTDOnTrackCalibratorTool< detail::RecoTrackStateContainer > > m_hgtdCalibTool
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
bool msgLvl(const MSG::Level lvl) const
GenUncalibSourceLinkAccessor< MeasurementRangeList > UncalibSourceLinkAccessor
Acts::TrackContainer< Acts::VectorTrackContainer, Acts::VectorMultiTrajectory > RecoTrackContainer
Acts::TrackStateCreator< ActsTrk::detail::UncalibSourceLinkAccessor::Iterator, detail::RecoTrackContainer > DefaultTrackStateCreator
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
@ layer
Definition HitInfo.h:79
bool trackEta(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
bool trackPhi(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
timer(name, disabled=False)
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
UncalibratedMeasurementContainer_v1 UncalibratedMeasurementContainer
Define the version of the uncalibrated measurement container.
setEventNumber uint32_t
Data structure to hold HGTD track extension results Contains information about hits,...

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

88{
89 // If we didn't find any symlinks to add, just return the collection
90 // from the base class. Otherwise, return the extended collection.
91 if (!m_extendedExtraObjects.empty()) {
93 }
95}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ getExtrapolationPosition()

bool ActsTrk::HGTDTrackExtensionAlg::getExtrapolationPosition ( const EventContext & ctx,
const detail::RecoTrackContainer::TrackProxy & track,
float & x,
float & y,
float & z ) const
private

Definition at line 648 of file HGTDTrackExtensionAlg.cxx.

651 {
652
653 // Default values
654 x = 0.0;
655 y = 0.0;
656 z = 0.0;
657
658 // Get the position at the first HGTD layer
659 bool foundHGTDSurface = false;
660
661 // Explicitly capture ctx and geoContext in the lambda
662 Acts::GeometryContext geoContext = m_trackingGeometryTool->getGeometryContext(ctx).context();
663 track.container().trackStateContainer().visitBackwards(
664 track.tipIndex(),
665 [this, &foundHGTDSurface, &x, &y, &z, geoContext](const auto& state) {
666 // Skip if already found or no reference surface
667 if (foundHGTDSurface || !state.hasReferenceSurface()) {
668 return;
669 }
670
671 const auto& surface = state.referenceSurface();
672 Acts::GeometryIdentifier geoID = surface.geometryId();
673
674 // Check if this is an HGTD surface
675 if (isHGTDSurface(geoID)) {
676 // Instead of getting the surface center, use the predicted parameters
677 if (state.hasPredicted()) {
678 // Get the local predicted parameters
679 const auto& predicted = state.predicted();
680
681 // Get the local predicted position (first two components of the predicted vector)
682 // Local coordinates: [loc0, loc1, phi, theta, q/p, time]
683 Acts::Vector2 localPos(predicted[Acts::eBoundLoc0], predicted[Acts::eBoundLoc1]);
684
685 // Transform to global coordinates
686 Acts::Vector3 globalPos = surface.localToGlobal(
687 geoContext,
688 localPos,
689 Acts::Vector3::Zero()); // Direction doesn't matter for position
690
691 // Store coordinates
692 x = globalPos.x();
693 y = globalPos.y();
694 z = globalPos.z();
695
696 ATH_MSG_DEBUG("Predicted position on HGTD surface: (" << x << ", " << y << ", " << z << ")");
697 foundHGTDSurface = true;
698 } else {
699 // Fallback to surface center if predicted parameters not available
700 Acts::Vector3 globalPos = surface.center(geoContext);
701 x = globalPos.x();
702 y = globalPos.y();
703 z = globalPos.z();
704
705 ATH_MSG_DEBUG("Fallback to surface center for HGTD: (" << x << ", " << y << ", " << z << ")");
706 foundHGTDSurface = true;
707 }
708 }
709 });
710
711 return foundHGTDSurface;
712}
if(pathvar)
#define y
#define x
#define z
bool isHGTDSurface(const Acts::GeometryIdentifier &geoID) const

◆ getHGTDClusterFromState()

const xAOD::HGTDCluster * ActsTrk::HGTDTrackExtensionAlg::getHGTDClusterFromState ( const EventContext & ctx,
const ActsTrk::detail::RecoConstTrackStateContainerProxy & state ) const
private

Definition at line 819 of file HGTDTrackExtensionAlg.cxx.

819 {
820 if (state.hasUncalibratedSourceLink()) {
821 auto sl = state.getUncalibratedSourceLink().template get<ATLASUncalibSourceLink>();
822 assert( sl != nullptr);
824 xAOD::UncalibMeasType clusterType = uncalib_cluster.type();
825
826 if (clusterType == xAOD::UncalibMeasType::HGTDClusterType) {
827 ATH_MSG_DEBUG("Found HGTD cluster in source link");
828 auto hgtdCluster = static_cast<const xAOD::HGTDCluster *>(&uncalib_cluster);
829 return hgtdCluster;
830 } else {
831 ATH_MSG_DEBUG("Source link contains non-HGTD measurement type: " << static_cast<int>(clusterType));
832 }
833
834 // If we have a reference surface, try to match by position
835 if (state.hasReferenceSurface()) {
836 const auto& surface = state.referenceSurface();
837 Acts::GeometryIdentifier geoID = surface.geometryId();
838
839 // Check if this is an HGTD surface
840 if (isHGTDSurface(geoID)) {
841 ATH_MSG_DEBUG("This is an HGTD surface with ID: " << geoID.volume() << ":" << geoID.layer());
842
843 // Modern approach uses surface accessor instead of detector element map
844
845 // Get the HGTD clusters
846 SG::ReadHandle<xAOD::HGTDClusterContainer> hgtdClusters(m_HGTDClusterContainerName, ctx);
847 if (!hgtdClusters.isValid()) {
848 ATH_MSG_WARNING("Failed to retrieve HGTD clusters");
849 return nullptr;
850 }
851
852 // Get global position of the state surface
853 const Acts::GeometryContext& geoContext = m_trackingGeometryTool->getGeometryContext(ctx).context();
854 Acts::Vector3 statePos = surface.center(geoContext);
855
856 // Find the closest cluster to this state position
857 const xAOD::HGTDCluster* closestCluster = nullptr;
858 double minDistance = 100.0; // Use a reasonable threshold (in mm)
859
860 for (const xAOD::HGTDCluster* cluster : *hgtdClusters) {
861 // Get the cluster's surface
862 const Acts::Surface* clusterSurface = m_surfAcc.get(cluster);
863
864 if (!clusterSurface) continue;
865
866 // Check if it's on the same surface by comparing geometry IDs
867 Acts::GeometryIdentifier clusterGeoID = clusterSurface->geometryId();
868 if (clusterGeoID.volume() == geoID.volume() && clusterGeoID.layer() == geoID.layer()) {
869 // Get cluster position
870 Acts::Vector3 clusterPos = clusterSurface->center(geoContext);
871
872 // Calculate 2D distance (x,y only, since z is fixed for a layer)
873 double dx = clusterPos.x() - statePos.x();
874 double dy = clusterPos.y() - statePos.y();
875 double distance = std::sqrt(dx*dx + dy*dy);
876
877 // Update closest if this is better
878 if (distance < minDistance) {
879 minDistance = distance;
880 closestCluster = cluster;
881 ATH_MSG_DEBUG("Found possible cluster match at distance " << distance << " mm");
882 }
883 }
884 }
885
886 if (closestCluster) {
887 ATH_MSG_DEBUG("Found closest cluster at distance " << minDistance << " mm");
888 return closestCluster;
889 } else {
890 ATH_MSG_DEBUG("No matching cluster found on this surface");
891 }
892 }
893 }
894 } else {
895 ATH_MSG_DEBUG("State doesn't have uncalibrated source link");
896 }
897
898 return nullptr;
899}
virtual xAOD::UncalibMeasType type() const =0
Returns the type of the measurement type as a simple enumeration.
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:132
const xAOD::UncalibratedMeasurement & getUncalibratedMeasurement(const ATLASUncalibSourceLink &source_link)
UncalibMeasType
Define the type of the uncalibrated measurement.
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.

◆ getHGTDLayerIndex()

std::size_t ActsTrk::HGTDTrackExtensionAlg::getHGTDLayerIndex ( const Acts::GeometryIdentifier & geoID) const
private

Definition at line 615 of file HGTDTrackExtensionAlg.cxx.

615 {
616 // Get volume and layer ID
617 std::uint32_t volume = geoID.volume();
618 std::uint32_t layer = geoID.layer();
619
620 // Check if we're in the positive or negative endcap
621 bool isPositiveEndcap = (volume == 25);
622 bool isNegativeEndcap = (volume == 2);
623
624 // Different mapping for different sides to maintain consistent physical ordering
625 if (isPositiveEndcap) {
626 // Mapping for positive endcap
627 switch(layer) {
628 case 2: return 0; // First HGTD layer (closest to IP)
629 case 4: return 1; // Second HGTD layer
630 case 6: return 2; // Third HGTD layer
631 case 8: return 3; // Fourth HGTD layer (farthest from IP)
632 default: return 99; // Invalid layer
633 }
634 } else if (isNegativeEndcap) {
635 // Mapping for negative endcap - potentially different ordering
636 switch(layer) {
637 case 2: return 3;
638 case 4: return 2;
639 case 6: return 1;
640 case 8: return 0;
641 default: return 99; // Invalid layer
642 }
643 } else {
644 return 99; // Not an HGTD volume
645 }
646}

◆ initialize()

StatusCode ActsTrk::HGTDTrackExtensionAlg::initialize ( )
overridevirtual

Definition at line 42 of file HGTDTrackExtensionAlg.cxx.

43{
44 ATH_MSG_DEBUG("Initializing " << name() << "...");
45
48
49 // Initialize all WriteDecorHandleKeys
53 ATH_CHECK(m_layerClusterTimeKey.initialize());
54 ATH_CHECK(m_extrapXKey.initialize());
55 ATH_CHECK(m_extrapYKey.initialize());
56 ATH_CHECK(m_numHGTDHitsKey.initialize());
57
58 ATH_CHECK(m_actsTrackLinkKey.initialize());
59
60 // Initialize HGTD-extension related keys
62
63 // Checks for logger
66
67 ATH_CHECK(m_monTool.retrieve(EnableTool{not m_monTool.empty()}));
68 ATH_CHECK(m_trackStatePrinter.retrieve(EnableTool{not m_trackStatePrinter.empty()}));
69 ATH_CHECK(m_pixelCalibTool.retrieve(EnableTool{not m_pixelCalibTool.empty()}));
70 ATH_CHECK(m_stripCalibTool.retrieve(EnableTool{not m_stripCalibTool.empty()}));
71 ATH_CHECK(m_hgtdCalibTool.retrieve(EnableTool{not m_hgtdCalibTool.empty()}));
72
73 //Initialize logger
74 m_logger = makeActsAthenaLogger(this, "Acts");
75
76 // Initialize surface accessor
77 m_surfAcc = ActsTrk::detail::xAODUncalibMeasSurfAcc{m_trackingGeometryTool.get()};
78
79
80 auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
81 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry = m_trackingGeometryTool->trackingGeometry();
82
83 detail::Stepper stepper(std::move(magneticField));
84 detail::Navigator::Config cfg{trackingGeometry};
85 cfg.resolvePassive = true;
86 cfg.resolveMaterial = true;
87 cfg.resolveSensitive = true;
88 detail::Navigator navigator(cfg, logger().cloneWithSuffix("Navigator"));
89 detail::Propagator propagator(std::move(stepper), std::move(navigator), logger().cloneWithSuffix("Prop"));
90
91 // Using the CKF propagator as extrapolator
92 detail::Extrapolator extrapolator = propagator;
93
94 // Configure track selector for extension
95 Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg(std::vector<double>({0, 4})); //abs value here
96 trackSelectorCfg.cutSets[0].ptMin = 500;
97 trackSelectorCfg.cutSets[0].ptMax = 1000000;
98 trackSelectorCfg.cutSets[0].minMeasurements = 1;
99 trackSelectorCfg.cutSets[0].maxHoles = 4;
100 trackSelectorCfg.cutSets[0].maxOutliers = 4;
101 trackSelectorCfg.cutSets[0].maxHolesAndOutliers = 4;
102 trackSelectorCfg.cutSets[0].maxSharedHits = 4;
103 trackSelectorCfg.cutSets[0].maxChi2 = 10000000.0;
104
105 ATH_MSG_DEBUG(trackSelectorCfg);
106
107 detail::CKF_config ckfConfig{
108 std::move(extrapolator),
109 detail::CKF{std::move(propagator), logger().cloneWithSuffix("CKF")},
110 {},
111 Acts::TrackSelector{trackSelectorCfg}};
112
113 m_trackFinder = std::make_unique<detail::CKF_config>(std::move(ckfConfig));
114
115 return StatusCode::SUCCESS;
116}
std::unique_ptr< const Acts::Logger > makeActsAthenaLogger(IMessageSvc *svc, const std::string &name, int level, std::optional< std::string > parent_name)
const Acts::Logger & logger() const
Private access to the logger.
std::unique_ptr< const Acts::Logger > m_logger
Acts::SympyStepper Stepper
Adapted from Acts Examples/Algorithms/TrackFinding/src/TrackFindingAlgorithmFunction....
Acts::CombinatorialKalmanFilter< Propagator, RecoTrackContainer > CKF

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

◆ isHGTDSurface()

bool ActsTrk::HGTDTrackExtensionAlg::isHGTDSurface ( const Acts::GeometryIdentifier & geoID) const
private

Definition at line 715 of file HGTDTrackExtensionAlg.cxx.

715 {
716 // Get volume and layer
717 std::uint32_t volume = geoID.volume();
718 std::uint32_t layer = geoID.layer();
719
720 // Check if it's one of the known HGTD volumes
721 if (volume == 2 || volume == 25) {
722 // Check if it's one of the HGTD layers
723 if (layer == 2 || layer == 4 || layer == 6 || layer == 8) {
724 return true;
725 }
726 }
727
728 return false;
729}

◆ logger()

const Acts::Logger & ActsTrk::HGTDTrackExtensionAlg::logger ( ) const
inlineprivate

Private access to the logger.

Definition at line 75 of file HGTDTrackExtensionAlg.h.

75{ return *m_logger; }

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ processTrackExtension()

HGTDTrackExtensionAlg::TrackExtensionData ActsTrk::HGTDTrackExtensionAlg::processTrackExtension ( const EventContext & ctx,
const xAOD::TrackParticle * trackParticle,
const detail::RecoTrackContainer::TrackProxy & trackProxy ) const
private

Definition at line 394 of file HGTDTrackExtensionAlg.cxx.

397 {
398
400
401 // Modern approach uses surface accessor instead of detector element map
402
403 // Apply track smoothing before trying to access chi2 values
404 Acts::GeometryContext geoContext = m_trackingGeometryTool->getGeometryContext(ctx).context();
405 const Acts::TrackingGeometry* acts_tracking_geometry = m_trackingGeometryTool->trackingGeometry().get();
406
407
408 // Count measurements, holes, and HGTD hits specifically
409 std::size_t nMeasurements = 0;
410 std::size_t nHoles = 0;
411 std::size_t nOutliers = 0;
412 std::size_t nHGTDHits = 0;
413
414 std::vector<bool> hasHitInLayer = {false, false, false, false};
415 std::vector<float> chi2PerLayer = {0.0, 0.0, 0.0, 0.0};
416 std::vector<float> timePerLayer = {0.0, 0.0, 0.0, 0.0};
417 std::vector<float> rawTimePerLayer = {0.0, 0.0, 0.0, 0.0};
418
419 std::vector<int> truthClassPerLayer = {-1, -1, -1, -1};
420 std::vector<bool> isShadowedPerLayer = {false, false, false, false};
421 std::vector<bool> isMergedPerLayer = {false, false, false, false};
422 std::vector<bool> primaryExpectedPerLayer = {false, false, false, false};
423
424 // Extrapolated position - get the position at the first HGTD surface encountered
425 float extrapX = 0.0;
426 float extrapY = 0.0;
427 float extrapZ = 0.0;
428 bool foundExtrapolation = false;
429
430 trackProxy.container().trackStateContainer().visitBackwards(
431 trackProxy.tipIndex(),
432 [&](const auto& state) {
433 auto flags = state.typeFlags();
434 if (flags.isHole()) {
435 nHoles++;
436 } else if (flags.isOutlier()) {
437 nOutliers++;
438 } else if (flags.isMeasurement()) {
439 nMeasurements++;
440
441 // Check if this is an HGTD hit
442
443 const auto& surface = state.referenceSurface();
444 Acts::GeometryIdentifier geoID = surface.geometryId();
445
446 if (isHGTDSurface(geoID)) {
447 std::size_t layerIndex = getHGTDLayerIndex(geoID);
448
449 const auto& calibrated = state.template calibrated<3>(); //x,y,time
450 const auto& predicted = state.predicted(); //6D
451 const auto& calibCov = state.template calibratedCovariance<3>(); // Full 3D covariance
452
453
454
455 Eigen::Vector2d residual2d;
456 residual2d(0) = calibrated(0) - predicted(Acts::eBoundLoc0);
457 residual2d(1) = calibrated(1) - predicted(Acts::eBoundLoc1);
458
459 // Extract the top-left 2x2 from the 3x3 measurement covariance
460 AmgSymMatrix(2) cov_2d{calibCov.template block<2,2>(0,0)};
461
462 // Get the predicted covariance for residual calculation
463 const auto& predictedCov = state.predictedCovariance();
464 AmgSymMatrix(2) predicted_cov_2d{predictedCov.template block<2,2>(0,0)};
465
466 // Total residual covariance is measurement + predicted covariances
467 AmgSymMatrix(2) residual_cov = cov_2d + predicted_cov_2d;
468
469
470
471 double chi2=0.0;
472 double ndf = 2.0;
473 if (residual_cov.determinant() != 0)
474 {
475 chi2 = residual2d.transpose() * residual_cov.inverse() * residual2d;
476 }
477 else
478 {
479 chi2=-99.9;
480 }
481
482 if (layerIndex < 4) {
483 nHGTDHits++;
484 hasHitInLayer[layerIndex] = true;
485 chi2PerLayer[layerIndex] =chi2/ndf; //state.chi2();
486
487 // Get the measured time from the calibrated 3D measurement (local x, y, time)
488
489 float rawTime = 0.0f;
490 float calibratedTime = 0.0f;
491
492 if (state.hasCalibrated()) {
493 // Extract time from calibrated data
494 try {
495 const auto& calibrated = state.template calibrated<3>();
496 calibratedTime = static_cast<float>(calibrated(2));
497 ATH_MSG_DEBUG("Got time from calibrated<3>: " << calibratedTime);
498 } catch (const std::exception& e) {
499 ATH_MSG_WARNING("Failed to extract time from calibrated<3>: " << e.what());
500
501 }
502 }
503
504 // Extract raw time from HGTD clusters
505 const xAOD::HGTDCluster* cluster = getHGTDClusterFromState(ctx, state);
506
507 if (cluster) {
508 auto localPos = cluster->localPosition<3>();
509 rawTime = static_cast<float>(localPos[2]);
510 ATH_MSG_DEBUG("Got raw time from cluster local position: " << rawTime);
511 } else {
512 ATH_MSG_WARNING("Could not get cluster from state");
513 }
514
515 // Store the raw time
516 rawTimePerLayer[layerIndex] = rawTime;
517
518
519 if (cluster) {
520 auto [correctedTime, timeErr] = correctTOF(
521 trackParticle,
522 cluster,
523 calibratedTime,
524 0.0, // time error set to zero for now!
525 acts_tracking_geometry,
526 geoContext);
527 timePerLayer[layerIndex] = correctedTime;
528 ATH_MSG_DEBUG("Applied TOF correction: " << calibratedTime << " -> " << correctedTime);
529 } else {
530 // No cluster or time, use raw time
531 timePerLayer[layerIndex] = calibratedTime;
532 ATH_MSG_DEBUG("No cluster found for TOF correction, using calibrated time: " << calibratedTime);
533 }
534 }
535 else
536 {
537 ATH_MSG_DEBUG("State does not have calibrated data");
538 }
539
540 // For extrapolation: use the first HGTD hit's surface position.
541 if (!foundExtrapolation) {
542 foundExtrapolation = true;
543 if (state.hasPredicted()) {
544 // Get the local predicted position
545 const auto& predicted = state.predicted();
546 Acts::Vector2 localPos(predicted[Acts::eBoundLoc0], predicted[Acts::eBoundLoc1]);
547
548 // Transform to global coordinates
549 Acts::Vector3 globalPos = surface.localToGlobal(
550 geoContext,
551 localPos,
552 Acts::Vector3::Zero());
553
554 extrapX = globalPos.x();
555 extrapY = globalPos.y();
556 extrapZ = globalPos.z();
557
558 ATH_MSG_DEBUG("Extrapolated position (predicted) at HGTD: x=" << extrapX
559 << ", y=" << extrapY << ", z=" << extrapZ);
560 } else {
561 // Fallback to surface center
562 Acts::Vector3 globalPos = surface.center(geoContext);
563 extrapX = globalPos.x();
564 extrapY = globalPos.y();
565 extrapZ = globalPos.z();
566
567 ATH_MSG_DEBUG("Extrapolated position (surface center) at HGTD: x=" << extrapX
568 << ", y=" << extrapY << ", z=" << extrapZ);
569 }
570 }
571
572 ATH_MSG_DEBUG("Found HGTD hit on layer " << layerIndex
573 << ", chi2=" << chi2PerLayer[layerIndex]
574 << ", time=" << timePerLayer[layerIndex]);
575
576
577 }
578 }
579
580 });
581
582 // If we didn't find any HGTD hits but we still have a valid bestTrack,
583 // we should try to predict where the track would intersect HGTD
584 if (nHGTDHits == 0 && !foundExtrapolation) {
585
586 // Try to calculate the extrapolation position using your existing method
587 if (getExtrapolationPosition(ctx, trackProxy, extrapX, extrapY, extrapZ)) {
588 ATH_MSG_DEBUG("!!! Didn't find any HGTD hits but calculated extrapolation position: x=" << extrapX
589 << ", y=" << extrapY << ", z=" << extrapZ);
590 foundExtrapolation = true;
591 }
592 }
593
594 ATH_MSG_DEBUG("Track Statistics: "
595 << " nMeasurements=" << nMeasurements
596 << " nHGTDHits=" << nHGTDHits
597 << " nHoles=" << nHoles
598 << " nOutliers=" << nOutliers
599 << " extrapolation found: " << (foundExtrapolation ? "yes" : "no"));
600
601
602 // Fill the data structure with results
603 data.hasClusterVec = std::move(hasHitInLayer);
604 data.chi2Vec = std::move(chi2PerLayer);
605 data.timeVec = std::move(timePerLayer);
606 data.rawTimeVec = std::move(rawTimePerLayer);
607 data.extrapX = extrapX;
608 data.extrapY = extrapY;
609 data.extrapZ = extrapZ;
610 data.numHGTDHits = nHGTDHits;
611
612 return data;
613}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
bool getExtrapolationPosition(const EventContext &ctx, const detail::RecoTrackContainer::TrackProxy &track, float &x, float &y, float &z) const
std::size_t nMeasurements(const xAOD::MuonSegment &segment)
Returns the number of associated Uncalibrated measurements.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

75{
76 return BaseAlg::sysExecute (ctx);
77}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

105 {
107
108 if (sc.isFailure()) {
109 return sc;
110 }
111
112 ServiceHandle<ICondSvc> cs("CondSvc",name());
113 for (auto h : outputHandles()) {
114 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
115 // do this inside the loop so we don't create the CondSvc until needed
116 if ( cs.retrieve().isFailure() ) {
117 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
118 return StatusCode::SUCCESS;
119 }
120 if (cs->regHandle(this,*h).isFailure()) {
122 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
123 << " with CondSvc");
124 }
125 }
126 }
127 return sc;
128}
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_actsTrackLinkKey

SG::ReadDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_actsTrackLinkKey {this, "ActsTrackLink", m_trackParticleContainerName, "actsTrack", "Link to Acts track"}
private

Definition at line 92 of file HGTDTrackExtensionAlg.h.

92{this, "ActsTrackLink", m_trackParticleContainerName, "actsTrack", "Link to Acts track"};

◆ m_calibrationContext

Acts::CalibrationContext ActsTrk::HGTDTrackExtensionAlg::m_calibrationContext
private

Definition at line 158 of file HGTDTrackExtensionAlg.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_extrapolationTool

ToolHandle<ActsTrk::IExtrapolationTool> ActsTrk::HGTDTrackExtensionAlg::m_extrapolationTool {this, "ExtrapolationTool", ""}
private

Definition at line 104 of file HGTDTrackExtensionAlg.h.

104{this, "ExtrapolationTool", ""};

◆ m_extrapXKey

SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_extrapXKey { this, "HGTD_extrap_x", m_trackParticleContainerName, "HGTD_extrap_x", "Decoration for extrapolated X coordinate" }
private

Definition at line 88 of file HGTDTrackExtensionAlg.h.

88{ this, "HGTD_extrap_x", m_trackParticleContainerName, "HGTD_extrap_x", "Decoration for extrapolated X coordinate" };

◆ m_extrapYKey

SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_extrapYKey { this, "HGTD_extrap_y", m_trackParticleContainerName, "HGTD_extrap_y", "Decoration for extrapolated Y coordinate" }
private

Definition at line 89 of file HGTDTrackExtensionAlg.h.

89{ this, "HGTD_extrap_y", m_trackParticleContainerName, "HGTD_extrap_y", "Decoration for extrapolated Y coordinate" };

◆ m_hgtdCalibTool

ToolHandle<ActsTrk::IHGTDOnTrackCalibratorTool<detail::RecoTrackStateContainer> > ActsTrk::HGTDTrackExtensionAlg::m_hgtdCalibTool {this, "HGTDCalibrator", "", "Opt. HGTD measurement calibrator"}
private

Definition at line 111 of file HGTDTrackExtensionAlg.h.

111{this, "HGTDCalibrator", "", "Opt. HGTD measurement calibrator"};

◆ m_HGTDClusterContainerName

SG::ReadHandleKey<xAOD::HGTDClusterContainer> ActsTrk::HGTDTrackExtensionAlg::m_HGTDClusterContainerName {this, "HGTDClusterContainerName", "", "the HGTD clusters"}
private

Definition at line 79 of file HGTDTrackExtensionAlg.h.

79{this, "HGTDClusterContainerName", "", "the HGTD clusters"};

◆ m_layerClusterRawTimeKey

SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_layerClusterRawTimeKey { this, "HGTD_cluster_raw_time", m_trackParticleContainerName, "HGTD_cluster_raw_time", "Decoration for raw time of cluster" }
private

Definition at line 86 of file HGTDTrackExtensionAlg.h.

86{ this, "HGTD_cluster_raw_time", m_trackParticleContainerName, "HGTD_cluster_raw_time", "Decoration for raw time of cluster" };

◆ m_layerClusterTimeKey

SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_layerClusterTimeKey { this, "HGTD_cluster_time", m_trackParticleContainerName, "HGTD_cluster_time", "Decoration for cluster time" }
private

Definition at line 87 of file HGTDTrackExtensionAlg.h.

87{ this, "HGTD_cluster_time", m_trackParticleContainerName, "HGTD_cluster_time", "Decoration for cluster time" };

◆ m_layerExtensionChi2Key

SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_layerExtensionChi2Key { this, "HGTD_extension_chi2", m_trackParticleContainerName, "HGTD_extension_chi2", "Decoration for chi2 of extension" }
private

Definition at line 85 of file HGTDTrackExtensionAlg.h.

85{ this, "HGTD_extension_chi2", m_trackParticleContainerName, "HGTD_extension_chi2", "Decoration for chi2 of extension" };

◆ m_layerHasExtensionKey

SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_layerHasExtensionKey { this, "HGTD_has_extension", m_trackParticleContainerName, "HGTD_has_extension", "Decoration for layer extension" }
private

Definition at line 84 of file HGTDTrackExtensionAlg.h.

84{ this, "HGTD_has_extension", m_trackParticleContainerName, "HGTD_has_extension", "Decoration for layer extension" };

◆ m_logger

std::unique_ptr<const Acts::Logger> ActsTrk::HGTDTrackExtensionAlg::m_logger
private

Definition at line 123 of file HGTDTrackExtensionAlg.h.

◆ m_maxEtaAcceptance

Gaudi::Property<float> ActsTrk::HGTDTrackExtensionAlg::m_maxEtaAcceptance {this, "MaxEtaAcceptance", 4.00, "Maximum eta to consider a track for extension"}
private

Definition at line 96 of file HGTDTrackExtensionAlg.h.

96{this, "MaxEtaAcceptance", 4.00, "Maximum eta to consider a track for extension"};

◆ m_minEtaAcceptance

Gaudi::Property<float> ActsTrk::HGTDTrackExtensionAlg::m_minEtaAcceptance {this, "MinEtaAcceptance", 2.38, "Minimum eta to consider a track for extension"}
private

Definition at line 95 of file HGTDTrackExtensionAlg.h.

95{this, "MinEtaAcceptance", 2.38, "Minimum eta to consider a track for extension"};

◆ m_monTool

ToolHandle<GenericMonitoringTool> ActsTrk::HGTDTrackExtensionAlg::m_monTool {this, "MonTool", "", "Monitoring tool"}
private

Definition at line 100 of file HGTDTrackExtensionAlg.h.

100{this, "MonTool", "", "Monitoring tool"};

◆ m_numHGTDHitsKey

SG::WriteDecorHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_numHGTDHitsKey {this, "numHGTDHits", m_trackParticleContainerName, "numHGTDHits", "Number of HGTD hits on the track extension"}
private

Definition at line 82 of file HGTDTrackExtensionAlg.h.

82{this, "numHGTDHits", m_trackParticleContainerName, "numHGTDHits", "Number of HGTD hits on the track extension"};

◆ m_pixelCalibTool

ToolHandle<ActsTrk::IPixelOnTrackCalibratorTool<detail::RecoTrackStateContainer> > ActsTrk::HGTDTrackExtensionAlg::m_pixelCalibTool {this, "PixelCalibrator", "", "Opt. pixel measurement calibrator"}
private

Definition at line 107 of file HGTDTrackExtensionAlg.h.

107{this, "PixelCalibrator", "", "Opt. pixel measurement calibrator"};

◆ m_stripCalibTool

ToolHandle<ActsTrk::IStripOnTrackCalibratorTool<detail::RecoTrackStateContainer> > ActsTrk::HGTDTrackExtensionAlg::m_stripCalibTool {this, "StripCalibrator", "", "Opt. strip measurement calibrator"}
private

Definition at line 109 of file HGTDTrackExtensionAlg.h.

109{this, "StripCalibrator", "", "Opt. strip measurement calibrator"};

◆ m_surfAcc

ActsTrk::detail::xAODUncalibMeasSurfAcc ActsTrk::HGTDTrackExtensionAlg::m_surfAcc {}
private

Definition at line 116 of file HGTDTrackExtensionAlg.h.

116{};

◆ m_trackFinder

std::unique_ptr<detail::CKF_config> ActsTrk::HGTDTrackExtensionAlg::m_trackFinder
private

Definition at line 125 of file HGTDTrackExtensionAlg.h.

◆ m_trackingGeometryTool

PublicToolHandle<ActsTrk::ITrackingGeometryTool> ActsTrk::HGTDTrackExtensionAlg::m_trackingGeometryTool {this, "TrackingGeometryTool", ""}
private

Definition at line 102 of file HGTDTrackExtensionAlg.h.

102{this, "TrackingGeometryTool", ""};

◆ m_trackParticleContainerName

SG::ReadHandleKey<xAOD::TrackParticleContainer> ActsTrk::HGTDTrackExtensionAlg::m_trackParticleContainerName {this, "TrackParticleContainerName", "", "Name of the TrackParticle container"}
private

Definition at line 78 of file HGTDTrackExtensionAlg.h.

78{this, "TrackParticleContainerName", "", "Name of the TrackParticle container"};

◆ m_trackStatePrinter

ToolHandle<ActsTrk::TrackStatePrinterTool> ActsTrk::HGTDTrackExtensionAlg::m_trackStatePrinter {this, "TrackStatePrinter", "", "optional track state printer"}
private

Definition at line 114 of file HGTDTrackExtensionAlg.h.

114{this, "TrackStatePrinter", "", "optional track state printer"};

◆ m_uncalibratedMeasurementContainerKey_HGTD

SG::ReadHandleKey<xAOD::UncalibratedMeasurementContainer> ActsTrk::HGTDTrackExtensionAlg::m_uncalibratedMeasurementContainerKey_HGTD {this, "UncalibratedMeasurementContainerKey_HGTD", "", "input cluster collections for HGTD"}
private

Definition at line 119 of file HGTDTrackExtensionAlg.h.

119{this, "UncalibratedMeasurementContainerKey_HGTD", "", "input cluster collections for HGTD"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: