ATLAS Offline Software
TRT_SeededTrackFinder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // Implementation file for class InDet::TRT_SeededTrackFinder
8 // (c) ATLAS Detector software
11 // Version 1.0 02/20/2006 Thomas Koffas
12 // modified by Markus ELsing
14 
15 #include "GaudiKernel/MsgStream.h"
17 #include "TrkTrack/TrackInfo.h"
19 
22 
24 
27 
29 
30 #include <memory>
31 #include <cmath>
32 using namespace std;
33 
35 // Constructor
37 
39 (const std::string& name, ISvcLocator* pSvcLocator)
40  : AthReentrantAlgorithm(name, pSvcLocator)
41 { }
42 
44 // Initialisation
46 
48 {
49 
50  //Get the TRT seeded track maker tool
51  //
52  ATH_CHECK(m_trackmaker.retrieve());
53 
54  //Get the refitting tool
55  //
56  ATH_CHECK( m_fitterTool.retrieve( DisableTool{ !m_doRefit } ));
57  ATH_CHECK( m_extrapolator.retrieve( DisableTool{ !m_SiExtensionCuts } ));
59 
60  // optional PRD to track association map
62 
63  ATH_CHECK( m_trackSummaryTool.retrieve( DisableTool{ m_trackSummaryTool.name().empty() } ) );
64 
65  // Get tool for track extension to TRT
66  //
67  ATH_CHECK( m_trtExtension.retrieve( DisableTool{ !m_doExtension} ));
68 
69 
70  ATH_CHECK( m_SegmentsKey.initialize()) ;
71  ATH_CHECK( m_outTracksKey.initialize());
72 
74 
75  if(m_caloSeededRoI){
76  ATH_CHECK( m_regionSelector.retrieve());
77  } else {
78  m_regionSelector.disable();
79  }
80 
81  // Get output print level
82  //
83  if(msgLvl(MSG::DEBUG)) {
85  }
86  //Global counters. See the include file for definitions
87  m_totalStat = Stat_t();
88  return StatusCode::SUCCESS;
89 }
90 
91 namespace InDet {
93  public:
94  unsigned int size() const {
95  return m_prepRawDataTrackMap.size();
96  }
97  };
98 
100  {
101  public:
103  if (!key.key().empty()) {
106  }
107  }
108  private:
109  void dummy() {}
111  };
112 }
113 
115 // Execute
117 StatusCode
118 InDet::TRT_SeededTrackFinder::execute(const EventContext& ctx) const{
119  //Counters. See the include file for definitions
120  Stat_t ev_stat;
121  // counter
122  int nTrtSegCur = 0;
124  if(!segments.isValid()){
125  ATH_MSG_FATAL ("No segment with name " << segments.name() << " found in StoreGate!");
126  return StatusCode::FAILURE;
127  } else {
128  ATH_MSG_DEBUG ("Found segments collection " << segments.name() << " in StoreGate!");
129  }
130  // number of segments + statistics
131  ev_stat.m_counter[Stat_t::kNTrtSeg] = int(segments->size());
132  ATH_MSG_DEBUG ("TRT track container size " << ev_stat.m_counter[Stat_t::kNTrtSeg]);
133  if(ev_stat.m_counter[Stat_t::kNTrtSeg]>m_MaxSegNum) {
134  ATH_MSG_DEBUG ("TRT track container size huge; will process event partially if number of max segments reached !!!");
135  }
136  // Event dependent data of SiCombinatorialTrackFinder_xk
138  std::unique_ptr<InDet::ITRT_SeededTrackFinder::IEventData> event_data_p;
139  if(m_caloSeededRoI ) {
141  std::unique_ptr<RoiDescriptor> roiComp = std::make_unique<RoiDescriptor>(true);
142  if (calo_rois.isValid()) {
143  RoiDescriptor * roi =nullptr;
145  double beamZ = beamSpotHandle->beamVtx().position().z();
146  roiComp->clear();
147  roiComp->setComposite();
148  for (const ROIPhiRZ &the_roi : *calo_rois) {
149  double eta = the_roi.eta();
150  double phi = the_roi.phi();
151  double roiPhiMin = phi -m_deltaPhi;
152  double roiPhiMax = phi +m_deltaPhi;
153  double roiEtaMin = eta -m_deltaEta;
154  double roiEtaMax = eta +m_deltaEta;
155  double roiZMin = beamZ -m_deltaZ;
156  double roiZMax = beamZ +m_deltaZ;
157  roi = new RoiDescriptor( eta, roiEtaMin, roiEtaMax,phi, roiPhiMin ,roiPhiMax, beamZ, roiZMin,roiZMax);
158  roiComp->push_back(roi);
159  }
160 
161  }
162  std::vector<IdentifierHash> listOfSCTIds;
163  std::vector<IdentifierHash> listOfPixIds;
164 
165  m_regionSelector->lookup(ctx)->HashIDList( *roiComp, listOfSCTIds );
166 
167  event_data_p = m_trackmaker->newRegion(ctx, combinatorialData, listOfPixIds, listOfSCTIds);
168  } else {
169  event_data_p = m_trackmaker->newEvent(ctx, combinatorialData);
170  }
171 
172  std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData> ext_event_data_p( m_trtExtension->newEvent(ctx) );
173  std::unique_ptr<TrackCollection> outTracks = std::make_unique<TrackCollection>();
174  std::vector<Trk::Track*> tempTracks; //Temporary track collection
175  tempTracks.reserve(128);
176  // loop over event
177  ATH_MSG_DEBUG ("Begin looping over all TRT segments in the event");
179  Trk::SegmentCollection::const_iterator isegEnd = segments->end();
181  for(; iseg != isegEnd; ++ iseg) {
182  // Get the track segment
183  const Trk::TrackSegment *trackTRT = dynamic_cast<const Trk::TrackSegment*>(*iseg);
184  if(!trackTRT){
185  ATH_MSG_ERROR ("No pointer to segment !");
186  continue;
187  } else {
188  // the segment finder is applying a TRT(eta) cut and a pt preselection, so we don't do that here
189  //Ask for at least 10 TRT hits in order to process
190  if(trackTRT->numberOfMeasurementBases() < m_minTRTonSegment) {
191  ATH_MSG_DEBUG ("TRT segment fails nTRT hit cut, reject.");
192  // statistics
193  ev_stat.m_counter[Stat_t::kNTrtFailSel]++;
194  } else {
195  // do we continue to process ?
196  nTrtSegCur++;
197  if(nTrtSegCur>=m_MaxSegNum) {
198  ATH_MSG_DEBUG ("====> Reached maximal number of segments in event, stop !!!");
199  // statistics
200  ev_stat.m_counter[Stat_t::kNTrtLimit]++;
201  break;
202  }
203  // Get the number of the TRT track segment ROTs
204  ATH_MSG_DEBUG ("=> New segment to process, number Of TRT ROTs : " << (trackTRT->numberOfMeasurementBases()));
205  // statistics
206  ev_stat.m_counter[Stat_t::Stat_t::kNTrtSegGood]++;
207  // ok, call track maker and get list of possible track candidates
208  std::list<Trk::Track*> trackSi = m_trackmaker->getTrack(ctx, *event_data_p, *trackTRT); //Get the possible Si extensions
209  if (trackSi.empty()) {
210  ATH_MSG_DEBUG ("No Si track candidates associated to the TRT track ");
211  // statistics
212  ev_stat.m_counter[Stat_t::kNTrtNoSiExt]++;
213  // obsolete backup of TRT only
214  if(m_saveTRT && trackTRT->numberOfMeasurementBases() > m_minTRTonly){
216  Trk::Track* trtSeg = nullptr;trtSeg = segToTrack(ctx, *trackTRT);
217  if(!trtSeg) {
218  ATH_MSG_DEBUG ("Failed to make a track out of the TRT segment!");
219  continue;
220  }
221  // statistics
222  ev_stat.m_counter[Stat_t::kNBckTrk]++; ev_stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt]++;
223  // add track to output list
224  outTracks->push_back(trtSeg);
225  }
226  continue;
227  } else {
228  // Found useful extensions
229  ATH_MSG_DEBUG ("Found " << (trackSi.size()) << " Si tracks associated to the TRT track ");
230  // Merge the resolved Si extensions with the original TRT track segment
231  std::list<Trk::Track*>::const_iterator itt = trackSi.begin();
232  std::list<Trk::Track*>::const_iterator ittEnd = trackSi.end();
233  for (; itt != ittEnd ; ++itt){
234  tempTracks.push_back(*itt);
235  // get list of TSOS
236  const Trk::TrackStates* temptsos = (*itt)->trackStateOnSurfaces();
237  if (!temptsos) {
238  ATH_MSG_DEBUG ("Silicon extension empty ???");
239  continue;
240  }
241  // Add the track to the list of tracks in the event
242  ATH_MSG_DEBUG ("Silicon extension found has length of : " << temptsos->size());
243  // do we do a preselection ?
244  if (m_SiExtensionCuts) {
245  // get parameters without errors
246  auto input = (*itt)->trackParameters()->front()->uniqueClone();
247  // cuts on parameters
248  if (std::abs(input->pT()) < m_minPt) {
249  ATH_MSG_DEBUG ("Track pt < "<<m_minPt<<", reject it");
250  // statistics
251  ev_stat.m_counter[Stat_t::kNExtCut]++;
252  continue;
253  }
254  if (std::abs(input->eta()) > m_maxEta) {
255  ATH_MSG_DEBUG ("Track eta > "<<m_maxEta<<", reject it");
256  // statistics
257  ev_stat.m_counter[Stat_t::kNExtCut]++;
258  continue;
259  }
260  // --- beam spot position
261  Amg::Vector3D beamSpotPosition(0,0,0);
262  if (m_SiExtensionCuts){
264  beamSpotPosition = beamSpotHandle->beamVtx().position();
265  }
266  // --- create surface
267  Trk::PerigeeSurface perigeeSurface(beamSpotPosition);
268 
269  // uses perigee on track or extrapolates, no material in any case, we cut on impacts
270  std::unique_ptr<const Trk::TrackParameters> parm =
271  m_extrapolator->extrapolateDirectly(
272  ctx, *input, perigeeSurface);
273  std::unique_ptr<const Trk::Perigee> extrapolatedPerigee = nullptr;
274  if (parm && parm->associatedSurface().type() == Trk::SurfaceType::Perigee) {
275  extrapolatedPerigee.reset(static_cast<const Trk::Perigee*>(parm.release()));
276  }
277  if (!extrapolatedPerigee) {
278  ATH_MSG_WARNING("Extrapolation of perigee failed, this should never happen" );
279  // statistics
280  ev_stat.m_counter[Stat_t::kNExtCut]++;
281  continue;
282  }
283 
284  ATH_MSG_VERBOSE ("extrapolated perigee: "<<*extrapolatedPerigee);
285  if (std::abs(extrapolatedPerigee->parameters()[Trk::d0]) > m_maxRPhiImp) {
286  ATH_MSG_DEBUG ("Track Rphi impact > "<<m_maxRPhiImp<<", reject it");
287  // statistics
288  ev_stat.m_counter[Stat_t::kNExtCut]++;
289  continue;
290  }
291  if (std::abs(extrapolatedPerigee->parameters()[Trk::z0]) > m_maxZImp) {
292  ATH_MSG_DEBUG ("Track Z impact > "<<m_maxZImp<<", reject it");
293  // statistics
294  ev_stat.m_counter[Stat_t::kNExtCut]++;
295  continue;
296  }
297  }
298 
299  // do re run a Track extension into TRT ?
300  Trk::Track* globalTrackNew = nullptr;
301  // do we have 4 and extension is enabled ?
302  if(int(temptsos->size())>=4 && m_doExtension){
303  // Add the track to the list of tracks in the event
304  ATH_MSG_DEBUG ("Try to improve TRT calling extension tool.");
305  // statistics
306  ev_stat.m_counter[Stat_t::Stat_t::kNTrtExtCalls]++;
307  // call extension tool
308  std::vector<const Trk::MeasurementBase*>& tn =
309  m_trtExtension->extendTrack(ctx, *(*itt), *ext_event_data_p, map);
310  if (tn.empty()) {
311  // Fallback if extension failed
312  ATH_MSG_DEBUG ("No new segment found, use input segment as fallback.");
313  // statistics
314  ev_stat.m_counter[Stat_t::Stat_t::kNTrtExtFail]++;
315  // merge Si with input track segments
316  globalTrackNew = mergeSegments(**itt,*trackTRT);
317  } else if (!m_rejectShortExten ||
318  tn.size() >= trackTRT->numberOfMeasurementBases()) {
319  // Use the extension to instead of the segment
320  ATH_MSG_DEBUG ("Successful extension, number of TRT hits : " << tn.size() << " was : " << (trackTRT->numberOfMeasurementBases()));
321  // merge the extension with the Si track
322  globalTrackNew = mergeExtension(**itt,tn);
323  // Add the track to the list of tracks in the event
324  ATH_MSG_DEBUG ("Merged extension with Si segment");
325  // statistics
326  ev_stat.m_counter[Stat_t::kNTrtExt]++;
327  // clean up
328  std::vector<const Trk::MeasurementBase*>::const_iterator iv, ive=tn.end();
329  for(iv=tn.begin(); iv!=ive; ++iv) delete (*iv);
330  } else {
331  // Extension is shorter, let's fall back onto the original
332  ATH_MSG_DEBUG ("Extension too short, number of TRT hits : " << tn.size() << " was : " << (trackTRT->numberOfMeasurementBases()) << ". Use Segement !");
333  // merge segments
334  globalTrackNew = mergeSegments(**itt,*trackTRT);
335  // Add the track to the list of tracks in the event
336  ATH_MSG_DEBUG ("Merged TRT segment with Si segment");
337  // statistics
338  ev_stat.m_counter[Stat_t::Stat_t::kNTrtExtBad]++;
339  // clean up
340  std::vector<const Trk::MeasurementBase*>::const_iterator iv, ive=tn.end();
341  for(iv=tn.begin(); iv!=ive; ++iv) delete (*iv);
342  }
343  } else {
344  // no extension tool, jsut add the two
345  ATH_MSG_DEBUG ("Do not try to extend Si track, merging it with input TRT.");
346  // merge segments
347  globalTrackNew = mergeSegments(**itt,*trackTRT);
348  }
349  // do we have an track candidate ?
350  if(!globalTrackNew){
351  ATH_MSG_DEBUG ("Failed to merge TRT+Si track segment !");
352  if(m_saveTRT && trackTRT->numberOfMeasurementBases() > m_minTRTonly) {
353  Trk::Track* trtSeg = nullptr;trtSeg = segToTrack(ctx, *trackTRT);
354  if(!trtSeg){
355  ATH_MSG_DEBUG ("Failed to make a track out of the TRT segment!");
356  continue;
357  }
358  ATH_MSG_DEBUG ("Add TRT only to output list");
359  // statistis
360  ev_stat.m_counter[Stat_t::kNBckTrk]++; ev_stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt]++;
361  // add it to output list
362  if (m_trackSummaryTool.isEnabled()) {
363  m_trackSummaryTool->computeAndReplaceTrackSummary(*trtSeg,
364  false /* DO NOT suppress hole search*/);
365  }
366  outTracks->push_back(trtSeg);
367  }
368  } else {
369  ATH_MSG_DEBUG ("Save merged TRT+Si track segment!");
370  // statistics
371  ev_stat.m_counter[Stat_t::kNBckTrk]++; ev_stat.m_counter[Stat_t::Stat_t::kNBckTrkSi]++;
372  // add it to output list
373  if (m_trackSummaryTool.isEnabled()) {
374  m_trackSummaryTool->computeAndReplaceTrackSummary(*globalTrackNew,
375  false /* DO NOT suppress hole search*/);
376  }
377  outTracks->push_back(globalTrackNew);
378  }
379  }
380  }
381  }
382  }
383  }
384  // further debugging of results
385  if(m_doStat){
386  Analyze(outTracks.get());
387  }
388  if (SG::WriteHandle<TrackCollection>(m_outTracksKey,ctx).record(std::move(outTracks)).isFailure()){
389  ATH_MSG_ERROR("Failed to record " << m_outTracksKey.key());
390  return StatusCode::FAILURE;
391  }
392  // Update the total counters
393  {
394  std::lock_guard<std::mutex> lock(m_statMutex);
395  m_totalStat += ev_stat;
396  }
397 
398  for (auto *p : tempTracks){
399  delete p;
400  }
401  m_trackmaker->endEvent(*event_data_p);
402 
403  //Print common event information
404  if(msgLvl(MSG::DEBUG)){
405  dumpevent(msg(MSG::DEBUG), ev_stat);
406  }
407 
408  return StatusCode::SUCCESS;
409 }
410 
412 // Finalize
414 
416 {
417  if(msgLvl(MSG::INFO)){
418  msg(MSG::INFO) << "\n";
419  dumpevent(msg(MSG::INFO), m_totalStat);
420  msg(MSG::INFO) << endmsg;
421  }
422  return StatusCode::SUCCESS;
423 }
424 
425 
427 // Dumps conditions information into the MsgStream
429 
430 MsgStream& InDet::TRT_SeededTrackFinder::dumptools( MsgStream& out ) const
431 {
432  int n = 65-m_trackmaker.type().size();
433  std::string s1; for(int i=0; i<n; ++i) s1.append(" "); s1.append("|");
434  n = 65-m_fitterTool.type().size();
435  std::string s2; for(int i=0; i<n; ++i) s2.append(" "); s2.append("|");
436  n = 65-m_trtExtension.type().size();
437  std::string s3; for(int i=0; i<n; ++i) s3.append(" "); s3.append("|");
438  n = 65-m_SegmentsKey.key().size();
439  std::string s4; for(int i=0; i<n; ++i) s4.append(" "); s4.append("|");
440  n = 65-m_outTracksKey.key().size();
441  std::string s5; for(int i=0; i<n; ++i) s5.append(" "); s5.append("|");
442 
443  out<<"|----------------------------------------------------------------------"
444  <<"-------------------|"
445  <<std::endl;
446  out<<"| Tool for TRT seeded track finding | "<<m_trackmaker.type() <<s1<<std::endl;
447  out<<"| Tool for final track refitting | "<<m_fitterTool.type() <<s2<<std::endl;
448  out<<"| Tool for TRT trac extension | "<<m_trtExtension.type() <<s3<<std::endl;
449  out<<"| Location of input tracks | "<<m_SegmentsKey.key() <<s4<<std::endl;
450  out<<"| Location of output tracks | "<<m_outTracksKey.key() <<s5<<std::endl;
451  out<<"|----------------------------------------------------------------------"
452  <<"-------------------|"
453  <<std::endl;
454  return out;
455 }
456 
458 // Dumps event information into the MsgStream
460 
462 {
463  out<<"|-------------------------------------------------------------------"<<std::endl;
464  out<<"| Investigated :"<<std::endl
465  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtSeg] <<" TRT Segments on input"<<std::endl
466  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtFailSel] <<" TRT Segments fail selection on input"<<std::endl
467  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtSegGood] <<" TRT Segments after selection"<<std::endl;
468  if (stat.m_counter[Stat_t::kNTrtLimit]>0) {
469  out<<"|-------------------------------------------------------------------"<<std::endl;
470  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtLimit] <<" TRT segments lost because of processing limit"<<std::endl;
471  }
472  out<<"|-------------------------------------------------------------------"<<std::endl;
473  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtNoSiExt] <<" TRT segments without Si extension"<<std::endl;
474  if (m_SiExtensionCuts) {
475  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNExtCut] <<" number of Si extension failing cuts"<<std::endl;
476  }
477  if (stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt]>0) {
478  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt] <<" number ot TRT only tracks created"<<std::endl;
479  }
480  if (m_doExtension) {
481  out<<"|-------------------------------------------------------------------"<<std::endl;
482  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtExtCalls]<<" number of times TRT extension is called"<<std::endl
483  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtExt] <<" number of good TRT extension"<<std::endl;
484  if (m_rejectShortExten) {
485  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtExtBad]<<" number of bad TRT extension"<<std::endl;
486  }
487  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtExtFail]<<" number of failed TRT extension and fallback"<<std::endl;
488  }
489  out<<"|-------------------------------------------------------------------"<<std::endl;
490  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNBckTrkSi] <<" TRT+Si tracks created of output"<<std::endl;
491  if (stat.m_counter[Stat_t::kNBckTrkSi] != stat.m_counter[Stat_t::kNBckTrk]) {
492  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNBckTrk] <<" total number of tracks on output"<<std::endl;
493  }
494  out<<"|-------------------------------------------------------------------";
495  return out;
496 }
497 
498 
500 // Merge a Si extension and a TRT segment.Refit at the end
502 
504  // TSOS from the track
505  const Trk::TrackStates* stsos = tT.trackStateOnSurfaces();
506  // fitQuality from track
507  auto fq = tT.fitQuality()->uniqueClone();
508  // output datavector of TSOS
509  auto ntsos = std::make_unique<Trk::TrackStates>();
510  int siHits = 0;
511  // copy track Si states into track
513  for (p_stsos=stsos->begin(); p_stsos != stsos->end(); ++p_stsos) {
514  ntsos->push_back( (*p_stsos)->clone() );
515  if ((*p_stsos)->type(Trk::TrackStateOnSurface::Measurement)) siHits++;
516  }
517  // loop over segment
518  for (int it = 0; it < int(tS.numberOfMeasurementBases()); it++) {
519  //test if it is a pseudo measurement
520  if ( dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(tS.measurement(it)) ) {
521  if (siHits < 4) {
522  ATH_MSG_DEBUG ("Too few Si hits.Will keep pseudomeasurement...");
523  const Trk::TrackStateOnSurface* seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), nullptr);
524  ntsos->push_back(seg_tsos);
525  }
526  } else {
527  std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
528  typePattern.set(Trk::TrackStateOnSurface::Measurement);
529  const Trk::TrackStateOnSurface* seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), nullptr, nullptr, typePattern);
530  ntsos->push_back(seg_tsos);
531  }
532  }
533 
536  info.setPatternRecognitionInfo(Trk::TrackInfo::TRTSeededTrackFinder);
537  std::unique_ptr<Trk::Track> newTrack(std::make_unique<Trk::Track>(info, std::move(ntsos), std::move(fq)));
538 
539  //Careful refitting at the end
540  if (m_doRefit) {
541  newTrack=m_fitterTool->fit(Gaudi::Hive::currentContext(),*newTrack, false, Trk::pion);
542  if (!newTrack) {
543  ATH_MSG_DEBUG ("Refit of TRT+Si track segment failed!");
544  return nullptr;
545  }
546  const Trk::Perigee* perTrack=newTrack->perigeeParameters();
547  if (perTrack) {
548  const AmgSymMatrix(5)* CM = perTrack->covariance();
549  if (!CM || std::sqrt((*CM)(1,1)) == 0. || std::sqrt((*CM)(3,3)) == 0.) {
550  return nullptr;
551  }
552  }
553  }
554  return newTrack.release();
555 }
556 
558 // Transform a TRT segment to track
560 
561 Trk::Track* InDet::TRT_SeededTrackFinder::segToTrack(const EventContext& ctx, const Trk::TrackSegment& tS) const {
562  ATH_MSG_DEBUG ("Transforming the TRT segment into a track...");
563 
564  //Get the track segment information and build the initial track parameters
565  const Trk::StraightLineSurface* surf = dynamic_cast<const Trk::StraightLineSurface*>(&(tS.associatedSurface()));
566  if (!surf) {
567  throw std::logic_error("Unhandled surface.");
568  }
569  const AmgVector(5)& p = tS.localParameters();
570  AmgSymMatrix(5) ep = AmgSymMatrix(5)(tS.localCovariance());
571  auto ntsos = std::make_unique<Trk::TrackStates>();
572  std::unique_ptr<Trk::TrackParameters> segPar =
574  p(0), p(1), p(2), p(3), p(4), std::move(ep));
575  if (segPar) {
576  ATH_MSG_DEBUG( "Initial TRT Segment Parameters for refitting " << (*segPar) );
577  } else {
578  ATH_MSG_DEBUG( "Could not get initial TRT segment parameters! " );
579  return nullptr;
580  }
581  for (int it = 0; it < int(tS.numberOfMeasurementBases()); it++) {
582  // on first measurement add parameters
583  const Trk::TrackStateOnSurface* seg_tsos = nullptr;
584  std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
585  typePattern.set(Trk::TrackStateOnSurface::Measurement);
586  if (it == 0){
587  seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), std::move(segPar), nullptr, typePattern);
588  } else {
589  seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), nullptr, nullptr, typePattern);
590  }
591  ntsos->push_back(seg_tsos);
592  }
594  info.setPatternRecognitionInfo(Trk::TrackInfo::TRTSeededTrackFinder);
595  std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(info, std::move(ntsos), nullptr);
596  // Careful refitting of the TRT stand alone track
597  if (m_doRefit) {
598  newTrack = m_fitterTool->fit(ctx,*newTrack, false, Trk::pion);
599  if (!newTrack) {
600  ATH_MSG_DEBUG ("Refit of TRT track segment failed!");
601  return nullptr;
602  }
603  //Protect for tracks that have no really defined locz and theta parameters
604  const Trk::Perigee* perTrack=newTrack->perigeeParameters();
605  if (perTrack) {
606  const AmgSymMatrix(5)* CM = perTrack->covariance();
607  if (!CM || std::sqrt((*CM)(1,1)) == 0. || std::sqrt((*CM)(3,3)) == 0.) {
608  return nullptr;
609  }
610  }
611  }
612  return newTrack.release();
613 }
614 
616 // Merge a Si extension and a TRT track extension.Refit at the end
618 
620 mergeExtension(const Trk::Track& tT, std::vector<const Trk::MeasurementBase*>& tS) const {
621  // TSOS from the track
622  const Trk::TrackStates* stsos = tT.trackStateOnSurfaces();
623  // fitQuality from track
624  auto fq = tT.fitQuality()->uniqueClone();
625  // output datavector of TSOS
626  auto ntsos = std::make_unique<Trk::TrackStates>();
627  // copy track Si states into track
629  for (p_stsos = stsos->begin(); p_stsos != stsos->end(); ++p_stsos) {
630  ntsos->push_back((*p_stsos)->clone());
631  }
632  // loop over TRT track extension
633  for (auto & it : tS) {
634  std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
635  typePattern.set(Trk::TrackStateOnSurface::Measurement);
636  const Trk::TrackStateOnSurface* seg_tsos = new Trk::TrackStateOnSurface(it->uniqueClone(), nullptr, nullptr, typePattern);
637  ntsos->push_back(seg_tsos);
638  }
641  info.setPatternRecognitionInfo(Trk::TrackInfo::TRTSeededTrackFinder);
642  std::unique_ptr<Trk::Track> newTrack( std::make_unique<Trk::Track>(info, std::move(ntsos), std::move(fq)) );
643  //Careful refitting at the end
644  if (m_doRefit) {
645  newTrack = (m_fitterTool->fit(Gaudi::Hive::currentContext(),*newTrack, false, Trk::pion) ) ;
646  if (!newTrack) {
647  ATH_MSG_DEBUG ("Refit of TRT+Si track segment failed!");
648  return nullptr;
649  }
650  //Protect for tracks that have no really defined locz and theta parameters
651  const Trk::Perigee* perTrack=newTrack->perigeeParameters();
652  if (perTrack) {
653  const AmgSymMatrix(5)* CM = perTrack->covariance();
654  if (!CM || std::sqrt((*CM)(1,1)) == 0. || std::sqrt((*CM)(3,3)) == 0.) {
655  return nullptr;
656  }
657  }
658  }
659 
660  return newTrack.release();
661 }
662 
664 // Analysis of tracks
666 
667 void
669  if(msgLvl(MSG::DEBUG)) {
670  ATH_MSG_DEBUG( "Analyzing tracks..." );
671  ATH_MSG_DEBUG( "Number of back tracks " << (tC->size()) );
672  int nsct1{}, nsct2{}, nsct3{}, nsct4{}; //SCT layer counters
673  int nsctTot1{}, nsctTot2{}, nsctTot3{}, nsctTot4{}; //SCT layer counters
674  int npix1{}, npix2{}, npix3{}; //Pixel layer counters
675  int npixTot1{}, npixTot2{}, npixTot3{}; //Pixel layer counters
677  TrackCollection::const_iterator r = tC->begin();
679  for (; r != re ; ++r){
680  nsct1=nsct2=nsct3=nsct4=0; npix1=npix2=npix3=0;
681  const Trk::TrackStates* newtsos = (*r)->trackStateOnSurfaces();
682  if(!newtsos) continue;
683  Trk::TrackStates::const_iterator itp, itpe=newtsos->end();
684  for(itp=newtsos->begin(); itp!=itpe; ++itp){
686  const InDet::SiClusterOnTrack* clus = dynamic_cast<const InDet::SiClusterOnTrack*>((*itp)->measurementOnTrack());
687  if(clus && ((*itp)->type(Trk::TrackStateOnSurface::Measurement))){ //Count the number of hits used in the track
688  double rc = clus->globalPosition().perp();
689  if((40.<=rc)&&(rc<80.)){npix1++;} //1st pixel layer
690  if((80.<=rc)&&(rc<100.)){npix2++;} //2nd pixel layer
691  if((100.<=rc)&&(rc<150.)){npix3++;} //3rd pixel layer
692  if((280.<=rc)&&(rc<340.)){nsct1++;} //1st SCT layer
693  if((340.<=rc)&&(rc<390.)){nsct2++;} //2nd SCT layer
694  if((390.<=rc)&&(rc<460.)){nsct3++;} //3rd SCT layer
695  if((460.<=rc)&&(rc<550.)){nsct4++;} //4th SCT layer
696  }
697  }
698  nsctTot1+=nsct1; nsctTot2+=nsct2; nsctTot3+=nsct3; nsctTot4+=nsct4;
699  npixTot1+=npix1; npixTot2+=npix2; npixTot3+=npix3;
700  }
701  ATH_MSG_DEBUG("Total hits on 1st SCT: "<<nsctTot1<<" 2nd SCT: "<<nsctTot2<<" 3rd SCT: "<<nsctTot3<<" 4th SCT: "<<nsctTot4);
702  ATH_MSG_DEBUG("Total hits on 1st Pixel: "<<npixTot1<<" 2nd Pixel: "<<npixTot2<<" 3rd Pixel: "<<npixTot3);
703  }
704 }
705 
grepfile.info
info
Definition: grepfile.py:38
InDet::TRT_SeededTrackFinder::Stat_t::m_counter
std::array< int, kNCounter > m_counter
Definition: TRT_SeededTrackFinder.h:175
InDet::TRT_SeededTrackFinder::Stat_t::kNTrtSeg
@ kNTrtSeg
Definition: TRT_SeededTrackFinder.h:157
InDet::TRT_SeededTrackFinder::Stat_t::kNTrtNoSiExt
@ kNTrtNoSiExt
Number of TRT segments lost in busy events.
Definition: TRT_SeededTrackFinder.h:162
beamspotman.r
def r
Definition: beamspotman.py:676
InDet::TRT_SeededTrackFinder::mergeExtension
Trk::Track * mergeExtension(const Trk::Track &, std::vector< const Trk::MeasurementBase * > &) const
Merge a TRT track extension and a Si track component into one global ID track.
Definition: TRT_SeededTrackFinder.cxx:620
InDet::TRT_SeededTrackFinder::m_SegmentsKey
SG::ReadHandleKey< Trk::SegmentCollection > m_SegmentsKey
Definition: TRT_SeededTrackFinder.h:113
TruthTest.itp
itp
Definition: TruthTest.py:46
Trk::TrackInfo
Contains information about the 'fitter' of this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:32
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
Trk::Track::fitQuality
const FitQuality * fitQuality() const
return a pointer to the fit quality const-overload
InDet::TRT_SeededTrackFinder::m_outTracksKey
SG::WriteHandleKey< TrackCollection > m_outTracksKey
Definition: TRT_SeededTrackFinder.h:115
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
InDet::TRT_SeededTrackFinder::finalize
StatusCode finalize() override
Definition: TRT_SeededTrackFinder.cxx:415
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
InDet::TRT_SeededTrackFinder::m_minPt
DoubleProperty m_minPt
Definition: TRT_SeededTrackFinder.h:129
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
Trk::PRDtoTrackMap
Definition: PRDtoTrackMap.h:17
SG::ReadHandle< Trk::PRDtoTrackMap >
Trk::ParametersBase::associatedSurface
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
InDet::MyPRDtoTrackMap::size
unsigned int size() const
Definition: TRT_SeededTrackFinder.cxx:94
SG::VarHandleBase::name
const std::string & name() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleBase.cxx:75
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::TRT_SeededTrackFinder::m_doRefit
BooleanProperty m_doRefit
Definition: TRT_SeededTrackFinder.h:85
InDet::TRT_SeededTrackFinder::initialize
StatusCode initialize() override
Definition: TRT_SeededTrackFinder.cxx:47
InDet::TRT_SeededTrackFinder::m_trackSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition: TRT_SeededTrackFinder.h:121
skel.it
it
Definition: skel.GENtoEVGEN.py:396
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
InDet::TRT_SeededTrackFinder::m_doExtension
BooleanProperty m_doExtension
Definition: TRT_SeededTrackFinder.h:87
InDet::TRT_SeededTrackFinder::Stat_t::kNTrtLimit
@ kNTrtLimit
Number of TRT segments that will be investigated per event
Definition: TRT_SeededTrackFinder.h:161
InDet::TRT_SeededTrackFinder::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: TRT_SeededTrackFinder.h:123
Trk::z0
@ z0
Definition: ParamDefs.h:64
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
FitQualityOnSurface.h
InDet::TRT_SeededTrackFinder::Stat_t::kNExtCut
@ kNExtCut
Number of TRT segments not extended in Si.
Definition: TRT_SeededTrackFinder.h:163
InDet::MyPRDtoTrackMap
Definition: TRT_SeededTrackFinder.cxx:92
SiClusterOnTrack.h
ReadCellNoiseFromCoolCompare.s4
s4
Definition: ReadCellNoiseFromCoolCompare.py:381
InDet::TRT_SeededTrackFinder::m_deltaZ
FloatProperty m_deltaZ
Definition: TRT_SeededTrackFinder.h:150
Trk::TrackSegment
Definition: TrackSegment.h:56
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
InDet::TRT_SeededTrackFinder::m_caloSeededRoI
BooleanProperty m_caloSeededRoI
Definition: TRT_SeededTrackFinder.h:136
SG::ReadHandleKey< Trk::PRDtoTrackMap >
InDet::ExtendedSiCombinatorialTrackFinderData_xk::ExtendedSiCombinatorialTrackFinderData_xk
ExtendedSiCombinatorialTrackFinderData_xk(const SG::ReadHandleKey< Trk::PRDtoTrackMap > &key)
Definition: TRT_SeededTrackFinder.cxx:102
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:50
InDet::TRT_SeededTrackFinder::m_deltaPhi
FloatProperty m_deltaPhi
Definition: TRT_SeededTrackFinder.h:148
InDet::ExtendedSiCombinatorialTrackFinderData_xk::dummy
void dummy()
Definition: TRT_SeededTrackFinder.cxx:109
Trk::Segment::numberOfMeasurementBases
unsigned int numberOfMeasurementBases() const
Return the number of contained Trk::MeasurementBase (s)
Definition: Tracking/TrkEvent/TrkSegment/TrkSegment/Segment.h:193
InDet::TRT_SeededTrackFinder::Stat_t
Global Counters for final algorithm statistics.
Definition: TRT_SeededTrackFinder.h:154
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
Trk::Charged
Definition: Charged.h:27
InDet::TRT_SeededTrackFinder::m_MaxSegNum
IntegerProperty m_MaxSegNum
Definition: TRT_SeededTrackFinder.h:95
Trk::PseudoMeasurementOnTrack
Class to handle pseudo-measurements in fitters and on track objects.
Definition: PseudoMeasurementOnTrack.h:44
InDet::TRT_SeededTrackFinder::m_saveTRT
BooleanProperty m_saveTRT
Definition: TRT_SeededTrackFinder.h:93
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
InDet::TRT_SeededTrackFinder::m_maxEta
DoubleProperty m_maxEta
Definition: TRT_SeededTrackFinder.h:130
InDet::SiClusterOnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override
returns global position (gathered through Surface constraint)
Definition: SiClusterOnTrack.h:115
InDet::TRT_SeededTrackFinder::Analyze
void Analyze(TrackCollection *) const
Do some statistics analysis at the end of each event.
Definition: TRT_SeededTrackFinder.cxx:668
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::TRT_SeededTrackFinder::Stat_t::kNBckTrk
@ kNBckTrk
Number of back tracks found with Si extension per event.
Definition: TRT_SeededTrackFinder.h:171
lumiFormat.i
int i
Definition: lumiFormat.py:85
TrackCollection
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Definition: TrackCollection.h:19
beamspotman.n
n
Definition: beamspotman.py:731
Trk::MeasurementBase::uniqueClone
std::unique_ptr< MeasurementBase > uniqueClone() const
NVI Clone giving up unique pointer.
Definition: MeasurementBase.h:77
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::TRT_SeededTrackFinder::mergeSegments
Trk::Track * mergeSegments(const Trk::Track &, const Trk::TrackSegment &) const
Protected methods
Definition: TRT_SeededTrackFinder.cxx:503
InDet::TRT_SeededTrackFinder::m_fitterTool
ToolHandle< Trk::ITrackFitter > m_fitterTool
Definition: TRT_SeededTrackFinder.h:106
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
InDet::TRT_SeededTrackFinder::m_regionSelector
ToolHandle< IRegSelTool > m_regionSelector
Definition: TRT_SeededTrackFinder.h:142
SiCombinatorialTrackFinderData_xk.h
RoiDescriptor.h
PseudoMeasurementOnTrack.h
InDet::TRT_SeededTrackFinder::m_trtExtension
ToolHandle< ITRT_TrackExtensionTool > m_trtExtension
Definition: TRT_SeededTrackFinder.h:109
Trk::Segment::measurement
const MeasurementBase * measurement(unsigned int) const
returns the Trk::MeasurementBase objects depending on the integer
Definition: Tracking/TrkEvent/TrkSegment/TrkSegment/Segment.h:184
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
RoiDescriptor::clear
void clear()
clear the vector
Definition: RoiDescriptor.h:151
InDet::TRT_SeededTrackFinder::m_deltaEta
FloatProperty m_deltaEta
Definition: TRT_SeededTrackFinder.h:146
RoiDescriptor
Describes the Region of Ineterest geometry It has basically 9 parameters.
Definition: RoiDescriptor.h:40
InDet::TRT_SeededTrackFinder::Stat_t::kNTrtExt
@ kNTrtExt
Number of times the TRT extension is called.
Definition: TRT_SeededTrackFinder.h:167
Trk::TrackSegment::associatedSurface
const Surface & associatedSurface() const override final
returns the surface for the local to global transformation
Definition: TrackSegment.h:112
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::TRT_SeededTrackFinder::Stat_t::kNTrtFailSel
@ kNTrtFailSel
Number of TRT segments to be investigated per event
Definition: TRT_SeededTrackFinder.h:158
DataVector< const Trk::TrackStateOnSurface >
beamspotman.stat
stat
Definition: beamspotman.py:266
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
InDet::TRT_SeededTrackFinder::Stat_t::kNBckTrkSi
@ kNBckTrkSi
Number of failed TRT extensions.
Definition: TRT_SeededTrackFinder.h:170
Trk::Track::perigeeParameters
const Perigee * perigeeParameters() const
return Perigee.
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:163
InDet::TRT_SeededTrackFinder::m_SiExtensionCuts
BooleanProperty m_SiExtensionCuts
Definition: TRT_SeededTrackFinder.h:128
Trk::SurfaceType::Perigee
@ Perigee
InDet::ExtendedSiCombinatorialTrackFinderData_xk
Definition: TRT_SeededTrackFinder.cxx:100
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::TRT_SeededTrackFinder::m_maxRPhiImp
DoubleProperty m_maxRPhiImp
Definition: TRT_SeededTrackFinder.h:132
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
InDet::TRT_SeededTrackFinder::dumpevent
MsgStream & dumpevent(MsgStream &out, const InDet::TRT_SeededTrackFinder::Stat_t &stat) const
Definition: TRT_SeededTrackFinder.cxx:461
Trk::d0
@ d0
Definition: ParamDefs.h:63
TrackInfo.h
Trk::FitQuality::uniqueClone
std::unique_ptr< FitQuality > uniqueClone() const
NVI uniqueClone.
InDet::TRT_SeededTrackFinder::m_trackmaker
ToolHandle< ITRT_SeededTrackFinder > m_trackmaker
Definition: TRT_SeededTrackFinder.h:103
Trk::TrackInfo::TRTSeededTrackFinder
@ TRTSeededTrackFinder
Tracks from TRT Seeded Track finder.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:114
InDet::TRT_SeededTrackFinder::m_maxZImp
DoubleProperty m_maxZImp
Definition: TRT_SeededTrackFinder.h:134
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::PRDtoTrackMap::m_prepRawDataTrackMap
PrepRawDataTrackMap m_prepRawDataTrackMap
holds the tracks associated with each PRD (i.e.
Definition: PRDtoTrackMap.h:82
InDet::TRT_SeededTrackFinder::m_prdToTrackMap
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
Definition: TRT_SeededTrackFinder.h:119
InDet::TRT_SeededTrackFinder::segToTrack
Trk::Track * segToTrack(const EventContext &, const Trk::TrackSegment &) const
Transform a TRT track segment into a track
Definition: TRT_SeededTrackFinder.cxx:561
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
InDet::TRT_SeededTrackFinder::execute
StatusCode execute(const EventContext &ctx) const override
Definition: TRT_SeededTrackFinder.cxx:118
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
InDet::TRT_SeededTrackFinder::dumptools
MsgStream & dumptools(MsgStream &out) const
Definition: TRT_SeededTrackFinder.cxx:430
InDet::SiCombinatorialTrackFinderData_xk
Definition: SiCombinatorialTrackFinderData_xk.h:34
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
re
const boost::regex re(r_e)
DEBUG
#define DEBUG
Definition: page_access.h:11
ReadCellNoiseFromCoolCompare.s2
s2
Definition: ReadCellNoiseFromCoolCompare.py:379
InDet::TRT_SeededTrackFinder::m_minTRTonSegment
UnsignedIntegerProperty m_minTRTonSegment
Definition: TRT_SeededTrackFinder.h:98
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
Trk::StraightLineSurface::createUniqueParameters
std::unique_ptr< ParametersT< DIM, T, StraightLineSurface > > createUniqueParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(DIM)> cov=std::nullopt) const
Use the Surface as a ParametersBase constructor, from local parameters.
InDet::TRT_SeededTrackFinder::m_rejectShortExten
BooleanProperty m_rejectShortExten
Definition: TRT_SeededTrackFinder.h:89
RoiDescriptor::setComposite
void setComposite(bool b=true)
Definition: RoiDescriptor.h:138
InDet::TRT_SeededTrackFinder::m_doStat
BooleanProperty m_doStat
Definition: TRT_SeededTrackFinder.h:91
InDet::TRT_SeededTrackFinder::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: TRT_SeededTrackFinder.h:125
InDet::TRT_SeededTrackFinder::m_caloClusterROIKey
SG::ReadHandleKey< ROIPhiRZContainer > m_caloClusterROIKey
Definition: TRT_SeededTrackFinder.h:138
InDet::ExtendedSiCombinatorialTrackFinderData_xk::m_prdToTrackMap
SG::ReadHandle< Trk::PRDtoTrackMap > m_prdToTrackMap
Definition: TRT_SeededTrackFinder.cxx:110
TRT_SeededTrackFinder.h
FitQuality.h
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDet::TRT_SeededTrackFinder::m_minTRTonly
UnsignedIntegerProperty m_minTRTonly
Definition: TRT_SeededTrackFinder.h:100
Trk::Surface::type
constexpr virtual SurfaceType type() const =0
Returns the Surface type to avoid dynamic casts.
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
Trk::StraightLineSurface
Definition: StraightLineSurface.h:51
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
InDet::SiClusterOnTrack
Definition: SiClusterOnTrack.h:39
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
InDet::TRT_SeededTrackFinder::TRT_SeededTrackFinder
TRT_SeededTrackFinder(const std::string &name, ISvcLocator *pSvcLocator)
Standard Algorithm methods
Definition: TRT_SeededTrackFinder.cxx:39
InDet::SiCombinatorialTrackFinderData_xk::setPRDtoTrackMap
void setPRDtoTrackMap(const Trk::PRDtoTrackMap *prd_to_track_map)
Set PRD to track map.
Definition: SiCombinatorialTrackFinderData_xk.h:234