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

#include <TrackContainerHandlesHelper.h>

Collaboration diagram for ActsTrk::ConstTrackContainerHandlesHelper:

Public Member Functions

StatusCode initialize (const std::string &prefix)
 Sets up the handles.
template<class PropOwner>
 ConstTrackContainerHandlesHelper (PropOwner *owner)
 Constructor taking the pointer to the class holding the object used to declare the data dependency from the WriteHandleKeys to the AvalancheScheduler.
std::unique_ptr< ActsTrk::PersistentTrackContainerbuild (const Acts::TrackingGeometry *geo, const Acts::GeometryContext &geoContext, const EventContext &context) const

Private Member Functions

void restoreUncalibMeasurementPtr (xAOD::TrackStateAuxContainer &statesLink) const
std::unique_ptr< ActsTrk::MultiTrajectorybuildMtj (const Acts::TrackingGeometry *geo, const EventContext &context) const

Private Attributes

SG::ReadHandleKey< xAOD::TrackStateContainerm_statesKey
SG::ReadHandleKey< xAOD::TrackParametersContainerm_parametersKey
SG::ReadHandleKey< xAOD::TrackJacobianContainerm_jacobiansKey
SG::ReadHandleKey< xAOD::TrackMeasurementContainerm_measurementsKey
SG::ReadHandleKey< xAOD::TrackSurfaceContainerm_surfacesKey
SG::WriteHandleKey< ActsTrk::MultiTrajectorym_mtjKey
SG::ReadHandleKey< xAOD::TrackSummaryContainerm_xAODTrackSummaryKey
SG::ReadHandleKey< xAOD::TrackSurfaceContainerm_trackSurfacesKey
SG::WriteHandleKey< ActsTrk::TrackSummaryContainerm_trackSummaryKey

Detailed Description

Definition at line 85 of file TrackContainerHandlesHelper.h.

Constructor & Destructor Documentation

◆ ConstTrackContainerHandlesHelper()

template<class PropOwner>
ActsTrk::ConstTrackContainerHandlesHelper::ConstTrackContainerHandlesHelper ( PropOwner * owner)

Constructor taking the pointer to the class holding the object used to declare the data dependency from the WriteHandleKeys to the AvalancheScheduler.

The object should be defined in the header like ActsTrk::ConstTrackContainerHandlesHelper m_trackHelper{this};

Member Function Documentation

◆ build()

std::unique_ptr< ActsTrk::PersistentTrackContainer > ActsTrk::ConstTrackContainerHandlesHelper::build ( const Acts::TrackingGeometry * geo,
const Acts::GeometryContext & geoContext,
const EventContext & context ) const

Definition at line 253 of file TrackContainerHandlesHelper.cxx.

255 {
256
257 std::unique_ptr<ActsTrk::MultiTrajectory> mtj = buildMtj(geo,evtContext);
258 auto mtjHandle = SG::makeHandle(m_mtjKey, evtContext);
259 if (mtjHandle.record(std::move(mtj)).isFailure()) {
260 throw std::runtime_error(
261 "ConstTrackContainerHandle<C>::build failed recording MTJ");
262 }
263 DataLink<xAOD::TrackSummaryContainer> summaryLink(m_xAODTrackSummaryKey.key(),
264 evtContext);
265 if (not summaryLink.isValid()) {
266 throw std::runtime_error(
267 "ConstTrackContainerHandle::build, SummaryLink is invalid");
268 }
269
270 auto surfacesHandle = SG::makeHandle(m_trackSurfacesKey, evtContext);
271 if (not surfacesHandle.isValid()) {
272 throw std::runtime_error(
273 "ConstTrackContainerHandle::build, SurfaceHandle is invalid");
274 }
275
276 auto constTrackSummary = std::make_unique<ActsTrk::TrackSummaryContainer>(summaryLink);
277 constTrackSummary->decodeSurfaces( surfacesHandle.cptr());
278
279 auto summaryHandle = SG::makeHandle(m_trackSummaryKey, evtContext);
280 if (summaryHandle.record(std::move(constTrackSummary)).isFailure()) {
281 throw std::runtime_error(
282 "MutableTrackContainerHandle::build, can't record "
283 "TrackSummary");
284 }
285
286 auto constTrack = std::make_unique<ActsTrk::PersistentTrackContainer>(
287 DataLink<ActsTrk::TrackSummaryContainer>(m_trackSummaryKey.key(),
288 evtContext),
289 DataLink<ActsTrk::MultiTrajectory>(m_mtjKey.key(), evtContext));
290
291 return constTrack;
292
293}
SG::WriteHandleKey< ActsTrk::MultiTrajectory > m_mtjKey
SG::WriteHandleKey< ActsTrk::TrackSummaryContainer > m_trackSummaryKey
SG::ReadHandleKey< xAOD::TrackSurfaceContainer > m_trackSurfacesKey
SG::ReadHandleKey< xAOD::TrackSummaryContainer > m_xAODTrackSummaryKey
std::unique_ptr< ActsTrk::MultiTrajectory > buildMtj(const Acts::TrackingGeometry *geo, const EventContext &context) const
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())

◆ buildMtj()

std::unique_ptr< ActsTrk::MultiTrajectory > ActsTrk::ConstTrackContainerHandlesHelper::buildMtj ( const Acts::TrackingGeometry * geo,
const EventContext & context ) const
private

Definition at line 202 of file TrackContainerHandlesHelper.cxx.

203 {
204 // we need to build it from backends
205 DataLink<xAOD::TrackStateAuxContainer> statesLink(m_statesKey.key() + "Aux.",
206 evtContext);
207 if (not statesLink.isValid()) {
208 throw std::runtime_error(
209 "ConstMultiTrajectoryHandle::build, StatesLink is invalid");
210 }
211 // The restoration of the pointers to uncalibrated measurements should only
212 // be done once, if it is done in parallel by multiple callers all callers should
213 // write exactly the same value to exactly the same memory location
214 xAOD::TrackStateAuxContainer *nonConstStatesLink ATLAS_THREAD_SAFE = const_cast<xAOD::TrackStateAuxContainer *>(statesLink.getDataPtr());
215 restoreUncalibMeasurementPtr(*nonConstStatesLink);
216
217 DataLink<xAOD::TrackParametersAuxContainer> parametersLink(
218 m_parametersKey.key() + "Aux.", evtContext);
219 if (not parametersLink.isValid()) {
220 throw std::runtime_error(
221 "ConstMultiTrajectoryHandle::build, ParametersLink is invalid");
222 }
223
224 DataLink<xAOD::TrackJacobianAuxContainer> jacobiansLink(
225 m_jacobiansKey.key() + "Aux.", evtContext);
226 if (not jacobiansLink.isValid()) {
227 throw std::runtime_error(
228 "ConstMultiTrajectoryHandle::build, JacobiansLink is invalid");
229 }
230
231 DataLink<xAOD::TrackMeasurementAuxContainer> measurementsLink(
232 m_measurementsKey.key() + "Aux.", evtContext);
233 if (not measurementsLink.isValid()) {
234 throw std::runtime_error(
235 "ConstMultiTrajectoryHandle::build, MeasurementsLink is invalid");
236 }
237
238 DataLink<xAOD::TrackSurfaceAuxContainer> surfacesLink(
239 m_surfacesKey.key() + "Aux.", evtContext);
240 if (not surfacesLink.isValid()) {
241 throw std::runtime_error(
242 "ConstMultiTrajectoryHandle::build, SurfacesLink is invalid");
243 }
244
245
246 auto cmtj = std::make_unique<ActsTrk::MultiTrajectory>(
247 statesLink, parametersLink, jacobiansLink, measurementsLink, surfacesLink);
248 cmtj->fillSurfaces(geo);
249 return cmtj;
250}
#define ATLAS_THREAD_SAFE
SG::ReadHandleKey< xAOD::TrackMeasurementContainer > m_measurementsKey
SG::ReadHandleKey< xAOD::TrackSurfaceContainer > m_surfacesKey
SG::ReadHandleKey< xAOD::TrackStateContainer > m_statesKey
void restoreUncalibMeasurementPtr(xAOD::TrackStateAuxContainer &statesLink) const
SG::ReadHandleKey< xAOD::TrackJacobianContainer > m_jacobiansKey
SG::ReadHandleKey< xAOD::TrackParametersContainer > m_parametersKey
TrackStateAuxContainer_v1 TrackStateAuxContainer

◆ initialize()

StatusCode ActsTrk::ConstTrackContainerHandlesHelper::initialize ( const std::string & prefix)

Sets up the handles.

  • prefix - common prefix for all the names the value would typically be taken from configurable string property

Definition at line 174 of file TrackContainerHandlesHelper.cxx.

175 {
176 m_statesKey = prefix + "TrackStates";
177 m_parametersKey = prefix + "TrackParameters";
178 m_jacobiansKey = prefix + "TrackJacobians";
179 m_measurementsKey = prefix + "TrackMeasurements";
180 m_surfacesKey = prefix + "TrackSurfaces";
181 m_mtjKey = prefix + "MultiTrajectory";
182
189
190 m_xAODTrackSummaryKey = prefix + "TrackSummary";
191 m_trackSurfacesKey = prefix + "TrackSurfaces";
192 m_trackSummaryKey = prefix + "TrackSummary";
193
197
198 return StatusCode::SUCCESS;
199}
#define INIT_CHECK(key)

◆ restoreUncalibMeasurementPtr()

void ActsTrk::ConstTrackContainerHandlesHelper::restoreUncalibMeasurementPtr ( xAOD::TrackStateAuxContainer & statesLink) const
private

Definition at line 324 of file TrackContainerHandlesHelper.cxx.

324 {
325 using link_t = ElementLink< xAOD::UncalibratedMeasurementContainer >;
326 static const SG::ConstAccessor< link_t > link_accessor("uncalibratedMeasurementLink");
327
328 if (statesLink.getAuxIDs().test(link_accessor.auxid())){
329 const_span<link_t> elementLinks = getElementVector(statesLink, link_accessor);
330
331 static const SG::AuxElement::Decorator< const xAOD::UncalibratedMeasurement * >
332 decor("uncalibratedMeasurement");
333
334 std::span<const xAOD::UncalibratedMeasurement *> uncalibratedMeasurements
335 = createDecoration( statesLink, decor);
336
337 for (unsigned int index = 0; index < elementLinks.size(); ++index) {
338 const link_t &el = elementLinks[index];
339 const xAOD::UncalibratedMeasurement *a_measurement = (el.isValid() ? *el : nullptr);
340 // @TODO is this check necessary ?
341 if (uncalibratedMeasurements[index] != nullptr && a_measurement != uncalibratedMeasurements[index]) {
342 throwConflictingUncalibratedMeasurementPointerValue(uncalibratedMeasurements[index], a_measurement);
343 }
344 uncalibratedMeasurements[index]=a_measurement;
345 }
346 }
347 else {
348 std::cerr << "WARNING no uncalibratedMeasurementLink aux data " << std::endl;
349 }
350}
virtual const auxid_set_t & getAuxIDs() const override
Get the types(names) of variables handled by this container.
str index
Definition DeMoScan.py:362
SG::ConstAccessor< T, ALLOC > ConstAccessor
Definition AuxElement.h:570
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.

Member Data Documentation

◆ m_jacobiansKey

SG::ReadHandleKey<xAOD::TrackJacobianContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_jacobiansKey
private

Definition at line 113 of file TrackContainerHandlesHelper.h.

◆ m_measurementsKey

SG::ReadHandleKey<xAOD::TrackMeasurementContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_measurementsKey
private

Definition at line 114 of file TrackContainerHandlesHelper.h.

◆ m_mtjKey

SG::WriteHandleKey<ActsTrk::MultiTrajectory> ActsTrk::ConstTrackContainerHandlesHelper::m_mtjKey
private

Definition at line 117 of file TrackContainerHandlesHelper.h.

◆ m_parametersKey

SG::ReadHandleKey<xAOD::TrackParametersContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_parametersKey
private

Definition at line 112 of file TrackContainerHandlesHelper.h.

◆ m_statesKey

SG::ReadHandleKey<xAOD::TrackStateContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_statesKey
private

Definition at line 111 of file TrackContainerHandlesHelper.h.

◆ m_surfacesKey

SG::ReadHandleKey<xAOD::TrackSurfaceContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_surfacesKey
private

Definition at line 115 of file TrackContainerHandlesHelper.h.

◆ m_trackSummaryKey

SG::WriteHandleKey<ActsTrk::TrackSummaryContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_trackSummaryKey
private

Definition at line 127 of file TrackContainerHandlesHelper.h.

◆ m_trackSurfacesKey

SG::ReadHandleKey<xAOD::TrackSurfaceContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_trackSurfacesKey
private

Definition at line 126 of file TrackContainerHandlesHelper.h.

◆ m_xAODTrackSummaryKey

SG::ReadHandleKey<xAOD::TrackSummaryContainer> ActsTrk::ConstTrackContainerHandlesHelper::m_xAODTrackSummaryKey
private

Definition at line 125 of file TrackContainerHandlesHelper.h.


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