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 342 of file HGTDTrackExtensionAlg.cxx.

343 {
344
345 SG::ReadHandle<xAOD::HGTDClusterContainer> HGTDClustersHandle = SG::makeHandle(m_HGTDClusterContainerName, context);
346 ATH_CHECK( HGTDClustersHandle.isValid() );
347 const xAOD::HGTDClusterContainer* HGTDClusters = HGTDClustersHandle.cptr();
348
349 ATH_MSG_DEBUG("Measurements (HGTD only) size: " << HGTDClustersHandle->size());
350
351 if (not m_monTool.empty()) {
352 {
353 auto mon_nclusters = Monitored::Scalar("n_hgtd_clusters", HGTDClusters->size());
354 auto mon = Monitored::Group(m_monTool, mon_nclusters);
355 }
356
357 // Add cluster position to monitoring tool
358 for (const xAOD::HGTDCluster* cluster : *HGTDClustersHandle) {
359 const Acts::Surface* surface = m_surfAcc.get(cluster);
360 if (not surface) continue;
361
362 Acts::Vector3 globalPos = surface->center(m_trackingGeometryTool->getGeometryContext(context).context());
363
364 double clusterTime = cluster->time();
365
366 ATH_MSG_DEBUG("HGTD Cluster: "<< Amg::toString(globalPos) );
367
368 auto mon_cluster_x = Monitored::Scalar("cluster_x", globalPos.x());
369 auto mon_cluster_y = Monitored::Scalar("cluster_y", globalPos.y());
370 auto mon_cluster_z = Monitored::Scalar("cluster_z", globalPos.z());
371 auto mon_cluster_t = Monitored::Scalar("cluster_t", clusterTime);
372 auto mon = Monitored::Group(m_monTool,
373 mon_cluster_x, mon_cluster_y, mon_cluster_z,
374 mon_cluster_t);
375 }
376 } // MONITORING
377
378 measurements.addMeasurements(0,
379 *HGTDClusters,
380 *m_trackingGeometryTool->surfaceIdMap());
381
382 return StatusCode::SUCCESS;
383}
#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 723 of file HGTDTrackExtensionAlg.cxx.

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

122{
123 ATH_MSG_DEBUG("Executing " << name() << "...");
124
125 auto timer = Monitored::Timer<std::chrono::milliseconds>("TIME_execute");
126 auto mon_nTracks = Monitored::Scalar<int>("nTracks");
127 auto mon = Monitored::Group(m_monTool, timer, mon_nTracks);
128
129 // ================================================== //
130 // ========= RETRIEVE TRACK PARTICLES =============== //
131 // ================================================== //
132
133 const xAOD::TrackParticleContainer* trackParticles{nullptr};
134 ATH_CHECK(SG::get(trackParticles, m_trackParticleContainerName, ctx));
135
136 ATH_MSG_DEBUG("Size of trackParticles collection " << trackParticles->size());
137
138 // Create WriteDecorHandles for all decorations
139 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<bool>> layerHasExtensionHandle(m_layerHasExtensionKey, ctx);
140 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<float>> layerExtensionChi2Handle(m_layerExtensionChi2Key, ctx);
141 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<float>> layerClusterRawTimeHandle(m_layerClusterRawTimeKey, ctx);
142 SG::WriteDecorHandle<xAOD::TrackParticleContainer, std::vector<float>> layerClusterTimeHandle(m_layerClusterTimeKey, ctx);
143 SG::WriteDecorHandle<xAOD::TrackParticleContainer, float> extrapXHandle(m_extrapXKey, ctx);
144 SG::WriteDecorHandle<xAOD::TrackParticleContainer, float> extrapYHandle(m_extrapYKey, ctx);
145 SG::WriteDecorHandle<xAOD::TrackParticleContainer, int> numHGTDHitsHandle(m_numHGTDHitsKey, ctx);
146
147 // ================================================== //
148 // ============ RETRIEVE MEASUREMENTS =============== //
149 // ================================================== //
150
151 ATH_MSG_DEBUG("Reading input collection with key " << m_uncalibratedMeasurementContainerKey_HGTD.key());
152
153 const xAOD::UncalibratedMeasurementContainer* uncalibratedMeasurementContainer{nullptr};
154 ATH_CHECK(SG::get(uncalibratedMeasurementContainer ,m_uncalibratedMeasurementContainerKey_HGTD, ctx));
155 ATH_MSG_DEBUG("Retrieved " << uncalibratedMeasurementContainer->size()
156 << " input elements from key " << m_uncalibratedMeasurementContainerKey_HGTD.key());
157
158 // Modern approach uses surface accessor instead of detector element map
159
160 ATH_MSG_DEBUG("Investigating HGTD geometry structure");
161
162 Acts::GeometryContext geoContext = m_trackingGeometryTool->getGeometryContext(ctx).context();
163 Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(ctx);
164
165
166 // Get a list of all identifiers associated with HGTD clusters
167 if (msgLvl(MSG::DEBUG)) { // DEBUG
168 const xAOD::HGTDClusterContainer* hgtdInitHandle{nullptr};
169 ATH_CHECK(SG::get(hgtdInitHandle, m_HGTDClusterContainerName, ctx));
170
171 std::unordered_set<uint32_t> hgtdVolumes {};
172 std::unordered_map<uint32_t, std::unordered_set<uint32_t>> hgtdLayers {}; // volume -> layers
173
174 for (const xAOD::HGTDCluster* cluster : *hgtdInitHandle) {
175 const Acts::Surface* surface = m_surfAcc.get(cluster);
176
177 if (surface) {
178 Acts::GeometryIdentifier geoID = surface->geometryId();
179 uint32_t vol = geoID.volume();
180 uint32_t layer = geoID.layer();
181
182 hgtdVolumes.insert(vol);
183 hgtdLayers[vol].insert(layer);
184
185 }
186 else {
187 ATH_MSG_ERROR("Failed to retrieve surface for cluster " << cluster->index());
188 return StatusCode::FAILURE;
189 }
190 }
191
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]) {
196 ATH_MSG_DEBUG(" - Layer " << lyr);
197 }
198 }
199 } // DEBUG
200
201 detail::TrackFindingMeasurements measurements(1ul); // only one measurement collection: HGTD clusters
202 ATH_CHECK( collectMeasurements(ctx, measurements) );
203
204 using DefaultTrackStateCreator = Acts::TrackStateCreator<ActsTrk::detail::UncalibSourceLinkAccessor::Iterator,detail::RecoTrackContainer>;
205
206 ActsTrk::detail::UncalibSourceLinkAccessor slAccessor(measurements.measurementRanges());
207 DefaultTrackStateCreator::SourceLinkAccessor slAccessorDelegate;
208 slAccessorDelegate.connect<&ActsTrk::detail::UncalibSourceLinkAccessor::range>(&slAccessor);
209
210 // acts_tracking_geometry is already declared in processTrackExtension function
211
212 ATH_MSG_DEBUG("Create " << uncalibratedMeasurementContainer->size()
213 << " source links from measurements in "
215
216 if (m_trackStatePrinter.isSet()) {
217 m_trackStatePrinter->printMeasurements(ctx,
218 {uncalibratedMeasurementContainer}, //wrap in a braced initializer list to make a vector
219 measurements.measurementOffsets());
220 }
221
222 Acts::PropagatorPlainOptions plainOptions(geoContext, mfContext);
223 plainOptions.direction = Acts::Direction::Forward();
224
226 mfContext,
228 //slAccessorDelegate,
229 m_trackFinder->ckfExtensions,
230 plainOptions);
231
232 auto calibrator = detail::OnTrackCalibrator<detail::RecoTrackStateContainer>(ctx,
237
238 DefaultTrackStateCreator defaultTrackStateCreator{};
239 defaultTrackStateCreator.sourceLinkAccessor = slAccessorDelegate;
240 defaultTrackStateCreator.calibrator.template connect<&detail::OnTrackCalibrator<detail::RecoTrackStateContainer>::calibrate>(&calibrator);
241
242 options.extensions.createTrackStates.template connect<
243 &DefaultTrackStateCreator::createTrackStates>(&defaultTrackStateCreator);
244
245 // ================================================== //
246 // ============ LOOP OVER TRACKPARTICLES ============ //
247 // ================================================== //
248
249 // Loop over each track particle and decorate it with various information
250 for (const xAOD::TrackParticle* trackParticle : *trackParticles) {
251 // Default to empty track data
252 TrackExtensionData trackData;
253
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;
258 }
259
260 const ActsTrk::TrackContainer::ConstTrackProxy& track = optional_track.value();
261
262 Acts::VectorTrackContainer trackBackend;
263 Acts::VectorMultiTrajectory trackStateBackend;
264 detail::RecoTrackContainer tracksContainerTemp(trackBackend, trackStateBackend);
265
266 // Retrieve quantities for ACTS track
267 float trackEta = Acts::VectorHelpers::eta(track.momentum());
268
269 // Check eta coverage first
270 if (std::abs(trackEta) < m_minEtaAcceptance or
271 std::abs(trackEta) > m_maxEtaAcceptance) {
272 ATH_MSG_DEBUG("!!!!! ------ Track eta " << trackEta
273 << " outside eta range [" << m_minEtaAcceptance.value() << ", " << m_maxEtaAcceptance.value()
274 << "], skipping extension ------ !!!!!");
275
276 // set default values
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;
284
285 continue;
286 }
287
288 float trackpT = track.transverseMomentum();
289 float trackPhi = track.phi();
290 float trackNmeasurements = track.nMeasurements();
291
292 ATH_MSG_DEBUG("TrackParticle " << trackParticle->index() << " has ACTS track with eta: " << trackEta << ", phi = " << trackPhi << " pT: " << trackpT << " and nMeasurements: " << trackNmeasurements);
293
294 // Parameters at last measurement state
295 const auto lastMeasurementState = Acts::findLastMeasurementState(track);
296 if (not lastMeasurementState.ok()) {
297 ATH_MSG_ERROR("Problem finding last measurement state for acts track");
298 return StatusCode::FAILURE;
299 }
300 const Acts::BoundTrackParameters lastMeasurementStateParameters = track.createParametersFromState(*lastMeasurementState);
301
302 // Parameters at reference state of track - not necessarily a measurement state!!!
303 const Acts::Surface& refSurface = track.referenceSurface();
304 const Acts::BoundTrackParameters parametersAtRefSurface(refSurface.getSharedPtr(),
305 track.parameters(),
306 track.covariance(),
307 track.particleHypothesis());
308
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"));
316
317 // Now use the *last measurement parameters* parameters for the CKF
318 auto result = m_trackFinder->ckf.findTracks(lastMeasurementStateParameters, options,tracksContainerTemp);
319
320 ATH_MSG_DEBUG("Built " << tracksContainerTemp.size() << " tracks from it");
321
322 for (const detail::RecoTrackContainer::TrackProxy trackProxy : tracksContainerTemp) {
323 trackData = processTrackExtension(ctx, trackParticle, trackProxy);
324 }
325
326 // Apply decorations from the track data
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;
334 } // loop on tracks
335
336
337 return StatusCode::SUCCESS;
338}
#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
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
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.
Definition Decoration.cxx:9
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 638 of file HGTDTrackExtensionAlg.cxx.

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

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

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

◆ initialize()

StatusCode ActsTrk::HGTDTrackExtensionAlg::initialize ( )
overridevirtual

Definition at line 43 of file HGTDTrackExtensionAlg.cxx.

44{
45 ATH_MSG_DEBUG("Initializing " << name() << "...");
46
49
50 // Initialize all WriteDecorHandleKeys
54 ATH_CHECK(m_layerClusterTimeKey.initialize());
55 ATH_CHECK(m_extrapXKey.initialize());
56 ATH_CHECK(m_extrapYKey.initialize());
57 ATH_CHECK(m_numHGTDHitsKey.initialize());
58
59 ATH_CHECK(m_actsTrackLinkKey.initialize());
60
61 // Initialize HGTD-extension related keys
63
64 // Checks for logger
67
68 ATH_CHECK(m_monTool.retrieve(EnableTool{not m_monTool.empty()}));
69 ATH_CHECK(m_trackStatePrinter.retrieve(EnableTool{not m_trackStatePrinter.empty()}));
70 ATH_CHECK(m_pixelCalibTool.retrieve(EnableTool{not m_pixelCalibTool.empty()}));
71 ATH_CHECK(m_stripCalibTool.retrieve(EnableTool{not m_stripCalibTool.empty()}));
72 ATH_CHECK(m_hgtdCalibTool.retrieve(EnableTool{not m_hgtdCalibTool.empty()}));
73
74 //Initialize logger
75 m_logger = makeActsAthenaLogger(this, "Acts");
76
77 // Initialize surface accessor
78 m_surfAcc = ActsTrk::detail::xAODUncalibMeasSurfAcc{m_trackingGeometryTool.get()};
79
80
81 auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
82 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry = m_trackingGeometryTool->trackingGeometry();
83
84 detail::Stepper stepper(std::move(magneticField));
85 detail::Navigator::Config cfg{trackingGeometry};
86 cfg.resolvePassive = true;
87 cfg.resolveMaterial = true;
88 cfg.resolveSensitive = true;
89 detail::Navigator navigator(cfg, logger().cloneWithSuffix("Navigator"));
90 detail::Propagator propagator(std::move(stepper), std::move(navigator), logger().cloneWithSuffix("Prop"));
91
92 // Using the CKF propagator as extrapolator
93 detail::Extrapolator extrapolator = propagator;
94
95 // Configure track selector for extension
96 Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg(std::vector<double>({0, 4})); //abs value here
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;
105
106 ATH_MSG_DEBUG(trackSelectorCfg);
107
108 detail::CKF_config ckfConfig{
109 std::move(extrapolator),
110 detail::CKF{std::move(propagator), logger().cloneWithSuffix("CKF")},
111 {},
112 Acts::TrackSelector{trackSelectorCfg}};
113
114 m_trackFinder = std::make_unique<detail::CKF_config>(std::move(ckfConfig));
115
116 return StatusCode::SUCCESS;
117}
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.
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_actsTrackLinkKey
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 705 of file HGTDTrackExtensionAlg.cxx.

705 {
706 // Get volume and layer
707 std::uint32_t volume = geoID.volume();
708 std::uint32_t layer = geoID.layer();
709
710 // Check if it's one of the known HGTD volumes
711 if (volume == 2 || volume == 25) {
712 // Check if it's one of the HGTD layers
713 if (layer == 2 || layer == 4 || layer == 6 || layer == 8) {
714 return true;
715 }
716 }
717
718 return false;
719}

◆ 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 385 of file HGTDTrackExtensionAlg.cxx.

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