ATLAS Offline Software
Loading...
Searching...
No Matches
InDet::SiSPGNNTrackMaker Class Reference

InDet::SiSPGNNTrackMaker is an algorithm that uses the GNN-based track finding tool to reconstruct tracks and the use track fitter to obtain track parameters. More...

#include <SiSPGNNTrackMaker.h>

Inheritance diagram for InDet::SiSPGNNTrackMaker:
Collaboration diagram for InDet::SiSPGNNTrackMaker:

Public Member Functions

 SiSPGNNTrackMaker (const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize () override
virtual StatusCode execute (const EventContext &ctx) const override
virtual bool isClonable () const override
 Make this algorithm clonable.
MsgStream & dump (MsgStream &out) const
std::ostream & dump (std::ostream &out) const
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

MsgStream & dumptools (MsgStream &out) const
MsgStream & dumpevent (MsgStream &out) const
int passEtaDepCuts (const Trk::Track &track) const
std::tuple< bool, int, std::unique_ptr< Trk::Track > > doFitAndCut (const EventContext &ctx, std::vector< const Trk::SpacePoint * > &spacePoints, std::vector< const Trk::PrepRawData * > &clusters, int &trackCounter) const
 Fits a track and applies quality cuts to determine if it should be kept.
bool prefitCheck (unsigned int nPix, unsigned int nStrip, unsigned int nClusters, unsigned int nSpacePoints) const
std::unique_ptr< Trk::TrackfitTrack (const EventContext &ctx, std::vector< const Trk::PrepRawData * > clusters, const Trk::TrackParameters &initial_params, int trackCounter) const
std::pair< std::vector< const Trk::SpacePoint * >, std::vector< uint32_t > > getSpacePoints (const std::vector< uint32_t > &trackIndices, const std::vector< const Trk::SpacePoint * > &allSpacePoints) const
std::vector< const Trk::PrepRawData * > spacePointsToClusters (const std::vector< const Trk::SpacePoint * > &spacePoints) const
std::vector< const Trk::PrepRawData * > getClusters (const std::vector< std::vector< uint32_t > > &clusterTracks, const std::vector< const Trk::PrepRawData * > &allClusters, int trackNumber) const
std::vector< const Trk::SpacePoint * > getSpacePointsInEvent (const EventContext &ctx, int eventNumber) const
std::vector< const Trk::SpacePoint * > getSpacePointsInEvent (const EventContext &ctx, const SG::ReadHandleKey< SpacePointContainer > &containerKey) const
std::vector< const Trk::SpacePoint * > getSpacePointsInEvent (const EventContext &ctx, const SG::ReadHandleKey< SpacePointOverlapCollection > &containerKey) const
std::vector< const Trk::PrepRawData * > getClustersInEvent (const EventContext &ctx, int eventNumber) const
std::vector< float > getEdgeScores (const std::vector< uint32_t > &sortedID, const std::unordered_map< int, std::unordered_map< int, float > > &edgeMap) const
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.

Protected Attributes

SG::ReadHandleKey< SpacePointContainerm_SpacePointsPixelKey
SG::ReadHandleKey< SpacePointContainerm_SpacePointsSCTKey
SG::ReadHandleKey< SpacePointOverlapCollectionm_SpacePointsOverlapKey {this, "SpacePointsOverlapName", "ITkOverlapSpacePoints"}
SG::ReadHandleKey< InDet::PixelClusterContainer > m_ClusterPixelKey
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_ClusterStripKey
SG::WriteHandleKey< TrackCollectionm_outputTracksKey
SG::WriteHandleKey< std::vector< std::vector< float > > > m_outputEdgeScoresKey
ToolHandle< IGNNTrackFinderm_gnnTrackFinder
 GNN-based track finding tool that produces track candidates.
ToolHandle< ISeedFitterm_seedFitter
ToolHandle< Trk::ITrackFitterm_trackFitter
 Track Fitter.
ToolHandle< Trk::IExtendedTrackSummaryToolm_trackSummaryTool
ToolHandle< IGNNTrackReaderToolm_gnnTrackReader
BooleanProperty m_areInputClusters
BooleanProperty m_doRecoTrackCuts
ServiceHandle< IInDetEtaDependentCutsSvcm_etaDependentCutsSvc
UnsignedIntegerProperty m_minClusters {this, "minClusters", 6, "Min number clusters"}
UnsignedIntegerProperty m_minPixelClusters {this, "minPixelClusters", 1, "min pixel clusters"}
UnsignedIntegerProperty m_minStripClusters {this, "minStripClusters", 0, "Minimum number of strip clusters"}
DoubleProperty m_pTmin {this, "pTmin", 400., "min pT"}
DoubleProperty m_etamax {this, "etamax", 4., "max reco eta"}
BooleanProperty m_doRecoverFailedFits
BooleanProperty m_saveEdgeScore {this, "saveEdgeScore", false, "Save edge scores in a temporary container"}

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

InDet::SiSPGNNTrackMaker is an algorithm that uses the GNN-based track finding tool to reconstruct tracks and the use track fitter to obtain track parameters.

It turns a collection of Trk::Tracks.

Author
xiang.nosp@m.yang.nosp@m..ju@c.nosp@m.ern..nosp@m.ch

Definition at line 42 of file SiSPGNNTrackMaker.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ SiSPGNNTrackMaker()

InDet::SiSPGNNTrackMaker::SiSPGNNTrackMaker ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 16 of file SiSPGNNTrackMaker.cxx.

18 : AthReentrantAlgorithm(name, pSvcLocator)
19{
20
21}

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

62{
63 return 0;
64}

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ doFitAndCut()

std::tuple< bool, int, std::unique_ptr< Trk::Track > > InDet::SiSPGNNTrackMaker::doFitAndCut ( const EventContext & ctx,
std::vector< const Trk::SpacePoint * > & spacePoints,
std::vector< const Trk::PrepRawData * > & clusters,
int & trackCounter ) const
protected

Fits a track and applies quality cuts to determine if it should be kept.

Parameters
ctxEvent context for conditions access
clustersVector of cluster measurements used to fit the track
initial_paramsInitial track parameters from seed finding
trackCounterIndex/ID of the track candidate being processed
Returns
std::tuple<bool, int, std::unique_ptr<Trk::Track>>
  • bool: Whether the fit was successful
  • int: Error/status code (0 for success, >0 for specific failure modes)
  • Track: The fitted track (nullptr if fit fails or track rejected)

This function performs the following steps:

  1. Fits the track using the provided clusters and initial parameters
  2. Checks basic kinematic cuts (pT, eta)
  3. Computes track summary (hits, holes)
  4. Applies eta-dependent quality cuts if configured

Error codes:

  • 0: Success, track passes all cuts
  • 1: Failed minimum silicon hits requirement
  • 2: Failed minimum pixel hits requirement
  • 3: Failed minimum pT requirement
  • 4: Failed maximum z0 requirement
  • 5: Failed maximum d0 requirement
  • 6: Failed maximum holes requirement
  • 999: Track fit failed
Note
The track fitting is performed using the configured track fitter tool
Quality cuts are configurable via job options

Definition at line 531 of file SiSPGNNTrackMaker.cxx.

537 {
538 // get cluster list
539 int nPIX(0), nStrip(0);
540
541 for (const Trk::PrepRawData* cl : clusters) {
542 if (cl->type(Trk::PrepRawDataType::PixelCluster)) nPIX++;
544 }
545
546 ATH_MSG_DEBUG("Track " << trackCounter << " has " << spacePoints.size()
547 << " space points, " << clusters.size()
548 << " clusters, " << nPIX << " pixel clusters, "
549 << nStrip << " strip clusters");
550
551 // check hit counts
552 if (not prefitCheck(nPIX, nStrip, clusters.size(), spacePoints.size())) {
553 ATH_MSG_DEBUG("Track " << trackCounter << " does not pass prefit cuts, skipping");
554 return std::make_tuple(false, 999, nullptr);
555 }
556
557 // conformal mapping for track parameters
558 auto trkParameters = m_seedFitter->fit(spacePoints);
559 if (trkParameters == nullptr) {
560 ATH_MSG_DEBUG("Conformal mapping failed");
561 return std::make_tuple(false, 999, nullptr);
562 }
563
564 std::unique_ptr<Trk::Track> track = fitTrack(ctx, clusters, *trkParameters, trackCounter);
565
566 if (track == nullptr || track->perigeeParameters() == nullptr) {
567 ATH_MSG_DEBUG("Track " << trackCounter
568 << " fails the chi2 fit, skipping");
569 return std::make_tuple(false, 999, nullptr);
570 }
571
572 // compute pT and skip if pT too low
573 if (track->perigeeParameters()->pT() < m_pTmin) {
574 ATH_MSG_DEBUG("Track " << trackCounter
575 << "with pt = " << track->perigeeParameters()->pT()
576 << " has pT too low, skipping track!");
577 return std::make_tuple(false, 999, nullptr);
578 }
579
580 // get rid of tracks with eta too large
581 if (std::abs(track->perigeeParameters()->eta()) > m_etamax) {
582 ATH_MSG_DEBUG("Track " << trackCounter << "with eta = "
583 << std::abs(track->perigeeParameters()->eta())
584 << " has eta too high, skipping track!");
585 return std::make_tuple(false, 999, nullptr);
586 }
587
588 // if track fit succeeds, eta and pT within range, compute track summary. This is quite expensive.
589 m_trackSummaryTool->computeAndReplaceTrackSummary(
590 ctx, *track, false /* DO NOT suppress hole search*/);
591
592 int passTrackCut = (m_doRecoTrackCuts) ? passEtaDepCuts(*track) : -1;
593
594 return std::make_tuple(true, passTrackCut, std::move(track));
595
596 }
#define ATH_MSG_DEBUG(x)
ToolHandle< ISeedFitter > m_seedFitter
std::unique_ptr< Trk::Track > fitTrack(const EventContext &ctx, std::vector< const Trk::PrepRawData * > clusters, const Trk::TrackParameters &initial_params, int trackCounter) const
BooleanProperty m_doRecoTrackCuts
int passEtaDepCuts(const Trk::Track &track) const
bool prefitCheck(unsigned int nPix, unsigned int nStrip, unsigned int nClusters, unsigned int nSpacePoints) const
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
@ nStrip
Get number of strips.
Definition TauDefs.h:204

◆ dump() [1/2]

MsgStream & InDet::SiSPGNNTrackMaker::dump ( MsgStream & out) const

Definition at line 686 of file SiSPGNNTrackMaker.cxx.

687{
688 out<<std::endl;
689 if(msgLvl(MSG::DEBUG)) return dumpevent(out);
690 else return dumptools(out);
691}
bool msgLvl(const MSG::Level lvl) const
MsgStream & dumpevent(MsgStream &out) const
MsgStream & dumptools(MsgStream &out) const

◆ dump() [2/2]

std::ostream & InDet::SiSPGNNTrackMaker::dump ( std::ostream & out) const

Definition at line 716 of file SiSPGNNTrackMaker.cxx.

717{
718 return out;
719}

◆ dumpevent()

MsgStream & InDet::SiSPGNNTrackMaker::dumpevent ( MsgStream & out) const
protected

Definition at line 711 of file SiSPGNNTrackMaker.cxx.

712{
713 return out;
714}

◆ dumptools()

MsgStream & InDet::SiSPGNNTrackMaker::dumptools ( MsgStream & out) const
protected

Definition at line 697 of file SiSPGNNTrackMaker.cxx.

698{
699 out<<"| Location of output tracks | "
700 <<std::endl;
701 out<<"|----------------------------------------------------------------"
702 <<"----------------------------------------------------|"
703 <<std::endl;
704 return out;
705}

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

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

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode InDet::SiSPGNNTrackMaker::execute ( const EventContext & ctx) const
overridevirtual

Definition at line 88 of file SiSPGNNTrackMaker.cxx.

89{
90 SG::WriteHandle<TrackCollection> outputTracks{m_outputTracksKey, ctx};
91 ATH_CHECK(outputTracks.record(std::make_unique<TrackCollection>()));
92
93 SG::WriteHandle<std::vector<std::vector<float>>> outputEdgeScores{m_outputEdgeScoresKey, ctx};
94 ATH_CHECK(outputEdgeScores.record(std::make_unique<std::vector<std::vector<float>>>()));
95
96 // get event info
97 uint32_t runNumber = ctx.eventID().run_number();
98 uint32_t eventNumber = ctx.eventID().event_number();
99
100 // get all space points from event
101 std::vector<const Trk::SpacePoint*> spacePoints = getSpacePointsInEvent(ctx, eventNumber);
102
103 // get all clusters from event
104 std::vector<const Trk::PrepRawData*> allClusters = getClustersInEvent(ctx, eventNumber);
105
106 // get tracks from GNN chain
107 std::vector<std::vector<uint32_t> > TT;
108 std::vector<std::vector<uint32_t> > clusterTracks;
109 std::unordered_map<int, std::unordered_map<int, float>> edgeMap;
110 if (m_gnnTrackFinder.isSet()) {
111 ATH_CHECK(m_gnnTrackFinder->getTracks(
112 spacePoints,
113 TT,
114 m_saveEdgeScore ? &edgeMap : nullptr
115 )
116 );
117 } else if (m_gnnTrackReader.isSet()) {
118 // if track candidates are built from cluster, get both clusters and SPs
120 m_gnnTrackReader->getTracks(runNumber, eventNumber, clusterTracks, TT) :
121 m_gnnTrackReader->getTracks(runNumber, eventNumber, TT);
122 } else {
123 ATH_MSG_ERROR("Both GNNTrackFinder and GNNTrackReader are not set");
124 return StatusCode::FAILURE;
125 }
126
127 ATH_MSG_DEBUG("Event " << eventNumber << " obtained " << TT.size() << " Tracks");
128
129 // loop over all track candidates
130 // and perform track fitting for each.
131 int trackCounter = -1;
132 std::vector<int> status_codes;
133 // track processing loop
134 for (auto& trackIndices : TT) {
135 // For each track candidate:
136 trackCounter++;
137
138 // 1. Sort space points by distance from origin (and retrieve SP ID for edge scores)
139 std::pair<std::vector<const Trk::SpacePoint*>, std::vector<uint32_t> > trackInfos = getSpacePoints(trackIndices, spacePoints);
140 std::vector<const Trk::SpacePoint*> trackCandidate = trackInfos.first;
141 std::vector<uint32_t> sortedID = trackInfos.second;
142
143 // 2. Get associated clusters
144 // if track candidates are built from cluster, get both clusters and SPs
145 std::vector<const Trk::PrepRawData*> clusters = m_areInputClusters ?
146 getClusters (clusterTracks, allClusters, trackCounter)
147 : spacePointsToClusters(trackCandidate) ;
148
149 // 3. Perform track fitting:
150 // - Initial conformal mapping
151 // - First chi2 fit without outlier removal
152 // - Second chi2 fit with improved initial estimate of track parameters and with outlier removal
153 // 4. Apply quality cuts (pT, eta)
154 // 5. Compute track summary
155 // 6. Store track if it passes all criteria
156 auto [fitSuccess, passTrackCut, track] = doFitAndCut(ctx, trackCandidate, clusters, trackCounter);
157
158 if (not fitSuccess) {
159 continue;
160 }
161
162 if (passTrackCut <= 0) {
163 outputTracks->push_back(track.release());
164 if (m_saveEdgeScore){
165 std::vector<float> edges = getEdgeScores(sortedID, edgeMap);
166 outputEdgeScores->push_back(edges);
167 }
168 }
169
170 status_codes.push_back(passTrackCut);
171
172 }
173
174 if (m_doRecoTrackCuts) {
175 ATH_MSG_INFO("Event " << eventNumber << " has " << status_codes.size() << " tracks found, "
176 << std::count(status_codes.begin(), status_codes.end(), 0)
177 << " tracks remains after applying track cuts");
178 } else {
179 ATH_MSG_INFO("Event " << eventNumber << " has " << status_codes.size() << " tracks found, all tracks are kept");
180 }
181
182 return StatusCode::SUCCESS;
183}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
SG::WriteHandleKey< std::vector< std::vector< float > > > m_outputEdgeScoresKey
ToolHandle< IGNNTrackReaderTool > m_gnnTrackReader
std::pair< std::vector< const Trk::SpacePoint * >, std::vector< uint32_t > > getSpacePoints(const std::vector< uint32_t > &trackIndices, const std::vector< const Trk::SpacePoint * > &allSpacePoints) const
BooleanProperty m_areInputClusters
std::vector< const Trk::PrepRawData * > getClustersInEvent(const EventContext &ctx, int eventNumber) const
std::vector< float > getEdgeScores(const std::vector< uint32_t > &sortedID, const std::unordered_map< int, std::unordered_map< int, float > > &edgeMap) const
SG::WriteHandleKey< TrackCollection > m_outputTracksKey
std::vector< const Trk::PrepRawData * > spacePointsToClusters(const std::vector< const Trk::SpacePoint * > &spacePoints) const
ToolHandle< IGNNTrackFinder > m_gnnTrackFinder
GNN-based track finding tool that produces track candidates.
std::vector< const Trk::SpacePoint * > getSpacePointsInEvent(const EventContext &ctx, int eventNumber) const
std::vector< const Trk::PrepRawData * > getClusters(const std::vector< std::vector< uint32_t > > &clusterTracks, const std::vector< const Trk::PrepRawData * > &allClusters, int trackNumber) const
std::tuple< bool, int, std::unique_ptr< Trk::Track > > doFitAndCut(const EventContext &ctx, std::vector< const Trk::SpacePoint * > &spacePoints, std::vector< const Trk::PrepRawData * > &clusters, int &trackCounter) const
Fits a track and applies quality cuts to determine if it should be kept.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
setEventNumber uint32_t

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

88{
89 // If we didn't find any symlinks to add, just return the collection
90 // from the base class. Otherwise, return the extended collection.
91 if (!m_extendedExtraObjects.empty()) {
93 }
95}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

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

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ fitTrack()

std::unique_ptr< Trk::Track > InDet::SiSPGNNTrackMaker::fitTrack ( const EventContext & ctx,
std::vector< const Trk::PrepRawData * > clusters,
const Trk::TrackParameters & initial_params,
int trackCounter ) const
protected

Definition at line 598 of file SiSPGNNTrackMaker.cxx.

604 {
605
607 // first fit the track with local parameters and without outlier removal.
608 bool keepOnTrying = true;
609 std::unique_ptr<Trk::Track> track;
610 while (keepOnTrying) {
611 track = m_trackFitter->fit(ctx, clusters, initial_params, false, matEffects);
612 // any need to recover a failed fit ?
613 if (track == nullptr || track->perigeeParameters() == nullptr) {
614 clusters.pop_back();
616 keepOnTrying = false;
617 }
618 } else {
619 keepOnTrying = false;
620 }
621 }
622
623 if (track == nullptr || track->perigeeParameters() == nullptr) {
624 ATH_MSG_DEBUG("Track " << trackCounter
625 << " fails the first chi2 fit, skipping");
626 return track;
627 }
628
629 // reject track with pT too low, default 400 MeV
630 if (track->perigeeParameters()->pT() < m_pTmin) {
631 ATH_MSG_DEBUG("Track " << trackCounter
632 << " fails the first chi2 fit, skipping");
633 return nullptr;
634 }
635
636 // finally fit with outlier removal
637 Trk::Perigee origPerigee = *track->perigeeParameters();
638 keepOnTrying = true;
639 while (keepOnTrying) {
640 track = m_trackFitter->fit(ctx, clusters, origPerigee, true, matEffects);
641 // any need to recover a failed or bad fit ?
642 bool doRefit=false;
643 if (track == nullptr || track->trackSummary() == nullptr || track->outliersOnTrack()->size()>=3) {
644 doRefit=true;
645 }
646 if (doRefit && m_doRecoverFailedFits) {
647 clusters.pop_back();
648 if (clusters.size()<m_minClusters) {
649 keepOnTrying=false;
650 }
651 } else {
652 keepOnTrying=false;
653 }
654 }
655
656 if (!track) ATH_MSG_DEBUG("Track " << trackCounter
657 << " fails the second chi2 fit, skipping");
658
659 return track;
660
661 }
BooleanProperty m_doRecoverFailedFits
ToolHandle< Trk::ITrackFitter > m_trackFitter
Track Fitter.
UnsignedIntegerProperty m_minClusters
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.

◆ getClusters()

std::vector< const Trk::PrepRawData * > InDet::SiSPGNNTrackMaker::getClusters ( const std::vector< std::vector< uint32_t > > & clusterTracks,
const std::vector< const Trk::PrepRawData * > & allClusters,
int trackNumber ) const
protected

Definition at line 480 of file SiSPGNNTrackMaker.cxx.

484 {
485 std::vector<uint32_t> clusterIndices = clusterTracks[trackNumber];
486 std::vector<const Trk::PrepRawData*> clusters;
487 clusters.reserve(clusterIndices.size());
488 for (uint32_t id : clusterIndices) {
489 if (id > allClusters.size()) {
490 ATH_MSG_ERROR("Cluster index out of range");
491 continue;
492 }
493 clusters.push_back(allClusters[id]);
494 }
495 return clusters;
496}

◆ getClustersInEvent()

std::vector< const Trk::PrepRawData * > InDet::SiSPGNNTrackMaker::getClustersInEvent ( const EventContext & ctx,
int eventNumber ) const
protected

Definition at line 356 of file SiSPGNNTrackMaker.cxx.

359 {
360 std::vector<const Trk::PrepRawData*> allClusters;
361 if (m_areInputClusters) {
362 SG::ReadHandle<InDet::PixelClusterContainer> pixcontainer(m_ClusterPixelKey,
363 ctx);
364 SG::ReadHandle<InDet::SCT_ClusterContainer> strip_container(m_ClusterStripKey,
365 ctx);
366
367 if (!pixcontainer.isValid()) {
368 ATH_MSG_ERROR("Pixel container invalid, returning");
369 return allClusters;
370 }
371
372 if (!strip_container.isValid()) {
373 ATH_MSG_ERROR("Strip container invalid, returning");
374 return allClusters;
375 }
376
377 auto pixcollection = pixcontainer->begin();
378 auto pixcollectionEnd = pixcontainer->end();
379 for (; pixcollection != pixcollectionEnd; ++pixcollection) {
380 if ((*pixcollection)->empty()) {
381 ATH_MSG_WARNING("Empty pixel cluster collection encountered");
382 continue;
383 }
384 auto const* clusterCollection = (*pixcollection);
385 auto thisCluster = clusterCollection->begin();
386 auto clusterEnd = clusterCollection->end();
387 for (; thisCluster != clusterEnd; ++thisCluster) {
388 const PixelCluster* cl = (*thisCluster);
389 allClusters.push_back(cl);
390 }
391 }
392
393 auto strip_collection = strip_container->begin();
394 auto strip_collectionEnd = strip_container->end();
395 for (; strip_collection != strip_collectionEnd; ++strip_collection) {
396 if ((*strip_collection)->empty()) {
397 ATH_MSG_WARNING("Empty strip cluster collection encountered");
398 continue;
399 }
400 auto const* clusterCollection = (*strip_collection);
401 auto thisCluster = clusterCollection->begin();
402 auto clusterEnd = clusterCollection->end();
403 for (; thisCluster != clusterEnd; ++thisCluster) {
404 const SCT_Cluster* cl = (*thisCluster);
405 allClusters.push_back(cl);
406 }
407 }
408
409 ATH_MSG_DEBUG("Event " << eventNumber << " has " << allClusters.size()
410 << " clusters");
411 }
412 return allClusters;
413}
#define ATH_MSG_WARNING(x)
SG::ReadHandleKey< InDet::PixelClusterContainer > m_ClusterPixelKey
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_ClusterStripKey
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.

◆ getEdgeScores()

std::vector< float > InDet::SiSPGNNTrackMaker::getEdgeScores ( const std::vector< uint32_t > & sortedID,
const std::unordered_map< int, std::unordered_map< int, float > > & edgeMap ) const
protected

Definition at line 185 of file SiSPGNNTrackMaker.cxx.

188 {
189
190 std::vector<float> edges;
191 edges.reserve(sortedID.size() - 1);
192
193 if (sortedID.size() < 2) {
194 ATH_MSG_WARNING("Not enough SP in this track, returning empty edge list!");
195 return edges;
196 }
197 if (edgeMap.empty()) {
198 ATH_MSG_WARNING("Empty edgeMap, returning empty edge list! ");
199 return edges;
200 }
201
202 for (std::size_t i = 0; i < sortedID.size() - 1; ++i) {
203 uint32_t src = sortedID[i];
204 uint32_t dst = sortedID[i+1];
205
206 auto srcMap = edgeMap.find(src);
207 if (srcMap == edgeMap.end()) {
208 edges.push_back(-1.f);
209 continue;
210 }
211
212 auto dstMap = srcMap->second.find(dst);
213 if (dstMap == srcMap->second.end()) {
214 edges.push_back(-1.f);
215 continue;
216 }
217
218 float score = dstMap->second;
219 edges.push_back(score);
220 }
221
222 return edges;
223}

◆ getSpacePoints()

std::pair< std::vector< const Trk::SpacePoint * >, std::vector< uint32_t > > InDet::SiSPGNNTrackMaker::getSpacePoints ( const std::vector< uint32_t > & trackIndices,
const std::vector< const Trk::SpacePoint * > & allSpacePoints ) const
protected

Definition at line 416 of file SiSPGNNTrackMaker.cxx.

419 {
420
421 std::vector<const Trk::SpacePoint*> trackCandidate;
422 std::vector<uint32_t> sorted_idx;
423 trackCandidate.reserve(trackIndices.size());
424 sorted_idx.reserve(trackIndices.size());
425
426 std::vector<std::tuple<double, const Trk::SpacePoint*, uint32_t> > distanceSortedSPs;
427
428 // get track space points
429 // sort SPs in track by distance from origin
430 for (auto& id : trackIndices) {
432 if (id > allSpacePoints.size()) {
433 ATH_MSG_WARNING("SpacePoint index "
434 << id << " out of range: " << allSpacePoints.size());
435 continue;
436 }
437
438 const Trk::SpacePoint* sp = allSpacePoints[id];
439
440 // store distance - hit paire
441 if (sp != nullptr) {
442 distanceSortedSPs.push_back(
443 std::make_tuple(
444 pow(sp->globalPosition().x(), 2) + pow(sp->globalPosition().y(), 2),
445 sp,
446 id
447 )
448 );
449 }
450 }
451
452 // sort by distance
453 std::sort(distanceSortedSPs.begin(), distanceSortedSPs.end());
454
455 // add SP to trk candidate in the same order
456 for (size_t i = 0; i < distanceSortedSPs.size(); i++) {
457 trackCandidate.push_back(std::get<1>(distanceSortedSPs[i]));
458
459 if (m_saveEdgeScore) {
460 sorted_idx.push_back(std::get<2>(distanceSortedSPs[i]));
461 }
462 }
463
464 return std::make_pair(trackCandidate, sorted_idx);
465}
static Double_t sp
bool trackIndices() const
Return true if index tracking is enabled for this object.
constexpr int pow(int x)
Definition conifer.h:27
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ getSpacePointsInEvent() [1/3]

std::vector< const Trk::SpacePoint * > InDet::SiSPGNNTrackMaker::getSpacePointsInEvent ( const EventContext & ctx,
const SG::ReadHandleKey< SpacePointContainer > & containerKey ) const
protected

Definition at line 307 of file SiSPGNNTrackMaker.cxx.

310 {
311 std::vector<const Trk::SpacePoint*> spacePoints;
312 if (not containerKey.empty()){
313
314 SG::ReadHandle<SpacePointContainer> container{containerKey, ctx};
315
316 if (container.isValid()){
317 // loop over spacepoint collection
318 auto spc = container->begin();
319 auto spce = container->end();
320 for(; spc != spce; ++spc){
321 const SpacePointCollection* spCollection = (*spc);
322 auto sp = spCollection->begin();
323 auto spe = spCollection->end();
324 for(; sp != spe; ++sp) {
325 const Trk::SpacePoint* spacePoint = (*sp);
326 spacePoints.push_back(spacePoint);
327 }
328 }
329 }
330 }
331
332 return spacePoints;
333}
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
bool empty() const
Test if the key is blank.
const SG::AuxVectorData * container() const
Return the container holding this element.

◆ getSpacePointsInEvent() [2/3]

std::vector< const Trk::SpacePoint * > InDet::SiSPGNNTrackMaker::getSpacePointsInEvent ( const EventContext & ctx,
const SG::ReadHandleKey< SpacePointOverlapCollection > & containerKey ) const
protected

Definition at line 335 of file SiSPGNNTrackMaker.cxx.

338 {
339
340 std::vector<const Trk::SpacePoint*> spacePoints;
341
342 if (not containerKey.empty()){
343
344 SG::ReadHandle<SpacePointOverlapCollection> collection{containerKey, ctx};
345
346 if (collection.isValid()){
347 for (const Trk::SpacePoint *sp : *collection) {
348 spacePoints.push_back(sp);
349 }
350 }
351 }
352
353 return spacePoints;
354}
virtual bool isValid() override final
Can the handle be successfully dereferenced?

◆ getSpacePointsInEvent() [3/3]

std::vector< const Trk::SpacePoint * > InDet::SiSPGNNTrackMaker::getSpacePointsInEvent ( const EventContext & ctx,
int eventNumber ) const
protected

Definition at line 279 of file SiSPGNNTrackMaker.cxx.

282 {
283 std::vector<const Trk::SpacePoint*> spacePoints;
284
285 int npixsp(0), nstrip(0), n_overlap(0);
286 for (const Trk::SpacePoint* sp : getSpacePointsInEvent(ctx, m_SpacePointsPixelKey)) {
287 spacePoints.push_back(sp);
288 npixsp++;
289 }
290 for (const Trk::SpacePoint* sp : getSpacePointsInEvent(ctx, m_SpacePointsSCTKey)) {
291 spacePoints.push_back(sp);
292 nstrip++;
293 }
294 for (const Trk::SpacePoint* sp : getSpacePointsInEvent(ctx, m_SpacePointsOverlapKey)) {
295 spacePoints.push_back(sp);
296 n_overlap++;
297 }
298 ATH_MSG_DEBUG("Event " << eventNumber << " has " << npixsp
299 << " pixel space points, " << nstrip
300 << " strips space points, " << n_overlap
301 << " overlapping spacepoints, " << spacePoints.size()
302 << " space points");
303
304 return spacePoints;
305}
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsSCTKey
SG::ReadHandleKey< SpacePointOverlapCollection > m_SpacePointsOverlapKey
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsPixelKey

◆ initialize()

StatusCode InDet::SiSPGNNTrackMaker::initialize ( )
overridevirtual

Definition at line 23 of file SiSPGNNTrackMaker.cxx.

24{
25 ATH_CHECK(m_SpacePointsPixelKey.initialize());
26 ATH_CHECK(m_SpacePointsSCTKey.initialize());
28 ATH_CHECK(m_ClusterPixelKey.initialize());
29 ATH_CHECK(m_ClusterStripKey.initialize());
30
31 ATH_CHECK(m_outputTracksKey.initialize());
32 ATH_CHECK(m_outputEdgeScoresKey.initialize());
33
34 ATH_CHECK(m_trackFitter.retrieve());
35 ATH_CHECK(m_seedFitter.retrieve());
36 ATH_CHECK(m_trackSummaryTool.retrieve());
37
38 if (!m_gnnTrackFinder.empty() && !m_gnnTrackReader.empty()) {
39 ATH_MSG_ERROR("Use either track finder or track reader, not both.");
40 return StatusCode::FAILURE;
41 }
42
43 if (!m_gnnTrackFinder.empty()) {
44 ATH_MSG_INFO("Use GNN Track Finder");
45 ATH_CHECK(m_gnnTrackFinder.retrieve());
46 }
47 if (!m_gnnTrackReader.empty()) {
48 ATH_MSG_INFO("Use GNN Track Reader");
49 ATH_CHECK(m_gnnTrackReader.retrieve());
50 }
52 ATH_MSG_INFO("Use input clusters");
53 }
54 // retrieve eta dependent cut svc
56
57 ATH_MSG_INFO("Applying the following cuts during GNN-based track reconstruction: ");
58 ATH_MSG_INFO("Min pT: " << m_pTmin);
59 ATH_MSG_INFO("Max eta: " << m_etamax);
60 ATH_MSG_INFO("Min number of clusters: " << m_minClusters);
61 ATH_MSG_INFO("Min number of pixel clusters: " << m_minPixelClusters);
62 ATH_MSG_INFO("Min number of strip clusters: " << m_minStripClusters);
63
64
66 ATH_MSG_INFO("Applying the following eta dependant track cuts after GNN-based track reconstruction: ");
67 std::vector <double> etaBins, minPT, maxz0, maxd0;
68 std::vector <int> minClusters, minPixelHits, maxHoles;
69 m_etaDependentCutsSvc->getValue(InDet::CutName::etaBins, etaBins);
70 ATH_MSG_INFO("Eta bins: " << etaBins );
71 m_etaDependentCutsSvc->getValue(InDet::CutName::minClusters, minClusters);
72 ATH_MSG_INFO("Min Si Hits: " << minClusters );
73 m_etaDependentCutsSvc->getValue(InDet::CutName::minPixelHits, minPixelHits);
74 ATH_MSG_INFO("Min pixel hits: " << minPixelHits );
75 m_etaDependentCutsSvc->getValue(InDet::CutName::maxHoles, maxHoles);
76 ATH_MSG_INFO("Max holes: " << maxHoles);
77 m_etaDependentCutsSvc->getValue(InDet::CutName::minPT, minPT);
78 ATH_MSG_INFO("Min pT: " << minPT);
79 m_etaDependentCutsSvc->getValue(InDet::CutName::maxZImpact, maxz0);
80 ATH_MSG_INFO("Max z0: " << maxz0);
81 m_etaDependentCutsSvc->getValue(InDet::CutName::maxPrimaryImpact, maxd0);
82 ATH_MSG_INFO("Max d0: " << maxd0);
83 }
84
85 return StatusCode::SUCCESS;
86}
UnsignedIntegerProperty m_minStripClusters
UnsignedIntegerProperty m_minPixelClusters
ServiceHandle< IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

virtual bool InDet::SiSPGNNTrackMaker::isClonable ( ) const
inlineoverridevirtual

Make this algorithm clonable.

Reimplemented from AthCommonReentrantAlgorithm< Gaudi::Algorithm >.

Definition at line 49 of file SiSPGNNTrackMaker.h.

49{ return true; };

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ passEtaDepCuts()

int InDet::SiSPGNNTrackMaker::passEtaDepCuts ( const Trk::Track & track) const
protected

Definition at line 230 of file SiSPGNNTrackMaker.cxx.

231{
232 const Trk::Perigee* origPerigee = track.perigeeParameters();
233 double pt = origPerigee->pT();
234
235 double eta = std::abs(origPerigee->eta());
236
237 double d0 = std::abs(origPerigee->parameters()[Trk::d0]);
238
239 double z0 = std::abs(origPerigee->parameters()[Trk::z0]);
240
241 int nHolesOnTrack = track.trackSummary()->get(Trk::numberOfPixelHoles) +
242 track.trackSummary()->get(Trk::numberOfSCTHoles);
243
244 int nPixels = track.trackSummary()->get(Trk::numberOfPixelHits);
245 int nStrips = track.trackSummary()->get(Trk::numberOfSCTHits);
246 int nClusters = nPixels + nStrips;
247
248 ATH_MSG_DEBUG("track params: (pt,eta,d0,z0)=(" << pt << "," << eta << "," << d0 << "," << z0
249 << ") Nclusters:" << nClusters << " pixel "<< nPixels
250 << " strips " << nStrips);
251
252 // min Si hits
253 if (nClusters < m_etaDependentCutsSvc->getMinSiHitsAtEta(eta))
254 return 1;
255
256 // min pixel hits
257 if (nPixels < m_etaDependentCutsSvc->getMinPixelHitsAtEta(eta))
258 return 2;
259
260 // min pT, default 400
261 if (pt < m_etaDependentCutsSvc->getMinPtAtEta(eta))
262 return 3;
263
264 // max z0
265 if (z0 > m_etaDependentCutsSvc->getMaxZImpactAtEta(eta))
266 return 4;
267
268 // max d0
269 if (d0 > m_etaDependentCutsSvc->getMaxPrimaryImpactAtEta(eta))
270 return 5;
271
272 // max holes
273 if (nHolesOnTrack > m_etaDependentCutsSvc->getMaxSiHolesAtEta(eta))
274 return 6;
275
276 return 0;
277}
Scalar eta() const
pseudorapidity method
double eta() const
Access method for pseudorapidity - from momentum.
double pT() const
Access method for transverse momentum.
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
@ numberOfPixelHits
number of pixel layers on track with absence of hits
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.

◆ prefitCheck()

bool InDet::SiSPGNNTrackMaker::prefitCheck ( unsigned int nPix,
unsigned int nStrip,
unsigned int nClusters,
unsigned int nSpacePoints ) const
protected

Definition at line 225 of file SiSPGNNTrackMaker.cxx.

225 {
226 return nPix >= m_minPixelClusters && nStrip >= m_minStripClusters && nClusters >= m_minClusters && nSpacePoints >= 3;
227}

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ spacePointsToClusters()

std::vector< const Trk::PrepRawData * > InDet::SiSPGNNTrackMaker::spacePointsToClusters ( const std::vector< const Trk::SpacePoint * > & spacePoints) const
protected

Definition at line 467 of file SiSPGNNTrackMaker.cxx.

469 {
470 std::vector<const Trk::PrepRawData*> clusters;
471 for (const Trk::SpacePoint* sp : spacePoints) {
472 clusters.push_back(sp->clusterList().first);
473 if (sp->clusterList().second != nullptr) {
474 clusters.push_back(sp->clusterList().second);
475 }
476 }
477 return clusters;
478}

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

75{
76 return BaseAlg::sysExecute (ctx);
77}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

105 {
107
108 if (sc.isFailure()) {
109 return sc;
110 }
111
112 ServiceHandle<ICondSvc> cs("CondSvc",name());
113 for (auto h : outputHandles()) {
114 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
115 // do this inside the loop so we don't create the CondSvc until needed
116 if ( cs.retrieve().isFailure() ) {
117 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
118 return StatusCode::SUCCESS;
119 }
120 if (cs->regHandle(this,*h).isFailure()) {
122 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
123 << " with CondSvc");
124 }
125 }
126 }
127 return sc;
128}
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_areInputClusters

BooleanProperty InDet::SiSPGNNTrackMaker::m_areInputClusters
protected
Initial value:
{
this, "areInputClusters", false,
"Read track candidates as list of clusters"}

Definition at line 108 of file SiSPGNNTrackMaker.h.

108 {
109 this, "areInputClusters", false,
110 "Read track candidates as list of clusters"};

◆ m_ClusterPixelKey

SG::ReadHandleKey<InDet::PixelClusterContainer> InDet::SiSPGNNTrackMaker::m_ClusterPixelKey
protected
Initial value:
{
this, "PixelClusterContainer", "ITkPixelClusters"}

Definition at line 67 of file SiSPGNNTrackMaker.h.

67 {
68 this, "PixelClusterContainer", "ITkPixelClusters"};

◆ m_ClusterStripKey

SG::ReadHandleKey<InDet::SCT_ClusterContainer> InDet::SiSPGNNTrackMaker::m_ClusterStripKey
protected
Initial value:
{
this, "StripClusterContainer", "ITkStripClusters"}

Definition at line 69 of file SiSPGNNTrackMaker.h.

69 {
70 this, "StripClusterContainer", "ITkStripClusters"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doRecoTrackCuts

BooleanProperty InDet::SiSPGNNTrackMaker::m_doRecoTrackCuts
protected
Initial value:
{this, "doRecoTrackCuts", false,
"Apply Loose track cuts"}

Definition at line 111 of file SiSPGNNTrackMaker.h.

111 {this, "doRecoTrackCuts", false,
112 "Apply Loose track cuts"};

◆ m_doRecoverFailedFits

BooleanProperty InDet::SiSPGNNTrackMaker::m_doRecoverFailedFits
protected
Initial value:
{this, "doRecoverFailedFits", true,
"Try to recover failed track fits by removing hits, at the end of the track"}

Definition at line 125 of file SiSPGNNTrackMaker.h.

125 {this, "doRecoverFailedFits", true,
126 "Try to recover failed track fits by removing hits, at the end of the track"};

◆ m_etaDependentCutsSvc

ServiceHandle<IInDetEtaDependentCutsSvc> InDet::SiSPGNNTrackMaker::m_etaDependentCutsSvc
protected
Initial value:
{
this, "InDetEtaDependentCutsSvc", "InDetEtaDependentCutsSvc"}

Definition at line 114 of file SiSPGNNTrackMaker.h.

114 {
115 this, "InDetEtaDependentCutsSvc", "InDetEtaDependentCutsSvc"};

◆ m_etamax

DoubleProperty InDet::SiSPGNNTrackMaker::m_etamax {this, "etamax", 4., "max reco eta"}
protected

Definition at line 121 of file SiSPGNNTrackMaker.h.

121{this, "etamax", 4., "max reco eta"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_gnnTrackFinder

ToolHandle<IGNNTrackFinder> InDet::SiSPGNNTrackMaker::m_gnnTrackFinder
protected
Initial value:
{
this, "GNNTrackFinderTool",
"InDet::SiGNNTrackFinderTool", "Track Finder"
}

GNN-based track finding tool that produces track candidates.


@name Tool handles

Definition at line 85 of file SiSPGNNTrackMaker.h.

85 {
86 this, "GNNTrackFinderTool",
87 "InDet::SiGNNTrackFinderTool", "Track Finder"
88 };

◆ m_gnnTrackReader

ToolHandle<IGNNTrackReaderTool> InDet::SiSPGNNTrackMaker::m_gnnTrackReader
protected
Initial value:
{
this, "GNNTrackReaderTool",
"InDet::GNNTrackReaderTool", "Track Reader"
}

Definition at line 100 of file SiSPGNNTrackMaker.h.

100 {
101 this, "GNNTrackReaderTool",
102 "InDet::GNNTrackReaderTool", "Track Reader"
103 };

◆ m_minClusters

UnsignedIntegerProperty InDet::SiSPGNNTrackMaker::m_minClusters {this, "minClusters", 6, "Min number clusters"}
protected

Definition at line 117 of file SiSPGNNTrackMaker.h.

117{this, "minClusters", 6, "Min number clusters"};

◆ m_minPixelClusters

UnsignedIntegerProperty InDet::SiSPGNNTrackMaker::m_minPixelClusters {this, "minPixelClusters", 1, "min pixel clusters"}
protected

Definition at line 118 of file SiSPGNNTrackMaker.h.

118{this, "minPixelClusters", 1, "min pixel clusters"};

◆ m_minStripClusters

UnsignedIntegerProperty InDet::SiSPGNNTrackMaker::m_minStripClusters {this, "minStripClusters", 0, "Minimum number of strip clusters"}
protected

Definition at line 119 of file SiSPGNNTrackMaker.h.

119{this, "minStripClusters", 0, "Minimum number of strip clusters"};

◆ m_outputEdgeScoresKey

SG::WriteHandleKey<std::vector<std::vector<float> > > InDet::SiSPGNNTrackMaker::m_outputEdgeScoresKey
protected
Initial value:
{
this, "EdgeScoresKey", "GNNEdgeScores"}

Definition at line 77 of file SiSPGNNTrackMaker.h.

77 {
78 this, "EdgeScoresKey", "GNNEdgeScores"};

◆ m_outputTracksKey

SG::WriteHandleKey<TrackCollection> InDet::SiSPGNNTrackMaker::m_outputTracksKey
protected
Initial value:
{
this, "TracksLocation", "SiSPGNNTracks"}

Definition at line 73 of file SiSPGNNTrackMaker.h.

73 {
74 this, "TracksLocation", "SiSPGNNTracks"};

◆ m_pTmin

DoubleProperty InDet::SiSPGNNTrackMaker::m_pTmin {this, "pTmin", 400., "min pT"}
protected

Definition at line 120 of file SiSPGNNTrackMaker.h.

120{this, "pTmin", 400., "min pT"};

◆ m_saveEdgeScore

BooleanProperty InDet::SiSPGNNTrackMaker::m_saveEdgeScore {this, "saveEdgeScore", false, "Save edge scores in a temporary container"}
protected

Definition at line 128 of file SiSPGNNTrackMaker.h.

128{this, "saveEdgeScore", false, "Save edge scores in a temporary container"};

◆ m_seedFitter

ToolHandle<ISeedFitter> InDet::SiSPGNNTrackMaker::m_seedFitter
protected
Initial value:
{
this, "SeedFitterTool",
"InDet::SiSeedFitterTool", "Seed Fitter"
}

Definition at line 89 of file SiSPGNNTrackMaker.h.

89 {
90 this, "SeedFitterTool",
91 "InDet::SiSeedFitterTool", "Seed Fitter"
92 };

◆ m_SpacePointsOverlapKey

SG::ReadHandleKey<SpacePointOverlapCollection> InDet::SiSPGNNTrackMaker::m_SpacePointsOverlapKey {this, "SpacePointsOverlapName", "ITkOverlapSpacePoints"}
protected

Definition at line 65 of file SiSPGNNTrackMaker.h.

65{this, "SpacePointsOverlapName", "ITkOverlapSpacePoints"};

◆ m_SpacePointsPixelKey

SG::ReadHandleKey<SpacePointContainer> InDet::SiSPGNNTrackMaker::m_SpacePointsPixelKey
protected
Initial value:
{
this, "SpacePointsPixelName", "ITkPixelSpacePoints"}

@name Data handles

Definition at line 61 of file SiSPGNNTrackMaker.h.

61 {
62 this, "SpacePointsPixelName", "ITkPixelSpacePoints"};

◆ m_SpacePointsSCTKey

SG::ReadHandleKey<SpacePointContainer> InDet::SiSPGNNTrackMaker::m_SpacePointsSCTKey
protected
Initial value:
{
this, "SpacePointsSCTName", "ITkStripSpacePoints"}

Definition at line 63 of file SiSPGNNTrackMaker.h.

63 {
64 this, "SpacePointsSCTName", "ITkStripSpacePoints"};

◆ m_trackFitter

ToolHandle<Trk::ITrackFitter> InDet::SiSPGNNTrackMaker::m_trackFitter
protected
Initial value:
{
this, "TrackFitter",
"Trk::GlobalChi2Fitter/InDetTrackFitter", "Track Fitter"
}

Track Fitter.

Definition at line 94 of file SiSPGNNTrackMaker.h.

94 {
95 this, "TrackFitter",
96 "Trk::GlobalChi2Fitter/InDetTrackFitter", "Track Fitter"
97 };

◆ m_trackSummaryTool

ToolHandle<Trk::IExtendedTrackSummaryTool> InDet::SiSPGNNTrackMaker::m_trackSummaryTool
protected
Initial value:
{
this, "TrackSummaryTool", "InDetTrackSummaryTool"}

Definition at line 98 of file SiSPGNNTrackMaker.h.

98 {
99 this, "TrackSummaryTool", "InDetTrackSummaryTool"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


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