ATLAS Offline Software
Loading...
Searching...
No Matches
MuonCombined::MuonInsideOutRecoTool Class Reference

#include <MuonInsideOutRecoTool.h>

Inheritance diagram for MuonCombined::MuonInsideOutRecoTool:
Collaboration diagram for MuonCombined::MuonInsideOutRecoTool:

Public Member Functions

 MuonInsideOutRecoTool (const std::string &type, const std::string &name, const IInterface *parent)
 Default AlgTool functions.
virtual ~MuonInsideOutRecoTool ()=default
virtual StatusCode initialize () override
virtual void extendWithPRDs (const InDetCandidateCollection &inDetCandidates, InDetCandidateToTagMap *tagMap, IMuonCombinedInDetExtensionTool::MuonPrdData prdData, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const override
 IMuonCombinedInDetExtensionTool interface: extend ID candidate with PRDs for segment-finding.
virtual void extend (const InDetCandidateCollection &inDetCandidates, InDetCandidateToTagMap *tagMap, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const override
 IMuonCombinedInDetExtensionTool interface: deprecated.
std::pair< std::unique_ptr< const Muon::MuonCandidate >, std::unique_ptr< Trk::Track > > findBestCandidate (const EventContext &ctx, const xAOD::TrackParticle &indetTrackParticle, const std::vector< Muon::MuonLayerRecoData > &allLayers) const
 find the best candidate for a given set of segments
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 sysInitialize () override
 Perform system initialization for an algorithm.
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

Static Public Member Functions

static const InterfaceID & interfaceID ()
 access to tool interface

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

void handleCandidate (const InDetCandidate &inDetCandidate, InDetCandidateToTagMap *tagMap, const IMuonCombinedInDetExtensionTool::MuonPrdData &prdData, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segColl, std::vector< std::shared_ptr< const Muon::MuonSegment > > segments, const EventContext &ctx) const
 handle a single candidate
void addTag (const EventContext &ctx, const InDetCandidate &indetCandidate, InDetCandidateToTagMap *tagMap, const Muon::MuonCandidate &candidate, std::unique_ptr< Trk::Track > &selectedTrack, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments) const
 add muon candidate to indet candidate
bool getLayerData (const Muon::MuonLayerSurface &surf, Muon::MuonLayerPrepRawData &layerPrepRawData, IMuonCombinedInDetExtensionTool::MuonPrdData prdData) const
 access data in layer
template<class COL>
bool getLayerDataTech (Muon::MuonStationIndex::TechnologyIndex technology, const Muon::MuonLayerSurface &surf, const Muon::MuonPrepDataContainerT< COL > *input, std::vector< const Muon::MuonPrepDataCollection< COL > * > &output) const
 access data in layer for a given technology
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
ServiceHandle< Muon::IMuonEDMHelperSvcm_edmHelperSvc
PublicToolHandle< Muon::MuonEDMPrinterToolm_printer {this, "MuonEDMPrinterTool", ""}
ToolHandle< Muon::IMuonLayerSegmentFinderToolm_segmentFinder
ToolHandle< Muon::IMuonLayerSegmentMatchingToolm_segmentMatchingTool
ToolHandle< Muon::IMuonLayerAmbiguitySolverToolm_ambiguityResolver
ToolHandle< Muon::IMuonCandidateTrackBuilderToolm_candidateTrackBuilder
ToolHandle< Rec::ICombinedMuonTrackBuilderm_trackFitter
ToolHandle< Trk::ITrackAmbiguityProcessorToolm_trackAmbiguityResolver
ToolHandle< Muon::MuonLayerHashProviderToolm_layerHashProvider
ToolHandle< Trk::IExtendedTrackSummaryToolm_trackSummaryTool {this, "TrackSummaryTool", "MuonTrackSummaryTool"}
ToolHandle< Muon::IMuonRecoValidationToolm_recoValidationTool {this, "MuonRecoValidationTool", ""}
Gaudi::Property< double > m_idTrackMinPt {this, "IDTrackMinPt", 2500}
Gaudi::Property< bool > m_ignoreSiAssocated {this, "IgnoreSiAssociatedCandidates", true}
SG::ReadHandleKey< xAOD::VertexContainerm_vertexKey {this, "VertexContainer", "PrimaryVertices", "vertex container key"}
SG::ReadHandleKey< Trk::SegmentCollectionm_inputSegments {this, "InputSegments", "", "Input Segment Collection"}
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 45 of file MuonInsideOutRecoTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ MuonInsideOutRecoTool()

MuonCombined::MuonInsideOutRecoTool::MuonInsideOutRecoTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Default AlgTool functions.

Definition at line 17 of file MuonInsideOutRecoTool.cxx.

17 :
18 AthAlgTool(type, name, parent) {
19 declareInterface<IMuonCombinedInDetExtensionTool>(this);
20 declareInterface<MuonInsideOutRecoTool>(this);
21 }
AthAlgTool()
Default constructor:

◆ ~MuonInsideOutRecoTool()

virtual MuonCombined::MuonInsideOutRecoTool::~MuonInsideOutRecoTool ( )
virtualdefault

Member Function Documentation

◆ addTag()

void MuonCombined::MuonInsideOutRecoTool::addTag ( const EventContext & ctx,
const InDetCandidate & indetCandidate,
InDetCandidateToTagMap * tagMap,
const Muon::MuonCandidate & candidate,
std::unique_ptr< Trk::Track > & selectedTrack,
TrackCollection * combTracks,
TrackCollection * meTracks,
Trk::SegmentCollection * segments ) const
private

add muon candidate to indet candidate

Sort the segments here; note the lifetime of 'copy' is still valid here as it exists inside 'segments'

Sort the CSC segments at the first giving priority to the small sectors

Definition at line 210 of file MuonInsideOutRecoTool.cxx.

212 {
213 const xAOD::TrackParticle& idTrackParticle = indetCandidate.indetTrackParticle();
214 Amg::Vector3D origin{0., 0., 0.};
215
216 const xAOD::Vertex* matchedVertex = nullptr;
217 if (!m_vertexKey.empty()) {
218 SG::ReadHandle<xAOD::VertexContainer> vertices{m_vertexKey, ctx};
219 if (!vertices.isValid()) {
220 ATH_MSG_WARNING("No vertex container with key = " << m_vertexKey.key() << " found");
221 } else {
222 for (const auto* const vx : *vertices) {
223 for (const auto& tpLink : vx->trackParticleLinks()) {
224 if (*tpLink == &idTrackParticle) {
225 matchedVertex = vx;
226 break;
227 }
228 if (matchedVertex) break;
229 }
230 }
231 }
232 }
233 if (matchedVertex) {
234 origin = Amg::Vector3D{matchedVertex->x(), matchedVertex->y(), matchedVertex->z()};
235 ATH_MSG_DEBUG(" found matched vertex " << origin);
236 } else {
237 origin = Amg::Vector3D{-idTrackParticle.d0() * std::sin(idTrackParticle.phi()) + idTrackParticle.vx(),
238 idTrackParticle.d0() * std::cos(idTrackParticle.phi()) + idTrackParticle.vy(),
239 idTrackParticle.z0() + idTrackParticle.vz()};
240 ATH_MSG_DEBUG(" NO matched vertex take track perigee " << origin);
241 }
242
243 ATH_MSG_VERBOSE("selectedTrack:");
244 if (msgLevel(MSG::VERBOSE)) {
245 int tsos = 0;
246 for (const Trk::TrackStateOnSurface* it : *selectedTrack->trackStateOnSurfaces()) {
247 ++tsos;
248 if (it->trackParameters()) {
249 ATH_MSG_VERBOSE("check tsos " << tsos << " r " << it->trackParameters()->position().perp() << " z "
250 << it->trackParameters()->position().z() << " p "
251 << it->trackParameters()->momentum().mag());
252 }
253 }
254 }
255
256 std::vector<const Muon::MuonSegment*> segLinks;
257 for (const Muon::MuonLayerIntersection& layer : candidate.layerIntersections) {
258 std::unique_ptr<Muon::MuonSegment> copy = std::make_unique<Muon::MuonSegment>(*layer.segment);
259 segLinks.push_back(copy.get());
260 segments->push_back(std::move(copy));
261 }
263 //cppcheck-suppress invalidLifetime
264 std::sort(segLinks.begin(), segLinks.end(), [this](const Muon::MuonSegment* seg_a, const Muon::MuonSegment* seg_b) -> bool {
265 ChIndex ch_a = m_idHelperSvc->chamberIndex(m_edmHelperSvc->chamberId(*seg_a));
266 ChIndex ch_b = m_idHelperSvc->chamberIndex(m_edmHelperSvc->chamberId(*seg_b));
267 StIndex st_a = toStationIndex(ch_a);
268 StIndex st_b = toStationIndex(ch_b);
269 if (st_a != st_b) return st_a < st_b;
271 if (ch_a == ChIndex::CSL || ch_a == ChIndex::CSS || ch_b == ChIndex::CSS || ch_b == ChIndex::CSL)
272 return (ch_a == ChIndex::CSL) + 2 * (ch_a == ChIndex::CSS) > (ch_b == ChIndex::CSL) + 2 * (ch_b == ChIndex::CSS);
273 return ch_a < ch_b;
274 });
275
276 if (msgLevel(MSG::DEBUG)) {
277 std::stringstream sstr;
278 for (const Muon::MuonSegment* muo_seg : segLinks) {
279 auto chIdx = m_idHelperSvc->chamberIndex(m_edmHelperSvc->chamberId(*muo_seg));
280 auto thIdx = m_idHelperSvc->technologyIndex(m_edmHelperSvc->chamberId(*muo_seg));
281 sstr << chName(chIdx) << " (" << technologyName(thIdx) << "), ";
282 }
283 ATH_MSG_DEBUG("Selected segments " << segLinks.size() << " " << sstr.str());
284 }
285
286 // perform standalone refit
287 std::unique_ptr<Trk::Track> standaloneRefit{m_trackFitter->standaloneRefit(ctx, *selectedTrack, origin)};
288
289 combTracks->push_back(std::move(selectedTrack));
290 ElementLink<TrackCollection> comblink(*combTracks, combTracks->size() - 1);
291
292 // create tag and set SA refit
293 MuGirlTag* tag = new MuGirlTag(comblink, segLinks);
294 if (standaloneRefit) {
295 meTracks->push_back(std::move(standaloneRefit));
296 ElementLink<TrackCollection> melink(*meTracks, meTracks->size() - 1);
297 tag->setUpdatedExtrapolatedTrack(melink);
298 }
299
300 // add tag to IndetCandidateToTagMap
301 tagMap->addEntry(&indetCandidate, tag);
302 }
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
ToolHandle< Rec::ICombinedMuonTrackBuilder > m_trackFitter
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
float z0() const
Returns the parameter.
float vx() const
The x origin for the parameters.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
float vz() const
The z origin for the parameters.
float vy() const
The y origin for the parameters.
float d0() const
Returns the parameter.
float z() const
Returns the z position.
float y() const
Returns the y position.
float x() const
Returns the x position.
Eigen::Matrix< double, 3, 1 > Vector3D
const std::string & technologyName(TechnologyIndex index)
convert LayerIndex into a string
const std::string & chName(ChIndex index)
convert ChIndex into a string
@ layer
Definition HitInfo.h:79
bool copy
Definition calibdata.py:26
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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< AlgTool > >::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< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extend()

void MuonCombined::MuonInsideOutRecoTool::extend ( const InDetCandidateCollection & inDetCandidates,
InDetCandidateToTagMap * tagMap,
TrackCollection * combTracks,
TrackCollection * meTracks,
Trk::SegmentCollection * segments,
const EventContext & ctx ) const
overridevirtual

IMuonCombinedInDetExtensionTool interface: deprecated.

Implements MuonCombined::IMuonCombinedInDetExtensionTool.

Definition at line 41 of file MuonInsideOutRecoTool.cxx.

43 {
44 ATH_MSG_WARNING("This version is deprecated, please use extendWithPRDs for MuGirl");
45 IMuonCombinedInDetExtensionTool::MuonPrdData prdData;
46 extendWithPRDs(inDetCandidates, tagMap, prdData, combTracks, meTracks, segments, ctx);
47 }
virtual void extendWithPRDs(const InDetCandidateCollection &inDetCandidates, InDetCandidateToTagMap *tagMap, IMuonCombinedInDetExtensionTool::MuonPrdData prdData, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const override
IMuonCombinedInDetExtensionTool interface: extend ID candidate with PRDs for segment-finding.

◆ extendWithPRDs()

void MuonCombined::MuonInsideOutRecoTool::extendWithPRDs ( const InDetCandidateCollection & inDetCandidates,
InDetCandidateToTagMap * tagMap,
IMuonCombinedInDetExtensionTool::MuonPrdData prdData,
TrackCollection * combTracks,
TrackCollection * meTracks,
Trk::SegmentCollection * segments,
const EventContext & ctx ) const
overridevirtual

IMuonCombinedInDetExtensionTool interface: extend ID candidate with PRDs for segment-finding.

Implements MuonCombined::IMuonCombinedInDetExtensionTool.

Definition at line 49 of file MuonInsideOutRecoTool.cxx.

51 {
52 ATH_MSG_DEBUG(" extending " << inDetCandidates.size());
53 // vector to store segments
54 std::vector<std::shared_ptr<const Muon::MuonSegment>> msegments;
55
56 if(!m_inputSegments.empty()){
57 SG::ReadHandle<Trk::SegmentCollection> rh_segments(m_inputSegments, ctx);
58 const Trk::SegmentCollection *segInColl = rh_segments.ptr();
59 for(auto trkSeg : *segInColl){
60 auto muonSeg = dynamic_cast<const Muon::MuonSegment*>(trkSeg);
61 std::shared_ptr<const Muon::MuonSegment> mseg2 = std::make_shared<const Muon::MuonSegment>(*muonSeg);
62 msegments.push_back(mseg2);
63 }
64 }
65
66
67 for (const InDetCandidate* it : inDetCandidates) { handleCandidate(*it, tagMap, prdData, combTracks, meTracks, segments, msegments, ctx); }
68 }
SG::ReadHandleKey< Trk::SegmentCollection > m_inputSegments
void handleCandidate(const InDetCandidate &inDetCandidate, InDetCandidateToTagMap *tagMap, const IMuonCombinedInDetExtensionTool::MuonPrdData &prdData, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segColl, std::vector< std::shared_ptr< const Muon::MuonSegment > > segments, const EventContext &ctx) const
handle a single candidate
DataVector< Trk::Segment > SegmentCollection

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::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

◆ findBestCandidate()

std::pair< std::unique_ptr< const Muon::MuonCandidate >, std::unique_ptr< Trk::Track > > MuonCombined::MuonInsideOutRecoTool::findBestCandidate ( const EventContext & ctx,
const xAOD::TrackParticle & indetTrackParticle,
const std::vector< Muon::MuonLayerRecoData > & allLayers ) const

find the best candidate for a given set of segments

Check if the fit succeeded and whether there are TSOS & a fitQuality

Definition at line 151 of file MuonInsideOutRecoTool.cxx.

153 {
154 // resolve ambiguities
155 std::vector<Muon::MuonCandidate> resolvedCandidates;
156 m_ambiguityResolver->resolveOverlaps(ctx, allLayers, resolvedCandidates);
157
158 // fit candidates
160 typedef std::pair<std::unique_ptr<Trk::Track>, std::unique_ptr<const Muon::MuonCandidate>> candidatePair;
161 std::vector<candidatePair> trackCandidateLookup;
162 for (Muon::MuonCandidate& candidate : resolvedCandidates) {
163 std::unique_ptr<Trk::Track> track = m_candidateTrackBuilder->buildCombinedTrack(ctx, *indetTrackParticle.track(), candidate);
165 if (!track || !track->isValid() || !track->fitQuality()->numberDoF()) continue;
166
167 tracks.push_back(track.get());
168 trackCandidateLookup.emplace_back(std::move(track), std::make_unique<Muon::MuonCandidate>(std::move(candidate)));
169 }
170
171 ATH_MSG_DEBUG("found " << tracks.size() << " combined tracks");
172
173 // first handle easy cases of zero or one track
174 if (tracks.empty()) return {nullptr, nullptr};
175
176 Trk::Track* selectedTrack = nullptr;
177 if (tracks.size() == 1) {
178 selectedTrack = tracks.front();
179 } else {
180 // more than 1 track call ambiguity solver and select first track
181 std::unique_ptr<const TrackCollection> resolvedTracks(m_trackAmbiguityResolver->process(&tracks));
182 if (!resolvedTracks || resolvedTracks->empty()) {
183 ATH_MSG_WARNING("Ambiguity resolver returned no tracks. Arbitrarily using the first track of initial collection.");
184 selectedTrack = tracks.front();
185 } else {
186 TrackCollection::iterator it = std::find(tracks.begin(), tracks.end(), resolvedTracks->front());
187 if (it != tracks.end()) {
188 selectedTrack = *it;
189 } else {
190 ATH_MSG_ERROR("Ambiguity resolver returned an unknown track. Arbitrarily using the first track of initial collection.");
191 selectedTrack = tracks.front();
192 }
193 }
194 }
195 // get candidate
196 std::vector<candidatePair>::iterator look_itr =
197 std::find_if(trackCandidateLookup.begin(), trackCandidateLookup.end(),
198 [selectedTrack](candidatePair& ele) { return ele.first.get() == selectedTrack; });
199
200 if (look_itr == trackCandidateLookup.end() || !look_itr->second) {
201 ATH_MSG_WARNING("candidate lookup failed, this should not happen");
202 return {nullptr, nullptr};
203 }
204 // generate a track summary for this candidate
205 if (m_trackSummaryTool.isEnabled()) { m_trackSummaryTool->computeAndReplaceTrackSummary(*selectedTrack, false); }
206
207 return std::make_pair(std::move(look_itr->second), std::move(look_itr->first));
208 }
#define ATH_MSG_ERROR(x)
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
DataModel_detail::iterator< DataVector > iterator
Definition DataVector.h:842
ToolHandle< Trk::ITrackAmbiguityProcessorTool > m_trackAmbiguityResolver
ToolHandle< Muon::IMuonCandidateTrackBuilderTool > m_candidateTrackBuilder
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
ToolHandle< Muon::IMuonLayerAmbiguitySolverTool > m_ambiguityResolver
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts

◆ getLayerData()

bool MuonCombined::MuonInsideOutRecoTool::getLayerData ( const Muon::MuonLayerSurface & surf,
Muon::MuonLayerPrepRawData & layerPrepRawData,
IMuonCombinedInDetExtensionTool::MuonPrdData prdData ) const
private

access data in layer

Definition at line 304 of file MuonInsideOutRecoTool.cxx.

305 {
306 // get technologies in the given layer
307 StIndex stIndex = toStationIndex(surf.regionIndex, surf.layerIndex);
308 const std::set<TechnologyIndex>& technologiesInStation = m_idHelperSvc->technologiesInStation(stIndex);
309 if (msgLevel(MSG::DEBUG)) {
310 std::string techString;
311 for (const TechnologyIndex& tech : technologiesInStation)
312 techString += " " + technologyName(tech);
313 ATH_MSG_DEBUG("getLayerData: sector " << surf.sector << " " << regionName(surf.regionIndex) << " "
314 << layerName(surf.layerIndex) << " technologies " << techString);
315 }
316
317 bool isok{false};
318 // loop over technologies and get data
319 for (const TechnologyIndex& it : technologiesInStation) {
320 // get collections, keep track of failures
321 switch(it) {
322 using enum TechnologyIndex;
325 break;
326 case MDT:
327 isok |= getLayerDataTech<Muon::MdtPrepData>(it, surf, prdData.mdtPrds, layerPrepRawData.mdts);
328 break;
329 case RPC:
330 isok |= getLayerDataTech<Muon::RpcPrepData>(it, surf, prdData.rpcPrds, layerPrepRawData.rpcs);
331 break;
332 case TGC:
333 isok |= getLayerDataTech<Muon::TgcPrepData>(it, surf, prdData.tgcPrds, layerPrepRawData.tgcs);
334 break;
335 case CSC:
336 isok |= getLayerDataTech<Muon::CscPrepData>(it, surf, prdData.cscPrds, layerPrepRawData.cscs);
337 break;
338 case STGC:
339 isok |= getLayerDataTech<Muon::sTgcPrepData>(it, surf, prdData.stgcPrds, layerPrepRawData.stgcs);
340 break;
341 case MM:
342 isok |= getLayerDataTech<Muon::MMPrepData>(it, surf, prdData.mmPrds, layerPrepRawData.mms);
343 break;
344 }
345 }
346
347 if (msgLvl(MSG::DEBUG)) {
348 msg(MSG::DEBUG) << " Got data: sector " << surf.sector << " " << regionName(surf.regionIndex) << " "
349 << layerName(surf.layerIndex);
350 if (!layerPrepRawData.mdts.empty()) msg(MSG::DEBUG) << " MDTs " << layerPrepRawData.mdts.size();
351 if (!layerPrepRawData.rpcs.empty()) msg(MSG::DEBUG) << " RPCs " << layerPrepRawData.rpcs.size();
352 if (!layerPrepRawData.tgcs.empty()) msg(MSG::DEBUG) << " TGCs " << layerPrepRawData.tgcs.size();
353 if (!layerPrepRawData.cscs.empty()) msg(MSG::DEBUG) << " CSCs " << layerPrepRawData.cscs.size();
354 if (!layerPrepRawData.stgcs.empty()) msg(MSG::DEBUG) << " STGCs " << layerPrepRawData.stgcs.size();
355 if (!layerPrepRawData.mms.empty()) msg(MSG::DEBUG) << " MMs " << layerPrepRawData.mms.size();
356 msg(MSG::DEBUG) << endmsg;
357 }
358 return isok;
359 }
#define endmsg
@ CSC
Definition RegSelEnums.h:34
@ STGC
Definition RegSelEnums.h:39
@ MM
Definition RegSelEnums.h:38
@ RPC
Definition RegSelEnums.h:32
@ TGC
Definition RegSelEnums.h:33
@ MDT
Definition RegSelEnums.h:31
bool msgLvl(const MSG::Level lvl) const
MsgStream & msg() const
bool getLayerDataTech(Muon::MuonStationIndex::TechnologyIndex technology, const Muon::MuonLayerSurface &surf, const Muon::MuonPrepDataContainerT< COL > *input, std::vector< const Muon::MuonPrepDataCollection< COL > * > &output) const
access data in layer for a given technology
StIndex
enum to classify the different station layers in the muon spectrometer
const std::string & layerName(LayerIndex index)
convert LayerIndex into a string
TechnologyIndex
enum to classify the different layers in the muon spectrometer
StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex
const std::string & regionName(DetectorRegionIndex index)
convert DetectorRegionIndex into a string
std::vector< const CscPrepDataCollection * > cscs
std::vector< const MMPrepDataCollection * > mms
std::vector< const TgcPrepDataCollection * > tgcs
std::vector< const MdtPrepDataCollection * > mdts
std::vector< const RpcPrepDataCollection * > rpcs
std::vector< const sTgcPrepDataCollection * > stgcs

◆ getLayerDataTech()

template<class COL>
bool MuonCombined::MuonInsideOutRecoTool::getLayerDataTech ( Muon::MuonStationIndex::TechnologyIndex technology,
const Muon::MuonLayerSurface & surf,
const Muon::MuonPrepDataContainerT< COL > * input,
std::vector< const Muon::MuonPrepDataCollection< COL > * > & output ) const
private

access data in layer for a given technology

Definition at line 362 of file MuonInsideOutRecoTool.cxx.

364 {
365 if (!input || input->size() == 0) return false;
366 // get technologies in the given layer
367 unsigned int layHash = sectorLayerHash(surf.regionIndex, surf.layerIndex);
368
369 // get hashes
370 const Muon::MuonLayerHashProviderTool::HashVec hashes = m_layerHashProvider->getHashes(surf.sector, technology, layHash);
371
372 // skip empty inputs
373 if (hashes.empty()) return false;
374
375 // loop over hashes
376 for (Muon::MuonLayerHashProviderTool::HashVec::const_iterator it = hashes.begin(); it != hashes.end(); ++it) {
377 // skip if not found
378 const auto* colIt = input->indexFindPtr(*it);
379 if (!colIt) { continue; }
380 ATH_MSG_VERBOSE(" adding " << m_idHelperSvc->toStringChamber(colIt->identify()) << " size " << colIt->size());
381 // else add
382 output.push_back(colIt);
383 }
384 return output.size();
385 }
ToolHandle< Muon::MuonLayerHashProviderTool > m_layerHashProvider
std::vector< IdentifierHash > HashVec
define data structure
unsigned int sectorLayerHash(DetectorRegionIndex detectorRegionIndex, LayerIndex layerIndex)
create a hash out of region and layer
output
Definition merge.py:16

◆ handleCandidate()

void MuonCombined::MuonInsideOutRecoTool::handleCandidate ( const InDetCandidate & inDetCandidate,
InDetCandidateToTagMap * tagMap,
const IMuonCombinedInDetExtensionTool::MuonPrdData & prdData,
TrackCollection * combTracks,
TrackCollection * meTracks,
Trk::SegmentCollection * segColl,
std::vector< std::shared_ptr< const Muon::MuonSegment > > segments,
const EventContext & ctx ) const
private

handle a single candidate

Definition at line 70 of file MuonInsideOutRecoTool.cxx.

72 {
73 if (m_ignoreSiAssocated && indetCandidate.isSiliconAssociated()) {
74 ATH_MSG_DEBUG(" skip silicon associated track for extension ");
75 return;
76 }
77
78 const xAOD::TrackParticle& indetTrackParticle = indetCandidate.indetTrackParticle();
79 if (!indetTrackParticle.track() || indetTrackParticle.pt() < m_idTrackMinPt) return;
80
81 // get intersections which precision layers in the muon system
82 const Muon::MuonSystemExtension* muonSystemExtension = indetCandidate.getExtension();
83 if (!muonSystemExtension) {
84 ATH_MSG_VERBOSE("No MuonSystemExtension, aborting ");
85 return;
86 }
87 // fill validation content
88 if (!m_recoValidationTool.empty()) m_recoValidationTool->addTrackParticle(indetTrackParticle, *muonSystemExtension);
89
90 // loop over intersections, get segments
91 std::vector<Muon::MuonLayerRecoData> allLayers;
92
93 const std::vector<Muon::MuonSystemExtension::Intersection>& layerIntersections = muonSystemExtension->layerIntersections();
94 ATH_MSG_DEBUG(" ID track: pt " << indetTrackParticle.pt() << " eta " << indetTrackParticle.eta() << " phi "
95 << indetTrackParticle.phi() << " layers " << layerIntersections.size());
96
97
98
99
100 for (const Muon::MuonSystemExtension::Intersection& layer_intersect : layerIntersections) {
101
102 // find segments for intersection
103 Muon::MuonLayerPrepRawData layerPrepRawData;
104 if (!getLayerData(layer_intersect.layerSurface, layerPrepRawData, prdData)) {
105 ATH_MSG_VERBOSE("Failed to get layer data");
106 continue;
107 }
108
109 if(!m_segmentFinder.empty()){
110 segments.clear();
111 m_segmentFinder->find(ctx, layer_intersect, layerPrepRawData, segments);
112 }
113 if (segments.empty()) continue;
114
115 // fill validation content
116 if (!m_recoValidationTool.empty()) {
117 for (const std::shared_ptr<const Muon::MuonSegment>& seg : segments) m_recoValidationTool->add(layer_intersect, *seg, 0);
118 }
119
120 // match segments to intersection
121 std::vector<std::shared_ptr<const Muon::MuonSegment>> selectedSegments;
122 m_segmentMatchingTool->select(ctx, layer_intersect, segments, selectedSegments);
123 if (selectedSegments.empty()) continue;
124
125 // fill validation content
126 if (!m_recoValidationTool.empty()) {
127 for (const auto& seg : selectedSegments) m_recoValidationTool->add(layer_intersect, *seg, 1);
128 }
129
130 // add to total list
131 allLayers.emplace_back(layer_intersect, std::move(selectedSegments));
132 }
133
134 if (msgLvl(MSG::DEBUG)) {
135 msg(MSG::DEBUG) << " Layers with segments " << allLayers.size();
136 for (auto& layer : allLayers) {
137 for (auto& seg : layer.segments) { msg(MSG::DEBUG) << std::endl << m_printer->print(*seg); }
138 }
139 msg(MSG::DEBUG) << endmsg;
140 }
141
142 // find best candidate and exit if none found
143 std::pair<std::unique_ptr<const Muon::MuonCandidate>, std::unique_ptr<Trk::Track>> bestCandidate =
144 findBestCandidate(ctx, indetTrackParticle, allLayers);
145 if (!bestCandidate.first) { return; }
146
147 // add candidate to indet candidate
148 addTag(ctx, indetCandidate, tagMap, *bestCandidate.first, bestCandidate.second, combTracks, meTracks, segColl);
149 }
std::pair< std::unique_ptr< const Muon::MuonCandidate >, std::unique_ptr< Trk::Track > > findBestCandidate(const EventContext &ctx, const xAOD::TrackParticle &indetTrackParticle, const std::vector< Muon::MuonLayerRecoData > &allLayers) const
find the best candidate for a given set of segments
ToolHandle< Muon::IMuonLayerSegmentMatchingTool > m_segmentMatchingTool
ToolHandle< Muon::IMuonRecoValidationTool > m_recoValidationTool
ToolHandle< Muon::IMuonLayerSegmentFinderTool > m_segmentFinder
void addTag(const EventContext &ctx, const InDetCandidate &indetCandidate, InDetCandidateToTagMap *tagMap, const Muon::MuonCandidate &candidate, std::unique_ptr< Trk::Track > &selectedTrack, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments) const
add muon candidate to indet candidate
bool getLayerData(const Muon::MuonLayerSurface &surf, Muon::MuonLayerPrepRawData &layerPrepRawData, IMuonCombinedInDetExtensionTool::MuonPrdData prdData) const
access data in layer
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
const std::vector< Intersection > & layerIntersections() const
access to the intersections with the layers.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.

◆ initialize()

StatusCode MuonCombined::MuonInsideOutRecoTool::initialize ( )
overridevirtual

Definition at line 23 of file MuonInsideOutRecoTool.cxx.

23 {
24 ATH_CHECK(m_idHelperSvc.retrieve());
25 ATH_CHECK(m_edmHelperSvc.retrieve());
26 ATH_CHECK(m_printer.retrieve());
27 ATH_CHECK(m_segmentFinder.retrieve(DisableTool(m_segmentFinder.empty())));
31 ATH_CHECK(m_trackFitter.retrieve());
33 // trigger does not use primary vertex
34 ATH_CHECK(m_vertexKey.initialize(!m_vertexKey.empty()));
35 ATH_CHECK(m_trackSummaryTool.retrieve());
36 ATH_CHECK(m_recoValidationTool.retrieve(DisableTool{m_recoValidationTool.empty()}));
37 ATH_CHECK(m_inputSegments.initialize(!m_inputSegments.empty()));
38 return StatusCode::SUCCESS;
39 }
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::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.

◆ interfaceID()

const InterfaceID & MuonCombined::MuonInsideOutRecoTool::interfaceID ( )
inlinestatic

access to tool interface

Definition at line 53 of file MuonInsideOutRecoTool.h.

static const InterfaceID IID_MuonInsideOutRecoTool("MuonCombined::MuonInsideOutRecoTool", 1, 0)

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::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< AlgTool > >::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.

◆ 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< AlgTool > >::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< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_ambiguityResolver

ToolHandle<Muon::IMuonLayerAmbiguitySolverTool> MuonCombined::MuonInsideOutRecoTool::m_ambiguityResolver
private
Initial value:
{
this, "MuonLayerAmbiguitySolverTool", "Muon::MuonLayerAmbiguitySolverTool/MuonLayerAmbiguitySolverTool"}

Definition at line 98 of file MuonInsideOutRecoTool.h.

98 {
99 this, "MuonLayerAmbiguitySolverTool", "Muon::MuonLayerAmbiguitySolverTool/MuonLayerAmbiguitySolverTool"};

◆ m_candidateTrackBuilder

ToolHandle<Muon::IMuonCandidateTrackBuilderTool> MuonCombined::MuonInsideOutRecoTool::m_candidateTrackBuilder
private
Initial value:
{
this, "MuonCandidateTrackBuilderTool", "Muon::MuonCandidateTrackBuilderTool/MuonCandidateTrackBuilderTool"}

Definition at line 100 of file MuonInsideOutRecoTool.h.

100 {
101 this, "MuonCandidateTrackBuilderTool", "Muon::MuonCandidateTrackBuilderTool/MuonCandidateTrackBuilderTool"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_edmHelperSvc

ServiceHandle<Muon::IMuonEDMHelperSvc> MuonCombined::MuonInsideOutRecoTool::m_edmHelperSvc
private
Initial value:
{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
"Handle to the service providing the IMuonEDMHelperSvc interface"}

Definition at line 91 of file MuonInsideOutRecoTool.h.

91 {this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
92 "Handle to the service providing the IMuonEDMHelperSvc interface"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MuonCombined::MuonInsideOutRecoTool::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

Definition at line 90 of file MuonInsideOutRecoTool.h.

90{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_idTrackMinPt

Gaudi::Property<double> MuonCombined::MuonInsideOutRecoTool::m_idTrackMinPt {this, "IDTrackMinPt", 2500}
private

Definition at line 111 of file MuonInsideOutRecoTool.h.

111{this, "IDTrackMinPt", 2500};

◆ m_ignoreSiAssocated

Gaudi::Property<bool> MuonCombined::MuonInsideOutRecoTool::m_ignoreSiAssocated {this, "IgnoreSiAssociatedCandidates", true}
private

Definition at line 112 of file MuonInsideOutRecoTool.h.

112{this, "IgnoreSiAssociatedCandidates", true};

◆ m_inputSegments

SG::ReadHandleKey<Trk::SegmentCollection> MuonCombined::MuonInsideOutRecoTool::m_inputSegments {this, "InputSegments", "", "Input Segment Collection"}
private

Definition at line 117 of file MuonInsideOutRecoTool.h.

117{this, "InputSegments", "", "Input Segment Collection"};

◆ m_layerHashProvider

ToolHandle<Muon::MuonLayerHashProviderTool> MuonCombined::MuonInsideOutRecoTool::m_layerHashProvider
private
Initial value:
{this, "MuonLayerHashProviderTool",
"Muon::MuonLayerHashProviderTool"}

Definition at line 106 of file MuonInsideOutRecoTool.h.

106 {this, "MuonLayerHashProviderTool",
107 "Muon::MuonLayerHashProviderTool"};

◆ m_printer

PublicToolHandle<Muon::MuonEDMPrinterTool> MuonCombined::MuonInsideOutRecoTool::m_printer {this, "MuonEDMPrinterTool", ""}
private

Definition at line 93 of file MuonInsideOutRecoTool.h.

93{this, "MuonEDMPrinterTool", ""};

◆ m_recoValidationTool

ToolHandle<Muon::IMuonRecoValidationTool> MuonCombined::MuonInsideOutRecoTool::m_recoValidationTool {this, "MuonRecoValidationTool", ""}
private

Definition at line 109 of file MuonInsideOutRecoTool.h.

109{this, "MuonRecoValidationTool", ""};

◆ m_segmentFinder

ToolHandle<Muon::IMuonLayerSegmentFinderTool> MuonCombined::MuonInsideOutRecoTool::m_segmentFinder
private
Initial value:
{this, "MuonLayerSegmentFinderTool",
"Muon::MuonLayerSegmentFinderTool/MuonLayerSegmentFinderTool"}

Definition at line 94 of file MuonInsideOutRecoTool.h.

94 {this, "MuonLayerSegmentFinderTool",
95 "Muon::MuonLayerSegmentFinderTool/MuonLayerSegmentFinderTool"};

◆ m_segmentMatchingTool

ToolHandle<Muon::IMuonLayerSegmentMatchingTool> MuonCombined::MuonInsideOutRecoTool::m_segmentMatchingTool
private
Initial value:
{
this, "MuonLayerSegmentMatchingTool", "Muon::MuonLayerSegmentMatchingTool/MuonLayerSegmentMatchingTool"}

Definition at line 96 of file MuonInsideOutRecoTool.h.

96 {
97 this, "MuonLayerSegmentMatchingTool", "Muon::MuonLayerSegmentMatchingTool/MuonLayerSegmentMatchingTool"};

◆ m_trackAmbiguityResolver

ToolHandle<Trk::ITrackAmbiguityProcessorTool> MuonCombined::MuonInsideOutRecoTool::m_trackAmbiguityResolver
private
Initial value:
{this, "TrackAmbiguityProcessor",
"Trk::TrackSelectionProcessorTool/MuonAmbiProcessor"}

Definition at line 104 of file MuonInsideOutRecoTool.h.

104 {this, "TrackAmbiguityProcessor",
105 "Trk::TrackSelectionProcessorTool/MuonAmbiProcessor"};

◆ m_trackFitter

ToolHandle<Rec::ICombinedMuonTrackBuilder> MuonCombined::MuonInsideOutRecoTool::m_trackFitter
private
Initial value:
{this, "MuonTrackBuilder",
"Rec::CombinedMuonTrackBuilder/CombinedMuonTrackBuilder"}

Definition at line 102 of file MuonInsideOutRecoTool.h.

102 {this, "MuonTrackBuilder",
103 "Rec::CombinedMuonTrackBuilder/CombinedMuonTrackBuilder"};

◆ m_trackSummaryTool

ToolHandle<Trk::IExtendedTrackSummaryTool> MuonCombined::MuonInsideOutRecoTool::m_trackSummaryTool {this, "TrackSummaryTool", "MuonTrackSummaryTool"}
private

Definition at line 108 of file MuonInsideOutRecoTool.h.

108{this, "TrackSummaryTool", "MuonTrackSummaryTool"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexKey

SG::ReadHandleKey<xAOD::VertexContainer> MuonCombined::MuonInsideOutRecoTool::m_vertexKey {this, "VertexContainer", "PrimaryVertices", "vertex container key"}
private

Definition at line 115 of file MuonInsideOutRecoTool.h.

115{this, "VertexContainer", "PrimaryVertices", "vertex container key"};

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


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