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  m_regionSelector->HashIDList(*roiComp, listOfSCTIds );
165  event_data_p = m_trackmaker->newRegion(ctx, combinatorialData, listOfPixIds, listOfSCTIds);
166  } else {
167  event_data_p = m_trackmaker->newEvent(ctx, combinatorialData);
168  }
169 
170  std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData> ext_event_data_p( m_trtExtension->newEvent(ctx) );
171  std::unique_ptr<TrackCollection> outTracks = std::make_unique<TrackCollection>();
172  std::vector<Trk::Track*> tempTracks; //Temporary track collection
173  tempTracks.reserve(128);
174  // loop over event
175  ATH_MSG_DEBUG ("Begin looping over all TRT segments in the event");
177  Trk::SegmentCollection::const_iterator isegEnd = segments->end();
179  for(; iseg != isegEnd; ++ iseg) {
180  // Get the track segment
181  const Trk::TrackSegment *trackTRT = dynamic_cast<const Trk::TrackSegment*>(*iseg);
182  if(!trackTRT){
183  ATH_MSG_ERROR ("No pointer to segment !");
184  continue;
185  } else {
186  // the segment finder is applying a TRT(eta) cut and a pt preselection, so we don't do that here
187  //Ask for at least 10 TRT hits in order to process
188  if(trackTRT->numberOfMeasurementBases() < m_minTRTonSegment) {
189  ATH_MSG_DEBUG ("TRT segment fails nTRT hit cut, reject.");
190  // statistics
191  ev_stat.m_counter[Stat_t::kNTrtFailSel]++;
192  } else {
193  // do we continue to process ?
194  nTrtSegCur++;
195  if(nTrtSegCur>=m_MaxSegNum) {
196  ATH_MSG_DEBUG ("====> Reached maximal number of segments in event, stop !!!");
197  // statistics
198  ev_stat.m_counter[Stat_t::kNTrtLimit]++;
199  break;
200  }
201  // Get the number of the TRT track segment ROTs
202  ATH_MSG_DEBUG ("=> New segment to process, number Of TRT ROTs : " << (trackTRT->numberOfMeasurementBases()));
203  // statistics
204  ev_stat.m_counter[Stat_t::Stat_t::kNTrtSegGood]++;
205  // ok, call track maker and get list of possible track candidates
206  std::list<Trk::Track*> trackSi = m_trackmaker->getTrack(ctx, *event_data_p, *trackTRT); //Get the possible Si extensions
207  if (trackSi.empty()) {
208  ATH_MSG_DEBUG ("No Si track candidates associated to the TRT track ");
209  // statistics
210  ev_stat.m_counter[Stat_t::kNTrtNoSiExt]++;
211  // obsolete backup of TRT only
212  if(m_saveTRT && trackTRT->numberOfMeasurementBases() > m_minTRTonly){
214  Trk::Track* trtSeg = nullptr;trtSeg = segToTrack(ctx, *trackTRT);
215  if(!trtSeg) {
216  ATH_MSG_DEBUG ("Failed to make a track out of the TRT segment!");
217  continue;
218  }
219  // statistics
220  ev_stat.m_counter[Stat_t::kNBckTrk]++; ev_stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt]++;
221  // add track to output list
222  outTracks->push_back(trtSeg);
223  }
224  continue;
225  } else {
226  // Found useful extensions
227  ATH_MSG_DEBUG ("Found " << (trackSi.size()) << " Si tracks associated to the TRT track ");
228  // Merge the resolved Si extensions with the original TRT track segment
229  std::list<Trk::Track*>::const_iterator itt = trackSi.begin();
230  std::list<Trk::Track*>::const_iterator ittEnd = trackSi.end();
231  for (; itt != ittEnd ; ++itt){
232  tempTracks.push_back(*itt);
233  // get list of TSOS
234  const Trk::TrackStates* temptsos = (*itt)->trackStateOnSurfaces();
235  if (!temptsos) {
236  ATH_MSG_DEBUG ("Silicon extension empty ???");
237  continue;
238  }
239  // Add the track to the list of tracks in the event
240  ATH_MSG_DEBUG ("Silicon extension found has length of : " << temptsos->size());
241  // do we do a preselection ?
242  if (m_SiExtensionCuts) {
243  // get parameters without errors
244  auto input = (*itt)->trackParameters()->front()->uniqueClone();
245  // cuts on parameters
246  if (std::abs(input->pT()) < m_minPt) {
247  ATH_MSG_DEBUG ("Track pt < "<<m_minPt<<", reject it");
248  // statistics
249  ev_stat.m_counter[Stat_t::kNExtCut]++;
250  continue;
251  }
252  if (std::abs(input->eta()) > m_maxEta) {
253  ATH_MSG_DEBUG ("Track eta > "<<m_maxEta<<", reject it");
254  // statistics
255  ev_stat.m_counter[Stat_t::kNExtCut]++;
256  continue;
257  }
258  // --- beam spot position
259  Amg::Vector3D beamSpotPosition(0,0,0);
260  if (m_SiExtensionCuts){
262  beamSpotPosition = beamSpotHandle->beamVtx().position();
263  }
264  // --- create surface
265  Trk::PerigeeSurface perigeeSurface(beamSpotPosition);
266 
267  // uses perigee on track or extrapolates, no material in any case, we cut on impacts
268  std::unique_ptr<const Trk::TrackParameters> parm =
269  m_extrapolator->extrapolateDirectly(
270  ctx, *input, perigeeSurface);
271  std::unique_ptr<const Trk::Perigee> extrapolatedPerigee = nullptr;
272  if (parm && parm->associatedSurface().type() == Trk::SurfaceType::Perigee) {
273  extrapolatedPerigee.reset(static_cast<const Trk::Perigee*>(parm.release()));
274  }
275  if (!extrapolatedPerigee) {
276  ATH_MSG_WARNING("Extrapolation of perigee failed, this should never happen" );
277  // statistics
278  ev_stat.m_counter[Stat_t::kNExtCut]++;
279  continue;
280  }
281 
282  ATH_MSG_VERBOSE ("extrapolated perigee: "<<*extrapolatedPerigee);
283  if (std::abs(extrapolatedPerigee->parameters()[Trk::d0]) > m_maxRPhiImp) {
284  ATH_MSG_DEBUG ("Track Rphi impact > "<<m_maxRPhiImp<<", reject it");
285  // statistics
286  ev_stat.m_counter[Stat_t::kNExtCut]++;
287  continue;
288  }
289  if (std::abs(extrapolatedPerigee->parameters()[Trk::z0]) > m_maxZImp) {
290  ATH_MSG_DEBUG ("Track Z impact > "<<m_maxZImp<<", reject it");
291  // statistics
292  ev_stat.m_counter[Stat_t::kNExtCut]++;
293  continue;
294  }
295  }
296 
297  // do re run a Track extension into TRT ?
298  Trk::Track* globalTrackNew = nullptr;
299  // do we have 4 and extension is enabled ?
300  if(int(temptsos->size())>=4 && m_doExtension){
301  // Add the track to the list of tracks in the event
302  ATH_MSG_DEBUG ("Try to improve TRT calling extension tool.");
303  // statistics
304  ev_stat.m_counter[Stat_t::Stat_t::kNTrtExtCalls]++;
305  // call extension tool
306  std::vector<const Trk::MeasurementBase*>& tn =
307  m_trtExtension->extendTrack(ctx, *(*itt), *ext_event_data_p, map);
308  if (tn.empty()) {
309  // Fallback if extension failed
310  ATH_MSG_DEBUG ("No new segment found, use input segment as fallback.");
311  // statistics
312  ev_stat.m_counter[Stat_t::Stat_t::kNTrtExtFail]++;
313  // merge Si with input track segments
314  globalTrackNew = mergeSegments(**itt,*trackTRT);
315  } else if (!m_rejectShortExten ||
316  tn.size() >= trackTRT->numberOfMeasurementBases()) {
317  // Use the extension to instead of the segment
318  ATH_MSG_DEBUG ("Successful extension, number of TRT hits : " << tn.size() << " was : " << (trackTRT->numberOfMeasurementBases()));
319  // merge the extension with the Si track
320  globalTrackNew = mergeExtension(**itt,tn);
321  // Add the track to the list of tracks in the event
322  ATH_MSG_DEBUG ("Merged extension with Si segment");
323  // statistics
324  ev_stat.m_counter[Stat_t::kNTrtExt]++;
325  // clean up
326  std::vector<const Trk::MeasurementBase*>::const_iterator iv, ive=tn.end();
327  for(iv=tn.begin(); iv!=ive; ++iv) delete (*iv);
328  } else {
329  // Extension is shorter, let's fall back onto the original
330  ATH_MSG_DEBUG ("Extension too short, number of TRT hits : " << tn.size() << " was : " << (trackTRT->numberOfMeasurementBases()) << ". Use Segement !");
331  // merge segments
332  globalTrackNew = mergeSegments(**itt,*trackTRT);
333  // Add the track to the list of tracks in the event
334  ATH_MSG_DEBUG ("Merged TRT segment with Si segment");
335  // statistics
336  ev_stat.m_counter[Stat_t::Stat_t::kNTrtExtBad]++;
337  // clean up
338  std::vector<const Trk::MeasurementBase*>::const_iterator iv, ive=tn.end();
339  for(iv=tn.begin(); iv!=ive; ++iv) delete (*iv);
340  }
341  } else {
342  // no extension tool, jsut add the two
343  ATH_MSG_DEBUG ("Do not try to extend Si track, merging it with input TRT.");
344  // merge segments
345  globalTrackNew = mergeSegments(**itt,*trackTRT);
346  }
347  // do we have an track candidate ?
348  if(!globalTrackNew){
349  ATH_MSG_DEBUG ("Failed to merge TRT+Si track segment !");
350  if(m_saveTRT && trackTRT->numberOfMeasurementBases() > m_minTRTonly) {
351  Trk::Track* trtSeg = nullptr;trtSeg = segToTrack(ctx, *trackTRT);
352  if(!trtSeg){
353  ATH_MSG_DEBUG ("Failed to make a track out of the TRT segment!");
354  continue;
355  }
356  ATH_MSG_DEBUG ("Add TRT only to output list");
357  // statistis
358  ev_stat.m_counter[Stat_t::kNBckTrk]++; ev_stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt]++;
359  // add it to output list
360  if (m_trackSummaryTool.isEnabled()) {
361  m_trackSummaryTool->computeAndReplaceTrackSummary(*trtSeg,
362  false /* DO NOT suppress hole search*/);
363  }
364  outTracks->push_back(trtSeg);
365  }
366  } else {
367  ATH_MSG_DEBUG ("Save merged TRT+Si track segment!");
368  // statistics
369  ev_stat.m_counter[Stat_t::kNBckTrk]++; ev_stat.m_counter[Stat_t::Stat_t::kNBckTrkSi]++;
370  // add it to output list
371  if (m_trackSummaryTool.isEnabled()) {
372  m_trackSummaryTool->computeAndReplaceTrackSummary(*globalTrackNew,
373  false /* DO NOT suppress hole search*/);
374  }
375  outTracks->push_back(globalTrackNew);
376  }
377  }
378  }
379  }
380  }
381  }
382  // further debugging of results
383  if(m_doStat){
384  Analyze(outTracks.get());
385  }
386  if (SG::WriteHandle<TrackCollection>(m_outTracksKey,ctx).record(std::move(outTracks)).isFailure()){
387  ATH_MSG_ERROR("Failed to record " << m_outTracksKey.key());
388  return StatusCode::FAILURE;
389  }
390  // Update the total counters
391  {
392  std::lock_guard<std::mutex> lock(m_statMutex);
393  m_totalStat += ev_stat;
394  }
395 
396  for (auto *p : tempTracks){
397  delete p;
398  }
399  m_trackmaker->endEvent(*event_data_p);
400 
401  //Print common event information
402  if(msgLvl(MSG::DEBUG)){
403  dumpevent(msg(MSG::DEBUG), ev_stat);
404  }
405 
406  return StatusCode::SUCCESS;
407 }
408 
410 // Finalize
412 
414 {
415  if(msgLvl(MSG::INFO)){
416  msg(MSG::INFO) << "\n";
417  dumpevent(msg(MSG::INFO), m_totalStat);
418  msg(MSG::INFO) << endmsg;
419  }
420  return StatusCode::SUCCESS;
421 }
422 
423 
425 // Dumps conditions information into the MsgStream
427 
428 MsgStream& InDet::TRT_SeededTrackFinder::dumptools( MsgStream& out ) const
429 {
430  int n = 65-m_trackmaker.type().size();
431  std::string s1; for(int i=0; i<n; ++i) s1.append(" "); s1.append("|");
432  n = 65-m_fitterTool.type().size();
433  std::string s2; for(int i=0; i<n; ++i) s2.append(" "); s2.append("|");
434  n = 65-m_trtExtension.type().size();
435  std::string s3; for(int i=0; i<n; ++i) s3.append(" "); s3.append("|");
436  n = 65-m_SegmentsKey.key().size();
437  std::string s4; for(int i=0; i<n; ++i) s4.append(" "); s4.append("|");
438  n = 65-m_outTracksKey.key().size();
439  std::string s5; for(int i=0; i<n; ++i) s5.append(" "); s5.append("|");
440 
441  out<<"|----------------------------------------------------------------------"
442  <<"-------------------|"
443  <<std::endl;
444  out<<"| Tool for TRT seeded track finding | "<<m_trackmaker.type() <<s1<<std::endl;
445  out<<"| Tool for final track refitting | "<<m_fitterTool.type() <<s2<<std::endl;
446  out<<"| Tool for TRT trac extension | "<<m_trtExtension.type() <<s3<<std::endl;
447  out<<"| Location of input tracks | "<<m_SegmentsKey.key() <<s4<<std::endl;
448  out<<"| Location of output tracks | "<<m_outTracksKey.key() <<s5<<std::endl;
449  out<<"|----------------------------------------------------------------------"
450  <<"-------------------|"
451  <<std::endl;
452  return out;
453 }
454 
456 // Dumps event information into the MsgStream
458 
460 {
461  out<<"|-------------------------------------------------------------------"<<std::endl;
462  out<<"| Investigated :"<<std::endl
463  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtSeg] <<" TRT Segments on input"<<std::endl
464  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtFailSel] <<" TRT Segments fail selection on input"<<std::endl
465  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtSegGood] <<" TRT Segments after selection"<<std::endl;
466  if (stat.m_counter[Stat_t::kNTrtLimit]>0) {
467  out<<"|-------------------------------------------------------------------"<<std::endl;
468  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtLimit] <<" TRT segments lost because of processing limit"<<std::endl;
469  }
470  out<<"|-------------------------------------------------------------------"<<std::endl;
471  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtNoSiExt] <<" TRT segments without Si extension"<<std::endl;
472  if (m_SiExtensionCuts) {
473  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNExtCut] <<" number of Si extension failing cuts"<<std::endl;
474  }
475  if (stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt]>0) {
476  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNBckTrkTrt] <<" number ot TRT only tracks created"<<std::endl;
477  }
478  if (m_doExtension) {
479  out<<"|-------------------------------------------------------------------"<<std::endl;
480  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtExtCalls]<<" number of times TRT extension is called"<<std::endl
481  <<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNTrtExt] <<" number of good TRT extension"<<std::endl;
482  if (m_rejectShortExten) {
483  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtExtBad]<<" number of bad TRT extension"<<std::endl;
484  }
485  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNTrtExtFail]<<" number of failed TRT extension and fallback"<<std::endl;
486  }
487  out<<"|-------------------------------------------------------------------"<<std::endl;
488  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::Stat_t::kNBckTrkSi] <<" TRT+Si tracks created of output"<<std::endl;
489  if (stat.m_counter[Stat_t::kNBckTrkSi] != stat.m_counter[Stat_t::kNBckTrk]) {
490  out<<"| "<<std::setw(7)<<stat.m_counter[Stat_t::kNBckTrk] <<" total number of tracks on output"<<std::endl;
491  }
492  out<<"|-------------------------------------------------------------------";
493  return out;
494 }
495 
496 
498 // Merge a Si extension and a TRT segment.Refit at the end
500 
502  // TSOS from the track
503  const Trk::TrackStates* stsos = tT.trackStateOnSurfaces();
504  // fitQuality from track
505  auto fq = tT.fitQuality()->uniqueClone();
506  // output datavector of TSOS
507  auto ntsos = std::make_unique<Trk::TrackStates>();
508  int siHits = 0;
509  // copy track Si states into track
511  for (p_stsos=stsos->begin(); p_stsos != stsos->end(); ++p_stsos) {
512  ntsos->push_back( (*p_stsos)->clone() );
513  if ((*p_stsos)->type(Trk::TrackStateOnSurface::Measurement)) siHits++;
514  }
515  // loop over segment
516  for (int it = 0; it < int(tS.numberOfMeasurementBases()); it++) {
517  //test if it is a pseudo measurement
518  if ( dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(tS.measurement(it)) ) {
519  if (siHits < 4) {
520  ATH_MSG_DEBUG ("Too few Si hits.Will keep pseudomeasurement...");
521  const Trk::TrackStateOnSurface* seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), nullptr);
522  ntsos->push_back(seg_tsos);
523  }
524  } else {
525  std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
526  typePattern.set(Trk::TrackStateOnSurface::Measurement);
527  const Trk::TrackStateOnSurface* seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), nullptr, nullptr, typePattern);
528  ntsos->push_back(seg_tsos);
529  }
530  }
531 
534  info.setPatternRecognitionInfo(Trk::TrackInfo::TRTSeededTrackFinder);
535  std::unique_ptr<Trk::Track> newTrack(std::make_unique<Trk::Track>(info, std::move(ntsos), std::move(fq)));
536 
537  //Careful refitting at the end
538  if (m_doRefit) {
539  newTrack=m_fitterTool->fit(Gaudi::Hive::currentContext(),*newTrack, false, Trk::pion);
540  if (!newTrack) {
541  ATH_MSG_DEBUG ("Refit of TRT+Si track segment failed!");
542  return nullptr;
543  }
544  const Trk::Perigee* perTrack=newTrack->perigeeParameters();
545  if (perTrack) {
546  const AmgSymMatrix(5)* CM = perTrack->covariance();
547  if (!CM || std::sqrt((*CM)(1,1)) == 0. || std::sqrt((*CM)(3,3)) == 0.) {
548  return nullptr;
549  }
550  }
551  }
552  return newTrack.release();
553 }
554 
556 // Transform a TRT segment to track
558 
559 Trk::Track* InDet::TRT_SeededTrackFinder::segToTrack(const EventContext& ctx, const Trk::TrackSegment& tS) const {
560  ATH_MSG_DEBUG ("Transforming the TRT segment into a track...");
561 
562  //Get the track segment information and build the initial track parameters
563  const Trk::StraightLineSurface* surf = dynamic_cast<const Trk::StraightLineSurface*>(&(tS.associatedSurface()));
564  if (!surf) {
565  throw std::logic_error("Unhandled surface.");
566  }
567  const AmgVector(5)& p = tS.localParameters();
568  AmgSymMatrix(5) ep = AmgSymMatrix(5)(tS.localCovariance());
569  auto ntsos = std::make_unique<Trk::TrackStates>();
570  std::unique_ptr<Trk::TrackParameters> segPar =
572  p(0), p(1), p(2), p(3), p(4), std::move(ep));
573  if (segPar) {
574  ATH_MSG_DEBUG( "Initial TRT Segment Parameters for refitting " << (*segPar) );
575  } else {
576  ATH_MSG_DEBUG( "Could not get initial TRT segment parameters! " );
577  return nullptr;
578  }
579  for (int it = 0; it < int(tS.numberOfMeasurementBases()); it++) {
580  // on first measurement add parameters
581  const Trk::TrackStateOnSurface* seg_tsos = nullptr;
582  std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
583  typePattern.set(Trk::TrackStateOnSurface::Measurement);
584  if (it == 0){
585  seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), std::move(segPar), nullptr, typePattern);
586  } else {
587  seg_tsos = new Trk::TrackStateOnSurface(tS.measurement(it)->uniqueClone(), nullptr, nullptr, typePattern);
588  }
589  ntsos->push_back(seg_tsos);
590  }
592  info.setPatternRecognitionInfo(Trk::TrackInfo::TRTSeededTrackFinder);
593  std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(info, std::move(ntsos), nullptr);
594  // Careful refitting of the TRT stand alone track
595  if (m_doRefit) {
596  newTrack = m_fitterTool->fit(ctx,*newTrack, false, Trk::pion);
597  if (!newTrack) {
598  ATH_MSG_DEBUG ("Refit of TRT track segment failed!");
599  return nullptr;
600  }
601  //Protect for tracks that have no really defined locz and theta parameters
602  const Trk::Perigee* perTrack=newTrack->perigeeParameters();
603  if (perTrack) {
604  const AmgSymMatrix(5)* CM = perTrack->covariance();
605  if (!CM || std::sqrt((*CM)(1,1)) == 0. || std::sqrt((*CM)(3,3)) == 0.) {
606  return nullptr;
607  }
608  }
609  }
610  return newTrack.release();
611 }
612 
614 // Merge a Si extension and a TRT track extension.Refit at the end
616 
618 mergeExtension(const Trk::Track& tT, std::vector<const Trk::MeasurementBase*>& tS) const {
619  // TSOS from the track
620  const Trk::TrackStates* stsos = tT.trackStateOnSurfaces();
621  // fitQuality from track
622  auto fq = tT.fitQuality()->uniqueClone();
623  // output datavector of TSOS
624  auto ntsos = std::make_unique<Trk::TrackStates>();
625  // copy track Si states into track
627  for (p_stsos = stsos->begin(); p_stsos != stsos->end(); ++p_stsos) {
628  ntsos->push_back((*p_stsos)->clone());
629  }
630  // loop over TRT track extension
631  for (auto & it : tS) {
632  std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
633  typePattern.set(Trk::TrackStateOnSurface::Measurement);
634  const Trk::TrackStateOnSurface* seg_tsos = new Trk::TrackStateOnSurface(it->uniqueClone(), nullptr, nullptr, typePattern);
635  ntsos->push_back(seg_tsos);
636  }
639  info.setPatternRecognitionInfo(Trk::TrackInfo::TRTSeededTrackFinder);
640  std::unique_ptr<Trk::Track> newTrack( std::make_unique<Trk::Track>(info, std::move(ntsos), std::move(fq)) );
641  //Careful refitting at the end
642  if (m_doRefit) {
643  newTrack = (m_fitterTool->fit(Gaudi::Hive::currentContext(),*newTrack, false, Trk::pion) ) ;
644  if (!newTrack) {
645  ATH_MSG_DEBUG ("Refit of TRT+Si track segment failed!");
646  return nullptr;
647  }
648  //Protect for tracks that have no really defined locz and theta parameters
649  const Trk::Perigee* perTrack=newTrack->perigeeParameters();
650  if (perTrack) {
651  const AmgSymMatrix(5)* CM = perTrack->covariance();
652  if (!CM || std::sqrt((*CM)(1,1)) == 0. || std::sqrt((*CM)(3,3)) == 0.) {
653  return nullptr;
654  }
655  }
656  }
657 
658  return newTrack.release();
659 }
660 
662 // Analysis of tracks
664 
665 void
667  if(msgLvl(MSG::DEBUG)) {
668  ATH_MSG_DEBUG( "Analyzing tracks..." );
669  ATH_MSG_DEBUG( "Number of back tracks " << (tC->size()) );
670  int nsct1{}, nsct2{}, nsct3{}, nsct4{}; //SCT layer counters
671  int nsctTot1{}, nsctTot2{}, nsctTot3{}, nsctTot4{}; //SCT layer counters
672  int npix1{}, npix2{}, npix3{}; //Pixel layer counters
673  int npixTot1{}, npixTot2{}, npixTot3{}; //Pixel layer counters
675  TrackCollection::const_iterator r = tC->begin();
677  for (; r != re ; ++r){
678  nsct1=nsct2=nsct3=nsct4=0; npix1=npix2=npix3=0;
679  const Trk::TrackStates* newtsos = (*r)->trackStateOnSurfaces();
680  if(!newtsos) continue;
681  Trk::TrackStates::const_iterator itp, itpe=newtsos->end();
682  for(itp=newtsos->begin(); itp!=itpe; ++itp){
684  const InDet::SiClusterOnTrack* clus = dynamic_cast<const InDet::SiClusterOnTrack*>((*itp)->measurementOnTrack());
685  if(clus && ((*itp)->type(Trk::TrackStateOnSurface::Measurement))){ //Count the number of hits used in the track
686  double rc = clus->globalPosition().perp();
687  if((40.<=rc)&&(rc<80.)){npix1++;} //1st pixel layer
688  if((80.<=rc)&&(rc<100.)){npix2++;} //2nd pixel layer
689  if((100.<=rc)&&(rc<150.)){npix3++;} //3rd pixel layer
690  if((280.<=rc)&&(rc<340.)){nsct1++;} //1st SCT layer
691  if((340.<=rc)&&(rc<390.)){nsct2++;} //2nd SCT layer
692  if((390.<=rc)&&(rc<460.)){nsct3++;} //3rd SCT layer
693  if((460.<=rc)&&(rc<550.)){nsct4++;} //4th SCT layer
694  }
695  }
696  nsctTot1+=nsct1; nsctTot2+=nsct2; nsctTot3+=nsct3; nsctTot4+=nsct4;
697  npixTot1+=npix1; npixTot2+=npix2; npixTot3+=npix3;
698  }
699  ATH_MSG_DEBUG("Total hits on 1st SCT: "<<nsctTot1<<" 2nd SCT: "<<nsctTot2<<" 3rd SCT: "<<nsctTot3<<" 4th SCT: "<<nsctTot4);
700  ATH_MSG_DEBUG("Total hits on 1st Pixel: "<<npixTot1<<" 2nd Pixel: "<<npixTot2<<" 3rd Pixel: "<<npixTot3);
701  }
702 }
703 
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:618
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:413
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:666
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:501
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:221
InDet::TRT_SeededTrackFinder::dumpevent
MsgStream & dumpevent(MsgStream &out, const InDet::TRT_SeededTrackFinder::Stat_t &stat) const
Definition: TRT_SeededTrackFinder.cxx:459
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:559
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:428
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