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 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
 Get filter decision:
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 Set filter decision:
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 62 of file HGTDTrackExtensionAlg.h.

Member Typedef Documentation

◆ CKFOptions

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

Definition at line 69 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

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

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

54{
55 // If we didn't find any symlinks to add, just return the collection
56 // from the base class. Otherwise, return the extended collection.
57 if (!m_extendedExtraObjects.empty()) {
59 }
61}
Common base class for algorithms.

◆ filterPassed()

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

Get filter decision:

Definition at line 93 of file AthCommonAlgorithm.h.

93 {
94 return execState( ctx ).filterPassed();
95 }
virtual bool filterPassed(const EventContext &ctx) const
Get filter decision:

◆ getExtrapolationPosition()

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

Definition at line 633 of file HGTDTrackExtensionAlg.cxx.

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

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

◆ getHGTDLayerIndex()

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

Definition at line 600 of file HGTDTrackExtensionAlg.cxx.

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

◆ 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()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::isClonable ( ) const
inlineoverridevirtualinherited

Specify if the algorithm is clonable.

Only relevant for non-reentrant algorithms. Actual number of clones needs to be set via the "Cardinality" property.

Reimplemented in AFP_DigiTop, AlgB, AlgT, BCM_Digitization, CscDigitBuilder, CscDigitToCscRDO, G4AtlasAlg, G4RunAlg, HGTD_Digitization, HiveAlgBase, InDet::GNNSeedingTrackMaker, InDet::SCT_Clusterization, InDet::SiSPGNNTrackMaker, InDet::SiSPSeededTrackFinder, InDet::SiTrackerSpacePointFinder, ISF::SimKernelMT, ITk::StripDigitization, ITkPixelCablingAlg, ITkStripCablingAlg, LArHitEMapMaker, LArTTL1Maker, LUCID_DigiTop, LVL1::L1TopoSimulation, MergeCalibHits, MergeGenericMuonSimHitColl, MergeHijingPars, MergeMcEventCollection, MergeTrackRecordCollection, MergeTruthJets, MergeTruthParticles, MuonDigitizer, PileUpMTAlg, PixelDigitization, RoIBResultToxAOD, SCT_ByteStreamErrorsTestAlg, SCT_CablingCondAlgFromCoraCool, SCT_CablingCondAlgFromText, SCT_ConditionsParameterTestAlg, SCT_ConditionsSummaryTestAlg, SCT_ConfigurationConditionsTestAlg, SCT_Digitization, SCT_FlaggedConditionTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_PrepDataToxAOD, SCT_RawDataToxAOD, SCT_ReadCalibChipDataTestAlg, SCT_ReadCalibDataTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_SiliconConditionsTestAlg, SCT_StripVetoTestAlg, SCT_TdaqEnabledTestAlg, SCT_TestCablingAlg, SCTEventFlagWriter, SCTRawDataProvider, SCTSiLorentzAngleTestAlg, SCTSiPropertiesTestAlg, SGInputLoader, Simulation::BeamEffectsAlg, TileHitVecToCnt, TileMuonFitter, TilePulseForTileMuonReceiver, TileRawChannelMaker, TRTDigitization, and ZDC_DigiTop.

Definition at line 68 of file AthCommonAlgorithm.h.

68 {
69 return true;
70 }

◆ isHGTDSurface()

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

Definition at line 700 of file HGTDTrackExtensionAlg.cxx.

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

◆ logger()

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

Private access to the logger.

Definition at line 74 of file HGTDTrackExtensionAlg.h.

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

Set filter decision:

Reimplemented in AthFilterAlgorithm.

Definition at line 99 of file AthCommonAlgorithm.h.

99 {
101 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const
Set filter decision:

◆ sysExecute()

StatusCode AthCommonAlgorithm< 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.

Reimplemented in AthAnalysisAlgorithm.

Definition at line 80 of file AthCommonAlgorithm.cxx.

41{
42 return BaseAlg::sysExecute (ctx);
43}

◆ sysInitialize()

StatusCode AthCommonAlgorithm< 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 AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, HypoBase, InputMakerBase, and PyAthena::Alg.

Definition at line 60 of file AthCommonAlgorithm.cxx.

71 {
73
74 if (sc.isFailure()) {
75 return sc;
76 }
77
78 ServiceHandle<ICondSvc> cs("CondSvc",name());
79 for (auto h : outputHandles()) {
80 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
81 // do this inside the loop so we don't create the CondSvc until needed
82 if ( cs.retrieve().isFailure() ) {
83 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
85 }
86 if (cs->regHandle(this,*h).isFailure()) {
88 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
89 << " with CondSvc");
90 }
91 }
92 }
93 return sc;
94}
virtual StatusCode sysInitialize() override
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 91 of file HGTDTrackExtensionAlg.h.

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

◆ m_calibrationContext

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

Definition at line 157 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 AthCommonAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 108 of file AthCommonAlgorithm.h.

◆ m_extrapolationTool

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

Definition at line 103 of file HGTDTrackExtensionAlg.h.

103{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 87 of file HGTDTrackExtensionAlg.h.

87{ 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 88 of file HGTDTrackExtensionAlg.h.

88{ 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 110 of file HGTDTrackExtensionAlg.h.

110{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 78 of file HGTDTrackExtensionAlg.h.

78{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 85 of file HGTDTrackExtensionAlg.h.

85{ 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 86 of file HGTDTrackExtensionAlg.h.

86{ 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 84 of file HGTDTrackExtensionAlg.h.

84{ 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 83 of file HGTDTrackExtensionAlg.h.

83{ 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 122 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 95 of file HGTDTrackExtensionAlg.h.

95{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 94 of file HGTDTrackExtensionAlg.h.

94{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 99 of file HGTDTrackExtensionAlg.h.

99{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 81 of file HGTDTrackExtensionAlg.h.

81{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 106 of file HGTDTrackExtensionAlg.h.

106{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 108 of file HGTDTrackExtensionAlg.h.

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

◆ m_surfAcc

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

Definition at line 115 of file HGTDTrackExtensionAlg.h.

115{};

◆ m_trackFinder

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

Definition at line 124 of file HGTDTrackExtensionAlg.h.

◆ m_trackingGeometryTool

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

Definition at line 101 of file HGTDTrackExtensionAlg.h.

101{this, "TrackingGeometryTool", ""};

◆ m_trackParticleContainerName

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

Definition at line 77 of file HGTDTrackExtensionAlg.h.

77{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 113 of file HGTDTrackExtensionAlg.h.

113{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 118 of file HGTDTrackExtensionAlg.h.

118{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: