ATLAS Offline Software
TrackContainerHandlesHelper.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
8 
9 #include <string>
10 #include <sstream>
11 #include <regex>
12 #include <span>
13 
14 #include "StoreGate/WriteHandle.h"
15 
16 namespace ActsTrk {
17 
18 std::string prefixFromTrackContainerName(const std::string& tracks) {
19  std::regex word_regex("(.*)Tracks$");
20  std::smatch match_regex;
21 
22  if ( not std::regex_search(tracks, match_regex, word_regex) or match_regex.size() < 2) {
23  throw std::runtime_error(
24  std::string("prefixFromTrackContainerName: key does not contain "
25  "Tracks in the name ") + tracks);
26  }
27 
28  return match_regex[1].str();
29 }
30 
31 template <typename T, typename IFACE, typename AUX>
32 void recordxAOD(const SG::WriteHandleKey<T>& key, IFACE& iface, AUX& aux,
33  const EventContext& evtContext) {
34  SG::WriteHandle<T> handle = SG::makeHandle(key, evtContext);
35  if (handle.record(std::move(iface), std::move(aux)).isFailure()) {
36  throw std::runtime_error(
37  std::string("MutableTrackContainerHandlesHelper::recordxAOD, can't record ") + key.key() + " backend");
38  }
39 }
40 
41 namespace {
42 template <typename KTYPE>
43 void INIT_CHECK(KTYPE& key) {
44  if (key.initialize().isFailure()) {
45  throw std::runtime_error(
46  std::string("MutableTrackContainerHandlesHelper: can not initialize handle") + key.key());
47  }
48 };
49 } // namespace
50 
52  const std::string& prefix) {
53  m_statesKey = prefix + "TrackStates";
54  m_parametersKey = prefix + "TrackParameters";
55  m_jacobiansKey = prefix + "TrackJacobians";
56  m_measurementsKey = prefix + "TrackMeasurements";
57  m_surfacesKey = prefix + "TrackStateSurfaces";
58  m_mtjKey =
59  prefix + "MultiTrajectory"; // identical names, underlying types are distinct
60  INIT_CHECK(m_statesKey);
61  INIT_CHECK(m_parametersKey);
62  INIT_CHECK(m_jacobiansKey);
63  INIT_CHECK(m_measurementsKey);
64  INIT_CHECK(m_surfacesKey);
65  INIT_CHECK(m_mtjKey);
66 
67  // Track Container backends
68  m_xAODTrackSummaryKey = prefix + "TrackSummary";
69  m_trackSurfacesKey = prefix + "TrackSurfaces";
71  prefix +
72  "TrackSummary"; // identical names, underlying types are distinct
73 
74  INIT_CHECK(m_xAODTrackSummaryKey);
75  INIT_CHECK(m_trackSurfacesKey);
76  INIT_CHECK(m_trackSummaryKey);
77  return StatusCode::SUCCESS;
78 }
79 
80 std::unique_ptr<ActsTrk::MultiTrajectory>
82  ActsTrk::MutableMultiTrajectory&& mmtj, const EventContext& evtContext) const {
83 
84  mmtj.trim();
85 
86  auto statesBackendHandle = SG::makeHandle(m_statesKey, evtContext);
87  auto statesInterface =
88  ActsTrk::makeInterfaceContainer<xAOD::TrackStateContainer>(
89  mmtj.trackStatesAux());
90  recordxAOD(m_statesKey, statesInterface, mmtj.m_trackStatesAux, evtContext);
91 
92  auto parametersInterface =
93  ActsTrk::makeInterfaceContainer<xAOD::TrackParametersContainer>(
94  mmtj.trackParametersAux());
95  recordxAOD(m_parametersKey, parametersInterface, mmtj.m_trackParametersAux, evtContext);
96 
97  auto jacobiansInterface =
98  ActsTrk::makeInterfaceContainer<xAOD::TrackJacobianContainer>(
99  mmtj.trackJacobiansAux());
100  recordxAOD(m_jacobiansKey, jacobiansInterface, mmtj.m_trackJacobiansAux, evtContext);
101 
102  auto measurementsInterface =
103  ActsTrk::makeInterfaceContainer<xAOD::TrackMeasurementContainer>(
104  mmtj.trackMeasurementsAux());
105  recordxAOD(m_measurementsKey, measurementsInterface, mmtj.m_trackMeasurementsAux, evtContext);
106 
107  auto surfacesBackendHandle = SG::makeHandle(m_surfacesKey, evtContext);
108  recordxAOD(m_surfacesKey, mmtj.m_surfacesBackend, mmtj.m_surfacesBackendAux, evtContext);
109 
110  // construct const MTJ version
111  auto cmtj = std::make_unique<ActsTrk::MultiTrajectory>(
113  evtContext),
115  m_parametersKey.key() + "Aux.", evtContext),
117  m_jacobiansKey.key() + "Aux.", evtContext),
119  m_measurementsKey.key() + "Aux.", evtContext),
121  m_surfacesKey.key() + "Aux.", evtContext)
122  );
123  cmtj->moveSurfaces(&mmtj);
124  cmtj->moveLinks(&mmtj);
125 
126  return cmtj;
127 }
128 
129 std::unique_ptr<ActsTrk::TrackContainer>
131  ActsTrk::MutableTrackContainer&& tc, const Acts::GeometryContext& geoContext, const EventContext& evtContext) const {
132 
133 
134  std::unique_ptr<ActsTrk::MultiTrajectory> constMtj =
135  moveToConst(std::move(tc.trackStateContainer()), evtContext);
136 
137  auto constMtjHandle = SG::makeHandle(m_mtjKey, evtContext);
138  if (constMtjHandle.record(std::move(constMtj)).isFailure()) {
139  throw std::runtime_error(
140  "MutableTrackContainerHandlesHelper::moveToConst, can't record "
141  "ConstMultiTrajectory");
142  }
143 
144  auto trackSurfacesAux = std::make_unique<xAOD::TrackSurfaceAuxContainer>();
145  tc.container().encodeSurfaces(trackSurfacesAux.get(), geoContext);
146 
147  auto interfaceTrackSummaryContainer =
148  ActsTrk::makeInterfaceContainer<xAOD::TrackSummaryContainer>(
149  tc.container().m_mutableTrackBackendAux.get());
150  recordxAOD(m_xAODTrackSummaryKey, interfaceTrackSummaryContainer, tc.container().m_mutableTrackBackendAux, evtContext);
151 
152  auto trackSurfaces = ActsTrk::makeInterfaceContainer<xAOD::TrackSurfaceContainer>(
153  trackSurfacesAux.get());
154  recordxAOD(m_trackSurfacesKey, trackSurfaces, trackSurfacesAux, evtContext);
155 
156  auto constTrackSummary = std::make_unique<ActsTrk::TrackSummaryContainer>(
158  evtContext));
159  constTrackSummary->restoreDecorations();
160  constTrackSummary->fillFrom(tc.container());
161 
162  auto constTrackSummaryHandle = SG::makeHandle(m_trackSummaryKey, evtContext);
163  if (constTrackSummaryHandle.record(std::move(constTrackSummary))
164  .isFailure()) {
165  throw std::runtime_error(
166  "MutableTrackContainerHandlesHelper::moveToConst, can't record "
167  "TrackSummary");
168  }
169  auto constTrack = std::make_unique<ActsTrk::TrackContainer>(
171  evtContext),
173  return constTrack;
174 }
175 
176 // const version
178  const std::string& prefix) {
179  m_statesKey = prefix + "TrackStates";
180  m_parametersKey = prefix + "TrackParameters";
181  m_jacobiansKey = prefix + "TrackJacobians";
182  m_measurementsKey = prefix + "TrackMeasurements";
183  m_surfacesKey = prefix + "TrackSurfaces";
184  m_mtjKey = prefix + "MultiTrajectory";
185 
186  INIT_CHECK(m_statesKey);
187  INIT_CHECK(m_parametersKey);
188  INIT_CHECK(m_jacobiansKey);
189  INIT_CHECK(m_measurementsKey);
190  INIT_CHECK(m_surfacesKey);
191  INIT_CHECK(m_mtjKey);
192 
193  m_xAODTrackSummaryKey = prefix + "TrackSummary";
194  m_trackSurfacesKey = prefix + "TrackSurfaces";
195  m_trackSummaryKey = prefix + "TrackSummary";
196 
197  INIT_CHECK(m_xAODTrackSummaryKey);
198  INIT_CHECK(m_trackSurfacesKey);
199  INIT_CHECK(m_trackSummaryKey);
200 
201  return StatusCode::SUCCESS;
202 }
203 
204 std::unique_ptr<ActsTrk::MultiTrajectory>
205 ConstTrackContainerHandlesHelper::buildMtj(const Acts::TrackingGeometry* geo,
206  const Acts::GeometryContext& geoContext,
207  const EventContext& evtContext) const {
208  // we need to build it from backends
209  DataLink<xAOD::TrackStateAuxContainer> statesLink(m_statesKey.key() + "Aux.",
210  evtContext);
211  if (not statesLink.isValid()) {
212  throw std::runtime_error(
213  "ConstMultiTrajectoryHandle::build, StatesLink is invalid");
214  }
215  // The restoration of the pointers to uncalibrated measurements should only
216  // be done once, if it is done in parallel by multiple callers all callers should
217  // write exactly the same value to exactly the same memory location
218  xAOD::TrackStateAuxContainer *nonConstStatesLink ATLAS_THREAD_SAFE = const_cast<xAOD::TrackStateAuxContainer *>(statesLink.getDataPtr());
219  restoreUncalibMeasurementPtr(*nonConstStatesLink);
220 
222  m_parametersKey.key() + "Aux.", evtContext);
223  if (not parametersLink.isValid()) {
224  throw std::runtime_error(
225  "ConstMultiTrajectoryHandle::build, ParametersLink is invalid");
226  }
227 
229  m_jacobiansKey.key() + "Aux.", evtContext);
230  if (not jacobiansLink.isValid()) {
231  throw std::runtime_error(
232  "ConstMultiTrajectoryHandle::build, JacobiansLink is invalid");
233  }
234 
236  m_measurementsKey.key() + "Aux.", evtContext);
237  if (not measurementsLink.isValid()) {
238  throw std::runtime_error(
239  "ConstMultiTrajectoryHandle::build, MeasurementsLink is invalid");
240  }
241 
243  m_surfacesKey.key() + "Aux.", evtContext);
244  if (not surfacesLink.isValid()) {
245  throw std::runtime_error(
246  "ConstMultiTrajectoryHandle::build, SurfacesLink is invalid");
247  }
248 
249 
250  auto cmtj = std::make_unique<ActsTrk::MultiTrajectory>(
251  statesLink, parametersLink, jacobiansLink, measurementsLink, surfacesLink);
252  cmtj->fillSurfaces(geo, geoContext);
253  return cmtj;
254 }
255 
256 std::unique_ptr<ActsTrk::TrackContainer>
257 ConstTrackContainerHandlesHelper::build(const Acts::TrackingGeometry* geo,
258  const Acts::GeometryContext& geoContext,
259  const EventContext& evtContext) const {
260 
261  std::unique_ptr<ActsTrk::MultiTrajectory> mtj =
262  buildMtj(geo, geoContext, evtContext);
263  auto mtjHandle = SG::makeHandle(m_mtjKey, evtContext);
264  if (mtjHandle.record(std::move(mtj)).isFailure()) {
265  throw std::runtime_error(
266  "ConstTrackContainerHandle<C>::build failed recording MTJ");
267  }
269  evtContext);
270  if (not summaryLink.isValid()) {
271  throw std::runtime_error(
272  "ConstTrackContainerHandle::build, SummaryLink is invalid");
273  }
274 
275  auto surfacesHandle = SG::makeHandle(m_trackSurfacesKey, evtContext);
276  if (not surfacesHandle.isValid()) {
277  throw std::runtime_error(
278  "ConstTrackContainerHandle::build, SurfaceHandle is invalid");
279  }
280 
281  auto constTrackSummary = std::make_unique<ActsTrk::TrackSummaryContainer>(summaryLink);
282  constTrackSummary->decodeSurfaces( surfacesHandle.cptr(), geoContext);
283 
284  auto summaryHandle = SG::makeHandle(m_trackSummaryKey, evtContext);
285  if (summaryHandle.record(std::move(constTrackSummary)).isFailure()) {
286  throw std::runtime_error(
287  "MutableTrackContainerHandle::build, can't record "
288  "TrackSummary");
289  }
290 
291  auto constTrack = std::make_unique<ActsTrk::TrackContainer>(
293  evtContext),
295 
296  return constTrack;
297 
298 }
299 
300 namespace {
301  template <typename T>
302  using const_span = std::span<T const>;
303 
304  // get an aux variable for elements (read only)
305  template <typename T>
306  const_span<T> getElementVector( const xAOD::AuxContainerBase &aux_container, const SG::ConstAccessor<T> &accessor) {
307  const T *data = static_cast<const T *>(aux_container.getData (accessor.auxid()));
308  const_span<T> ret( data, aux_container.size() );
309  return ret;
310  }
311 
312  // create a new decoration for all elements using the default value
313  template <typename T>
314  std::span<T> createDecoration(xAOD::AuxContainerBase &aux_container, const SG::Decorator<T> &decor) {
315  std::size_t sz=aux_container.size();
316  T *data = static_cast<T *>(aux_container.getDecoration(decor.auxid(), sz, sz));
317  return std::span<T>( data, sz );
318  }
319 
320  void throwConflictingUncalibratedMeasurementPointerValue(const xAOD::UncalibratedMeasurement *is,
321  const xAOD::UncalibratedMeasurement *should) {
322  std::stringstream msg;
323  msg << "Conflicting values for TrackState.uncalibratedMeasurement. Already set " << static_cast<const void *>(is)
324  << " would set " << static_cast<const void *>(should);
325  throw std::runtime_error(msg.str());
326  }
327 }
328 
331  static const SG::ConstAccessor< link_t > link_accessor("uncalibratedMeasurementLink");
332 
333  if (statesLink.getAuxIDs().test(link_accessor.auxid())){
334  const_span<link_t> elementLinks = getElementVector(statesLink, link_accessor);
335 
337  decor("uncalibratedMeasurement");
338 
339  std::span<const xAOD::UncalibratedMeasurement *> uncalibratedMeasurements
340  = createDecoration( statesLink, decor);
341 
342  for (unsigned int index = 0; index < elementLinks.size(); ++index) {
343  const link_t &el = elementLinks[index];
344  const xAOD::UncalibratedMeasurement *a_measurement = (el.isValid() ? *el : nullptr);
345  // @TODO is this check necessary ?
346  if (uncalibratedMeasurements[index] != nullptr && a_measurement != uncalibratedMeasurements[index]) {
347  throwConflictingUncalibratedMeasurementPointerValue(uncalibratedMeasurements[index], a_measurement);
348  }
349  uncalibratedMeasurements[index]=a_measurement;
350  }
351  }
352  else {
353  std::cerr << "WARNING no uncalibratedMeasurementLink aux data " << std::endl;
354  }
355 }
356 } // namespace ActsTrk
ActsTrk::ConstTrackContainerHandlesHelper::m_jacobiansKey
SG::ReadHandleKey< xAOD::TrackJacobianContainer > m_jacobiansKey
Definition: TrackContainerHandlesHelper.h:96
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
ActsTrk::MutableTrackContainerHandlesHelper::m_trackSummaryKey
SG::WriteHandleKey< ActsTrk::TrackSummaryContainer > m_trackSummaryKey
Definition: TrackContainerHandlesHelper.h:73
fitman.sz
sz
Definition: fitman.py:527
ActsTrk::MutableTrackContainerHandlesHelper::moveToConst
std::unique_ptr< ActsTrk::TrackContainer > moveToConst(ActsTrk::MutableTrackContainer &&tc, const Acts::GeometryContext &geoContext, const EventContext &evtContext) const
produces ActsTrk::ConstTrackContainer with all backends stored in SG
Definition: TrackContainerHandlesHelper.cxx:130
ActsTrk::ConstTrackContainerHandlesHelper::m_trackSummaryKey
SG::WriteHandleKey< ActsTrk::TrackSummaryContainer > m_trackSummaryKey
Definition: TrackContainerHandlesHelper.h:111
ActsTrk::MutableTrackContainerHandlesHelper::m_mtjKey
SG::WriteHandleKey< ActsTrk::MultiTrajectory > m_mtjKey
Definition: TrackContainerHandlesHelper.h:61
index
Definition: index.py:1
SG::ConstAccessor::auxid
SG::auxid_t auxid() const
Return the aux id for this variable.
xAOD::AuxContainerBase::getAuxIDs
virtual const auxid_set_t & getAuxIDs() const override
Get the types(names) of variables handled by this container.
Definition: AuxContainerBase.cxx:274
TrackState.h
ActsTrk::ConstTrackContainerHandlesHelper::restoreUncalibMeasurementPtr
void restoreUncalibMeasurementPtr(xAOD::TrackStateAuxContainer &statesLink) const
Definition: TrackContainerHandlesHelper.cxx:329
xAOD::AuxContainerBase
Common base class for the auxiliary containers.
Definition: AuxContainerBase.h:59
ActsTrk::prefixFromTrackContainerName
std::string prefixFromTrackContainerName(const std::string &tracks)
Parse TrackContainer name to get the prefix for backends The name has to contain XYZTracks,...
Definition: TrackContainerHandlesHelper.cxx:18
SG::ConstAccessor< T >
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::Decorator::auxid
SG::auxid_t auxid() const
Return the aux id for this variable.
ActsTrk::ConstTrackContainerHandlesHelper::build
std::unique_ptr< ActsTrk::TrackContainer > build(const Acts::TrackingGeometry *geo, const Acts::GeometryContext &geoContext, const EventContext &context) const
Definition: TrackContainerHandlesHelper.cxx:257
ActsTrk::ConstTrackContainerHandlesHelper::m_trackSurfacesKey
SG::ReadHandleKey< xAOD::TrackSurfaceContainer > m_trackSurfacesKey
Definition: TrackContainerHandlesHelper.h:110
ActsTrk::ConstTrackContainerHandlesHelper::initialize
StatusCode initialize(const std::string &prefix)
Sets up the handles.
Definition: TrackContainerHandlesHelper.cxx:177
ActsTrk::recordxAOD
void recordxAOD(const SG::WriteHandleKey< T > &key, IFACE &iface, AUX &aux, const EventContext &evtContext)
Definition: TrackContainerHandlesHelper.cxx:32
ActsTrk::MutableTrackContainerHandlesHelper::m_trackSurfacesKey
SG::WriteHandleKey< xAOD::TrackSurfaceContainer > m_trackSurfacesKey
Definition: TrackContainerHandlesHelper.h:72
ActsTrk::MutableTrackContainerHandlesHelper::initialize
StatusCode initialize(const std::string &prefix)
Sets up the handles.
Definition: TrackContainerHandlesHelper.cxx:51
PrepareReferenceFile.regex
regex
Definition: PrepareReferenceFile.py:43
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
ActsTrk::MutableMultiTrajectory
Athena implementation of ACTS::MultiTrajectory (ReadWrite version) The data is stored in 4 external b...
Definition: MultiTrajectory.h:81
xAOD::AuxContainerBase::size
virtual size_t size() const override
Get the size of the container.
Definition: AuxContainerBase.cxx:429
TrackStateContainer.h
WriteHandle.h
Handle class for recording to StoreGate.
xAOD::UncalibratedMeasurement_v1
Definition: UncalibratedMeasurement_v1.h:13
SG::WriteHandleKey
Property holding a SG store/key/clid from which a WriteHandle is made.
Definition: StoreGate/StoreGate/WriteHandleKey.h:40
SG::Decorator< T >
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ActsTrk::MutableTrackContainerHandlesHelper::m_parametersKey
SG::WriteHandleKey< xAOD::TrackParametersContainer > m_parametersKey
Definition: TrackContainerHandlesHelper.h:57
UncalibratedMeasurementContainer.h
checkCorrelInHIST.prefix
dictionary prefix
Definition: checkCorrelInHIST.py:391
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
xAOD::AuxContainerBase::getDecoration
virtual void * getDecoration(auxid_t auxid, size_t size, size_t capacity) override
Get a pointer to a given array, as a decoration.
Definition: AuxContainerBase.cxx:299
ActsTrk::ConstTrackContainerHandlesHelper::m_mtjKey
SG::WriteHandleKey< ActsTrk::MultiTrajectory > m_mtjKey
Definition: TrackContainerHandlesHelper.h:100
ActsTrk::ConstTrackContainerHandlesHelper::m_xAODTrackSummaryKey
SG::ReadHandleKey< xAOD::TrackSummaryContainer > m_xAODTrackSummaryKey
Definition: TrackContainerHandlesHelper.h:109
ActsTrk::ConstTrackContainerHandlesHelper::m_measurementsKey
SG::ReadHandleKey< xAOD::TrackMeasurementContainer > m_measurementsKey
Definition: TrackContainerHandlesHelper.h:97
ActsTrk::MutableTrackContainerHandlesHelper::m_xAODTrackSummaryKey
SG::WriteHandleKey< xAOD::TrackSummaryContainer > m_xAODTrackSummaryKey
Definition: TrackContainerHandlesHelper.h:71
xAOD::AuxContainerBase::getData
virtual const void * getData(auxid_t auxid) const override
Get a pointer to a given array.
Definition: AuxContainerBase.cxx:229
xAOD::JetAttributeAccessor::accessor
const AccessorWrapper< T > * accessor(xAOD::JetAttribute::AttributeID id)
Returns an attribute accessor corresponding to an AttributeID.
Definition: JetAccessorMap.h:26
ActsTrk::MutableTrackContainerHandlesHelper::m_surfacesKey
SG::WriteHandleKey< xAOD::TrackSurfaceContainer > m_surfacesKey
Definition: TrackContainerHandlesHelper.h:60
ActsTrk::MutableTrackContainerHandlesHelper::m_jacobiansKey
SG::WriteHandleKey< xAOD::TrackJacobianContainer > m_jacobiansKey
Definition: TrackContainerHandlesHelper.h:58
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
DeMoScan.index
string index
Definition: DeMoScan.py:364
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
LArCellConditions.geo
bool geo
Definition: LArCellConditions.py:46
ActsTrk::MutableTrackContainerHandlesHelper::m_measurementsKey
SG::WriteHandleKey< xAOD::TrackMeasurementContainer > m_measurementsKey
Definition: TrackContainerHandlesHelper.h:59
ActsTrk::ConstTrackContainerHandlesHelper::m_statesKey
SG::ReadHandleKey< xAOD::TrackStateContainer > m_statesKey
Definition: TrackContainerHandlesHelper.h:94
xAOD::TrackStateAuxContainer_v1
Definition: TrackStateAuxContainer_v1.h:18
ActsTrk::ConstTrackContainerHandlesHelper::buildMtj
std::unique_ptr< ActsTrk::MultiTrajectory > buildMtj(const Acts::TrackingGeometry *geo, const Acts::GeometryContext &geoContext, const EventContext &context) const
Definition: TrackContainerHandlesHelper.cxx:205
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:49
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
TrackContainerHandlesHelper.h
ActsTrk::MutableTrackContainerHandlesHelper::m_statesKey
SG::WriteHandleKey< xAOD::TrackStateContainer > m_statesKey
Definition: TrackContainerHandlesHelper.h:56
ActsTrk::MutableTrackContainer
Definition: TrackContainer.h:122
ActsTrk::ConstTrackContainerHandlesHelper::m_parametersKey
SG::ReadHandleKey< xAOD::TrackParametersContainer > m_parametersKey
Definition: TrackContainerHandlesHelper.h:95
ActsTrk::ConstTrackContainerHandlesHelper::m_surfacesKey
SG::ReadHandleKey< xAOD::TrackSurfaceContainer > m_surfacesKey
Definition: TrackContainerHandlesHelper.h:98
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
CxxUtils::ConcurrentBitset::test
bool test(bit_t bit) const
Test to see if a bit is set.