ATLAS Offline Software
SiSPSeededTrackFinder.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 
13 
14 #include <set>
15 
16 namespace {
25 double trackQuality(const Trk::Track* Tr) {
26 
27  double quality = 0.;
28  double baseScorePerHit = 17.;
30  for (const Trk::TrackStateOnSurface* m : *(Tr->trackStateOnSurfaces())) {
33  continue;
35  const Trk::FitQualityOnSurface fq = m->fitQualityOnSurface();
36  if (!fq)
37  continue;
38 
39  double x2 = fq.chiSquared();
40  double hitQualityScore;
43  if (fq.numberDoF() == 2)
44  hitQualityScore = (1.2 * (baseScorePerHit - x2 * .5)); // pix
45  else
46  hitQualityScore = (baseScorePerHit - x2); // sct
47  if (hitQualityScore < 0.)
48  hitQualityScore =
49  0.; // do not allow a bad hit to decrement the overall score
50  quality += hitQualityScore;
51  }
54  quality *= 0.7;
55 
56  return quality;
57 }
58 } // namespace
59 
63 
65 (const std::string& name,ISvcLocator* pSvcLocator) : AthReentrantAlgorithm(name, pSvcLocator)
66 {
67 }
68 
72 
74 {
76  ATH_CHECK(m_mbtsKey.initialize(m_useMBTS));
79  ATH_CHECK(m_outputTracksKey.initialize());
80 
83 
85 
87  ATH_CHECK( m_seedsmaker.retrieve() );
88  ATH_CHECK( m_zvertexmaker.retrieve( DisableTool{ not m_useZvertexTool } ));
89 
91  ATH_CHECK( m_trackmaker.retrieve());
92 
93  ATH_CHECK( m_regsel_strip.retrieve( DisableTool{ not m_useITkConvSeeded } ) );
94 
96 
97  ATH_CHECK( m_trackSummaryTool.retrieve( DisableTool{ m_trackSummaryTool.name().empty()} ));
98 
99  if (m_useNewStrategy and m_beamSpotKey.key().empty()) {
100  m_useNewStrategy = false;
101  m_useZBoundaryFinding = false;
102  }
103 
106 
107  if (not m_beamSpotKey.key().empty()) {
109  ATH_CHECK( m_proptool.retrieve() );
110 
113 
115  if (m_histsize < 100) m_histsize = 100;
116  m_zstep = static_cast<double>(m_histsize)/(2.*m_zcut);
117  } else {
118  m_proptool.disable();
119  m_useNewStrategy = false;
120  m_useZBoundaryFinding = false;
121  }
122  } else {
123  m_proptool.disable();
124  }
125 
127  if (msgLvl(MSG::DEBUG)) {
128  dump(MSG::DEBUG, nullptr);
129  }
130  m_neventsTotal = 0;
131  m_neventsTotalV = 0;
132  m_problemsTotal = 0;
133  m_problemsTotalV = 0;
134  return StatusCode::SUCCESS;
135 }
136 
140 
141 StatusCode InDet::SiSPSeededTrackFinder::execute(const EventContext& ctx) const
142 {
148  else if (m_useITkConvSeeded) return itkConvStrategy(ctx);
149  else if (not m_useNewStrategy and not m_useZBoundaryFinding and not m_ITKGeometry) {
150  return oldStrategy(ctx);
151  }
152  return newStrategy(ctx);
153 }
154 
158 
159 namespace InDet {
161  {
162  public:
164  if (!key.key().empty()) {
167  }
168  }
169  private:
171  };
172 }
173 
174 
176 {
178  ATH_CHECK(outputTracks.record(std::make_unique<TrackCollection>()));
180  if (not isGoodEvent(ctx)) {
181  return StatusCode::SUCCESS;
182  }
183 
184  SiSpacePointsSeedMakerEventData seedEventData;
185  bool ZVE = false;
186  if (m_useZvertexTool) {
187  std::list<Trk::Vertex> vertices = m_zvertexmaker->newEvent(ctx, seedEventData);
188  if (not vertices.empty()) ZVE = true;
189  m_seedsmaker->find3Sp(ctx, seedEventData, vertices);
190  } else {
191  m_seedsmaker->newEvent(ctx, seedEventData, -1);
192  std::list<Trk::Vertex> vertexList;
193  m_seedsmaker->find3Sp(ctx, seedEventData, vertexList);
194  }
195 
196  const bool PIX = true;
197  const bool SCT = true;
199  m_trackmaker->newEvent(ctx, trackEventData, PIX, SCT);
200 
201  bool ERR = false;
202  Counter_t counter{};
203  const InDet::SiSpacePointsSeed* seed = nullptr;
204  std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
205  // Loop through all seed and reconsrtucted tracks collection preparation
206  //
207  while ((seed = m_seedsmaker->next(ctx, seedEventData))) {
208  ++counter[kNSeeds];
209  std::list<Trk::Track*> trackList = m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
210  for (Trk::Track* t: trackList) {
211  qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
212  }
213  if (not ZVE and (counter[kNSeeds] >= m_maxNumberSeeds)) {
214  ERR = true;
215  ++m_problemsTotal;
216  break;
217  }
218  }
219  m_trackmaker->endEvent(trackEventData);
220 
221  // Remove shared tracks with worse quality
222  //
223  filterSharedTracks(qualitySortedTrackCandidates);
224 
225  // Save good tracks in track collection
226  //
227  for (const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
228  ++counter[kNTracks];
229  if (m_trackSummaryTool.isEnabled()) {
230  m_trackSummaryTool->computeAndReplaceTrackSummary(*(qualityAndTrack.second),
231  false /* DO NOT suppress hole search*/);
232  }
233  outputTracks->push_back(qualityAndTrack.second);
234  }
235 
236  m_counterTotal[kNSeeds] += counter[kNSeeds];
237 
238  if (ZVE) ++m_neventsTotalV;
239  else ++m_neventsTotal;
240 
241  if (ERR) {
242  outputTracks->clear();
243  } else {
244  m_counterTotal[kNTracks] += counter[kNTracks];
245  }
246 
247  // Print common event information
248  //
249  if (msgLvl(MSG::DEBUG)) {
251  }
252 
253  return StatusCode::SUCCESS;
254 }
255 
257 // Execute with new strategy
259 
261 {
263  ATH_CHECK(outputTracks.record(std::make_unique<TrackCollection>()));
265  if (not isGoodEvent(ctx)) {
266  return StatusCode::SUCCESS;
267  }
268 
271  Trk::PerigeeSurface beamPosPerigee(beamSpotHandle->beamPos());
272 
273  SiSpacePointsSeedMakerEventData seedEventData;
274 
289  m_seedsmaker->newEvent(ctx, seedEventData, 0);
291  std::list<Trk::Vertex> vertexList;
293  m_seedsmaker->find3Sp(ctx, seedEventData, vertexList);
294 
295  const bool PIX = true ;
296  const bool SCT = true ;
299  m_trackmaker->newEvent(ctx, trackEventData, PIX, SCT);
300 
302  std::vector<int> numberHistogram(m_histsize, 0);
303  std::vector<double> zWeightedHistogram(m_histsize, 0.);
304  std::vector<double> ptWeightedHistogram(m_histsize, 0.);
305 
306  bool ERR = false;
307  Counter_t counter{};
308  const InDet::SiSpacePointsSeed* seed = nullptr;
309 
311  std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
312 
314  bool doWriteNtuple = m_seedsmaker->getWriteNtupleBoolProperty();
315  long EvNumber = 0.; //Event number variable to be used for the validation ntuple
316 
317  if (doWriteNtuple) {
319  if(!eventInfo.isValid()) {EvNumber = -1.0;} else {EvNumber = eventInfo->eventNumber();}
320  }
321 
323  while ((seed = m_seedsmaker->next(ctx, seedEventData))) {
324 
325  ++counter[kNSeeds];
327  bool firstTrack{true};
328 
330  std::list<Trk::Track*> trackList = m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
332  for (Trk::Track* t: trackList) {
333 
334  qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
335 
337  if (firstTrack and not m_ITKGeometry) {
338  fillZHistogram(t, beamPosPerigee, numberHistogram, zWeightedHistogram, ptWeightedHistogram);
339  }
340  firstTrack = false;
341  }
343  if(doWriteNtuple) { m_seedsmaker->writeNtuple(seed, !trackList.empty() ? trackList.front() : nullptr, ISiSpacePointsSeedMaker::StripSeed, EvNumber) ; }
344 
345 
346  if (counter[kNSeeds] >= m_maxNumberSeeds) {
347  ERR = true;
348  ++m_problemsTotal;
349  break;
350  }
351  }
352 
357  if(not m_SpacePointsPixelKey.empty()) {
358  m_seedsmaker->newEvent(ctx, seedEventData, 1);
359  } else {
360  ATH_MSG_WARNING("SpacePointsPixelKey is empty. Skipping the second seeding pass that uses pixel seeds.");
361  }
362 
364  std::pair<double,double> zBoundaries;
365  if (not m_ITKGeometry) {
367  findZvertex(vertexList, zBoundaries, numberHistogram, zWeightedHistogram, ptWeightedHistogram);
370  m_seedsmaker->find3Sp(ctx, seedEventData, vertexList, &(zBoundaries.first));
371  } else {
372  m_seedsmaker->find3Sp(ctx, seedEventData, vertexList);
373  }
374 
376  while ((seed = m_seedsmaker->next(ctx, seedEventData))) {
377 
378  ++counter[kNSeeds];
379 
380  std::list<Trk::Track*> trackList = m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
381 
382  for (Trk::Track* t: trackList) {
383  qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
384  }
385 
386  if(doWriteNtuple) { m_seedsmaker->writeNtuple(seed, !trackList.empty() ? trackList.front() : nullptr, ISiSpacePointsSeedMaker::PixelSeed, EvNumber); }
387 
388  if (counter[kNSeeds] >= m_maxNumberSeeds) {
389  ERR = true;
390  ++m_problemsTotal;
391  break;
392  }
393  }
394 
395  m_trackmaker->endEvent(trackEventData);
396 
398  filterSharedTracks(qualitySortedTrackCandidates);
399 
401  for (const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
402  ++counter[kNTracks];
403  if (m_trackSummaryTool.isEnabled()) {
406  m_trackSummaryTool->computeAndReplaceTrackSummary(*qualityAndTrack.second,
407  false /* DO NOT suppress hole search*/);
410  if (m_writeHolesFromPattern && trackEventData.combinatorialData().findPatternHoleSearchOutcome(qualityAndTrack.second,theOutcome)){
412  qualityAndTrack.second->trackSummary()->update(Trk::numberOfPixelHoles, theOutcome.nPixelHoles);
413  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTHoles, theOutcome.nSCTHoles);
414  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTDoubleHoles, theOutcome.nSCTDoubleHoles);
415  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTDeadSensors, theOutcome.nSCTDeads);
416  qualityAndTrack.second->trackSummary()->update(Trk::numberOfPixelDeadSensors, theOutcome.nPixelDeads);
417  }
418  }
419  outputTracks->push_back(qualityAndTrack.second);
420  }
421 
422  m_counterTotal[kNSeeds] += counter[kNSeeds] ;
423 
424  ++m_neventsTotal;
425 
426  if (ERR) {
427  outputTracks->clear();
428  } else {
429  m_counterTotal[kNTracks] += counter[kNTracks];
430  }
431 
432  // Print common event information
433  //
434  if (msgLvl(MSG::DEBUG)) {
436  }
437  return StatusCode::SUCCESS;
438 }
439 
440 
441 
443 // ITk fast tracking strategy
445 
447 {
449  ATH_CHECK(outputTracks.record(std::make_unique<TrackCollection>()));
450 
451  const bool PIX = true ;
452  const bool STRIP = true ;
455  m_trackmaker->newTrigEvent(ctx, trackEventData, PIX, STRIP);
456 
457  SiSpacePointsSeedMakerEventData seedEventData;
458 
468  m_seedsmaker->newEvent(ctx, seedEventData, 0);
470  std::list<Trk::Vertex> vertexList;
472  m_seedsmaker->find3Sp(ctx, seedEventData, vertexList);
473 
474  bool ERR = false;
475  Counter_t counter{};
476  const InDet::SiSpacePointsSeed* seed = nullptr;
477 
479  std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
480 
482  bool doWriteNtuple = m_seedsmaker->getWriteNtupleBoolProperty();
483  long EvNumber = 0.; //Event number variable to be used for the validation ntuple
484 
485  if (doWriteNtuple) {
487  if(!eventInfo.isValid()) {EvNumber = -1.0;} else {EvNumber = eventInfo->eventNumber();}
488  }
489 
491  while ((seed = m_seedsmaker->next(ctx, seedEventData))) {
492 
493  ++counter[kNSeeds];
494 
496  std::list<Trk::Track*> trackList = m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
498  for (Trk::Track* t: trackList) {
499 
500  qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
501 
502  }
504  if(doWriteNtuple) { m_seedsmaker->writeNtuple(seed, !trackList.empty() ? trackList.front() : nullptr, ISiSpacePointsSeedMaker::PixelSeed, EvNumber) ; }
505 
506  if (counter[kNSeeds] >= m_maxNumberSeeds) {
507  ERR = true;
508  ++m_problemsTotal;
509  break;
510  }
511  }
512 
513  m_trackmaker->endEvent(trackEventData);
514 
516  filterSharedTracksFast(qualitySortedTrackCandidates);
517 
519  for (const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
520  ++counter[kNTracks];
521 
522  if (m_trackSummaryTool.isEnabled()) {
523  m_trackSummaryTool->computeAndReplaceTrackSummary(*qualityAndTrack.second);
526  if (m_writeHolesFromPattern && trackEventData.combinatorialData().findPatternHoleSearchOutcome(qualityAndTrack.second,theOutcome)){
528  qualityAndTrack.second->trackSummary()->update(Trk::numberOfPixelHoles, theOutcome.nPixelHoles);
529  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTHoles, theOutcome.nSCTHoles);
530  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTDoubleHoles, theOutcome.nSCTDoubleHoles);
531  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTDeadSensors, theOutcome.nSCTDeads);
532  qualityAndTrack.second->trackSummary()->update(Trk::numberOfPixelDeadSensors, theOutcome.nPixelDeads);
533  }
534  }
535 
536  outputTracks->push_back(qualityAndTrack.second);
537  }
538 
539  m_counterTotal[kNSeeds] += counter[kNSeeds] ;
540 
541  ++m_neventsTotal;
542 
543  if (ERR) {
544  outputTracks->clear();
545  } else {
546  m_counterTotal[kNTracks] += counter[kNTracks];
547  }
548 
549  // Print common event information
550  //
551  if (msgLvl(MSG::DEBUG)) {
553  }
554  return StatusCode::SUCCESS;
555 }
556 
557 
559 // Conversion Strategy for ITk
561 
563 {
564  ATH_MSG_DEBUG("Executing " << name() << "::itkConvStrategy");
565 
567  ATH_CHECK(outputTracks.record(std::make_unique<TrackCollection>()));
569  if (not isGoodEvent(ctx)) {
570  return StatusCode::SUCCESS;
571  }
572 
573  SiSpacePointsSeedMakerEventData seedEventData;
574 
576  std::unique_ptr<RoiDescriptor> roiComp = std::make_unique<RoiDescriptor>(true);
577 
578  if(calo_rois.isValid()) {
579  RoiDescriptor * roi =nullptr;
581  double beamZ = beamSpotHandle->beamVtx().position().z();
582  roiComp->clear();
583  roiComp->setComposite();
584 
585  const ROIPhiRZContainer &calo_rois_ref=*calo_rois;
586  for (const ROIPhiRZ &calo_roi : calo_rois_ref) {
587  double phi = calo_roi.phi();
588  if (std::abs(phi)>=M_PI && phi!=-M_PI) continue; // skip duplicates < -pi and >pi
589  double eta = calo_roi.eta();
590  double z = beamZ;
591  double roiPhiMin = phi - m_deltaPhi;
592  double roiPhiMax = phi + m_deltaPhi;
593  double roiEtaMin = eta - m_deltaEta;
594  double roiEtaMax = eta + m_deltaEta;
595  double roiZMin = beamZ - m_deltaZ;
596  double roiZMax = beamZ + m_deltaZ;
597  roi = new RoiDescriptor( eta, roiEtaMin, roiEtaMax,phi, roiPhiMin ,roiPhiMax,z,roiZMin,roiZMax);
598  roiComp->push_back(roi);
599  }
600  }
601  else {
602  ATH_MSG_ERROR("Calo RoI is not valid: " << m_caloClusterROIKey.key());
603  return StatusCode::FAILURE;
604  }
605 
606  std::vector<IdentifierHash> listOfStripIds;
607  std::vector<IdentifierHash> listOfPixIds;
608 
609  m_regsel_strip->HashIDList( *roiComp, listOfStripIds );
610 
612  m_seedsmaker->newRegion(ctx, seedEventData, listOfPixIds, listOfStripIds);
613  std::list<Trk::Vertex> vertexList;
615  m_seedsmaker->find3Sp(ctx, seedEventData, vertexList);
616 
617  const bool PIX = true ;
618  const bool STRIP = true ;
621  m_trackmaker->newEvent(ctx, trackEventData, PIX, STRIP);
622 
623  bool ERR = false;
624  Counter_t counter{};
625  const InDet::SiSpacePointsSeed* seed = nullptr;
626 
628  std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
629 
631  bool doWriteNtuple = m_seedsmaker->getWriteNtupleBoolProperty();
632  long EvNumber = 0.; //Event number variable to be used for the validation ntuple
633 
634  if (doWriteNtuple) {
636  if(!eventInfo.isValid()) {EvNumber = -1.0;} else {EvNumber = eventInfo->eventNumber();}
637  }
638 
640  while ((seed = m_seedsmaker->next(ctx, seedEventData))) {
641 
642  ++counter[kNSeeds];
643 
645  std::list<Trk::Track*> trackList = m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
647  for (Trk::Track* t: trackList) {
648  qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
649  }
650 
652  if(doWriteNtuple) { m_seedsmaker->writeNtuple(seed, !trackList.empty() ? trackList.front() : nullptr, ISiSpacePointsSeedMaker::StripSeed, EvNumber) ; }
653 
654  if (counter[kNSeeds] >= m_maxNumberSeeds) {
655  ERR = true;
656  ++m_problemsTotal;
657  break;
658  }
659  }
660 
661  m_trackmaker->endEvent(trackEventData);
662 
664  filterSharedTracks(qualitySortedTrackCandidates);
665 
667  for (const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
668  ++counter[kNTracks];
669  if (m_trackSummaryTool.isEnabled()) {
672  m_trackSummaryTool->computeAndReplaceTrackSummary(*qualityAndTrack.second,
673  false /* DO NOT suppress hole search*/);
676  if (m_writeHolesFromPattern && trackEventData.combinatorialData().findPatternHoleSearchOutcome(qualityAndTrack.second,theOutcome)){
678  qualityAndTrack.second->trackSummary()->update(Trk::numberOfPixelHoles, theOutcome.nPixelHoles);
679  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTHoles, theOutcome.nSCTHoles);
680  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTDoubleHoles, theOutcome.nSCTDoubleHoles);
681  qualityAndTrack.second->trackSummary()->update(Trk::numberOfSCTDeadSensors, theOutcome.nSCTDeads);
682  qualityAndTrack.second->trackSummary()->update(Trk::numberOfPixelDeadSensors, theOutcome.nPixelDeads);
683  }
684  }
685  outputTracks->push_back(qualityAndTrack.second);
686  }
687 
688  m_counterTotal[kNSeeds] += counter[kNSeeds] ;
689 
690  ++m_neventsTotal;
691 
692  if (ERR) {
693  outputTracks->clear();
694  } else {
695  m_counterTotal[kNTracks] += counter[kNTracks];
696  }
697 
698  // Print common event information
699  //
700  if (msgLvl(MSG::DEBUG)) {
702  }
703  return StatusCode::SUCCESS;
704 }
705 
706 
707 
709 // Finalize
711 
713 {
714 
715  dump(MSG::INFO, &m_counterTotal);
716 
717  return StatusCode::SUCCESS;
718 }
719 
721 // Dumps relevant information into the MsgStream
723 
725 {
726  msg(assign_level) <<std::endl;
727  MsgStream& out_msg=msg();
728  if (counter) dumpevent(out_msg ,*counter);
729  else dumptools(out_msg);
730  out_msg << endmsg;
731  return out_msg;
732 }
733 
735 // Dumps conditions information into the MsgStream
737 
738 MsgStream& InDet::SiSPSeededTrackFinder::dumptools(MsgStream& out) const
739 {
740  int n = 65-m_zvertexmaker.type().size();
741  std::string s1; for (int i=0; i<n; ++i) s1.append(" "); s1.append("|");
742  n = 65-m_seedsmaker.type().size();
743  std::string s2; for (int i=0; i<n; ++i) s2.append(" "); s2.append("|");
744  n = 65-m_trackmaker.type().size();
745  std::string s3; for (int i=0; i<n; ++i) s3.append(" "); s3.append("|");
746  n = 65-m_outputTracksKey.key().size();
747  std::string s4; for (int i=0; i<n; ++i) s4.append(" "); s4.append("|");
748 
749  std::string s5;
750  if (m_useZvertexTool) s5= "Yes"; else s5 = "No";
751  n = 65-s5.size(); for (int i=0; i<n; ++i) s5.append(" "); s5.append("|");
752 
753  out<<"|----------------------------------------------------------------"
754  <<"----------------------------------------------------|"
755  <<std::endl;
756  out<<"| Use primary vertices z-coordinates finding?| "<<s5
757  <<std::endl;
758  if (m_useZvertexTool) {
759  out<<"| Tool for primary vertices z-coordinates finding | "<<m_zvertexmaker.type()<<s1
760  <<std::endl;
761  }
762  out<<"| Tool for space points seeds finding | "<<m_seedsmaker.type()<<s2
763  <<std::endl;
764  out<<"| Tool for space points seeded track finding | "<<m_trackmaker.type()<<s3
765  <<std::endl;
766  out<<"| Location of output tracks | "<<m_outputTracksKey.key()<<s4
767  <<std::endl;
768  out<<"|----------------------------------------------------------------"
769  <<"----------------------------------------------------|"
770  <<std::endl;
771  return out;
772 }
773 
775 // Dumps event information into the ostream
777 
779 {
780  out<<"|-------------------------------------------------------------------";
781  out<<"---------------------------------|"
782  <<std::endl;
783  out<<"| Investigated "
784  <<std::setw(9)<<counter[kNSeeds]<<" space points seeds and found ";
785  out<<std::setw(9)<<counter[kNTracks];
786  if (m_ITKGeometry ) out<<" tracks using new strategy for ITK |"<<std::endl;
787  else if (m_useNewStrategy ) out<<" tracks using new strategy ("<<std::setw(2)<< m_nvertex <<") |"<<std::endl;
788  else if (m_useZBoundaryFinding) out<<" tracks using old strategy with Zb |"<<std::endl;
789  else out<<" tracks using old strategy |"<<std::endl;
790 
791  out<<"|-------------------------------------------------------------------";
792  out<<"---------------------------------|"
793  <<std::endl;
795  out<<"| Events "
796  <<std::setw(7)<<m_neventsTotal <<" without Z-vertz "
797  <<std::setw(7)<<m_neventsTotalV <<" with Z-vertex |"
798  <<std::endl;
799  out<<"| Problems "
800  <<std::setw(7)<<m_problemsTotal <<" without Z-vertz "
801  <<std::setw(7)<<m_problemsTotalV <<" with Z-vertex |"
802  <<std::endl;
803  out<<"|-------------------------------------------------------------------";
804  out<<"-----------------------------|"
805  <<std::endl;
806  }
807  return out;
808 }
809 
811 // Test is it good event for reconstruction (mainly for HI events)
813 
814 bool InDet::SiSPSeededTrackFinder::isGoodEvent(const EventContext& ctx) const {
815 
816  if ( not m_alwaysProtectAgainstBusyEvent ) { // if not enabled the protection is only applied to specific events
817  // Test MBTS information from calorimeter
818  //
819  if (not m_useMBTS) return true;
820 
822  if (not eventInfo->isEventFlagBitSet(xAOD::EventInfo::Background, xAOD::EventInfo::MBTSTimeDiffHalo) ) {
823  return true;
824  }
825  }
826 
827  // Test total number pixels space points
828  //
829  unsigned int nsp = 0;
830  if (not m_SpacePointsPixelKey.empty()) {
832  if (spacePointsPixel.isValid()) {
833  for (const SpacePointCollection* spc: *spacePointsPixel) {
834  nsp += spc->size();
835  }
836  if (static_cast<int>(nsp) > m_maxPIXsp) {
837  ATH_MSG_WARNING("Found more than "<<m_maxPIXsp<<" pixels space points in background event. Skip track finding");
838  return false;
839  }
840  }
841  }
842  // Test total number sct space points
843  //
844  nsp = 0;
845  if (not m_SpacePointsSCTKey.empty()) {
847  if (spacePointsSCT.isValid()) {
848  for (const SpacePointCollection* spc: *spacePointsSCT) {
849  nsp += spc->size();
850  }
851  if (static_cast<int>(nsp) > m_maxSCTsp) {
852  ATH_MSG_WARNING("Found more than "<<m_maxSCTsp<<" sct space points in background event. Skip track finding");
853  return false;
854  }
855  }
856  }
857 
858  return true;
859 }
860 
862 // Filer shared tracks
864 
865 void InDet::SiSPSeededTrackFinder::filterSharedTracks(std::multimap<double, Trk::Track*>& qualitySortedTracks) const
866 {
867  std::set<const Trk::PrepRawData*> clusters;
868 
869  std::vector<const Trk::PrepRawData*> freeClusters;
870  freeClusters.reserve(15);
871 
872  std::multimap<double, Trk::Track*>::iterator it_qualityAndTrack = qualitySortedTracks.begin();
873 
875  while (it_qualityAndTrack!=qualitySortedTracks.end()) {
876  freeClusters.clear();
877 
879 
880  int nClusters = 0;
882  for (const Trk::MeasurementBase* m: *((*it_qualityAndTrack).second->measurementsOnTrack())) {
883 
885  const Trk::PrepRawData* pr = (static_cast<const Trk::RIO_OnTrack*>(m))->prepRawData();
886  if (pr) {
888  ++nClusters;
890  if (clusters.find(pr)==it_clustersEnd) {
892  freeClusters.push_back(pr);
893  }
894  }
895  }
896 
898  int nFreeClusters = static_cast<int>(freeClusters.size());
899  if (nFreeClusters >= m_nfreeCut || nFreeClusters==nClusters) {
902  clusters.insert(freeClusters.begin(), freeClusters.end());
903  ++it_qualityAndTrack;
904  } else {
906  delete (*it_qualityAndTrack).second;
907  qualitySortedTracks.erase(it_qualityAndTrack++);
908  }
909  }
910 }
911 
912 
913 void InDet::SiSPSeededTrackFinder::filterSharedTracksFast(std::multimap<double, Trk::Track*>& qualitySortedTracks) const
914 {
915  std::set<const Trk::PrepRawData*> clusters;
916 
917  std::vector<const Trk::PrepRawData*> freeClusters;
918  freeClusters.reserve(15);
919 
920  std::multimap<double, Trk::Track*>::iterator it_qualityAndTrack = qualitySortedTracks.begin();
921 
923  while (it_qualityAndTrack!=qualitySortedTracks.end()) {
924  freeClusters.clear();
925 
927 
928  int nClusters = 0;
929  int nPixels = 0;
931  for (const Trk::TrackStateOnSurface* tsos: *((*it_qualityAndTrack).second->trackStateOnSurfaces())) {
932 
933  if(!tsos->type(Trk::TrackStateOnSurface::Measurement)) continue;
934  const Trk::FitQualityOnSurface fq = tsos->fitQualityOnSurface();
935  if(!fq) continue;
936  if(fq.numberDoF() == 2) ++nPixels;
937 
939  const Trk::MeasurementBase* mb = tsos->measurementOnTrack();
940  const Trk::RIO_OnTrack* ri = dynamic_cast<const Trk::RIO_OnTrack*>(mb);
941  if(!ri) continue;
942  const Trk::PrepRawData* pr = ri->prepRawData();
943  if (pr) {
945  ++nClusters;
947  if (clusters.find(pr)==it_clustersEnd) {
949  freeClusters.push_back(pr);
950  }
951  }
952  }
953 
955  clusters.insert(freeClusters.begin(), freeClusters.end());
956 
957  int nFreeClusters = static_cast<int>(freeClusters.size());
958  if( passEtaDepCuts( (*it_qualityAndTrack).second, nClusters, nFreeClusters, nPixels) ){
960  ++it_qualityAndTrack;
961  } else {
963  delete (*it_qualityAndTrack).second;
964  qualitySortedTracks.erase(it_qualityAndTrack++);
965  }
966  }
967 }
968 
970 // Fill z coordinate histogram
972 
974  const Trk::PerigeeSurface& beamPosPerigee,
975  std::vector<int>& numberHistogram,
976  std::vector<double>& zWeightedHistogram,
977  std::vector<double>& ptWeightedHistogram) const
978 {
979 
980  if (Tr->measurementsOnTrack()->size() < 10) return;
981 
982  const Trk::TrackParameters* paramsAtFirstSurface = Tr->trackStateOnSurfaces()->front()->trackParameters();
983  Amg::Vector3D position = paramsAtFirstSurface->position() ;
984  Amg::Vector3D momentum = paramsAtFirstSurface->momentum() ;
985 
987  constexpr double rSquare_max_forZHisto = 60.*60.;
988  if (position.x()*position.x()+position.y()*position.y() >= rSquare_max_forZHisto) return;
989 
990  double pT = sqrt(momentum.x()*momentum.x()+momentum.y()*momentum.y());
991  if (pT < m_pTcut) return;
992 
994  if (not TP.production(paramsAtFirstSurface)) return;
995 
996  double step;
998  if (not m_proptool->propagate(Gaudi::Hive::currentContext(),
999  TP, beamPosPerigee, TP, Trk::anyDirection, m_fieldprop, step, Trk::pion)) return;
1000 
1001  const AmgVector(5)& parsAtBeamSpot = TP.parameters();
1002  if (std::abs(parsAtBeamSpot[0]) > m_imcut) return;
1004  int z = static_cast<int>((parsAtBeamSpot[1]+m_zcut)*m_zstep);
1006  if (z >=0 and z < m_histsize) {
1008  ++numberHistogram[z];
1010  zWeightedHistogram[z] += parsAtBeamSpot[1];
1012  ptWeightedHistogram[z] += pT;
1013  }
1014 
1015 }
1016 
1018 // Find verteex z coordinates
1020 
1021 void InDet::SiSPSeededTrackFinder::findZvertex(std::list<Trk::Vertex>& vertexZList,
1022  std::pair<double, double> & zBoundaries,
1023  const std::vector<int>& numberHistogram,
1024  const std::vector<double>& zWeightedHistogram,
1025  const std::vector<double>& ptWeightedHistogram) const
1026 {
1027  zBoundaries = {1000., -1000};
1028 
1029  std::multimap<int ,double> vertexZ_sortedByNtracks;
1030  std::multimap<double,double> vertexZ_sortedBySumPt;
1031 
1032  int lastBin = m_histsize-1;
1033  int minBinContentSum = 3;
1034 
1036  for (int binIndex=1; binIndex<lastBin; ++binIndex) {
1037 
1039  int vertexNtracks = numberHistogram.at(binIndex-1)+numberHistogram.at(binIndex)+numberHistogram.at(binIndex+1);
1040 
1043  if (vertexNtracks>=minBinContentSum and (numberHistogram.at(binIndex) >= numberHistogram.at(binIndex-1) and numberHistogram.at(binIndex) >= numberHistogram.at(binIndex+1))) {
1045  double vertexZestimate = (zWeightedHistogram.at(binIndex-1)+zWeightedHistogram.at(binIndex)+zWeightedHistogram.at(binIndex+1))/static_cast<double>(vertexNtracks);
1046 
1049  if (vertexZestimate < zBoundaries.first) zBoundaries.first = vertexZestimate;
1050  if (vertexZestimate > zBoundaries.second) zBoundaries.second = vertexZestimate;
1051 
1052  if (m_useNewStrategy) {
1054  double vertexSumPt = ptWeightedHistogram.at(binIndex-1)+ptWeightedHistogram.at(binIndex)+ptWeightedHistogram.at(binIndex+1);
1055  vertexZ_sortedByNtracks.insert(std::make_pair(-vertexNtracks, vertexZestimate));
1056  vertexZ_sortedBySumPt.insert(std::make_pair(-vertexSumPt, vertexZestimate));
1057  }
1058  }
1059  }
1060 
1061  if (m_useNewStrategy) {
1062 
1063  std::set<double> leadingVertices;
1064  int n = 0;
1065  std::multimap<double, double>::iterator vertex_pt_and_z = vertexZ_sortedBySumPt.begin();
1066  for (std::pair<int, double> nTrackAndZ: vertexZ_sortedByNtracks) {
1068  if (n++ >= m_nvertex) break;
1071  leadingVertices.insert(nTrackAndZ.second);
1072  leadingVertices.insert((*vertex_pt_and_z++).second);
1073  }
1074 
1075  for (double v: leadingVertices) {
1076  vertexZList.emplace_back(Amg::Vector3D{0.,0.,v});
1077  }
1078  }
1080  if (zBoundaries.first > zBoundaries.second) {
1081  zBoundaries.first = -1000.;
1082  zBoundaries.second = +1000.;
1083  } else {
1085  zBoundaries.first -= 20.;
1086  zBoundaries.second += 20.;
1087  }
1088 }
1089 
1090 
1092 // Callback function - get the magnetic field /
1094 
1096 {
1097  // Build MagneticFieldProperties
1098  //
1099  if(m_fieldmode == "NoField") {
1101  } else {
1103  }
1104 }
1105 
1106 
1108 // Check if track passes eta-dependent cuts for fast tracking
1110 
1112  int nClusters,
1113  int nFreeClusters,
1114  int nPixels) const
1115 {
1116  Trk::TrackStates::const_iterator m = track->trackStateOnSurfaces()->begin();
1117  const Trk::TrackParameters* par = (*m)->trackParameters();
1118  if(!par) return false;
1119 
1120  double eta = std::abs(par->eta());
1121  if(nClusters < m_etaDependentCutsSvc->getMinSiHitsAtEta(eta)) return false;
1122  if(nFreeClusters < m_etaDependentCutsSvc->getMinSiNotSharedAtEta(eta)) return false;
1123  if(nClusters-nFreeClusters > m_etaDependentCutsSvc->getMaxSharedAtEta(eta)) return false;
1124  if(nPixels < m_etaDependentCutsSvc->getMinPixelHitsAtEta(eta)) return false;
1125 
1126  if(par->pT() < m_etaDependentCutsSvc->getMinPtAtEta(eta)) return false;
1127  if(!(*m)->type(Trk::TrackStateOnSurface::Perigee)) return true ;
1128  if(std::abs(par->localPosition()[0]) > m_etaDependentCutsSvc->getMaxPrimaryImpactAtEta(eta)) return false;
1129  return true;
1130 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
SiSpacePointsSeedMakerEventData.h
Trk::TrackStateOnSurface::trackParameters
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
InDet::SiSPSeededTrackFinder::m_evtKey
SG::ReadHandleKey< xAOD::EventInfo > m_evtKey
Definition: SiSPSeededTrackFinder.h:126
InDet::SiSPSeededTrackFinder::kNTracks
@ kNTracks
Definition: SiSPSeededTrackFinder.h:78
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
PESA::vertexSumPt
double vertexSumPt(const TrackCollection &tracks)
Definition: T2Vertex.cxx:71
InDet::SiSPSeededTrackFinder::dumpevent
MsgStream & dumpevent(MsgStream &out, const SiSPSeededTrackFinder::Counter_t &counter) const
Definition: SiSPSeededTrackFinder.cxx:778
Trk::TrackStateOnSurface::Perigee
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
Definition: TrackStateOnSurface.h:117
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
InDet::SiSPSeededTrackFinder::m_outputTracksKey
SG::WriteHandleKey< TrackCollection > m_outputTracksKey
Definition: SiSPSeededTrackFinder.h:136
InDet::SiSPSeededTrackFinder::kNSeeds
@ kNSeeds
Definition: SiSPSeededTrackFinder.h:78
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
InDet::ISiSpacePointsSeedMaker::PixelSeed
@ PixelSeed
Definition: ISiSpacePointsSeedMaker.h:136
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::MagneticFieldProperties
Definition: MagneticFieldProperties.h:31
InDet::SiSpacePointsSeedMakerEventData
Definition: SiSpacePointsSeedMakerEventData.h:49
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
InDet::SiSPSeededTrackFinder::m_seedsmaker
ToolHandle< ISiSpacePointsSeedMaker > m_seedsmaker
Definition: SiSPSeededTrackFinder.h:141
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
SG::ReadHandle< Trk::PRDtoTrackMap >
Trk::numberOfSCTDeadSensors
@ numberOfSCTDeadSensors
number of TRT hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:76
ROIPhiRZContainer
container for phi sorted ROIs defined by phi, r and z.
Definition: ROIPhiRZContainer.h:50
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
InDet::SiSPSeededTrackFinder::m_alwaysProtectAgainstBusyEvent
BooleanProperty m_alwaysProtectAgainstBusyEvent
Definition: SiSPSeededTrackFinder.h:104
InDet::SiSPSeededTrackFinder::m_histsize
IntegerProperty m_histsize
Definition: SiSPSeededTrackFinder.h:108
Trk::Track::info
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::SiSPSeededTrackFinder::dump
MsgStream & dump(MSG::Level lvl, const SiSPSeededTrackFinder::Counter_t *) const
Definition: SiSPSeededTrackFinder.cxx:724
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
InDet::SiSPSeededTrackFinder::m_ITKGeometry
BooleanProperty m_ITKGeometry
Definition: SiSPSeededTrackFinder.h:100
InDet::PatternHoleSearchOutcome::nPixelDeads
int nPixelDeads
Definition: SiTrajectory_xk.h:37
InDet::SiSPSeededTrackFinder::m_useZvertexTool
BooleanProperty m_useZvertexTool
Definition: SiSPSeededTrackFinder.h:95
InDet::SiSPSeededTrackFinder::m_pTcut
double m_pTcut
Definition: SiSPSeededTrackFinder.h:119
InDet::SiSPSeededTrackFinder::m_nfreeCut
IntegerProperty m_nfreeCut
Definition: SiSPSeededTrackFinder.h:107
InDet::SiSPSeededTrackFinder::m_etaDependentCutsSvc
ServiceHandle< IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc
service to get cut values depending on different variable
Definition: SiSPSeededTrackFinder.h:157
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
M_PI
#define M_PI
Definition: ActiveFraction.h:11
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
ReadCellNoiseFromCoolCompare.s4
s4
Definition: ReadCellNoiseFromCoolCompare.py:381
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::SiSPSeededTrackFinder::m_trackSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition: SiSPSeededTrackFinder.h:145
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::ReadHandleKey< Trk::PRDtoTrackMap >
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
InDet::SiSPSeededTrackFinder::filterSharedTracksFast
void filterSharedTracksFast(std::multimap< double, Trk::Track * > &scoredTracks) const
Definition: SiSPSeededTrackFinder.cxx:913
xAOD::EventInfo_v1::Background
@ Background
The beam background detectors.
Definition: EventInfo_v1.h:340
InDet::SiSPSeededTrackFinder::m_maxNumberSeeds
IntegerProperty m_maxNumberSeeds
Definition: SiSPSeededTrackFinder.h:103
InDet::SiSPSeededTrackFinder::m_imcut
double m_imcut
Definition: SiSPSeededTrackFinder.h:120
InDet::PatternHoleSearchOutcome::nSCTDeads
int nSCTDeads
Definition: SiTrajectory_xk.h:38
Trk::numberOfSCTHoles
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:73
InDet::SiSPSeededTrackFinder::m_useITkConvSeeded
BooleanProperty m_useITkConvSeeded
Definition: SiSPSeededTrackFinder.h:101
InDet::SiSPSeededTrackFinder::m_useMBTS
BooleanProperty m_useMBTS
Definition: SiSPSeededTrackFinder.h:97
InDet::SiSPSeededTrackFinder::m_useZBoundaryFinding
BooleanProperty m_useZBoundaryFinding
Definition: SiSPSeededTrackFinder.h:99
InDet::SiSPSeededTrackFinder::m_prdToTrackMap
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
Definition: SiSPSeededTrackFinder.h:129
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
InDet::SiSPSeededTrackFinder::execute
virtual StatusCode execute(const EventContext &ctx) const override
Execute.
Definition: SiSPSeededTrackFinder.cxx:141
InDet::SiSPSeededTrackFinder::m_trackmaker
ToolHandle< ISiTrackMaker > m_trackmaker
Definition: SiSPSeededTrackFinder.h:143
InDet::SiSPSeededTrackFinder::SiSPSeededTrackFinder
SiSPSeededTrackFinder(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition: SiSPSeededTrackFinder.cxx:65
Trk::FastField
@ FastField
call the fast field access method of the FieldSvc
Definition: MagneticFieldMode.h:20
InDet::SiSPSeededTrackFinder::m_nvertex
IntegerProperty m_nvertex
Definition: SiSPSeededTrackFinder.h:109
Trk::FitQualityOnSurface
Definition: FitQualityOnSurface.h:19
InDet::SiSPSeededTrackFinder::m_deltaEta
DoubleProperty m_deltaEta
Definition: SiSPSeededTrackFinder.h:111
InDet::SiSPSeededTrackFinder::m_fieldmode
StringProperty m_fieldmode
Definition: SiSPSeededTrackFinder.h:114
InDet::SiSPSeededTrackFinder::m_problemsTotal
std::atomic_int m_problemsTotal
Number events with number seeds > maxNumber.
Definition: SiSPSeededTrackFinder.h:166
InDet::SiSPSeededTrackFinder::m_SpacePointsSCTKey
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsSCTKey
Definition: SiSPSeededTrackFinder.h:127
Trk::PatternTrackParameters::production
bool production(const ParametersBase< 5, Trk::Charged > *)
Definition: PatternTrackParameters.cxx:42
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
RoiDescriptor::push_back
void push_back(const IRoiDescriptor *roi)
add a RoiDescriptor
Definition: RoiDescriptor.h:157
InDet::SiSPSeededTrackFinder::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: SiSPSeededTrackFinder.h:132
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
InDet::SiSpacePointsSeed
Definition: SiSpacePointsSeed.h:30
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
InDet::SiSPSeededTrackFinder::m_maxSCTsp
IntegerProperty m_maxSCTsp
Definition: SiSPSeededTrackFinder.h:106
InDet::SiSPSeededTrackFinder::magneticFieldInit
void magneticFieldInit()
Definition: SiSPSeededTrackFinder.cxx:1095
InDet::SiTrackMakerEventData_xk::setPRDtoTrackMap
void setPRDtoTrackMap(const Trk::PRDtoTrackMap *prd_to_track_map)
Definition: SiTrackMakerEventData_xk.h:75
beamspotman.n
n
Definition: beamspotman.py:731
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
InDet::SiSPSeededTrackFinder::m_neventsTotalV
std::atomic_int m_neventsTotalV
Number events.
Definition: SiSPSeededTrackFinder.h:165
InDet::SiSPSeededTrackFinder::m_proptool
PublicToolHandle< Trk::IPatternParametersPropagator > m_proptool
Definition: SiSPSeededTrackFinder.h:144
Trk::numberOfPixelDeadSensors
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:65
InDet::SiSPSeededTrackFinder::oldStrategy
StatusCode oldStrategy(const EventContext &ctx) const
this method performs the track finding using the old strategy
Definition: SiSPSeededTrackFinder.cxx:175
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
TileDCSDataPlotter.pr
pr
Definition: TileDCSDataPlotter.py:922
RoiDescriptor.h
InDet::PatternHoleSearchOutcome::nSCTDoubleHoles
int nSCTDoubleHoles
Definition: SiTrajectory_xk.h:36
DataVector::front
const T * front() const
Access the first element in the collection as an rvalue.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
RoiDescriptor::clear
void clear()
clear the vector
Definition: RoiDescriptor.h:151
InDet::SiSPSeededTrackFinder::dumptools
MsgStream & dumptools(MsgStream &out) const
Definition: SiSPSeededTrackFinder.cxx:738
RoiDescriptor
Describes the Region of Ineterest geometry It has basically 9 parameters.
Definition: RoiDescriptor.h:40
InDet::ISiSpacePointsSeedMaker::StripSeed
@ StripSeed
Definition: ISiSpacePointsSeedMaker.h:136
IDPVM::binIndex
unsigned int binIndex(const T &val, const std::vector< T > &partitions)
general utility function to return bin index given a value and the upper endpoints of each bin
Definition: InDetPhysValMonitoringUtilities.h:43
TrackSummary.h
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
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
Trk::FitQualityOnSurface::numberDoF
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition: FitQuality.h:60
InDet::PatternHoleSearchOutcome::nSCTHoles
int nSCTHoles
Definition: SiTrajectory_xk.h:35
InDet::PatternHoleSearchOutcome::nPixelHoles
int nPixelHoles
Definition: SiTrajectory_xk.h:34
InDet::SiSPSeededTrackFinder::m_deltaZ
DoubleProperty m_deltaZ
Definition: SiSPSeededTrackFinder.h:113
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SiTrackMakerEventData_xk.h
InDet::SiSPSeededTrackFinder::filterSharedTracks
void filterSharedTracks(std::multimap< double, Trk::Track * > &scoredTracks) const
cleans up the collection of quality filtered tracks.
Definition: SiSPSeededTrackFinder.cxx:865
SCT
Definition: SCT_ChipUtils.h:14
Trk::numberOfPixelHoles
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:59
xAOD::EventInfo_v1::MBTSTimeDiffHalo
@ MBTSTimeDiffHalo
Definition: EventInfo_v1.h:354
InDet::ExtendedSiTrackMakerEventData_xk
Definition: SiSPSeededTrackFinder.cxx:161
Trk::PrepRawData
Definition: PrepRawData.h:62
InDet::SiSPSeededTrackFinder::finalize
virtual StatusCode finalize() override
Definition: SiSPSeededTrackFinder.cxx:712
Trk::MeasurementBase
Definition: MeasurementBase.h:58
InDet::SiSPSeededTrackFinder::passEtaDepCuts
bool passEtaDepCuts(const Trk::Track *track, int nClusters, int nFreeClusters, int nPixels) const
Definition: SiSPSeededTrackFinder.cxx:1111
Trk::NoField
@ NoField
Field is set to 0., 0., 0.,.
Definition: MagneticFieldMode.h:18
InDet::PatternHoleSearchOutcome
Helper struct for hole search results from the pattern recognition.
Definition: SiTrajectory_xk.h:33
InDet::SiSPSeededTrackFinder::m_SpacePointsPixelKey
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsPixelKey
Definition: SiSPSeededTrackFinder.h:128
InDet::SiSPSeededTrackFinder::m_deltaPhi
DoubleProperty m_deltaPhi
Definition: SiSPSeededTrackFinder.h:112
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
InDet::SiSPSeededTrackFinder::m_zcut
DoubleProperty m_zcut
Definition: SiSPSeededTrackFinder.h:110
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
RIO_OnTrack.h
InDet::SiSPSeededTrackFinder::isGoodEvent
bool isGoodEvent(const EventContext &ctx) const
EventContext is used to specify which event.
Definition: SiSPSeededTrackFinder.cxx:814
InDet::SiSPSeededTrackFinder::initialize
virtual StatusCode initialize() override
Initialisation.
Definition: SiSPSeededTrackFinder.cxx:73
InDet::SiSPSeededTrackFinder::m_zvertexmaker
ToolHandle< ISiZvertexMaker > m_zvertexmaker
Definition: SiSPSeededTrackFinder.h:142
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
SiSPSeededTrackFinder.h
InDet::SiSPSeededTrackFinder::m_maxPIXsp
IntegerProperty m_maxPIXsp
Definition: SiSPSeededTrackFinder.h:105
InDet::SiSPSeededTrackFinder::m_writeHolesFromPattern
BooleanProperty m_writeHolesFromPattern
Definition: SiSPSeededTrackFinder.h:96
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::RIO_OnTrack::prepRawData
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
InDet::ExtendedSiTrackMakerEventData_xk::m_prdToTrackMap
SG::ReadHandle< Trk::PRDtoTrackMap > m_prdToTrackMap
Definition: SiSPSeededTrackFinder.cxx:170
InDet::SiSPSeededTrackFinder::m_mbtsKey
SG::ReadDecorHandleKey< xAOD::EventInfo > m_mbtsKey
Definition: SiSPSeededTrackFinder.h:134
InDet::SiSPSeededTrackFinder::itkFastTrackingStrategy
StatusCode itkFastTrackingStrategy(const EventContext &ctx) const
EventContext is used to specify which event.
Definition: SiSPSeededTrackFinder.cxx:446
InDet::SiSPSeededTrackFinder::m_fieldprop
Trk::MagneticFieldProperties m_fieldprop
Definition: SiSPSeededTrackFinder.h:151
InDet::SiSPSeededTrackFinder::m_regsel_strip
ToolHandle< IRegSelTool > m_regsel_strip
Definition: SiSPSeededTrackFinder.h:146
Trk::Track::measurementsOnTrack
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:178
python.PyAthena.v
v
Definition: PyAthena.py:157
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
InDet::SiSPSeededTrackFinder::m_useNewStrategy
BooleanProperty m_useNewStrategy
Definition: SiSPSeededTrackFinder.h:98
InDet::SiCombinatorialTrackFinderData_xk::findPatternHoleSearchOutcome
bool findPatternHoleSearchOutcome(Trk::Track *theTrack, InDet::PatternHoleSearchOutcome &outcome) const
Methods used to associate the hole search outcome to tracks without having to modify the EDM.
Definition: SiCombinatorialTrackFinderData_xk.cxx:67
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TRT_PAI_physicsConstants::mb
const double mb
1mb to cm2
Definition: TRT_PAI_physicsConstants.h:15
Trk::PatternTrackParameters
Definition: PatternTrackParameters.h:38
InDet::SiSPSeededTrackFinder::itkConvStrategy
StatusCode itkConvStrategy(const EventContext &ctx) const
EventContext is used to specify which event.
Definition: SiSPSeededTrackFinder.cxx:562
SpacePointCollection
Definition: SpacePointCollection.h:40
LVL1TGCTrigger::STRIP
@ STRIP
Definition: TGCNumbering.h:52
DEBUG
#define DEBUG
Definition: page_access.h:11
ReadCellNoiseFromCoolCompare.s2
s2
Definition: ReadCellNoiseFromCoolCompare.py:379
InDet::SiSPSeededTrackFinder::newStrategy
StatusCode newStrategy(const EventContext &ctx) const
this method performs the track finding using the new strategy
Definition: SiSPSeededTrackFinder.cxx:260
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::ExtendedSiTrackMakerEventData_xk::ExtendedSiTrackMakerEventData_xk
ExtendedSiTrackMakerEventData_xk(const SG::ReadHandleKey< Trk::PRDtoTrackMap > &key)
Definition: SiSPSeededTrackFinder.cxx:163
InDet::SiSPSeededTrackFinder::fillZHistogram
void fillZHistogram(const Trk::Track *Tr, const Trk::PerigeeSurface &beamlinePerigee, std::vector< int > &numberWeightedhistogram, std::vector< double > &zWeightedHistogram, std::vector< double > &ptWeightedHistogram) const
fills three z0 histograms (non-weighted, weighted by z, and weighted by pt) with the track z at the b...
Definition: SiSPSeededTrackFinder.cxx:973
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
LArCellBinning.step
step
Definition: LArCellBinning.py:158
RoiDescriptor::setComposite
void setComposite(bool b=true)
Definition: RoiDescriptor.h:138
InDet::SiTrackMakerEventData_xk
Definition: SiTrackMakerEventData_xk.h:43
PatternTrackParameters.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
InDet::SiSPSeededTrackFinder::m_caloClusterROIKey
SG::ReadHandleKey< ROIPhiRZContainer > m_caloClusterROIKey
Definition: SiSPSeededTrackFinder.h:130
InDet::SiSPSeededTrackFinder::Counter_t
Definition: SiSPSeededTrackFinder.h:83
InDet::SiSPSeededTrackFinder::m_zstep
double m_zstep
Definition: SiSPSeededTrackFinder.h:121
InDet::SiSPSeededTrackFinder::m_neventsTotal
std::atomic_int m_neventsTotal
Number events.
Definition: SiSPSeededTrackFinder.h:164
InDet::SiSPSeededTrackFinder::m_doFastTracking
BooleanProperty m_doFastTracking
Definition: SiSPSeededTrackFinder.h:102
test_pyathena.counter
counter
Definition: test_pyathena.py:15
InDet::SiSPSeededTrackFinder::m_problemsTotalV
std::atomic_int m_problemsTotalV
Number events with number seeds > maxNumber.
Definition: SiSPSeededTrackFinder.h:167
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
Trk::numberOfSCTDoubleHoles
@ numberOfSCTDoubleHoles
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:75
Trk::TrackInfo::trackProperties
bool trackProperties(const TrackProperties &property) const
Access methods for track properties.
InDet::SiSPSeededTrackFinder::findZvertex
void findZvertex(std::list< Trk::Vertex > &vertexList, std::pair< double, double > &zBoundaries, const std::vector< int > &numberWeightedhistogram, const std::vector< double > &zWeightedHistogram, const std::vector< double > &ptWeightedHistogram) const
estimates a set of vertex positions and a z interval for the second track finding pass using the inpu...
Definition: SiSPSeededTrackFinder.cxx:1021
Trk::FitQualityOnSurface::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
ROIPhiRZ
Definition: ROIPhiRZContainer.h:19
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
InDet::SiTrackMakerEventData_xk::combinatorialData
SiCombinatorialTrackFinderData_xk & combinatorialData()
Definition: SiTrackMakerEventData_xk.cxx:76