ATLAS Offline Software
Loading...
Searching...
No Matches
ActsToTrkConvertorAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8#include "Acts/Surfaces/Surface.hpp"
9#include "Acts/Surfaces/PerigeeSurface.hpp"
31
32
33// get Athena SiDetectorElement from Acts surface
34static const InDetDD::SiDetectorElement *actsToDetElem(const Acts::Surface &surface)
35{
36 const auto *actsElement = dynamic_cast<const ActsDetectorElement *>(surface.surfacePlacement());
37 if (!actsElement)
38 {
39 return nullptr;
40 }
41 return dynamic_cast<const InDetDD::SiDetectorElement *>(actsElement->upstreamDetectorElement());
42}
43
44namespace ActsTrk {
45
46
48 {
49 ATH_MSG_DEBUG("Initializing " << name() << " ...");
50
51 ATH_CHECK(m_tracksContainerKey.initialize());
52 ATH_CHECK(m_tracksKey.initialize());
53
56 ATH_CHECK(m_trkSummaryTool.retrieve());
57
58 if(!m_idHelperSvc.empty()) ATH_CHECK(m_idHelperSvc.retrieve());
59 ATH_CHECK(m_keyMdt.initialize(!m_keyMdt.empty()));
60 ATH_CHECK(m_keyRpc.initialize(!m_keyRpc.empty()));
61 ATH_CHECK(m_keyTgc.initialize(!m_keyTgc.empty()));
62 ATH_CHECK(m_keyMm.initialize(!m_keyMm.empty()));
63 ATH_CHECK(m_keyStgc.initialize(!m_keyStgc.empty()));
64 ATH_CHECK(m_muonClusterCreator.retrieve(DisableTool(m_muonClusterCreator.empty())));
65
66 if (not m_RotCreatorTool.empty())
67 {
68 ATH_MSG_DEBUG("RotCreatorTool will be used");
69 ATH_CHECK(m_RotCreatorTool.retrieve());
70 }
71
72 return StatusCode::SUCCESS;
73 }
74
75 StatusCode ActsToTrkConvertorAlg::execute(const EventContext &ctx) const
76 {
77 ATH_MSG_DEBUG("Executing " << name() << " ...");
78
79 // I/O
80 ATH_MSG_DEBUG("Retrieving input track collection '" << m_tracksContainerKey.key() << "' ...");
82 ATH_CHECK(inputTracksHandle.isValid());
83 const ActsTrk::TrackContainer *inputTracks = inputTracksHandle.cptr();
84
85 std::unique_ptr<::TrackCollection> trackCollection = std::make_unique<::TrackCollection>();
86 Acts::GeometryContext tgContext = m_trackingGeometryTool->getGeometryContext(ctx).context();
87 ATH_CHECK(makeTracks(ctx, tgContext, *inputTracks, *trackCollection));
88
90 ATH_MSG_DEBUG("Output Tracks Collection `" << m_tracksKey.key() << "` created ...");
91 ATH_CHECK(outputTrackHandle.record(std::move(trackCollection)));
92
93 return StatusCode::SUCCESS;
94 }
95
96 StatusCode ActsToTrkConvertorAlg::makeTracks(const EventContext &ctx,
97 const Acts::GeometryContext &tgContext,
98 const ActsTrk::TrackContainer &tracks,
99 ::TrackCollection &tracksContainer) const
100 {
101
102 for (const typename ActsTrk::TrackContainer::ConstTrackProxy track : tracks)
103 {
104 const auto lastMeasurementIndex = track.tipIndex();
105 auto finalTrajectory = std::make_unique<Trk::TrackStates>();
106 // initialise the number of dead Pixel and Acts strip
107 int numberOfDeadPixel = 0;
108 int numberOfDeadSCT = 0;
109
110 Acts::ParticleHypothesis hypothesis = track.particleHypothesis();
111
112 std::vector<std::unique_ptr<const Acts::BoundTrackParameters>> actsSmoothedParam;
113 tracks.trackStateContainer().visitBackwards(
114 lastMeasurementIndex,
115 [this, &tgContext, &track, &finalTrajectory, &actsSmoothedParam, &numberOfDeadPixel, &numberOfDeadSCT](const typename ActsTrk::TrackStateBackend::ConstTrackStateProxy &state) -> void
116 {
117 // First only consider states with an associated detector element
118 if (!state.hasReferenceSurface() || !state.referenceSurface().surfacePlacement())
119 {
120 return;
121 }
122
123 auto flag = state.typeFlags();
124 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
125 std::unique_ptr<Trk::TrackParameters> parm;
126
127 // State is a hole (no associated measurement), use predicted parameters
128 if (flag.isHole())
129 {
130 const Acts::BoundTrackParameters actsParam = track.createParametersFromState(state);
131 parm = m_ATLASConverterTool->actsTrackParametersToTrkParameters(actsParam, tgContext);
132 if(!m_boundaryCheckTool.empty()){
133 auto boundaryCheck = m_boundaryCheckTool->boundaryCheck(*parm);
134 // Check if this is a hole, a dead sensors or a state outside the sensor boundary
135 if (boundaryCheck == Trk::BoundaryCheckResult::DeadElement)
136 {
137 auto *detElem = actsToDetElem(state.referenceSurface());
138 if (!detElem)
139 {
140 return;
141 }
142 if (detElem->isPixel())
143 {
144 ++numberOfDeadPixel;
145 }
146 else if (detElem->isSCT())
147 {
148 ++numberOfDeadSCT;
149 }
150 // Dead sensors states are not stored
151 return;
152 }
153 else if (boundaryCheck != Trk::BoundaryCheckResult::Candidate)
154 {
155 return;
156 }
157 }
158 typePattern.set(Trk::TrackStateOnSurface::Hole);
159 }
160 // The state was tagged as an outlier or (TODO!) was missed in the reverse filtering, use filtered parameters
161 else if (flag.isOutlier())
162 {
163 const Acts::BoundTrackParameters actsParam = track.createParametersFromState(state);
164 parm = m_ATLASConverterTool->actsTrackParametersToTrkParameters(actsParam, tgContext);
165 typePattern.set(Trk::TrackStateOnSurface::Outlier);
166 }
167 // The state is a measurement state, use smoothed parameters
168 else
169 {
170 const Acts::BoundTrackParameters actsParam = track.createParametersFromState(state);
171
172 // is it really necessary to keep our own copy of all the smoothed parameters?
173 actsSmoothedParam.push_back(std::make_unique<const Acts::BoundTrackParameters>(Acts::BoundTrackParameters(actsParam)));
174 parm = m_ATLASConverterTool->actsTrackParametersToTrkParameters(actsParam, tgContext);
176 }
177
178 std::unique_ptr<Trk::MeasurementBase> measState, measState2;
179 uint nMaxMeas=1;
180
181 if (state.hasUncalibratedSourceLink())
182 {
183 try {
184 auto sl = state.getUncalibratedSourceLink().template get<ATLASUncalibSourceLink>();
185 assert( sl != nullptr);
187 measState= makeRIO_OnTrack(uncalibMeas, *parm, false);
188 //muons have a secondary measurement when numDimensions=0
189 if(uncalibMeas.numDimensions()==0){
190 measState2 = makeRIO_OnTrack(uncalibMeas, *parm, true);
191 nMaxMeas=2;
192 }
193 ATH_MSG_DEBUG("Successfully used ATLASUncalibratedSourceLink");
194
195 } catch ( const std::bad_any_cast& ){
196 ATH_MSG_DEBUG("Not an ATLASUncalibSourceLink, trying ATLASSourceLink");
197 auto sl = state.getUncalibratedSourceLink().template get<ATLASSourceLink>();
198 assert( sl != nullptr );
199 measState.reset(sl->clone());
200 ATH_MSG_DEBUG("Successfully used ATLASSourceLink");
201
202 }
203 }
204
205 double nDoF = state.calibratedSize();
206 auto quality = Trk::FitQualityOnSurface(state.chi2(), nDoF);
207 if(nMaxMeas==2){
208 std::unique_ptr<Trk::TrackParameters> parm2 = parm->uniqueClone();
209 auto perState = new Trk::TrackStateOnSurface(quality,
210 std::move(measState2),
211 std::move(parm2),
212 nullptr,
213 typePattern);
214
215 // If a state was succesfully created add it to the trajectory
216 finalTrajectory->insert(finalTrajectory->begin(), perState);
217 }
218 auto perState = new Trk::TrackStateOnSurface(quality,
219 std::move(measState),
220 std::move(parm),
221 nullptr,
222 typePattern);
223
224 // If a state was succesfully created add it to the trajectory
225 finalTrajectory->insert(finalTrajectory->begin(), perState);
226
227 });
228
229 // Convert the perigee state and add it to the trajectory
230 const Acts::BoundTrackParameters actsPer(track.referenceSurface().getSharedPtr(),
231 track.parameters(),
232 track.covariance(),
233 hypothesis);
234 std::unique_ptr<Trk::TrackParameters> per = m_ATLASConverterTool->actsTrackParametersToTrkParameters(actsPer, tgContext);
235 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
236 typePattern.set(Trk::TrackStateOnSurface::Perigee);
237 auto perState = new Trk::TrackStateOnSurface(nullptr,
238 std::move(per),
239 nullptr,
240 typePattern);
241 finalTrajectory->insert(finalTrajectory->begin(), perState);
242
243 // Create the track using Athena TrackFitter::KalmanFitter and TrackPatternRecoInfo::SiSPSeededFinder algorithm enums
246
247
248 auto newtrack = std::make_unique<Trk::Track>(newInfo, std::move(finalTrajectory), nullptr);
249 // TODO: use TrackSummaryTool to create trackSummary?
250 if (!newtrack->trackSummary())
251 {
252 newtrack->setTrackSummary(std::make_unique<Trk::TrackSummary>());
253 newtrack->trackSummary()->update(Trk::numberOfPixelHoles, 0);
254 newtrack->trackSummary()->update(Trk::numberOfSCTHoles, 0);
255 newtrack->trackSummary()->update(Trk::numberOfTRTHoles, 0);
256 newtrack->trackSummary()->update(Trk::numberOfPixelDeadSensors, numberOfDeadPixel);
257 newtrack->trackSummary()->update(Trk::numberOfSCTDeadSensors, numberOfDeadSCT);
258 }
259 m_trkSummaryTool->updateTrackSummary(ctx, *newtrack, true);
260 tracksContainer.push_back(std::move(newtrack));
261 }
262
263 return StatusCode::SUCCESS;
264 }
265
266 std::unique_ptr<Trk::MeasurementBase> ActsToTrkConvertorAlg::makeRIO_OnTrack(const xAOD::UncalibratedMeasurement &uncalibMeas,
267 const Trk::TrackParameters &parm, bool getSecMeas) const
268 {
269 const Trk::PrepRawData *rio = nullptr;
270 const xAOD::UncalibMeasType measurementType = uncalibMeas.type();
271
272 if (measurementType == xAOD::UncalibMeasType::PixelClusterType)
273 {
274 static const SG::AuxElement::ConstAccessor<ElementLink<InDet::PixelClusterCollection>> pixelLinkAcc("pixelClusterLink");
275 auto pixcl = dynamic_cast<const xAOD::PixelCluster *>(&uncalibMeas);
276 if (not pixcl or not pixelLinkAcc.isAvailable(*pixcl))
277 {
278 ATH_MSG_DEBUG("no pixelClusterLink for cluster associated to measurement");
279 return nullptr;
280 }
281
282 auto pix = *pixelLinkAcc(*pixcl);
283 if (m_RotCreatorTool.empty())
284 {
285 const InDetDD::SiDetectorElement *element = pix->detectorElement();
286 if (!element)
287 {
288 ATH_MSG_WARNING("Cannot access pixel detector element");
289 return nullptr;
290 }
291 ATH_MSG_DEBUG("create InDet::PixelClusterOnTrack without correction");
292 return std::make_unique<InDet::PixelClusterOnTrack>(pix,
293 Trk::LocalParameters(pix->localPosition()),
294 Amg::MatrixX(pix->localCovariance()),
295 element->identifyHash(),
296 pix->globalPosition(),
297 pix->gangedPixel(),
298 false);
299 }
300 rio = pix;
301 }
302 else if (measurementType == xAOD::UncalibMeasType::StripClusterType)
303 {
304 static const SG::AuxElement::ConstAccessor<ElementLink<InDet::SCT_ClusterCollection>> stripLinkAcc("sctClusterLink");
305 auto stripcl = dynamic_cast<const xAOD::StripCluster *>(&uncalibMeas);
306 if (not stripcl or not stripLinkAcc.isAvailable(*stripcl))
307 {
308 ATH_MSG_WARNING("no sctClusterLink for clusters associated to measurement");
309 return nullptr;
310 }
311
312 auto sct = *stripLinkAcc(*stripcl);
313 if (m_RotCreatorTool.empty())
314 {
315 const InDetDD::SiDetectorElement *element = sct->detectorElement();
316 if (!element)
317 {
318 ATH_MSG_WARNING("Cannot access strip detector element");
319 return nullptr;
320 }
321 ATH_MSG_DEBUG("create InDet::SCT_ClusterOnTrack without correction");
322 return std::make_unique<InDet::SCT_ClusterOnTrack>(sct,
323 Trk::LocalParameters(sct->localPosition()),
324 Amg::MatrixX(sct->localCovariance()),
325 element->identifyHash(),
326 sct->globalPosition(),
327 false);
328 }
329 rio = sct;
330 }
331 else if(measurementType == xAOD::UncalibMeasType::MdtDriftCircleType)
332 {
333
334 const Muon::MdtPrepDataContainer* mdtPrds{nullptr};
335 StatusCode sc = SG::get(mdtPrds, m_keyMdt, Gaudi::Hive::currentContext());
336 if(sc==StatusCode::FAILURE){
337 ATH_MSG_WARNING("Could not retrieve MDT PRDs");
338 return nullptr;
339 }
340 const Muon::MdtPrepData* mdt = fetchPrd(xAOD::identify(&uncalibMeas), mdtPrds);
341 rio = mdt;
342 }
343 else if(measurementType == xAOD::UncalibMeasType::RpcStripType){
344 const Muon::RpcPrepDataContainer* rpcPrds{nullptr};
345 StatusCode sc = SG::get(rpcPrds, m_keyRpc, Gaudi::Hive::currentContext());
346 if(sc==StatusCode::FAILURE){
347 ATH_MSG_WARNING("Could not retrieve Rpc PRDs");
348 return nullptr;
349 }
350 if(getSecMeas){
351 auto combStrip = dynamic_cast<const xAOD::CombinedMuonStrip*>(&uncalibMeas);
352 auto prd = fetchPrd(xAOD::identify(combStrip->secondaryStrip()), rpcPrds);
353 return std::unique_ptr<Trk::MeasurementBase>(m_muonClusterCreator->correct(*prd, parm, Gaudi::Hive::currentContext()));
354 }
355 else{
356 const Muon::RpcPrepData* rpc = fetchPrd(xAOD::identify(&uncalibMeas), rpcPrds);
357 return std::unique_ptr<Trk::MeasurementBase>(m_muonClusterCreator->correct(*rpc, parm, Gaudi::Hive::currentContext()));
358 }
359 }
360 else if(measurementType == xAOD::UncalibMeasType::TgcStripType){
361 const Muon::TgcPrepDataContainer* tgcPrds{nullptr};
362 StatusCode sc = SG::get(tgcPrds, m_keyTgc, Gaudi::Hive::currentContext());
363 if(sc==StatusCode::FAILURE){
364 ATH_MSG_WARNING("Could not retrieve Tgc PRDs");
365 return nullptr;
366 }
367 if(getSecMeas){
368 auto combStrip = dynamic_cast<const xAOD::CombinedMuonStrip*>(&uncalibMeas);
369 auto prd = fetchPrd(xAOD::identify(combStrip->secondaryStrip()), tgcPrds);
370 return std::unique_ptr<Trk::MeasurementBase>(m_muonClusterCreator->correct(*prd, parm, Gaudi::Hive::currentContext()));
371 }
372 else{
373 const Muon::TgcPrepData* tgc = fetchPrd(xAOD::identify(&uncalibMeas), tgcPrds);
374 return std::unique_ptr<Trk::MeasurementBase>(m_muonClusterCreator->correct(*tgc, parm, Gaudi::Hive::currentContext()));
375 }
376 }
377 else if(measurementType == xAOD::UncalibMeasType::MMClusterType){
378 const Muon::MMPrepDataContainer* mmPrds{nullptr};
379 StatusCode sc = SG::get(mmPrds, m_keyMm, Gaudi::Hive::currentContext());
380 if(sc==StatusCode::FAILURE){
381 ATH_MSG_WARNING("Could not retrieve MM PRDs");
382 return nullptr;
383 }
384 const Muon::MMPrepData* mm = fetchPrd(xAOD::identify(&uncalibMeas), mmPrds);
385 return std::unique_ptr<Trk::MeasurementBase>(m_muonClusterCreator->correct(*mm, parm, Gaudi::Hive::currentContext()));
386 }
387 else if(measurementType == xAOD::UncalibMeasType::sTgcStripType){
388 const Muon::sTgcPrepDataContainer* stgcPrds{nullptr};
389 StatusCode sc = SG::get(stgcPrds, m_keyStgc, Gaudi::Hive::currentContext());
390 if(sc==StatusCode::FAILURE){
391 ATH_MSG_WARNING("Could not retrieve sTgc PRDs");
392 return nullptr;
393 }
394 if(getSecMeas){
395 auto combStrip = dynamic_cast<const xAOD::CombinedMuonStrip*>(&uncalibMeas);
396 auto prd = fetchPrd(xAOD::identify(combStrip->secondaryStrip()), stgcPrds);
397 return std::unique_ptr<Trk::MeasurementBase>(m_muonClusterCreator->correct(*prd, parm, Gaudi::Hive::currentContext()));
398 }
399 else{
400 const Muon::sTgcPrepData* prd = fetchPrd(xAOD::identify(&uncalibMeas), stgcPrds);
401 return std::unique_ptr<Trk::MeasurementBase>(m_muonClusterCreator->correct(*prd, parm, Gaudi::Hive::currentContext()));
402 }
403 }
404 else
405 {
406 ATH_MSG_WARNING("xAOD::UncalibratedMeasurement is neither xAOD::PixelCluster, xAOD::StripCluster, nor muons");
407 return nullptr;
408 }
409
410 ATH_MSG_DEBUG("use Trk::RIO_OnTrackCreator::correct to create corrected Trk::RIO_OnTrack");
411 assert(!m_RotCreatorTool.empty());
412 assert(rio != nullptr);
413 return std::unique_ptr<Trk::MeasurementBase>(m_RotCreatorTool->correct(*rio, parm, Gaudi::Hive::currentContext()));
414 }
415
416 template <class PrdType>
417 const PrdType* ActsToTrkConvertorAlg::fetchPrd(const Identifier& prdId,
418 const Muon::MuonPrepDataContainerT<PrdType>* prdContainer) const {
419 if (!prdContainer) {
420 ATH_MSG_WARNING("Cannot fetch a prep data object as the container given for "<<
421 m_idHelperSvc->toString(prdId)<<" is a nullptr");
422 return nullptr;
423 }
424 const Muon::MuonPrepDataCollection<PrdType>* coll = prdContainer->indexFindPtr(m_idHelperSvc->moduleHash(prdId));
425 if (!coll) {
426 ATH_MSG_WARNING("No prep data collection where "<<m_idHelperSvc->toString(prdId)<<" can reside in.");
427 return nullptr;
428 }
429 for (const PrdType* prd : *coll) {
430 if (prd->identify() == prdId){
431 return prd;
432 }
433 }
434 ATH_MSG_WARNING("There is no measurement "<<m_idHelperSvc->toString(prdId));
435
436 return nullptr;
437 }
438
439}
static const InDetDD::SiDetectorElement * actsToDetElem(const Acts::Surface &surface)
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
unsigned int uint
static Double_t sc
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
ToolHandle< Trk::IBoundaryCheckTool > m_boundaryCheckTool
SG::ReadHandleKey< Muon::sTgcPrepDataContainer > m_keyStgc
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trkSummaryTool
StatusCode makeTracks(const EventContext &ctx, const Acts::GeometryContext &tgContext, const ActsTrk::TrackContainer &tracks, ::TrackCollection &tracksContainer) const
virtual StatusCode initialize() override
virtual StatusCode execute(const EventContext &ctx) const override
SG::ReadHandleKey< ActsTrk::TrackContainer > m_tracksContainerKey
ToolHandle< Trk::IRIO_OnTrackCreator > m_RotCreatorTool
std::unique_ptr< Trk::MeasurementBase > makeRIO_OnTrack(const xAOD::UncalibratedMeasurement &uncalibMeas, const Trk::TrackParameters &parm, bool getSecMeas) const
SG::WriteHandleKey<::TrackCollection > m_tracksKey
const PrdType * fetchPrd(const Identifier &prdId, const Muon::MuonPrepDataContainerT< PrdType > *prdContainer) const
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_keyMdt
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_keyRpc
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_keyTgc
ToolHandle< Muon::IMuonClusterOnTrackCreator > m_muonClusterCreator
SG::ReadHandleKey< Muon::MMPrepDataContainer > m_keyMm
PublicToolHandle< ActsTrk::ITrackingGeometryTool > m_trackingGeometryTool
value_type push_back(value_type pElem)
Add an element to the end of the collection.
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
Class to hold geometrical description of a silicon detector element.
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
Class to represent MM measurements.
Definition MMPrepData.h:22
Class to represent measurements from the Monitored Drift Tubes.
Definition MdtPrepData.h:33
Template to hold collections of MuonPrepRawData objects.
Class to represent RPC measurements.
Definition RpcPrepData.h:35
Class to represent TGC measurements.
Definition TgcPrepData.h:32
Class to represent sTgc measurements.
SG::ConstAccessor< T, ALLOC > ConstAccessor
Definition AuxElement.h:570
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Contains information about the 'fitter' of this track.
@ KalmanFitter
tracks produced by the Kalman Fitter
void setPatternRecognitionInfo(const TrackPatternRecoInfo &patternReco)
Method setting the pattern recognition algorithm.
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.
represents the track state (measurement, material, fit parameters and quality) at a surface.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ Hole
A hole on the track - this is defined in the following way.
virtual unsigned int numDimensions() const =0
Returns the number of dimensions of the measurement.
virtual xAOD::UncalibMeasType type() const =0
Returns the type of the measurement type as a simple enumeration.
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
const xAOD::UncalibratedMeasurement & getUncalibratedMeasurement(const ATLASUncalibSourceLink &source_link)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
MuonPrepDataContainerT< RpcPrepData > RpcPrepDataContainer
MuonPrepDataContainer< MuonPrepDataCollection< PrdType > > MuonPrepDataContainerT
MuonPrepDataContainerT< TgcPrepData > TgcPrepDataContainer
MuonPrepDataContainerT< MdtPrepData > MdtPrepDataContainer
MuonPrepDataContainerT< sTgcPrepData > sTgcPrepDataContainer
MuonPrepDataContainerT< MMPrepData > MMPrepDataContainer
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
@ DeadElement
outside the element
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ numberOfTRTHoles
number of TRT hits which pass the high threshold (only xenon counted) total number of TRT hits which ...
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
StripCluster_v1 StripCluster
Define the version of the strip cluster class.
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.
UncalibMeasType
Define the type of the uncalibrated measurement.
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.
CombinedMuonStrip_v1 CombinedMuonStrip
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.