ATLAS Offline Software
SiSPGNNTrackMaker.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <memory>
6 #include <fstream>
7 
8 #include "SiSPGNNTrackMaker.h"
9 
12 
14  const std::string& name, ISvcLocator* pSvcLocator)
15  : AthReentrantAlgorithm(name, pSvcLocator)
16 {
17 
18 }
19 
21 {
27 
28  ATH_CHECK(m_outputTracksKey.initialize());
29 
30  ATH_CHECK(m_trackFitter.retrieve());
31  ATH_CHECK(m_seedFitter.retrieve());
32  ATH_CHECK(m_trackSummaryTool.retrieve());
33 
34  if (!m_gnnTrackFinder.empty() && !m_gnnTrackReader.empty()) {
35  ATH_MSG_ERROR("Use either track finder or track reader, not both.");
36  return StatusCode::FAILURE;
37  }
38 
39  if (!m_gnnTrackFinder.empty()) {
40  ATH_MSG_INFO("Use GNN Track Finder");
41  ATH_CHECK(m_gnnTrackFinder.retrieve());
42  }
43  if (!m_gnnTrackReader.empty()) {
44  ATH_MSG_INFO("Use GNN Track Reader");
45  ATH_CHECK(m_gnnTrackReader.retrieve());
46  }
47  if (m_areInputClusters) {
48  ATH_MSG_INFO("Use input clusters");
49  }
50  // retrieve eta dependent cut svc
51  ATH_CHECK(m_etaDependentCutsSvc.retrieve());
52 
53  ATH_MSG_INFO("Applying the following cuts during GNN-based track reconstruction: ");
54  ATH_MSG_INFO("Min pT: " << m_pTmin);
55  ATH_MSG_INFO("Max eta: " << m_etamax);
56  ATH_MSG_INFO("Min number of clusters: " << m_minClusters);
57  ATH_MSG_INFO("Min number of pixel clusters: " << m_minPixelClusters);
58  ATH_MSG_INFO("Min number of strip clusters: " << m_minStripClusters);
59 
60 
61  if (m_doRecoTrackCuts) {
62  ATH_MSG_INFO("Applying the following eta dependant track cuts after GNN-based track reconstruction: ");
63  std::vector <double> etaBins, minPT, maxz0, maxd0;
64  std::vector <int> minClusters, minPixelHits, maxHoles;
66  ATH_MSG_INFO("Eta bins: " << etaBins );
67  m_etaDependentCutsSvc->getValue(InDet::CutName::minClusters, minClusters);
68  ATH_MSG_INFO("Min Si Hits: " << minClusters );
69  m_etaDependentCutsSvc->getValue(InDet::CutName::minPixelHits, minPixelHits);
70  ATH_MSG_INFO("Min pixel hits: " << minPixelHits );
71  m_etaDependentCutsSvc->getValue(InDet::CutName::maxHoles, maxHoles);
72  ATH_MSG_INFO("Max holes: " << maxHoles);
73  m_etaDependentCutsSvc->getValue(InDet::CutName::minPT, minPT);
74  ATH_MSG_INFO("Min pT: " << minPT);
75  m_etaDependentCutsSvc->getValue(InDet::CutName::maxZImpact, maxz0);
76  ATH_MSG_INFO("Max z0: " << maxz0);
77  m_etaDependentCutsSvc->getValue(InDet::CutName::maxPrimaryImpact, maxd0);
78  ATH_MSG_INFO("Max d0: " << maxd0);
79  }
80 
81  return StatusCode::SUCCESS;
82 }
83 
84 StatusCode InDet::SiSPGNNTrackMaker::execute(const EventContext& ctx) const
85 {
87  ATH_CHECK(outputTracks.record(std::make_unique<TrackCollection>()));
88 
89  // get event info
90  uint32_t runNumber = ctx.eventID().run_number();
91  uint32_t eventNumber = ctx.eventID().event_number();
92 
93  // get all space points from event
94  std::vector<const Trk::SpacePoint*> spacePoints = getSpacePointsInEvent(ctx, eventNumber);
95 
96  // get all clusters from event
97  std::vector<const Trk::PrepRawData*> allClusters = getClustersInEvent(ctx, eventNumber);
98 
99  // get tracks from GNN chain
100  std::vector<std::vector<uint32_t> > TT;
101  std::vector<std::vector<uint32_t> > clusterTracks;
102  if (m_gnnTrackFinder.isSet()) {
103  ATH_CHECK(m_gnnTrackFinder->getTracks(spacePoints, TT));
104  } else if (m_gnnTrackReader.isSet()) {
105  // if track candidates are built from cluster, get both clusters and SPs
107  m_gnnTrackReader->getTracks(runNumber, eventNumber, clusterTracks, TT) :
108  m_gnnTrackReader->getTracks(runNumber, eventNumber, TT);
109  } else {
110  ATH_MSG_ERROR("Both GNNTrackFinder and GNNTrackReader are not set");
111  return StatusCode::FAILURE;
112  }
113 
114  ATH_MSG_DEBUG("Event " << eventNumber << " obtained " << TT.size() << " Tracks");
115 
116  // loop over all track candidates
117  // and perform track fitting for each.
118  int trackCounter = -1;
119  std::vector<int> status_codes;
120  // track processing loop
121  for (auto& trackIndices : TT) {
122  // For each track candidate:
123  trackCounter++;
124 
125  // 1. Sort space points by distance from origin
126  std::vector<const Trk::SpacePoint*> trackCandidate = getSpacePoints(trackIndices, spacePoints);
127 
128  // 2. Get associated clusters
129  // if track candidates are built from cluster, get both clusters and SPs
130  std::vector<const Trk::PrepRawData*> clusters = m_areInputClusters ?
131  getClusters (clusterTracks, allClusters, trackCounter)
132  : spacePointsToClusters(trackCandidate) ;
133 
134  // 3. Perform track fitting:
135  // - Initial conformal mapping
136  // - First chi2 fit without outlier removal
137  // - Second chi2 fit with perigee parameters
138  // - Final fit with outlier removal
139  // 4. Apply quality cuts (pT, eta)
140  // 5. Compute track summary
141  // 6. Store track if it passes all criteria
142  auto [fitSuccess, passTrackCut, track] = doFitAndCut(ctx, trackCandidate, clusters, trackCounter);
143 
144  if (not fitSuccess) {
145  continue;
146  }
147 
148  if (passTrackCut <= 0) {
149  outputTracks->push_back(track.release());
150  }
151 
152  status_codes.push_back(passTrackCut);
153 
154  }
155 
156  if (m_doRecoTrackCuts) {
157  ATH_MSG_INFO("Event " << eventNumber << " has " << status_codes.size() << " tracks found, "
158  << std::count(status_codes.begin(), status_codes.end(), 0)
159  << " tracks remains after applying track cuts");
160  } else {
161  ATH_MSG_INFO("Event " << eventNumber << " has " << status_codes.size() << " tracks found, all tracks are kept");
162  }
163 
164  return StatusCode::SUCCESS;
165 }
166 
167 
168 bool InDet::SiSPGNNTrackMaker::prefitCheck(int nPix, int nStrip, int nClusters, int nSpacePoints) const {
169  return nPix >= m_minPixelClusters && nStrip >= m_minStripClusters && nClusters >= m_minClusters && nSpacePoints >= 3;
170 }
171 
172 
174 {
175  const Trk::Perigee* origPerigee = track.perigeeParameters();
176  double pt = origPerigee->pT();
177 
178  double eta = std::abs(origPerigee->eta());
179 
180  double d0 = std::abs(origPerigee->parameters()[Trk::d0]);
181 
182  double z0 = std::abs(origPerigee->parameters()[Trk::z0]);
183 
184  int nHolesOnTrack = track.trackSummary()->get(Trk::numberOfPixelHoles) +
185  track.trackSummary()->get(Trk::numberOfSCTHoles);
186 
187  int nPixels = track.trackSummary()->get(Trk::numberOfPixelHits);
188  int nStrips = track.trackSummary()->get(Trk::numberOfSCTHits);
189  int nClusters = nPixels + nStrips;
190 
191  ATH_MSG_DEBUG("track params: " << pt << " " << eta << " " << d0 << " " << z0
192  << " " << nClusters << nStrips
193  << " " << nPixels);
194 
195  // min Si hits
196  if (nClusters < m_etaDependentCutsSvc->getMinSiHitsAtEta(eta))
197  return 1;
198 
199  // min pixel hits
200  if (nPixels < m_etaDependentCutsSvc->getMinPixelHitsAtEta(eta))
201  return 2;
202 
203  // min pT, default 400
204  if (pt < m_etaDependentCutsSvc->getMinPtAtEta(eta))
205  return 3;
206 
207  // max z0
208  if (z0 > m_etaDependentCutsSvc->getMaxZImpactAtEta(eta))
209  return 4;
210 
211  // max d0
212  if (d0 > m_etaDependentCutsSvc->getMaxPrimaryImpactAtEta(eta))
213  return 5;
214 
215  // max holes
216  if (nHolesOnTrack > m_etaDependentCutsSvc->getMaxSiHolesAtEta(eta))
217  return 6;
218 
219  return 0;
220 }
221 
222 std::vector<const Trk::SpacePoint*> InDet::SiSPGNNTrackMaker::getSpacePointsInEvent (
223  const EventContext& ctx,
224  int eventNumber
225 ) const {
226  std::vector<const Trk::SpacePoint*> spacePoints;
227 
228  int npixsp(0), nstrip(0), n_overlap(0);
230  spacePoints.push_back(sp);
231  npixsp++;
232  }
234  spacePoints.push_back(sp);
235  nstrip++;
236  }
238  spacePoints.push_back(sp);
239  n_overlap++;
240  }
241  ATH_MSG_DEBUG("Event " << eventNumber << " has " << npixsp
242  << " pixel space points, " << nstrip
243  << " strips space points" << n_overlap
244  << " overlapping spacepoints" << spacePoints.size()
245  << " space points");
246 
247  return spacePoints;
248 }
249 
250 std::vector<const Trk::SpacePoint*> InDet::SiSPGNNTrackMaker::getSpacePointsInEvent(
251  const EventContext& ctx,
252  const SG::ReadHandleKey<SpacePointContainer>& containerKey
253 ) const {
254  std::vector<const Trk::SpacePoint*> spacePoints;
255  if (not containerKey.empty()){
256 
257  SG::ReadHandle<SpacePointContainer> container{containerKey, ctx};
258 
259  if (container.isValid()){
260  // loop over spacepoint collection
261  auto spc = container->begin();
262  auto spce = container->end();
263  for(; spc != spce; ++spc){
264  const SpacePointCollection* spCollection = (*spc);
265  auto sp = spCollection->begin();
266  auto spe = spCollection->end();
267  for(; sp != spe; ++sp) {
268  const Trk::SpacePoint* spacePoint = (*sp);
269  spacePoints.push_back(spacePoint);
270  }
271  }
272  }
273  }
274 
275  return spacePoints;
276 }
277 
278 std::vector<const Trk::SpacePoint*> InDet::SiSPGNNTrackMaker::getSpacePointsInEvent(
279  const EventContext& ctx,
281 ) const {
282 
283  std::vector<const Trk::SpacePoint*> spacePoints;
284 
285  if (not containerKey.empty()){
286 
287  SG::ReadHandle<SpacePointOverlapCollection> collection{containerKey, ctx};
288 
289  if (collection.isValid()){
290  for (const Trk::SpacePoint *sp : *collection) {
291  spacePoints.push_back(sp);
292  }
293  }
294  }
295 
296  return spacePoints;
297 }
298 
299 std::vector<const Trk::PrepRawData*> InDet::SiSPGNNTrackMaker::getClustersInEvent (
300  const EventContext& ctx,
301  int eventNumber
302 ) const {
303  std::vector<const Trk::PrepRawData*> allClusters;
304  if (m_areInputClusters) {
306  ctx);
308  ctx);
309 
310  if (!pixcontainer.isValid()) {
311  ATH_MSG_ERROR("Pixel container invalid, returning");
312  return allClusters;
313  }
314 
315  if (!strip_container.isValid()) {
316  ATH_MSG_ERROR("Strip container invalid, returning");
317  return allClusters;
318  }
319 
320  auto pixcollection = pixcontainer->begin();
321  auto pixcollectionEnd = pixcontainer->end();
322  for (; pixcollection != pixcollectionEnd; ++pixcollection) {
323  if ((*pixcollection)->empty()) {
324  ATH_MSG_WARNING("Empty pixel cluster collection encountered");
325  continue;
326  }
327  auto const* clusterCollection = (*pixcollection);
328  auto thisCluster = clusterCollection->begin();
329  auto clusterEnd = clusterCollection->end();
330  for (; thisCluster != clusterEnd; ++thisCluster) {
331  const PixelCluster* cl = (*thisCluster);
332  allClusters.push_back(cl);
333  }
334  }
335 
336  auto strip_collection = strip_container->begin();
337  auto strip_collectionEnd = strip_container->end();
338  for (; strip_collection != strip_collectionEnd; ++strip_collection) {
339  if ((*strip_collection)->empty()) {
340  ATH_MSG_WARNING("Empty strip cluster collection encountered");
341  continue;
342  }
343  auto const* clusterCollection = (*strip_collection);
344  auto thisCluster = clusterCollection->begin();
345  auto clusterEnd = clusterCollection->end();
346  for (; thisCluster != clusterEnd; ++thisCluster) {
347  const SCT_Cluster* cl = (*thisCluster);
348  allClusters.push_back(cl);
349  }
350  }
351 
352  ATH_MSG_DEBUG("Event " << eventNumber << " has " << allClusters.size()
353  << " clusters");
354  }
355  return allClusters;
356 }
357 
358 
359 std::vector<const Trk::SpacePoint*> InDet::SiSPGNNTrackMaker::getSpacePoints (
360  std::vector<uint32_t> trackIndices,
361  std::vector<const Trk::SpacePoint*> allSpacePoints
362 ) const {
363 
364  std::vector<const Trk::SpacePoint*> trackCandidate;
365  trackCandidate.reserve(trackIndices.size());
366 
367  std::vector<std::pair<double, const Trk::SpacePoint*> > distanceSortedSPs;
368 
369  // get track space points
370  // sort SPs in track by distance from origin
371  for (auto& id : trackIndices) {
373  if (id > allSpacePoints.size()) {
374  ATH_MSG_WARNING("SpacePoint index "
375  << id << " out of range: " << allSpacePoints.size());
376  continue;
377  }
378 
379  const Trk::SpacePoint* sp = allSpacePoints[id];
380 
381  // store distance - hit paire
382  if (sp != nullptr) {
383  distanceSortedSPs.push_back(
384  std::make_pair(
385  pow(sp->globalPosition().x(), 2) + pow(sp->globalPosition().y(), 2),
386  sp
387  )
388  );
389  }
390  }
391 
392  // sort by distance
393  std::sort(distanceSortedSPs.begin(), distanceSortedSPs.end());
394 
395  // add SP to trk candidate in the same order
396  for (size_t i = 0; i < distanceSortedSPs.size(); i++) {
397  trackCandidate.push_back(distanceSortedSPs[i].second);
398  }
399 
400  return trackCandidate;
401 }
402 
403 std::vector<const Trk::PrepRawData*> InDet::SiSPGNNTrackMaker :: spacePointsToClusters (
404  std::vector<const Trk::SpacePoint*> spacePoints
405 ) const {
406  std::vector<const Trk::PrepRawData*> clusters;
407  for (const Trk::SpacePoint* sp : spacePoints) {
408  clusters.push_back(sp->clusterList().first);
409  if (sp->clusterList().second != nullptr) {
410  clusters.push_back(sp->clusterList().second);
411  }
412  }
413  return clusters;
414 }
415 
416 std::vector<const Trk::PrepRawData*> InDet::SiSPGNNTrackMaker :: getClusters (
417  std::vector<std::vector<uint32_t>> clusterTracks,
418  std::vector<const Trk::PrepRawData*> allClusters,
419  int trackNumber
420 ) const {
421  std::vector<uint32_t> clusterIndices = clusterTracks[trackNumber];
422  std::vector<const Trk::PrepRawData*> clusters;
423  clusters.reserve(clusterIndices.size());
424  for (uint32_t id : clusterIndices) {
425  if (id > allClusters.size()) {
426  ATH_MSG_ERROR("Cluster index out of range");
427  continue;
428  }
429  clusters.push_back(allClusters[id]);
430  }
431  return clusters;
432 }
433 
467 std::tuple<bool, int, std::unique_ptr<Trk::Track>> InDet::SiSPGNNTrackMaker::doFitAndCut (
468  const EventContext& ctx,
469  std::vector<const Trk::SpacePoint*>& spacePoints,
470  std::vector<const Trk::PrepRawData*>& clusters,
471  int& trackCounter
472  ) const
473  {
474  // get cluster list
475  int nPIX(0), nStrip(0);
476 
477  for (const Trk::PrepRawData* cl : clusters) {
478  if (cl->type(Trk::PrepRawDataType::PixelCluster)) nPIX++;
480  }
481 
482  ATH_MSG_DEBUG("Track " << trackCounter << " has " << spacePoints.size()
483  << " space points, " << clusters.size()
484  << " clusters, " << nPIX << " pixel clusters, "
485  << nStrip << " strip clusters");
486 
487  // check hit counts
488  if (not prefitCheck(nPIX, nStrip, clusters.size(), spacePoints.size())) {
489  ATH_MSG_DEBUG("Track " << trackCounter << " does not pass prefit cuts, skipping");
490  return std::make_tuple(false, 999, nullptr);
491  }
492 
493  // conformal mapping for track parameters
494  auto trkParameters = m_seedFitter->fit(spacePoints);
495  if (trkParameters == nullptr) {
496  ATH_MSG_DEBUG("Conformal mapping failed");
497  return std::make_tuple(false, 999, nullptr);
498  }
499 
500  std::unique_ptr<Trk::Track> track = fitTrack(ctx, clusters, *trkParameters, trackCounter);
501 
502  if (track == nullptr || track->perigeeParameters() == nullptr) {
503  ATH_MSG_DEBUG("Track " << trackCounter
504  << " fails the third chi2 fit, skipping");
505  return std::make_tuple(false, 999, nullptr);
506  }
507 
508  // compute pT and skip if pT too low
509  if (track->perigeeParameters()->pT() < m_pTmin) {
510  ATH_MSG_DEBUG("Track " << trackCounter
511  << "with pt = " << track->perigeeParameters()->pT()
512  << " has pT too low, skipping track!");
513  return std::make_tuple(false, 999, nullptr);
514  }
515 
516  // get rid of tracks with eta too large
517  if (std::abs(track->perigeeParameters()->eta()) > m_etamax) {
518  ATH_MSG_DEBUG("Track " << trackCounter << "with eta = "
519  << std::abs(track->perigeeParameters()->eta())
520  << " has eta too high, skipping track!");
521  return std::make_tuple(false, 999, nullptr);
522  }
523 
524  // if track fit succeeds, eta and pT within range, compute track summary. This is quite expensive.
525  m_trackSummaryTool->computeAndReplaceTrackSummary(
526  *track, false /* DO NOT suppress hole search*/);
527 
528  int passTrackCut = (m_doRecoTrackCuts) ? passEtaDepCuts(*track) : -1;
529 
530  return std::make_tuple(true, passTrackCut, std::move(track));
531 
532  }
533 
534 std::unique_ptr<Trk::Track> InDet::SiSPGNNTrackMaker::fitTrack (
535  const EventContext& ctx,
536  std::vector<const Trk::PrepRawData*> clusters,
537  const Trk::TrackParameters& initial_params,
538  int trackCounter
539  ) const
540  {
541 
542  Trk::ParticleHypothesis matEffects = Trk::pion;
543  // first fit the track with local parameters and without outlier removal.
544  std::unique_ptr<Trk::Track> track =
545  m_trackFitter->fit(ctx, clusters, initial_params, false, matEffects);
546 
547  if (track == nullptr || track->perigeeParameters() == nullptr) {
548  ATH_MSG_DEBUG("Track " << trackCounter
549  << " fails the first chi2 fit, skipping");
550  return track;
551  }
552 
553  // reject track with pT too low, default 400 MeV
554  if (track->perigeeParameters()->pT() < m_pTmin) {
555  ATH_MSG_DEBUG("Track " << trackCounter
556  << " fails the first chi2 fit, skipping");
557  return nullptr;
558  }
559 
560  // fit the track again with perigee parameters and without outlier
561  // removal.
562  track = m_trackFitter->fit(ctx, clusters, *track->perigeeParameters(),
563  false, matEffects);
564 
565  // track = m_trackFitter->fit(ctx, *track, false, matEffects);
566  if (track == nullptr || track->perigeeParameters() == nullptr) {
567  ATH_MSG_DEBUG("Track " << trackCounter
568  << " fails the second chi2 fit, skipping");
569  return track;
570  }
571  // finally fit with outlier removal
572  // track = m_trackFitter->fit(ctx, clusters, *track->perigeeParameters(), true,
573  // matEffects);
574 
575  return m_trackFitter->fit(ctx, clusters, *track->perigeeParameters(), true, matEffects);
576  }
577 
579 // Overload of << operator MsgStream
581 
582 MsgStream& InDet::operator <<
583  (MsgStream& sl,const InDet::SiSPGNNTrackMaker& se)
584 {
585  return se.dump(sl);
586 }
587 
589 // Overload of << operator std::ostream
591 std::ostream& InDet::operator <<
592  (std::ostream& sl,const InDet::SiSPGNNTrackMaker& se)
593 {
594  return se.dump(sl);
595 }
596 
598 // Dumps relevant information into the MsgStream
600 
601 MsgStream& InDet::SiSPGNNTrackMaker::dump( MsgStream& out ) const
602 {
603  out<<std::endl;
604  if(msgLvl(MSG::DEBUG)) return dumpevent(out);
605  else return dumptools(out);
606 }
607 
609 // Dumps conditions information into the MsgStream
611 
612 MsgStream& InDet::SiSPGNNTrackMaker::dumptools( MsgStream& out ) const
613 {
614  out<<"| Location of output tracks | "
615  <<std::endl;
616  out<<"|----------------------------------------------------------------"
617  <<"----------------------------------------------------|"
618  <<std::endl;
619  return out;
620 }
621 
623 // Dumps event information into the ostream
625 
626 MsgStream& InDet::SiSPGNNTrackMaker::dumpevent( MsgStream& out ) const
627 {
628  return out;
629 }
630 
631 std::ostream& InDet::SiSPGNNTrackMaker::dump( std::ostream& out ) const
632 {
633  return out;
634 }
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
Trk::SpacePoint
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:35
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
InDet::SiSPGNNTrackMaker::getClustersInEvent
std::vector< const Trk::PrepRawData * > getClustersInEvent(const EventContext &ctx, int eventNumber) const
Definition: SiSPGNNTrackMaker.cxx:299
InDet::SiSPGNNTrackMaker::m_doRecoTrackCuts
BooleanProperty m_doRecoTrackCuts
Definition: SiSPGNNTrackMaker.h:108
InDet::SiSPGNNTrackMaker::m_gnnTrackFinder
ToolHandle< IGNNTrackFinder > m_gnnTrackFinder
GNN-based track finding tool that produces track candidates.
Definition: SiSPGNNTrackMaker.h:82
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
InDet::SiSPGNNTrackMaker::m_SpacePointsPixelKey
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsPixelKey
Definition: SiSPGNNTrackMaker.h:62
Trk::SpacePoint::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
Interface method to get the global Position.
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:146
SiSPGNNTrackMaker.h
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
SG::ReadHandle< SpacePointContainer >
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
ConvertOldUJHistosToNewHistos.etaBins
list etaBins
Definition: ConvertOldUJHistosToNewHistos.py:145
InDet::SiSPGNNTrackMaker::initialize
virtual StatusCode initialize() override
Definition: SiSPGNNTrackMaker.cxx:20
test_pyathena.pt
pt
Definition: test_pyathena.py:11
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
Trk::z0
@ z0
Definition: ParamDefs.h:64
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
InDet::SiSPGNNTrackMaker::m_minPixelClusters
IntegerProperty m_minPixelClusters
Definition: SiSPGNNTrackMaker.h:115
InDet::SiSPGNNTrackMaker::m_etaDependentCutsSvc
ServiceHandle< IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc
Definition: SiSPGNNTrackMaker.h:111
InDet::SiSPGNNTrackMaker::dump
MsgStream & dump(MsgStream &out) const
Definition: SiSPGNNTrackMaker.cxx:601
InDet::SiSPGNNTrackMaker::m_SpacePointsOverlapKey
SG::ReadHandleKey< SpacePointOverlapCollection > m_SpacePointsOverlapKey
Definition: SiSPGNNTrackMaker.h:66
SG::ReadHandleKey< SpacePointContainer >
InDet::SiSPGNNTrackMaker::passEtaDepCuts
int passEtaDepCuts(const Trk::Track &track) const
Definition: SiSPGNNTrackMaker.cxx:173
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
keylayer_zslicemap.se
se
Definition: keylayer_zslicemap.py:194
InDet::SiSPGNNTrackMaker::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: SiSPGNNTrackMaker.cxx:84
Trk::numberOfSCTHoles
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:73
InDet::SiSPGNNTrackMaker::m_pTmin
DoubleProperty m_pTmin
Definition: SiSPGNNTrackMaker.h:118
PrepRawData.h
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
InDet::SiSPGNNTrackMaker::m_outputTracksKey
SG::WriteHandleKey< TrackCollection > m_outputTracksKey
Definition: SiSPGNNTrackMaker.h:74
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
InDet::SiSPGNNTrackMaker::getSpacePoints
std::vector< const Trk::SpacePoint * > getSpacePoints(std::vector< uint32_t > trackIndices, std::vector< const Trk::SpacePoint * > allSpacePoints) const
Definition: SiSPGNNTrackMaker.cxx:359
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::etaBins
@ etaBins
Definition: IInDetEtaDependentCutsSvc.h:13
InDet::SiSPGNNTrackMaker::m_ClusterStripKey
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_ClusterStripKey
Definition: SiSPGNNTrackMaker.h:70
lumiFormat.i
int i
Definition: lumiFormat.py:85
InDet::SiSPGNNTrackMaker::dumpevent
MsgStream & dumpevent(MsgStream &out) const
Definition: SiSPGNNTrackMaker.cxx:626
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::numberOfSCTHits
@ numberOfSCTHits
number of SCT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:71
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
InDet::SiSPGNNTrackMaker::m_trackFitter
ToolHandle< Trk::ITrackFitter > m_trackFitter
Track Fitter.
Definition: SiSPGNNTrackMaker.h:91
InDet::SiSPGNNTrackMaker::getClusters
std::vector< const Trk::PrepRawData * > getClusters(std::vector< std::vector< uint32_t >> clusterTracks, std::vector< const Trk::PrepRawData * > allClusters, int trackNumber) const
Definition: SiSPGNNTrackMaker.cxx:416
InDet::SiSPGNNTrackMaker::prefitCheck
bool prefitCheck(int nPix, int nStrip, int nClusters, int nSpacePoints) const
Definition: SiSPGNNTrackMaker.cxx:168
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::eventNumber
eventNumber
Definition: EventInfo_v1.cxx:124
Trk::ParametersBase
Definition: ParametersBase.h:55
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
InDet::SCT_Cluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SCT_Cluster.h:34
InDet::maxHoles
@ maxHoles
Definition: IInDetEtaDependentCutsSvc.h:14
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
InDet::SiSPGNNTrackMaker::m_areInputClusters
BooleanProperty m_areInputClusters
Definition: SiSPGNNTrackMaker.h:105
Trk::numberOfPixelHoles
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:59
Trk::PrepRawData
Definition: PrepRawData.h:62
MuonGM::nStrips
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
Definition: MuonDetDescr/MuonGeoModelTest/src/GeoModelTgcTest.cxx:46
InDet::SiSPGNNTrackMaker::fitTrack
std::unique_ptr< Trk::Track > fitTrack(const EventContext &ctx, std::vector< const Trk::PrepRawData * > clusters, const Trk::TrackParameters &initial_params, int trackCounter) const
Definition: SiSPGNNTrackMaker.cxx:534
InDet::minClusters
@ minClusters
Definition: IInDetEtaDependentCutsSvc.h:15
InDet::SiSPGNNTrackMaker::m_minClusters
IntegerProperty m_minClusters
Definition: SiSPGNNTrackMaker.h:114
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:227
InDet::SiSPGNNTrackMaker::m_seedFitter
ToolHandle< ISeedFitter > m_seedFitter
Definition: SiSPGNNTrackMaker.h:86
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Trk::d0
@ d0
Definition: ParamDefs.h:63
RIO_OnTrack.h
Trk::PrepRawDataType::PixelCluster
@ PixelCluster
InDet::minPT
@ minPT
Definition: IInDetEtaDependentCutsSvc.h:15
xAOD::TauJetParameters::nStrip
@ nStrip
Get number of strips.
Definition: TauDefs.h:204
InDet::SiSPGNNTrackMaker::SiSPGNNTrackMaker
SiSPGNNTrackMaker(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SiSPGNNTrackMaker.cxx:13
InDet::SiSPGNNTrackMaker::m_trackSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition: SiSPGNNTrackMaker.h:95
InDet::PixelCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelCluster.h:49
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
Trk::PrepRawDataType::SCT_Cluster
@ SCT_Cluster
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TRT::Track::trackNumber
@ trackNumber
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:75
InDet::SiSPGNNTrackMaker::m_minStripClusters
IntegerProperty m_minStripClusters
Definition: SiSPGNNTrackMaker.h:116
SpacePointCollection
Definition: SpacePointCollection.h:40
DEBUG
#define DEBUG
Definition: page_access.h:11
InDet::SiSPGNNTrackMaker::m_etamax
DoubleProperty m_etamax
Definition: SiSPGNNTrackMaker.h:119
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
InDet::SiSPGNNTrackMaker::dumptools
MsgStream & dumptools(MsgStream &out) const
Definition: SiSPGNNTrackMaker.cxx:612
InDet::minPixelHits
@ minPixelHits
Definition: IInDetEtaDependentCutsSvc.h:15
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
InDet::SiSPGNNTrackMaker::spacePointsToClusters
std::vector< const Trk::PrepRawData * > spacePointsToClusters(std::vector< const Trk::SpacePoint * > spacePoints) const
Definition: SiSPGNNTrackMaker.cxx:403
InDet::SiSPGNNTrackMaker::doFitAndCut
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.
Definition: SiSPGNNTrackMaker.cxx:467
InDet::SiSPGNNTrackMaker
InDet::SiSPGNNTrackMaker is an algorithm that uses the GNN-based track finding tool to reconstruct tr...
Definition: SiSPGNNTrackMaker.h:43
InDet::SiSPGNNTrackMaker::m_ClusterPixelKey
SG::ReadHandleKey< InDet::PixelClusterContainer > m_ClusterPixelKey
Definition: SiSPGNNTrackMaker.h:68
InDet::SiSPGNNTrackMaker::getSpacePointsInEvent
std::vector< const Trk::SpacePoint * > getSpacePointsInEvent(const EventContext &ctx, int eventNumber) const
Definition: SiSPGNNTrackMaker.cxx:222
Analysis::TT
@ TT
Definition: JpsiFinder.h:36
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
InDet::SiSPGNNTrackMaker::m_SpacePointsSCTKey
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsSCTKey
Definition: SiSPGNNTrackMaker.h:64
dq_make_web_display.cl
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
Definition: dq_make_web_display.py:26
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
InDet::SiSPGNNTrackMaker::m_gnnTrackReader
ToolHandle< IGNNTrackReaderTool > m_gnnTrackReader
Definition: SiSPGNNTrackMaker.h:97