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