ATLAS Offline Software
SiCombinatorialTrackFinder_xk.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // Implementation file for class InDet::SiCombinatorialTrackFinder_xk
8 // (c) ATLAS Detector software
11 // Version 1.0 12/04/2007 I.Gavrilenko
13 
15 
18 #include "StoreGate/ReadHandle.h"
23 #include "TrkTrack/TrackInfo.h"
24 
25 #include <iomanip>
26 #include <iostream>
27 #include <utility>
28 #include <stdexcept>
29 
31 // Constructor
33 
35 (const std::string& t, const std::string& n, const IInterface* p)
36  : base_class(t, n, p)
37 {
38 }
39 
41 // Initialisation
43 
45 {
46  // Get RungeKutta propagator tool
47  //
48  if ( m_proptool.retrieve().isFailure() ) {
49  ATH_MSG_FATAL("Failed to retrieve tool " << m_proptool);
50  return StatusCode::FAILURE;
51  }
52  ATH_MSG_DEBUG("Retrieved tool " << m_proptool);
53 
54  // Get updator tool
55  //
56  if ( m_updatortool.retrieve().isFailure() ) {
57  ATH_MSG_FATAL("Failed to retrieve tool " << m_updatortool);
58  return StatusCode::FAILURE;
59  }
60  ATH_MSG_DEBUG("Retrieved tool " << m_updatortool);
61 
62  // Get RIO_OnTrack creator
63  //
64  if ( m_riocreator.retrieve().isFailure() ) {
65  ATH_MSG_FATAL("Failed to retrieve tool " << m_riocreator);
66  return StatusCode::FAILURE;
67  }
68  ATH_MSG_DEBUG("Retrieved tool " << m_riocreator);
69 
70  // disable pixel/SCT conditions summary tool: pixel/SCT are not used, the status event data is used and not being validated
71  ATH_CHECK( m_pixelCondSummaryTool.retrieve( DisableTool{!m_usePIX || (!m_pixelDetElStatus.empty() && !VALIDATE_STATUS_ARRAY_ACTIVATED)} ) );
72  ATH_CHECK( m_sctCondSummaryTool.retrieve( DisableTool{!m_useSCT || (!m_sctDetElStatus.empty() && !VALIDATE_STATUS_ARRAY_ACTIVATED)} ) );
73  //
74  // Get InDetBoundaryCheckTool
75  if ( m_boundaryCheckTool.retrieve().isFailure() ) {
76  ATH_MSG_FATAL("Failed to retrieve tool " << m_boundaryCheckTool);
77  return StatusCode::FAILURE;
78  }
79  ATH_MSG_DEBUG("Retrieved tool " << m_boundaryCheckTool);
80 
81 
82 
83  // Setup callback for magnetic field
84  //
86 
87  // Get output print level
88  //
89  m_outputlevel = msg().level()-MSG::DEBUG;
90 
93 
96 
97  // initialize conditions object key for field cache
98  //
102  m_minPt2Cut = std::pow(m_minPtCut.value(),2);
103  return StatusCode::SUCCESS;
104 }
105 
107 // Finalize
109 
111 {
112  return AlgTool::finalize();
113 }
114 
116 // Dumps relevant information into the MsgStream
118 
120 {
121  if (not data.isInitialized()) initializeCombinatorialData(Gaudi::Hive::currentContext(), data);
122 
123  out<<std::endl;
124  if (data.nprint()) return dumpevent(data, out);
125  return dumpconditions(out);
126 }
127 
129 // Dumps conditions information into the MsgStream
131 
133 {
134  int n = 62-m_proptool.type().size();
135  std::string s1;
136  for (int i=0; i<n; ++i) s1.append(" ");
137  s1.append("|");
138 
139  std::string fieldmode[9] ={"NoField" , "ConstantField", "SolenoidalField",
140  "ToroidalField" , "Grid3DField" , "RealisticField" ,
141  "UndefinedField", "AthenaField" , "?????" };
142 
144  if (mode<0 || mode>8 ) mode = 8;
145 
146  n = 62-fieldmode[mode].size();
147  std::string s3;
148  for (int i=0; i<n; ++i) s3.append(" ");
149  s3.append("|");
150 
151  n = 62-m_updatortool.type().size();
152  std::string s4;
153  for (int i=0; i<n; ++i) s4.append(" ");
154  s4.append("|");
155 
156  n = 62-m_riocreator.type().size();
157  std::string s5;
158  for (int i=0; i<n; ++i) s5.append(" ");
159  s5.append("|");
160 
161  n = 62-m_pixcontainerkey.key().size();
162  std::string s7;
163  for (int i=0; i<n; ++i) s7.append(" ");
164  s7.append("|");
165 
166  n = 62-m_sctcontainerkey.key().size();
167  std::string s8;
168  for (int i=0; i<n; ++i) s8.append(" ");
169  s8.append("|");
170 
171  out<<"|----------------------------------------------------------------------"
172  <<"-------------------|"
173  <<std::endl;
174  if (m_usePIX) {
175  out<<"| Pixel clusters location | "<<m_pixcontainerkey.key() <<s7<<std::endl;
176  }
177  if (m_useSCT) {
178  out<<"| SCT clusters location | "<<m_sctcontainerkey.key() <<s8<<std::endl;
179  }
180  out<<"| Tool for propagation | "<<m_proptool .type()<<s1<<std::endl;
181  out<<"| Tool for updator | "<<m_updatortool.type()<<s4<<std::endl;
182  out<<"| Tool for rio on track | "<<m_riocreator .type()<<s5<<std::endl;
183  out<<"| Magnetic field mode | "<<fieldmode[mode] <<s3<<std::endl;
184  out<<"|----------------------------------------------------------------------"
185  <<"-------------------|"
186  <<std::endl;
187  return out;
188 }
189 
191 // Dumps event information into the MsgStream
193 
195 {
196  out<<"|---------------------------------------------------------------------|"
197  <<std::endl;
198  out<<"| Min pT of track (MeV) | "<<std::setw(12)<<std::setprecision(5)<<data.pTmin()
199  <<" |"<<std::endl;
200  out<<"| Max Xi2 for cluster | "<<std::setw(12)<<std::setprecision(5)<<data.xi2max()
201  <<" |"<<std::endl;
202  out<<"| Max Xi2 for outlayer | "<<std::setw(12)<<std::setprecision(5)<<data.xi2maxNoAdd()
203  <<" |"<<std::endl;
204  out<<"| Max Xi2 for link | "<<std::setw(12)<<std::setprecision(5)<<data.xi2maxlink()
205  <<" |"<<std::endl;
206  out<<"| Min number of clusters | "<<std::setw(12)<<data.nclusmin()
207  <<" |"<<std::endl;
208  out<<"| Min number of wclusters | "<<std::setw(12)<<data.nwclusmin()
209  <<" |"<<std::endl;
210  out<<"| Max number holes | "<<std::setw(12)<<data.nholesmax()
211  <<" |"<<std::endl;
212  out<<"| Max holes gap | "<<std::setw(12)<<data.dholesmax()
213  <<" |"<<std::endl;
214  out<<"| Use PRD to track assoc.?| "<<std::setw(12)<<(data.PRDtoTrackMap() ? "yes" : "no ")
215  <<" |"<<std::endl;
216  out<<"|---------------------------------------------------------------------|"
217  <<std::endl;
218  out<<"| Number input seeds | "<<std::setw(12)<<data.inputseeds()
219  <<" |"<<std::endl;
220  out<<"| Number accepted seeds | "<<std::setw(12)<<data.goodseeds()
221  <<" |"<<std::endl;
222  out<<"| Number initial tracks | "<<std::setw(12)<<data.inittracks()
223  <<" |"<<std::endl;
224  out<<"| Number wrong DE roads | "<<std::setw(12)<<data.roadbug()
225  <<" |"<<std::endl;
226  out<<"| Number output tracks | "<<std::setw(12)<<data.findtracks()
227  <<" |"<<std::endl;
228  out<<"|---------------------------------------------------------------------|"
229  <<std::endl;
230  return out;
231 }
232 
234 // Initiate track finding tool
236 
238 {
239  if (not data.isInitialized()) initializeCombinatorialData(ctx, data);
240 
241  // Erase statistic information
242  //
243  data.inputseeds() = 0;
244  data.goodseeds() = 0;
245  data.inittracks() = 0;
246  data.findtracks() = 0;
247  data.roadbug() = 0;
248 
249  // Set track info
250  //
251  data.trackinfo().setPatternRecognitionInfo(Trk::TrackInfo::SiSPSeededFinder);
252  data.setCosmicTrack(0);
253 
254  // Add conditions object to SiCombinatorialTrackFinderData to be able to access the field cache for each new event
255  // Get conditions object for field cache
257  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
258  if (fieldCondObj == nullptr) {
259  std::string msg = "InDet::SiCombinatorialTrackFinder_xk::newEvent: Failed to retrieve AtlasFieldCacheCondObj with key " + m_fieldCondObjInputKey.key();
260  throw(std::runtime_error(msg));
261  }
262  data.setFieldCondObj(fieldCondObj);
263 }
264 
266 // Initiate track finding tool
268 
270 (const EventContext& ctx, SiCombinatorialTrackFinderData_xk& data, Trk::TrackInfo info, const TrackQualityCuts& Cuts) const
271 {
272 
273  if (not data.isInitialized()) {
274  //Check if to use PRDAssociation before initializing all the tools
275  int useasso;
276  if(!Cuts.getIntCut ("UseAssociationTool" ,useasso )) useasso = 0;
277  data.tools().setAssociation(useasso);
278 
280  }
281 
282  newEvent(ctx, data);
283  data.trackinfo() = info;
284 
287  getTrackQualityCuts(data, Cuts);
288 
289  data.setHeavyIon(false);
290  data.setCosmicTrack(0);
293  data.setCosmicTrack(1);
294  else if (info.patternRecoInfo(Trk::TrackInfo::SiSpacePointsSeedMaker_HeavyIon))
295  data.setHeavyIon(true);
296 
297 }
298 
300 // Finalize track finding tool for given event
302 
304 {
305  if (not data.isInitialized()) initializeCombinatorialData(Gaudi::Hive::currentContext(), data);
306 
307  // Print event information
308  //
309  if (m_outputlevel<=0) {
310  data.nprint() = 1;
311  dump(data, msg(MSG::DEBUG));
312  }
313 }
314 
316 // Main method for track finding using space points
318 
321  const Trk::TrackParameters& Tp,
322  const std::vector<const Trk::SpacePoint*>& Sp,
323  const std::vector<Amg::Vector3D>& Gp,
324  std::vector<const InDetDD::SiDetectorElement*>& DE,
325  const TrackQualityCuts& Cuts,
326  const EventContext& ctx) const
327 {
328 
329  if (not data.isInitialized()) initializeCombinatorialData(ctx, data);
330 
331  data.statistic().fill(false);
332 
334  data.tools().setBremNoise(false, false);
336  data.tracks().erase(data.tracks().begin(), data.tracks().end());
337 
338  ++data.inputseeds();
339  if (!m_usePIX && !m_useSCT) {
340  return data.tracks();
341  }
342 
343  // Get track quality cuts information and write them into the event data... again?
344  getTrackQualityCuts(data, Cuts);
345  std::multimap<const Trk::PrepRawData*, const Trk::Track*> PT;
346 
348  EStat_t FT = findTrack(data, Tp, Sp, Gp, DE, PT, ctx);
349 
351  if(FT!=Success) {
352  data.statistic()[FT] = true;
353  if( ! data.flagToReturnFailedTrack() ) return data.tracks();
354  }
355 
357  data.trajectory().sortStep();
358 
359 
361  if (t) {
362  ++data.findtracks();
363  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
364  data.tracks().push_back(t);
365  }
366 
367  if (!data.tools().multiTrack() ||
368  data.simpleTrack() ||
369  Sp.size()<=2 ||
370  data.cosmicTrack() ||
371  data.trajectory().pTfirst() < data.tools().pTmin()) return data.tracks();
372 
373  while ((t=convertToNextTrack(data))) {
374  ++data.findtracks();
375  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
376  data.tracks().push_back(t);
377  }
378  return data.tracks();
379 }
380 
382 // Main method for track finding using space points
384 
387  const Trk::TrackParameters& Tp,
388  const std::vector<const Trk::SpacePoint*>& Sp,
389  const std::vector<Amg::Vector3D>& Gp,
390  std::vector<const InDetDD::SiDetectorElement*>& DE,
391  std::multimap<const Trk::PrepRawData*, const Trk::Track*>& PT,
392  const EventContext& ctx) const
393 {
394 
395  if (not data.isInitialized()) initializeCombinatorialData(ctx, data);
396 
397  data.tools().setBremNoise(false, false);
398  data.tracks().erase(data.tracks().begin(), data.tracks().end());
399 
400  data.statistic().fill(false);
401  ++data.inputseeds();
402  if (!m_usePIX && !m_useSCT) {
403  return data.tracks();
404  }
405 
406  EStat_t FT = findTrack(data, Tp, Sp, Gp, DE, PT,ctx);
407  if(FT!=Success) {
408  data.statistic()[FT] = true;
409  if( ! data.flagToReturnFailedTrack() || std::abs(data.resultCode()) < SiCombinatorialTrackFinderData_xk::ResultCodeThreshold::RecoverableForDisTrk ) return data.tracks();
410  }
411  if (!data.trajectory().isNewTrack(PT))
412  {
413  data.statistic()[NotNewTrk] = true;
414  return data.tracks();
415  }
416  data.trajectory().sortStep();
417 
418  if(data.useFastTracking()) {
419  if(!data.trajectory().filterWithPreciseClustersError(ctx)) {
420  data.statistic()[CantFindTrk] = true;
421  return data.tracks();
422  }
423  }
424 
425  // Trk::Track production
426  //
428  if (t==nullptr) return data.tracks(); // @TODO should one check if convertToNextTrack would yield anything ?
429  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
430 
431  ++data.findtracks();
432  data.tracks().push_back(t);
433 
434  if (!data.tools().multiTrack() ||
435  data.simpleTrack() ||
436  Sp.size()<=2 ||
437  data.cosmicTrack() ||
438  data.trajectory().pTfirst() < data.tools().pTmin()) return data.tracks();
439 
440  while ((t=convertToNextTrack(data))) {
441  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
442  ++data.findtracks();
443  data.tracks().push_back(t);
444  }
445  return data.tracks();
446 }
447 
449 // Main method for track finding using space points and
450 // using electron noise model
452 
455  const Trk::TrackParameters& Tp,
456  const std::vector<const Trk::SpacePoint*>& Sp,
457  const std::vector<Amg::Vector3D>& Gp,
458  std::vector<const InDetDD::SiDetectorElement*>& DE,
459  std::multimap<const Trk::PrepRawData*, const Trk::Track*>& PT,
460  bool isCaloCompatible,
461  const EventContext& ctx) const
462 {
463 
464  if (not data.isInitialized()) initializeCombinatorialData(ctx, data);
465 
466  data.statistic().fill(false);
467 
468  // Old information
469  //
470  int mult = 0;
471  if (data.tools().multiTrack()) mult = 1;
472  double Xi2m = data.tools().xi2multi();
473 
474  data.tools().setBremNoise(false, true);
475  data.tracks().erase(data.tracks().begin(), data.tracks().end());
476 
477  ++data.inputseeds();
478  if (!m_usePIX && !m_useSCT) {
479  return data.tracks();
480  }
481 
482  EStat_t FT = findTrack(data,Tp,Sp,Gp,DE,PT,ctx);
483 
484  bool Q = (FT==Success);
485  if (Q){
486  Q = data.trajectory().isNewTrack(PT);
487  }
488 
489  int na = 0;
490  if (Q) {
491  data.trajectory().sortStep();
492 
493  // Trk::Track production
494  //
495  Trk::TrackInfo oldinfo = data.trackinfo();
496  if (isCaloCompatible) data.trackinfo().setPatternRecognitionInfo(Trk::TrackInfo::TrackInCaloROI);
497 
498  data.tools().setMultiTracks(0, Xi2m);
500  data.trackinfo() = oldinfo;
501  data.tools().setMultiTracks(mult,Xi2m);
502 
503  if (t==nullptr) return data.tracks(); // @TODO should one check whether the next findTrack call would yield something ?
504  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
505  ++data.findtracks();
506  data.tracks().push_back(t);
507  na = data.trajectory().nclusters();
508  if (na >=12 && !data.trajectory().nclustersNoAdd()) return data.tracks();
509 
510  if (data.trajectory().pTfirst() < data.pTminBrem()) return data.tracks();
511  }
512  if ((*Sp.begin())->clusterList().second) return data.tracks();
513 
514  // Repeat track finding using electron noise model
515  //
516  data.statistic()[BremAttempt] = true;
517 
518  data.tools().setBremNoise(true,true);
519  FT = findTrack(data, Tp, Sp, Gp, DE, PT,ctx);
520 
521  if (FT!=Success) {
522  data.statistic()[FT] = true;
523  return data.tracks();
524  }
525 
526  if (!data.trajectory().isNewTrack(PT)) { data.statistic()[NotNewTrk] = true; return data.tracks(); }
527 
528  int nb = data.trajectory().nclusters();
529  if (nb <= na) return data.tracks();
530 
531  data.trajectory().sortStep();
532 
533  if(data.useFastTracking()) {
534  if(!data.trajectory().filterWithPreciseClustersError(ctx)) {
535  data.statistic()[CantFindTrk] = true;
536  return data.tracks();
537  }
538  }
539 
540  // Trk::Track production
541  //
542  Trk::TrackInfo oldinfo = data.trackinfo();
543  data.trackinfo().setTrackProperties(Trk::TrackInfo::BremFit );
544  data.trackinfo().setTrackProperties(Trk::TrackInfo::BremFitSuccessful);
545  if (isCaloCompatible) data.trackinfo().setPatternRecognitionInfo(Trk::TrackInfo::TrackInCaloROI);
546 
547  data.tools().setMultiTracks(0, Xi2m);
548  Trk::Track* t = convertToTrack(data, ctx);
549  data.trackinfo() = oldinfo;
550  data.tools().setMultiTracks(mult, Xi2m);
551 
552  if (t==nullptr) return data.tracks();
553  if (m_writeHolesFromPattern) data.addPatternHoleSearchOutcome(t,data.trajectory().getHoleSearchResult());
554 
555  ++data.findtracks();
556  data.tracks().push_back(t);
557  return data.tracks();
558 }
559 
561 // Initial pT of 3 space points seed estimation
563 
566  const Trk::TrackParameters& Tp,
567  const std::vector<const Trk::SpacePoint*>& Sp,
568  const EventContext& ctx) const
569 {
570  std::vector<const InDet::SiCluster*> Cl;
571  std::vector<const InDetDD::SiDetectorElement*> DE;
572  if(!spacePointsToClusters(Sp,Cl,DE)) return 0.;
573 
574  std::vector<const InDet::SiDetElementBoundaryLink_xk*> DEL;
575  detectorElementLinks(DE,DEL,ctx);
576  return data.trajectory().pTseed(Tp,Cl,DEL,ctx);
577 }
578 
580 // Main method for track finding using space points
582 
585  const Trk::TrackParameters& Tp,
586  const std::vector<const Trk::SpacePoint*>& Sp,
587  const std::vector<Amg::Vector3D>& Gp,
588  std::vector<const InDetDD::SiDetectorElement*>& DE,
589  std::multimap<const Trk::PrepRawData*,const Trk::Track*>& PT,
590  const EventContext& ctx) const
591 {
593  if (not data.isInitialized()) initializeCombinatorialData(ctx, data);
594 
596  std::vector<const InDet::SiDetElementBoundaryLink_xk*> DEL;
597  detectorElementLinks(DE, DEL,ctx);
598 
600  const InDet::PixelClusterContainer* p_pixcontainer = data.pixContainer();
601  if (m_usePIX && !p_pixcontainer) {
603  p_pixcontainer = pixcontainer.ptr();
604  data.setPixContainer(p_pixcontainer);
605  }
606  const InDet::SCT_ClusterContainer* p_sctcontainer = data.sctContainer();
607  if (m_useSCT && !p_sctcontainer) {
609  p_sctcontainer = sctcontainer.ptr();
610  data.setSctContainer(p_sctcontainer);
611  }
612 
614  std::vector<const InDet::SiCluster*> Cl;
615  bool isTwoPointSeed = false;
616 
620  if (Sp.size() > 1) {
621 
623  if (!spacePointsToClusters(Sp,Cl)) {
624  return TwoCluster;
625  }
626  if (Sp.size()==2) isTwoPointSeed = true;
627  }
629  else if (Gp.size() > 2) {
630  if (!data.trajectory().globalPositionsToClusters(p_pixcontainer, p_sctcontainer, Gp, DEL, PT, Cl)) return TwoCluster;
631  } else {
633  if (!data.trajectory().trackParametersToClusters(p_pixcontainer, p_sctcontainer, Tp, DEL, PT, Cl, ctx)) return TwoCluster;
634  }
635  ++data.goodseeds();
636 
638  bool Qr;
640  bool Q = data.trajectory().initialize(m_usePIX, m_useSCT, p_pixcontainer, p_sctcontainer, Tp, Cl, DEL, Qr,ctx);
641 
644  if (!Q && Sp.size() < 2 && Gp.size() > 3) {
646  Cl.clear();
648  if (!data.trajectory().trackParametersToClusters(p_pixcontainer, p_sctcontainer, Tp, DEL, PT, Cl,ctx)) return TwoCluster;
649 
650  if (!data.trajectory().initialize(m_usePIX, m_useSCT, p_pixcontainer, p_sctcontainer, Tp, Cl, DEL, Qr,ctx)) return TwoCluster;
652 
653  Q = Qr = true;
654  }
655 
657  if (!Qr){
658  ++data.roadbug();
659  return WrongRoad;
660  }
662  if (!Q) return WrongInit;
663 
664  ++data.inittracks();
666  bool pixseed = data.trajectory().isLastPixel();
668  int itmax = 30;
669  if (!data.useFastTracking() and data.simpleTrack()) itmax = 10;
670  if (data.heavyIon()) itmax = 50;
671 
672  //
673  bool toReturnFailedTrack = data.flagToReturnFailedTrack();
674  if( toReturnFailedTrack ) data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::Unrecoverable);
675 
677  if (pixseed) {
678  if (!data.trajectory().forwardExtension (false,itmax,ctx)) return CantFindTrk;
679  if (!data.trajectory().backwardSmoother (false,ctx) ) return CantFindTrk;
680  if (!data.trajectory().backwardExtension(itmax,ctx) ) return CantFindTrk;
681  if (data.isITkGeometry() &&
682  (data.trajectory().nclusters() < data.nclusmin() ||
683  data.trajectory().ndf() < data.nwclusmin()) ) return CantFindTrk;
684 
686  if(!data.useFastTracking() && data.trajectory().difference() > 0){
687  if (!data.trajectory().forwardFilter(ctx)) {
688  if( toReturnFailedTrack ) {
689  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::PixSeedDiffKFFwd);
690  }
691  else {
692  return CantFindTrk;
693  }
694  }
695 
696  if (!data.trajectory().backwardSmoother (false,ctx) ) {
697  if( toReturnFailedTrack ) {
698  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::PixSeedDiffKFBwd);
699  }
700  else {
701  return CantFindTrk;
702  }
703  }
704  }
705 
706  int na = data.trajectory().nclustersNoAdd();
708  if (data.trajectory().nclusters()+na < data.nclusmin() ||
709  data.trajectory().ndf() < data.nwclusmin()) {
710  if( toReturnFailedTrack ) {
711  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::PixSeedNCluster);
712  }
713  else {
714  return CantFindTrk;
715  }
716  }
717  }
718 
720  else { // Strategy for mixed seeds
721  if (!data.trajectory().backwardSmoother(isTwoPointSeed,ctx) ) return CantFindTrk;
722  if (!data.trajectory().backwardExtension(itmax,ctx) ) return CantFindTrk;
723  if (!data.trajectory().forwardExtension(true,itmax,ctx)) return CantFindTrk;
724 
726  int na = data.trajectory().nclustersNoAdd();
727  if (data.trajectory().nclusters()+na < data.nclusmin() ||
728  data.trajectory().ndf() < data.nwclusmin()) return CantFindTrk;
730  if (!data.trajectory().backwardSmoother(false,ctx) ) return CantFindTrk;
731 
733  na = data.trajectory().nclustersNoAdd();
734  if (data.trajectory().nclusters()+na < data.nclusmin() ||
735  data.trajectory().ndf() < data.nwclusmin()) {
736  if( toReturnFailedTrack ) {
737  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::MixSeedNCluster);
738  }
739  else {
740  return CantFindTrk;
741  }
742  }
743 
745  if (data.trajectory().difference() > 0) {
746  if (!data.trajectory().forwardFilter(ctx)) {
747  if( toReturnFailedTrack ) {
748  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::MixSeedDiffKFFwd);
749  }
750  else {
751  return CantFindTrk;
752  }
753  }
754  if (!data.trajectory().backwardSmoother (false, ctx)) {
755  if( toReturnFailedTrack ) {
756  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::MixSeedDiffKFBwd);
757  }
758  else {
759  return CantFindTrk;
760  }
761  }
762  }
763  }
764 
766  if (data.trajectory().qualityOptimization() < (m_qualityCut*data.nclusmin())) {
767  if( toReturnFailedTrack ) {
768  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::Quality);
769  }
770  else {
771  return CantFindTrk;
772  }
773  }
774 
775  if (data.trajectory().pTfirst () < data.pTmin () &&
776  data.trajectory().nclusters() < data.nclusmin()) {
777  if( toReturnFailedTrack ) {
779  }
780  else {
781  return CantFindTrk;
782  }
783  }
784 
785  if (data.trajectory().nclusters() < data.nclusminb() ||
786  data.trajectory().ndf () < data.nwclusmin()) {
787  if( toReturnFailedTrack ) {
788  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::NCluster);
789  }
790  else {
791  return CantFindTrk;
792  }
793  }
794 
797  data.trajectory().updateHoleSearchResult();
798  if (!data.trajectory().getHoleSearchResult().passPatternHoleCut) {
799  if( toReturnFailedTrack ) {
800  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::HoleCut);
801  }
802  else {
803  return CantFindTrk;
804  }
805  }
806  }
807 
808  if( toReturnFailedTrack ) {
809  if( data.resultCode() != SiCombinatorialTrackFinderData_xk::ResultCode::Unrecoverable ) {
810  return CantFindTrk;
811  }
812  else {
813  data.setResultCode(SiCombinatorialTrackFinderData_xk::ResultCode::Success);
814  }
815  }
816 
817  return Success;
818 }
819 
821 // Trk::Track production
823 
825 {
826  const Trk::PatternTrackParameters *param = data.trajectory().firstParameters();
827  if (param) {
828  double pt = param->transverseMomentum();
829  // reject tracks with small pT
830  // The cut should be large enough otherwise eta computation of such tracks may yield NANs.
831  if (pt < m_minPtCut.value()) {
832  ATH_MSG_DEBUG( "Reject low pT track (pT = " << pt << " < " << m_minPtCut.value() << ")");
833  return nullptr;
834  }
835  }
836  if (!data.simpleTrack()) {
837  return new Trk::Track(
838  data.trackinfo(),
839  std::make_unique<Trk::TrackStates>(
840  data.trajectory().convertToTrackStateOnSurface(
841  data.cosmicTrack())),
842  data.trajectory().convertToFitQuality());
843  }
844 
845  Trk::TrackInfo info = data.trackinfo();
846  info.setPatternRecognitionInfo(Trk::TrackInfo::SiSPSeededFinderSimple);
847  info.setParticleHypothesis(Trk::pion);
848  if (!data.flagToReturnFailedTrack()) {
849  return new Trk::Track(
850  info,
851  std::make_unique<Trk::TrackStates>(
852  data.trajectory().convertToSimpleTrackStateOnSurface(
853  data.cosmicTrack(), ctx)),
854  data.trajectory().convertToFitQuality());
855  } else {
856  return new Trk::Track(
857  info,
858  std::make_unique<Trk::TrackStates>(
859  data.trajectory()
860  .convertToSimpleTrackStateOnSurfaceForDisTrackTrigger(
861  data.cosmicTrack(), ctx)),
862  data.trajectory().convertToFitQuality());
863  }
864 }
865 
867 // Next Trk::Track production
869 
871 {
872  auto tsos = std::make_unique<Trk::TrackStates>(
873  data.trajectory().convertToNextTrackStateOnSurface());
874  if (tsos->empty()){
875  return nullptr;
876  }
877 
878  // verify first track parameters
879  const Trk::TrackParameters *param = nullptr;
880  for (const Trk::TrackStateOnSurface *a_tsos : *tsos) {
881  const Trk::TrackParameters *param = a_tsos->trackParameters();
882  if (param) {
883  break;
884  }
885  }
886 
887  if (param) {
888  auto momentum = param->momentum();
889  const auto pt2 = momentum.perp2();
890  // reject tracks with small pT
891  // The cut should be large enough otherwise eta computation of such tracks may yield NANs.
892  if (pt2 < m_minPt2Cut) {
893  ATH_MSG_WARNING( "Reject low pT track (pT = " << sqrt(pt2) << " < " << m_minPtCut.value() << ")");
894  return nullptr;
895  }
896  }
897  return new Trk::Track(data.trackinfo(),
898  std::move(tsos),
899  data.trajectory().convertToFitQuality());
900 }
901 
903 // Callback function - get the magnetic field /
905 
907 {
908  // Build MagneticFieldProperties
909  //
913 }
914 
916 // Convert space points to clusters and (for Run 4) detector elements
918 
920 (const std::vector<const Trk::SpacePoint*>& Sp, std::vector<const InDet::SiCluster*>& Sc, std::optional<std::reference_wrapper<std::vector<const InDetDD::SiDetectorElement*>>> DE)
921 {
922  Sc.reserve(Sp.size());
924  for (const Trk::SpacePoint* s : Sp) {
926  const Trk::PrepRawData* p = s->clusterList().first;
927  if (p) {
929  const InDet::SiCluster* c = static_cast<const InDet::SiCluster*>(p);
930  if (c){
931  Sc.push_back(c);
932  }
933  }
935  p = s->clusterList().second;
936  if (p) {
937  const InDet::SiCluster* c = static_cast<const InDet::SiCluster*>(p);
938  if (c){
939  Sc.push_back(c);
940  }
941  }
942  }
943 
945  std::vector<const InDet::SiCluster*>::iterator cluster = Sc.begin(), nextCluster, endClusters = Sc.end();
946 
949  if (DE) {
950  DE->get().reserve(Sc.size());
951  }
952  for (; cluster != endClusters; ++cluster) {
953 
954  const InDetDD::SiDetectorElement* de = (*cluster)->detectorElement();
955 
956  nextCluster = cluster;
957  ++nextCluster;
958  for (; nextCluster != endClusters; ++nextCluster) {
959  if (de == (*nextCluster)->detectorElement()){
960  return false;
961  }
962  }
963  if (DE) {
964  DE->get().push_back(de);
965  }
966  }
967  return true;
968 }
969 
971 // Convert detector elements to detector element links
973 
975 (std::vector<const InDetDD::SiDetectorElement*> & DE,
976  std::vector<const InDet::SiDetElementBoundaryLink_xk*>& DEL,
977  const EventContext& ctx) const
978 {
979  const InDet::SiDetElementBoundaryLinks_xk* boundaryPixel{nullptr};
980  const InDet::SiDetElementBoundaryLinks_xk* boundarySCT{nullptr};
981  if (m_usePIX) {
983  boundaryPixel = *boundaryPixelHandle;
984  if (boundaryPixel==nullptr) {
985  ATH_MSG_FATAL(m_boundaryPixelKey.fullKey() << " returns null pointer");
986  }
987  }
988  if (m_useSCT) {
990  boundarySCT = *boundarySCTHandle;
991  if (boundarySCT==nullptr) {
992  ATH_MSG_FATAL(m_boundarySCTKey.fullKey() << " returns null pointer");
993  }
994  }
995 
996  DEL.reserve(DE.size());
997  for (const InDetDD::SiDetectorElement* d: DE) {
998  IdentifierHash id = d->identifyHash();
999  if (d->isPixel() && boundaryPixel && id < boundaryPixel->size()) DEL.push_back(&(*boundaryPixel)[id]);
1000  else if (d->isSCT() && boundarySCT && id < boundarySCT->size()) DEL.push_back(&(*boundarySCT)[id]);
1001  }
1002 }
1003 
1005 // Get track quality cuts
1007 
1010 {
1011  // Integer cuts
1012  //
1013  int intCut = 0;
1014 
1015  if (!Cuts.getIntCut("CosmicTrack" , intCut)) intCut = 0;
1016  data.setCosmicTrack(intCut);
1017 
1018  if (!Cuts.getIntCut("MinNumberOfClusters" , intCut)) intCut = 7;
1019  data.setNclusmin(intCut);
1020 
1021  data.setNclusminb(std::max(3, data.nclusmin()-1));
1022 
1023  if (!Cuts.getIntCut("MinNumberOfWClusters", intCut)) intCut = 7;
1024  data.setNwclusmin(intCut);
1025 
1026  if (!Cuts.getIntCut("MaxNumberOfHoles" , intCut)) intCut = 2;
1027  if(!data.cosmicTrack() && intCut>2) intCut = 2;
1028  data.setNholesmax(intCut);
1029 
1030  if (!Cuts.getIntCut("MaxHolesGap" , intCut)) intCut = 2;
1031  if(!data.cosmicTrack() && intCut>2) intCut = 2;
1032  if(intCut > data.nholesmax()) intCut = data.nholesmax();
1033  data.setDholesmax(intCut);
1034 
1035  data.tools().setHolesClusters(data.nholesmax(), data.dholesmax(),
1036  data.nclusmin());
1037 
1038  if (!Cuts.getIntCut("UseAssociationTool" , intCut)) intCut = 0;
1039  data.tools().setAssociation(intCut);
1040 
1041  if (!Cuts.getIntCut("SimpleTrack" , intCut)) intCut = 0;
1042  data.setSimpleTrack(bool(intCut));
1043 
1044  // Double cuts
1045  //
1046  double doubleCut = 0.;
1047 
1048  if (!Cuts.getDoubleCut("pTmin" , doubleCut)) doubleCut = 500.;
1049  data.setPTmin(doubleCut);
1050 
1051  if (!Cuts.getDoubleCut("pTminBrem" , doubleCut)) doubleCut = 1000.;
1052  data.setPTminBrem(doubleCut);
1053 
1054  if (!Cuts.getDoubleCut("MaxXi2forCluster" , doubleCut)) doubleCut = 9.;
1055  data.setXi2max(doubleCut);
1056 
1057  if (!Cuts.getDoubleCut("MaxXi2forOutlier" , doubleCut)) doubleCut = 25.;
1058  if (!data.cosmicTrack() && doubleCut > 25.) doubleCut = 25.;
1059  if (doubleCut <= data.xi2max()) doubleCut = data.xi2max()+5.;
1060  data.setXi2maxNoAdd(doubleCut);
1061 
1062  if (!Cuts.getDoubleCut("MaxXi2forSearch" , doubleCut)) doubleCut = 100.;
1063  data.setXi2maxlink(doubleCut);
1064 
1065  data.tools().setXi2pTmin(data.xi2max(), data.xi2maxNoAdd(),
1066  data.xi2maxlink(), data.pTmin());
1067 
1068  if (!Cuts.getIntCut ("doMultiTracksProd", intCut)) intCut = 0;
1069  if (!Cuts.getDoubleCut("MaxXi2MultiTracks", doubleCut)) doubleCut = 7.;
1070  if (!data.cosmicTrack() && doubleCut > 7.) doubleCut = 7.;
1071  data.tools().setMultiTracks(intCut, doubleCut);
1072 
1073  data.trajectory().setParameters();
1074 }
1075 
1077 
1081  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
1082  if (fieldCondObj == nullptr) {
1083  std::string msg = "InDet::SiCombinatorialTrackFinder_xk::initializeCombinatorialData: Failed to retrieve AtlasFieldCacheCondObj with key " + m_fieldCondObjInputKey.key();
1084  throw(std::runtime_error(msg));
1085  }
1086  data.setFieldCondObj(fieldCondObj);
1087 
1089  data.setTools(&*m_proptool,
1090  &*m_updatortool,
1091  &*m_riocreator,
1094  &m_fieldprop,
1096  if (!m_pixelDetElStatus.empty()) {
1098  data.setPixelDetectorElementStatus( pixelDetElStatus.cptr() );
1099  }
1100  if (!m_sctDetElStatus.empty()) {
1102  data.setSCTDetectorElementStatus( sctDetElStatus.cptr() );
1103  }
1104 
1105  // Set the ITk Geometry setup
1106  data.setITkGeometry(m_ITkGeometry);
1107  // Set the ITk Fast Tracking setup
1108  data.setFastTracking(m_doFastTracking);
1109 }
1110 
1112 {
1113  for(int i=0; i!=NumberOfStats; ++i) information[i] = data.statistic()[i];
1114 }
grepfile.info
info
Definition: grepfile.py:38
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Trk::SpacePoint
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:35
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
Trk::PatternTrackParameters::transverseMomentum
double transverseMomentum() const
Trk::TrackInfo
Contains information about the 'fitter' of this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:32
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
InDet::SiCombinatorialTrackFinder_xk::m_pixelCondSummaryTool
ToolHandle< IInDetConditionsTool > m_pixelCondSummaryTool
Definition: SiCombinatorialTrackFinder_xk.h:145
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
InDet::SiCombinatorialTrackFinder_xk::m_boundaryCheckTool
ToolHandle< Trk::IBoundaryCheckTool > m_boundaryCheckTool
Definition: SiCombinatorialTrackFinder_xk.h:149
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
max
#define max(a, b)
Definition: cfImp.cxx:41
MeasurementBase.h
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::MagneticFieldProperties
Definition: MagneticFieldProperties.h:31
InDet::SiCombinatorialTrackFinder_xk::m_proptool
PublicToolHandle< Trk::IPatternParametersPropagator > m_proptool
Definition: SiCombinatorialTrackFinder_xk.h:152
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
InDet::SiCombinatorialTrackFinder_xk::getTracks
virtual const std::list< Trk::Track * > & getTracks(SiCombinatorialTrackFinderData_xk &data, const Trk::TrackParameters &, const std::vector< const Trk::SpacePoint * > &, const std::vector< Amg::Vector3D > &, std::vector< const InDetDD::SiDetectorElement * > &, const TrackQualityCuts &, const EventContext &ctx) const override
Definition: SiCombinatorialTrackFinder_xk.cxx:320
hist_file_dump.d
d
Definition: hist_file_dump.py:137
InDet::SiCombinatorialTrackFinder_xk::getTracksWithBrem
virtual const std::list< Trk::Track * > & getTracksWithBrem(SiCombinatorialTrackFinderData_xk &data, const Trk::TrackParameters &, const std::vector< const Trk::SpacePoint * > &, const std::vector< Amg::Vector3D > &, std::vector< const InDetDD::SiDetectorElement * > &, std::multimap< const Trk::PrepRawData *, const Trk::Track * > &, bool, const EventContext &ctx) const override
Definition: SiCombinatorialTrackFinder_xk.cxx:454
InDet::SiCombinatorialTrackFinder_xk::m_boundaryPixelKey
SG::ReadCondHandleKey< InDet::SiDetElementBoundaryLinks_xk > m_boundaryPixelKey
Definition: SiCombinatorialTrackFinder_xk.h:166
Trk::TrackInfo::BremFitSuccessful
@ BremFitSuccessful
A brem fit was performed on this track and this fit was successful.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:81
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
InDet::SiCombinatorialTrackFinder_xk::endEvent
virtual void endEvent(SiCombinatorialTrackFinderData_xk &data) const override
Definition: SiCombinatorialTrackFinder_xk.cxx:303
InDet::SiCombinatorialTrackFinder_xk::m_fieldmode
StringProperty m_fieldmode
Definition: SiCombinatorialTrackFinder_xk.h:192
xAOD::JetInput::Track
@ Track
Definition: JetContainerInfo.h:61
InDet::SiCombinatorialTrackFinder_xk::convertToTrack
Trk::Track * convertToTrack(SiCombinatorialTrackFinderData_xk &data, const EventContext &ctx) const
Definition: SiCombinatorialTrackFinder_xk.cxx:824
Trk::TrackInfo::SiSPSeededFinderSimple
@ SiSPSeededFinderSimple
for tracks processed by the trigger version of the SiSPSeededFinder
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:256
InDet::SiCombinatorialTrackFinder_xk::m_fieldCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
Definition: SiCombinatorialTrackFinder_xk.h:171
test_pyathena.pt
pt
Definition: test_pyathena.py:11
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
InDet::SiCombinatorialTrackFinder_xk::initializeCombinatorialData
void initializeCombinatorialData(const EventContext &ctx, SiCombinatorialTrackFinderData_xk &data) const
Definition: SiCombinatorialTrackFinder_xk.cxx:1076
InDet::SiCombinatorialTrackFinder_xk::m_riocreator
PublicToolHandle< Trk::IRIO_OnTrackCreator > m_riocreator
Definition: SiCombinatorialTrackFinder_xk.h:156
InDet::SiCombinatorialTrackFinder_xk::CantFindTrk
@ CantFindTrk
Definition: SiCombinatorialTrackFinder_xk.h:210
InDet::SCT_ClusterContainer
Trk::PrepRawDataContainer< SCT_ClusterCollection > SCT_ClusterContainer
Definition: SCT_ClusterContainer.h:27
InDet::TrackQualityCuts
Definition: ISiCombinatorialTrackFinder.h:122
InDet::SiCombinatorialTrackFinder_xk::m_ITkGeometry
BooleanProperty m_ITkGeometry
Definition: SiCombinatorialTrackFinder_xk.h:190
ReadCellNoiseFromCoolCompare.s4
s4
Definition: ReadCellNoiseFromCoolCompare.py:381
InDet::SiCombinatorialTrackFinder_xk::findTrack
EStat_t findTrack(SiCombinatorialTrackFinderData_xk &data, const Trk::TrackParameters &, const std::vector< const Trk::SpacePoint * > &, const std::vector< Amg::Vector3D > &, std::vector< const InDetDD::SiDetectorElement * > &, std::multimap< const Trk::PrepRawData *, const Trk::Track * > &, const EventContext &) const
Definition: SiCombinatorialTrackFinder_xk.cxx:584
InDet::PixelClusterContainer
Trk::PrepRawDataContainer< PixelClusterCollection > PixelClusterContainer
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelClusterContainer.h:28
InDet::TrackQualityCuts::getDoubleCut
bool getDoubleCut(const std::string &, double &) const
Definition: ISiCombinatorialTrackFinder.h:200
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
InDet::SiCombinatorialTrackFinder_xk::m_sctcontainerkey
SG::ReadHandleKey< InDet::SCT_ClusterContainer > m_sctcontainerkey
Definition: SiCombinatorialTrackFinder_xk.h:164
SiCombinatorialTrackFinder_xk.h
InDet::SiCombinatorialTrackFinder_xk::initialize
virtual StatusCode initialize() override
Definition: SiCombinatorialTrackFinder_xk.cxx:44
InDet::SiCombinatorialTrackFinder_xk::m_pixelDetElStatus
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_pixelDetElStatus
Optional read handle to get status data to test whether a pixel detector element is good.
Definition: SiCombinatorialTrackFinder_xk.h:178
ReadCondHandle.h
InDet::SiCombinatorialTrackFinder_xk::m_fieldprop
Trk::MagneticFieldProperties m_fieldprop
Magnetic field properties.
Definition: SiCombinatorialTrackFinder_xk.h:202
InDet::SiCombinatorialTrackFinder_xk::m_sctCondSummaryTool
ToolHandle< IInDetConditionsTool > m_sctCondSummaryTool
Definition: SiCombinatorialTrackFinder_xk.h:147
MagneticFieldProperties.h
InDet::SiCombinatorialTrackFinder_xk::m_outputlevel
int m_outputlevel
Definition: SiCombinatorialTrackFinder_xk.h:201
InDet::SiCombinatorialTrackFinder_xk::m_pixcontainerkey
SG::ReadHandleKey< InDet::PixelClusterContainer > m_pixcontainerkey
Definition: SiCombinatorialTrackFinder_xk.h:162
Trk::FastField
@ FastField
call the fast field access method of the FieldSvc
Definition: MagneticFieldMode.h:20
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
IPatternParametersUpdator.h
InDet::SiCombinatorialTrackFinder_xk::m_minPtCut
FloatProperty m_minPtCut
Definition: SiCombinatorialTrackFinder_xk.h:194
InDet::SiCombinatorialTrackFinder_xk::WrongInit
@ WrongInit
Definition: SiCombinatorialTrackFinder_xk.h:209
InDet::SiCombinatorialTrackFinder_xk::dumpconditions
MsgStream & dumpconditions(MsgStream &out) const
Definition: SiCombinatorialTrackFinder_xk.cxx:132
InDet::SiCombinatorialTrackFinder_xk::convertToNextTrack
Trk::Track * convertToNextTrack(SiCombinatorialTrackFinderData_xk &data) const
Definition: SiCombinatorialTrackFinder_xk.cxx:870
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
InDet::SiCombinatorialTrackFinder_xk::pTseed
virtual double pTseed(SiCombinatorialTrackFinderData_xk &data, const Trk::TrackParameters &, const std::vector< const Trk::SpacePoint * > &, const EventContext &) const override
Definition: SiCombinatorialTrackFinder_xk.cxx:565
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
InDet::SiCombinatorialTrackFinder_xk::magneticFieldInit
void magneticFieldInit()
Definition: SiCombinatorialTrackFinder_xk.cxx:906
VALIDATE_STATUS_ARRAY_ACTIVATED
#define VALIDATE_STATUS_ARRAY_ACTIVATED
Definition: SiDetectorElementStatus.h:50
InDet::SiCombinatorialTrackFinder_xk::dump
MsgStream & dump(SiCombinatorialTrackFinderData_xk &data, MsgStream &out) const override
Definition: SiCombinatorialTrackFinder_xk.cxx:119
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Preparation.mode
mode
Definition: Preparation.py:95
Trk::TrackInfo::SiSpacePointsSeedMaker_Cosmic
@ SiSpacePointsSeedMaker_Cosmic
Entries allowing to distinguish different seed makers.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:222
Trk::TrackInfo::BremFit
@ BremFit
A brem fit was performed on this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:78
Trk::ParametersBase
Definition: ParametersBase.h:55
InDet::SiDetElementBoundaryLinks_xk
std::vector< SiDetElementBoundaryLink_xk > SiDetElementBoundaryLinks_xk
Definition: SiDetElementBoundaryLinks_xk.h:22
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
InDet::SiCombinatorialTrackFinder_xk::m_boundarySCTKey
SG::ReadCondHandleKey< InDet::SiDetElementBoundaryLinks_xk > m_boundarySCTKey
Definition: SiCombinatorialTrackFinder_xk.h:168
Trk::TrackInfo::TrackInCaloROI
@ TrackInCaloROI
A track in a CaloROI.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:236
InDet::SiCombinatorialTrackFinder_xk::spacePointsToClusters
static bool spacePointsToClusters(const std::vector< const Trk::SpacePoint * > &, std::vector< const InDet::SiCluster * > &, std::optional< std::reference_wrapper< std::vector< const InDetDD::SiDetectorElement * >>>=std::nullopt)
Definition: SiCombinatorialTrackFinder_xk.cxx:920
InDet::SiCombinatorialTrackFinder_xk::TwoCluster
@ TwoCluster
Definition: SiCombinatorialTrackFinder_xk.h:207
InDet::SiCombinatorialTrackFinder_xk::WrongRoad
@ WrongRoad
Definition: SiCombinatorialTrackFinder_xk.h:208
Trk::FullField
@ FullField
Field is set to be realistic, but within a given Volume.
Definition: MagneticFieldMode.h:21
InDet::SiCombinatorialTrackFinder_xk::Success
@ Success
Definition: SiCombinatorialTrackFinder_xk.h:214
Trk::TrackInfo::SiSpacePointsSeedMaker_HeavyIon
@ SiSpacePointsSeedMaker_HeavyIon
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:223
Trk::PrepRawData
Definition: PrepRawData.h:62
Trk::NoField
@ NoField
Field is set to 0., 0., 0.,.
Definition: MagneticFieldMode.h:18
InDet::SiCombinatorialTrackFinder_xk::m_writeHolesFromPattern
BooleanProperty m_writeHolesFromPattern
Definition: SiCombinatorialTrackFinder_xk.h:196
ReadCellNoiseFromCoolCompare.s3
s3
Definition: ReadCellNoiseFromCoolCompare.py:380
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
TrackInfo.h
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Trk::MagneticFieldProperties::magneticFieldMode
MagneticFieldMode magneticFieldMode() const
Returns the MagneticFieldMode as specified.
InDet::SiCombinatorialTrackFinder_xk::m_usePIX
BooleanProperty m_usePIX
Definition: SiCombinatorialTrackFinder_xk.h:188
InDet::SiCombinatorialTrackFinder_xk::m_updatortool
PublicToolHandle< Trk::IPatternParametersUpdator > m_updatortool
Definition: SiCombinatorialTrackFinder_xk.h:154
SG::ReadHandle::ptr
const_pointer_type ptr()
Dereference the pointer.
LArNewCalib_Delay_OFC_Cali.FT
FT
Definition: LArNewCalib_Delay_OFC_Cali.py:120
Trk::TrackInfo::SiSPSeededFinder
@ SiSPSeededFinder
Tracks from SiSPSeedFinder.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:102
InDet::SiCombinatorialTrackFinder_xk::newEvent
virtual void newEvent(const EventContext &ctx, SiCombinatorialTrackFinderData_xk &data) const override
Definition: SiCombinatorialTrackFinder_xk.cxx:237
InDet::SiCombinatorialTrackFinder_xk::finalize
virtual StatusCode finalize() override
Definition: SiCombinatorialTrackFinder_xk.cxx:110
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
SiClusterContainer.h
InDet::SiCombinatorialTrackFinderData_xk
Definition: SiCombinatorialTrackFinderData_xk.h:34
Prompt::Def::Pt
@ Pt
Definition: VarHolder.h:76
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::PatternTrackParameters
Definition: PatternTrackParameters.h:38
DEBUG
#define DEBUG
Definition: page_access.h:11
InDet::SiCombinatorialTrackFinder_xk::m_useSCT
BooleanProperty m_useSCT
Definition: SiCombinatorialTrackFinder_xk.h:189
InDet::TrackQualityCuts::getIntCut
bool getIntCut(const std::string &, int &) const
Definition: ISiCombinatorialTrackFinder.h:193
InDet::SiCombinatorialTrackFinder_xk::m_minPt2Cut
float m_minPt2Cut
Definition: SiCombinatorialTrackFinder_xk.h:195
InDet::SiCombinatorialTrackFinder_xk::detectorElementLinks
void detectorElementLinks(std::vector< const InDetDD::SiDetectorElement * > &, std::vector< const InDet::SiDetElementBoundaryLink_xk * > &, const EventContext &ctx) const
Definition: SiCombinatorialTrackFinder_xk.cxx:975
InDet::SiCombinatorialTrackFinder_xk::dumpevent
static MsgStream & dumpevent(SiCombinatorialTrackFinderData_xk &data, MsgStream &out)
Definition: SiCombinatorialTrackFinder_xk.cxx:194
InDet::SiCombinatorialTrackFinder_xk::EStat_t
EStat_t
Array entries for data.statistic counter.
Definition: SiCombinatorialTrackFinder_xk.h:206
InDet::SiCombinatorialTrackFinder_xk::NotNewTrk
@ NotNewTrk
Definition: SiCombinatorialTrackFinder_xk.h:211
InDet::SiCombinatorialTrackFinder_xk::m_sctDetElStatus
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_sctDetElStatus
Optional read handle to get status data to test whether a SCT detector element is good.
Definition: SiCombinatorialTrackFinder_xk.h:184
ReadHandle.h
Handle class for reading from StoreGate.
IdentifierHash
Definition: IdentifierHash.h:38
hotSpotInTAG.nb
nb
Definition: hotSpotInTAG.py:164
H5Utils::internal::PT
H5::PredType PT
Definition: H5Traits.cxx:15
InDet::SiCombinatorialTrackFinder_xk::m_doFastTracking
BooleanProperty m_doFastTracking
Definition: SiCombinatorialTrackFinder_xk.h:191
InDet::SiCombinatorialTrackFinder_xk::SiCombinatorialTrackFinder_xk
SiCombinatorialTrackFinder_xk(const std::string &, const std::string &, const IInterface *)
Definition: SiCombinatorialTrackFinder_xk.cxx:35
python.compressB64.c
def c
Definition: compressB64.py:93
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
IPatternParametersPropagator.h
InDet::SiCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiCluster.h:40
InDet::SiCombinatorialTrackFinder_xk::m_qualityCut
DoubleProperty m_qualityCut
Definition: SiCombinatorialTrackFinder_xk.h:193
InDet::SiCombinatorialTrackFinder_xk::BremAttempt
@ BremAttempt
Definition: SiCombinatorialTrackFinder_xk.h:212
InDet::SiCombinatorialTrackFinder_xk::getTrackQualityCuts
static void getTrackQualityCuts(SiCombinatorialTrackFinderData_xk &data, const TrackQualityCuts &)
Definition: SiCombinatorialTrackFinder_xk.cxx:1009
InDet::SiCombinatorialTrackFinder_xk::NumberOfStats
@ NumberOfStats
Definition: SiCombinatorialTrackFinder_xk.h:213
InDet::SiCombinatorialTrackFinder_xk::fillStatistic
virtual void fillStatistic(SiCombinatorialTrackFinderData_xk &data, std::array< bool, NumberOfStats > &information) const override
Definition: SiCombinatorialTrackFinder_xk.cxx:1111