ATLAS Offline Software
TRTTrackHoleSearchTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // TRTTrackHoleSearchTool.cxx
6 // author: Ryan D. Reece <ryan.reece@cern.ch>
7 // created: Nov 2009
8 
10 
11 // STD
12 #include <bitset>
13 #include <cstdlib> // abs
14 #include <cmath> // fabs
15 #include <fstream>
16 
17 // athena
18 #include "TrkTrack/Track.h"
20 
23 #include "TrkSurfaces/Surface.h"
24 #include "Identifier/Identifier.h"
25 #include "InDetIdentifier/TRT_ID.h"
30 #include "CLHEP/Units/SystemOfUnits.h"
31 #include "CLHEP/Geometry/Transform3D.h"
36 
37 
38 //____________________________________________________________________________
39 TRTTrackHoleSearchTool::TRTTrackHoleSearchTool(const std::string& type, const std::string& name, const IInterface* parent)
41  m_extrapolator("Trk::Extrapolator"),
42  m_conditions_svc("TRT_ConditionsSummarySvc", name),
43  m_has_been_called(false),
44  m_TRT_ID(nullptr),
45  m_trt_outer_surf(nullptr)
46 {
47  declareInterface<ITrackHoleSearchTool>(this);
48 
49  declareProperty("extrapolator", m_extrapolator );
50  declareProperty("conditions_svc", m_conditions_svc);
51  declareProperty("use_conditions_svc", m_use_conditions_svc = true);
52  declareProperty("outer_radius", m_outer_radius = 1075.0*CLHEP::mm ); // barrel 1075.0, EC 1010.0
53  declareProperty("max_z", m_max_z = 2715.0*CLHEP::mm ); // barrel 715.0, EC 2715.0
54  declareProperty("max_trailing_holes", m_max_trailing_holes = 1 ); // only used if not end_at_last_trt_hit
55  declareProperty("begin_at_first_trt_hit", m_begin_at_first_trt_hit = false ); // if not, extrapolate from last Si hit
56  declareProperty("end_at_last_trt_hit", m_end_at_last_trt_hit = false ); // if not, continue hole search to the edge of the TRT
57  declareProperty("bcheck", m_bcheck = false );
58  declareProperty("do_dump_bad_straw_log", m_do_dump_bad_straw_log = false );
59  declareProperty("locR_cut", m_locR_cut = -1.0 ); // 1.4*CLHEP::mm // negative means no cut
60  declareProperty("locR_sigma_cut", m_locR_sigma_cut = -1.0 );
61  declareProperty("locZ_cut", m_locZ_cut = 5.0*CLHEP::mm ); // 5.0*CLHEP::mm );
62 }
63 
64 
65 //____________________________________________________________________________
67  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::initialize()" );
68 
69  // retrieve extrapolator
70  ATH_CHECK(m_extrapolator.retrieve());
71 
72  // retrieve TRT_ID
73  ATH_CHECK(detStore()->retrieve(m_TRT_ID, "TRT_ID"));
74 
75  // retrieve ConditionsSummarySvc
76  ATH_CHECK(m_conditions_svc.retrieve());
77 
78  m_trt_outer_surf = new Trk::CylinderSurface(Amg::Transform3D(Amg::Transform3D::Identity()),
80  // note: HepGeom::Translate3D is deleted by Trk::Surface destructor
81 
82  return StatusCode::SUCCESS;
83 }
84 
85 
86 //____________________________________________________________________________
88  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::finalize()" );
89  delete m_trt_outer_surf;
90  return StatusCode::SUCCESS;
91 }
92 
93 
94 //____________________________________________________________________________
96  std::vector<int>& information ,
97  const Trk::ParticleHypothesis partHyp) const {
98  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::countHoles" );
99  const Trk::TrackStates* holes = getHolesOnTrack(track, partHyp);
100  if (holes) {
101  information[Trk::numberOfTRTHoles] = holes->size();
102  delete holes;
103  } else {
104  information[Trk::numberOfTRTHoles] = -1;
105  }
106 }
107 
108 
109 //____________________________________________________________________________
111  const Trk::Track& track,
112  const Trk::ParticleHypothesis partHyp) const {
113  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::getHolesOnTrack" );
114 
115  // write out list of bad straws for debugging purposes.
116  // only dump log on first call of this function.
119  }
120  m_has_been_called = true;
121 
122  if (track.perigeeParameters()) {
123  ATH_MSG_VERBOSE( " This track has perigee: \n"
124  << " pT = " << track.perigeeParameters()->pT()/CLHEP::GeV << " CLHEP::GeV\n"
125  << " eta = " << track.perigeeParameters()->eta() << "\n"
126  << " phi = " << track.perigeeParameters()->parameters()[Trk::phi0] << "\n"
127  << " d0 = " << track.perigeeParameters()->parameters()[Trk::d0] << "\n"
128  << " z0 = " << track.perigeeParameters()->parameters()[Trk::z0] );
129  }
130 
131  // get TrackStateOnSurfaces
132  const Trk::TrackStates* track_states = track.trackStateOnSurfaces();
133  if (track_states) {
134  ATH_MSG_DEBUG( " This track has " << track_states->size() << " track states on surface." );
135  } else {
136  ATH_MSG_WARNING( " This track has null track states on surface. Returning 0." );
137  return nullptr;
138  }
139 
140  if (track_states->size() < 2) {
141  ATH_MSG_WARNING( " Fewer than 2 TrackStatesOnSurface. Returning 0." );
142  return nullptr;
143  }
144 
145  // set beginning point of extrapolation
146  Trk::TrackStates::const_iterator beginning_track_state;
148  // begin at first TRT hit
149  beginning_track_state = find_first_trt_hit(*track_states);
150  } else {
151  // begin at last Si hit
152  beginning_track_state = find_last_hit_before_trt(*track_states);
153  if (beginning_track_state == track_states->end()) {
154  ATH_MSG_WARNING( " beginning_track_state == track_states->end(). There must be no Si hits.\n"
155  << " Will try to begin at the first TRT hit." );
156  beginning_track_state = find_first_trt_hit(*track_states);
157  }
158  }
159 
160  if (beginning_track_state == track_states->end()) {
161  ATH_MSG_WARNING( " beginning_track_state == track_states->end(). No where to extrapolate to. Returning 0." );
162  return nullptr;
163  }
164 
165  // to be returned:
167 
168  Trk::TrackStates::const_iterator track_state = beginning_track_state;
169  const Trk::TrackParameters* start_parameters = (*track_state)->trackParameters();
170  ++track_state;
171  // loop over TrackStateOnSurfaces (destination surfaces for extrapolation)
172  for (; track_state != track_states->end(); ++track_state) {
173  // skip track states that are not measurements
174  if (!(*track_state)->type(Trk::TrackStateOnSurface::Measurement)) {
175  ATH_MSG_VERBOSE( " TrackStateOnSurface is not of type Trk::TrackStateOnSurface::Measurement." );
176  continue;
177  }
178 
179  const Trk::TrackParameters* end_parameters = (*track_state)->trackParameters();
180  if(end_parameters) {
181  ATH_MSG_VERBOSE( " TrackStateOnSurface: (x, y, z) = ("
182  << end_parameters->position().x() << ", "
183  << end_parameters->position().y() << ", "
184  << end_parameters->position().z() << "); (rho, eta, phi) = ("
185  << end_parameters->position().perp() << ", "
186  << end_parameters->position().eta() << ", "
187  << end_parameters->position().phi() << ")");
188  } else {
189  ATH_MSG_WARNING( " TrackStateOnSurface has no TrackParameters." );
190  continue;
191  }
192 
193  const Trk::Surface& end_surf = end_parameters->associatedSurface();
194  if (!start_parameters) {
195  start_parameters = end_parameters;
196  } else {
197  extrapolateBetweenHits(start_parameters, end_surf, holes, partHyp);
198  start_parameters = end_parameters;
199  }
200  } // end loop over TrackStateOnSurfaces
201 
202  if( !m_end_at_last_trt_hit ) {
203  // final extrapolation to the edge of TRT to check for holes in outermost straws
204  int trailing_hole_count = extrapolateBetweenHits(start_parameters, *m_trt_outer_surf, holes, partHyp);
205 
206  // remove trailing holes
207  if(trailing_hole_count > m_max_trailing_holes) {
208  ATH_MSG_DEBUG("There are " << trailing_hole_count << " trailing holes removed.");
209  for(int i=0; i < trailing_hole_count; i++) {
210  holes->pop_back();
211  /*
212  Note: DataVector::pop_back() deletes pointers if it owns them.
213  */
214  }
215  }
216  }
217 
218  return holes;
219 }
220 
221 
222 //____________________________________________________________________________
224  const Trk::ParticleHypothesis partHyp) const {
225  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::getTrackWithHoles" );
226  const Trk::TrackStates* holes = getHolesOnTrack(track, partHyp);
227  const Trk::Track* new_track = addHolesToTrack(track, holes);
228  delete holes;
229  return new_track;
230 }
231 
232 
233 //____________________________________________________________________________
235  const Trk::ParticleHypothesis partHyp) const {
236  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::getTrackWithHolesAndOutliers" );
237  return getTrackWithHoles(track, partHyp);
238 }
239 
240 //----------------------------------------------------------------------------
241 // Private Methods
242 //----------------------------------------------------------------------------
243 
244 //____________________________________________________________________________
246  const Trk::Surface& end_surf,
248  const Trk::ParticleHypothesis partHyp/*=Trk::pion*/) const {
249  int hole_count = 0;
250  // initialize previous id
251  const Trk::Surface& start_surf = start_parameters->associatedSurface();
252 
253  Identifier previous_id = start_surf.associatedDetectorElementIdentifier();
254 
255  // get end id
256  const Identifier end_id = end_surf.associatedDetectorElementIdentifier();
257 
258  // look for holes
259  std::vector<std::unique_ptr<Trk::TrackParameters> > steps =
260  m_extrapolator->extrapolateStepwise(Gaudi::Hive::currentContext(),
261  *start_parameters,
262  end_surf,
263  Trk::alongMomentum, m_bcheck, partHyp);
264 
265  if(steps.empty()) {
266  ATH_MSG_DEBUG("extrapolateBetweenHits: extrapolateStepwise returned null");
267  } else {
268  // loop over parameters from extrapolation
269  // note: the last element in the vector is always the track parameters at the destination surface
270  for(std::vector<std::unique_ptr<Trk::TrackParameters> >::const_iterator step = steps.begin(); step != steps.end()-1; ++step) {
271  // check for surface
272  const Trk::Surface& surf = (*step)->associatedSurface();
273 
274  // get id
276 
277  // check that the surface is a TRT straw
278  if(!m_TRT_ID->is_trt(id)) {
279  ATH_MSG_DEBUG("extrapolateBetweenHits: surf is not a TRT straw. Skipping.");
280  continue;
281  }
282 
283  // check that we are not still on the previous id
284  if(id == previous_id) {
285  ATH_MSG_DEBUG("extrapolateBetweenHits: id == previous_id");
286  continue;
287  }
288 
289  // check that we haven't hit the destination surface
290  if(id == end_id) {
291  ATH_MSG_DEBUG("extrapolateBetweenHits: id == end_id");
292  continue;
293  }
294 
295  // ignore id 0xffffffff from m_trt_outer_surf
296  if(id == 0xffffffff) {
297  ATH_MSG_DEBUG("extrapolateBetweenHits: id == 0xffffffff. Skipping.");
298  continue;
299  }
300 
301  // don't count bad straws as holes
302  if( (m_use_conditions_svc)&&(!m_conditions_svc->isGood(id)) ) {
303  ATH_MSG_DEBUG("extrapolateBetweenHits: ConditionsSvc says this straw is bad. Skipping.");
304  continue;
305  }
306 
307  // check fiducial |locR| by sigma
308  const float locR = (*step)->parameters()[Trk::locR];
309  if(m_locR_sigma_cut > 0.0) {
310  //const Trk::MeasuredTrackParameters* meas = dynamic_cast< const Trk::MeasuredTrackParameters* >(*step);
311  //if(meas)
312  //{
313 
314  const AmgSymMatrix(5)* merr = (*step)->covariance();
315 
316  if(merr){
317  //const float locR_error = (*merr)(Trk::locR,Trk::locR);
318 
319  const float locR_error = Amg::error(*merr,Trk::locR);
320 
321  // hole must be within the straw by some tolerance
322  if( (2.0*CLHEP::mm - fabs(locR))/locR_error < m_locR_sigma_cut ) {
323  continue;
324  }
325  } else {
326  ATH_MSG_WARNING("extrapolateBetweenHits: Track parameters failed to dynamic_cast< const Trk::MeasuredTrackParameters* >.");
327  continue;
328  }
329  }
330  // check fiducial |locR| by value
331  if(m_locR_cut > 0.0) {
332  if( fabs(locR) > m_locR_cut )
333  continue;
334  }
335  // check fiducial |locZ| by value
336  if(m_locZ_cut > 0.0) {
337  const float locZ = (*step)->parameters()[Trk::locZ];
338  const Trk::CylinderBounds* cylb = dynamic_cast<const Trk::CylinderBounds *>(&surf.bounds());
339  if(cylb) {
340  const float halfz=cylb->halflengthZ();
341  if( fabs(locZ) > halfz - m_locZ_cut ) continue;
342  } else {
343  ATH_MSG_WARNING("extrapolateBetweenHits: Surface failed to dynamic_cast to Trk::CylinderBounds. Skipping.");
344  continue;
345  }
346  }
347 
348  // if we've gotten here, it is a legitimate hole
349  ATH_MSG_DEBUG(" HOLE Found! Identifier = " << id.getString() << " indicates:\n"
350  << " is_pixel = " << m_TRT_ID->is_pixel(id) << "\n"
351  << " is_sct = " << m_TRT_ID->is_sct(id) << "\n"
352  << " is_trt = " << m_TRT_ID->is_trt(id) << "\n"
353  << " barrel_ec = " << m_TRT_ID->barrel_ec(id) << "\n"
354  << " phi_module = " << m_TRT_ID->phi_module(id) << "\n"
355  << " layer_or_wheel = " << m_TRT_ID->layer_or_wheel(id) << "\n"
356  << " straw_layer = " << m_TRT_ID->straw_layer(id) << "\n"
357  << " straw = " << m_TRT_ID->straw(id) << "\n"
358  << " rho = " << (*step)->position().perp() );
359 
360  std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern;
361  typePattern.set(Trk::TrackStateOnSurface::Hole);
362  holes->push_back( new Trk::TrackStateOnSurface(nullptr, (*step)->uniqueClone(), nullptr, typePattern) );
363  hole_count++;
364  previous_id = id;
365  } // end loop over parameters from extrapolation
366  }
367  return hole_count;
368 }
369 
370 
371 //____________________________________________________________________________
373  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::dump_bad_straw_log" );
374  std::ofstream out("TRT_ConditionsSummarySvc_bad_straws.log");
375  out << "# id barrel_ec phi_module layer_or_wheel straw_layer straw" << std::endl;
376  for(std::vector<Identifier>::const_iterator it = m_TRT_ID->straw_layer_begin(); it != m_TRT_ID->straw_layer_end(); ++it) {
377  for(int i=0; i<= m_TRT_ID->straw_max(*it); ++i) {
378  Identifier id = m_TRT_ID->straw_id(*it, i);
379  if(!m_conditions_svc->isGood(id)) {
380  out << id.getString()
381  << std::setw(3) << m_TRT_ID->barrel_ec(id)
382  << std::setw(4) << m_TRT_ID->phi_module(id)
383  << std::setw(4) << m_TRT_ID->layer_or_wheel(id)
384  << std::setw(4) << m_TRT_ID->straw_layer(id)
385  << std::setw(4) << m_TRT_ID->straw(id)
386  << std::endl;
387  }
388  }
389  }
390  out.close();
391 }
392 
393 
394 //____________________________________________________________________________
397  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::find_first_trt_hit" );
398  // finds the first TRT hit or returns end
399  Trk::TrackStates::const_iterator track_state = track_states.begin();
400  for(; track_state != track_states.end(); ++track_state) {
401  // skip track states that are not measurements
402  if(!(*track_state)->type(Trk::TrackStateOnSurface::Measurement)) {
403  ATH_MSG_VERBOSE( " TrackStateOnSurface is not of type Trk::TrackStateOnSurface::Measurement." );
404  continue;
405  }
406  if( dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>( (*track_state)->measurementOnTrack() ) ) {
407  ATH_MSG_DEBUG(" Found first TRT hit.");
408  break;
409  }
410  }
411  return track_state;
412 }
413 
414 
415 //____________________________________________________________________________
418  ATH_MSG_DEBUG( "TRTTrackHoleSearchTool::find_last_hit_before_trt" );
419  // start at first TRT hit
420  Trk::TrackStates::const_iterator track_state = find_first_trt_hit(track_states);
421  // if there is no room to step backwards in the hits, return end
422  if(track_states.size() < 2 || track_state == track_states.begin()) {
423  return track_states.end();
424  }
425  --track_state; // step back and look for last measurement before the TRT hit
426  for(; track_state != track_states.begin(); --track_state) {
427  if((*track_state)->type(Trk::TrackStateOnSurface::Measurement)) {
428  break;
429  }
430  }
431  // if the loop ended without finding a measurement, return end
432  if(!(*track_state)->type(Trk::TrackStateOnSurface::Measurement)) {
433  return track_states.end();
434  }
435  return track_state;
436 }
437 
438 //____________________________________________________________________________
439 const Trk::Track*
441  const Trk::Track& track,
442  const Trk::TrackStates* holes) const
443 {
444  ATH_MSG_DEBUG("TRTTrackHoleSearchTool::addHolesToTrack");
445  /*
446  This method was basically coppied from here:
447  http://alxr.usatlas.bnl.gov/lxr-stb4/source/atlas/InnerDetector/InDetRecTools/InDetTrackHoleSearch/src/InDetTrackHoleSearchTool.cxx#931
448  */
449 
450  // get states from track
451  auto tsos = std::make_unique<Trk::TrackStates>();
452  for (const auto *it : *track.trackStateOnSurfaces()) {
453  // veto old holes
454  if (!it->type(Trk::TrackStateOnSurface::Hole)) {
455  tsos->push_back(new Trk::TrackStateOnSurface(*it));
456  }
457  }
458 
459  // if we have no holes on the old track and no holes found by search, then we
460  // just copy the track
461  if (track.trackStateOnSurfaces()->size() == tsos->size() && holes->empty()) {
462  // create copy of track
463  const Trk::Track* new_track = new Trk::Track(
464  track.info(),
465  std::move(tsos),
466  track.fitQuality() ? track.fitQuality()->uniqueClone() : nullptr);
467  return new_track;
468  }
469 
470  // add new holes
471  tsos->insert(tsos->end(), holes->begin(), holes->end());
472 
473  // sort
474  const Trk::TrackParameters* perigee = track.perigeeParameters();
475  if (!perigee)
476  perigee = (*(track.trackStateOnSurfaces()->begin()))->trackParameters();
477 
478  if (perigee) {
480 
481  if (fabs(perigee->parameters()[Trk::qOverP]) > 0.002) {
482  /* invest n*(logN)**2 sorting time for lowPt, coping with a possibly
483  not 100% transitive comparison functor. */
484  if (msgLvl(MSG::DEBUG)) {
485  msg() << "sorting vector with stable_sort" << endmsg;
486  }
487  std::stable_sort(tsos->begin(), tsos->end(), CompFunc);
488  } else {
489  tsos->sort(CompFunc); // respects DV object ownership
490  }
491  }
492 
493  // create copy of track
494  const Trk::Track* new_track =
495  new Trk::Track(track.info(),
496  std::move(tsos),
497  track.fitQuality() ? track.fitQuality()->uniqueClone() : nullptr);
498 
499  return new_track;
500 }
501 
502 // EOF
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
AtlasDetectorID::is_pixel
bool is_pixel(Identifier id) const
Definition: AtlasDetectorID.h:760
TRTTrackHoleSearchTool::extrapolateBetweenHits
int extrapolateBetweenHits(const Trk::TrackParameters *start_parameters, const Trk::Surface &end_surf, Trk::TrackStates *holes, const Trk::ParticleHypothesis partHyp=Trk::pion) const
Definition: TRTTrackHoleSearchTool.cxx:245
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
TRTTrackHoleSearchTool::getHolesOnTrack
const Trk::TrackStates * getHolesOnTrack(const Trk::Track &track, const Trk::ParticleHypothesis partHyp=Trk::pion) const
Input : track, parthyp Return: A DataVector containing pointers to TrackStateOnSurfaces which each re...
Definition: TRTTrackHoleSearchTool.cxx:110
TRT_ID::straw_max
int straw_max(const Identifier &id) const
Definition: TRT_ID.cxx:1001
TrackParameters.h
Surface.h
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AtlasDetectorID::is_sct
bool is_sct(Identifier id) const
Definition: AtlasDetectorID.h:770
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::ParametersBase::associatedSurface
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
InDetDD::holes
@ holes
Definition: InDetDD_Defs.h:17
EventPrimitivesHelpers.h
Trk::Surface::associatedDetectorElementIdentifier
Identifier associatedDetectorElementIdentifier() const
return Identifier of the associated Detector Element
xAOD::JetInput::Track
@ Track
Definition: JetContainerInfo.h:61
TRTTrackHoleSearchTool::m_conditions_svc
ServiceHandle< IInDetConditionsSvc > m_conditions_svc
Definition: TRTTrackHoleSearchTool.h:84
skel.it
it
Definition: skel.GENtoEVGEN.py:423
TRT_ID.h
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
TrackStateOnSurfaceComparisonFunction.h
Trk::z0
@ z0
Definition: ParamDefs.h:70
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
PropDirection.h
IExtrapolator.h
TRTTrackHoleSearchTool::m_end_at_last_trt_hit
bool m_end_at_last_trt_hit
Definition: TRTTrackHoleSearchTool.h:90
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
Trk::locR
@ locR
Definition: ParamDefs.h:50
AtlasDetectorID::is_trt
bool is_trt(Identifier id) const
Definition: AtlasDetectorID.h:782
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDet::TRT_DriftCircleOnTrack
Definition: TRT_DriftCircleOnTrack.h:53
Trk::numberOfTRTHoles
@ numberOfTRTHoles
number of TRT hits which pass the high threshold (only xenon counted) total number of TRT hits which ...
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:83
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
TRT_ID::straw_layer_end
const_id_iterator straw_layer_end(void) const
Definition: TRT_ID.h:961
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
TRTTrackHoleSearchTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: TRTTrackHoleSearchTool.h:83
Track.h
TRTTrackHoleSearchTool::m_begin_at_first_trt_hit
bool m_begin_at_first_trt_hit
Definition: TRTTrackHoleSearchTool.h:89
TRTTrackHoleSearchTool.h
TRTTrackHoleSearchTool::initialize
StatusCode initialize()
Definition: TRTTrackHoleSearchTool.cxx:66
TRTTrackHoleSearchTool::countHoles
void countHoles(const Trk::Track &track, std::vector< int > &information, const Trk::ParticleHypothesis partHyp=Trk::pion) const
Input : track, partHyp Output: Changes in information This method fills the fields relevant to the ho...
Definition: TRTTrackHoleSearchTool.cxx:95
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
TRTTrackHoleSearchTool::m_locZ_cut
float m_locZ_cut
Definition: TRTTrackHoleSearchTool.h:95
Trk::TrackStateOnSurfaceComparisonFunction
Class providing comparison function, or relational definition, for sorting MeasurementBase objects.
Definition: TrackStateOnSurfaceComparisonFunction.h:37
TRT_ID::straw
int straw(const Identifier &id) const
Definition: TRT_ID.h:902
TRTTrackHoleSearchTool::m_use_conditions_svc
bool m_use_conditions_svc
Definition: TRTTrackHoleSearchTool.h:85
beamspotman.steps
int steps
Definition: beamspotman.py:505
Trk::locZ
@ locZ
local cylindrical
Definition: ParamDefs.h:48
Trk::TrackStates
DataVector< const Trk::TrackStateOnSurface > TrackStates
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:30
Trk::TrackStateOnSurface::Hole
@ Hole
A hole on the track - this is defined in the following way.
Definition: TrackStateOnSurface.h:128
lumiFormat.i
int i
Definition: lumiFormat.py:92
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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
Trk::CylinderSurface
Definition: CylinderSurface.h:55
Trk::CylinderBounds
Definition: CylinderBounds.h:46
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
CylinderSurface.h
TRTTrackHoleSearchTool::m_TRT_ID
const TRT_ID * m_TRT_ID
Definition: TRTTrackHoleSearchTool.h:100
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
TRT_DriftCircleOnTrack.h
TRT_ID::barrel_ec
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
Definition: TRT_ID.h:866
TRT_ID::straw_layer
int straw_layer(const Identifier &id) const
Definition: TRT_ID.h:893
DataVector< const Trk::TrackStateOnSurface >
ParticleHypothesis.h
TRT_ID::layer_or_wheel
int layer_or_wheel(const Identifier &id) const
Definition: TRT_ID.h:884
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:191
Trk::Surface::bounds
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Trk::d0
@ d0
Definition: ParamDefs.h:69
Amg::error
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Definition: EventPrimitivesHelpers.h:40
TRTTrackHoleSearchTool::m_do_dump_bad_straw_log
bool m_do_dump_bad_straw_log
Definition: TRTTrackHoleSearchTool.h:92
TRTTrackHoleSearchTool::m_max_trailing_holes
int m_max_trailing_holes
Definition: TRTTrackHoleSearchTool.h:88
TRTTrackHoleSearchTool::dump_bad_straw_log
void dump_bad_straw_log() const
Definition: TRTTrackHoleSearchTool.cxx:372
TRTTrackHoleSearchTool::m_bcheck
bool m_bcheck
Definition: TRTTrackHoleSearchTool.h:91
TRT_ID::phi_module
int phi_module(const Identifier &id) const
Definition: TRT_ID.h:875
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
IInDetConditionsSvc.h
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TRTTrackHoleSearchTool::m_locR_cut
float m_locR_cut
Definition: TRTTrackHoleSearchTool.h:93
TRTTrackHoleSearchTool::find_first_trt_hit
Trk::TrackStates::const_iterator find_first_trt_hit(const Trk::TrackStates &track_states) const
Definition: TRTTrackHoleSearchTool.cxx:396
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
TRTTrackHoleSearchTool::find_last_hit_before_trt
Trk::TrackStates::const_iterator find_last_hit_before_trt(const Trk::TrackStates &track_states) const
Definition: TRTTrackHoleSearchTool.cxx:417
TRTTrackHoleSearchTool::TRTTrackHoleSearchTool
TRTTrackHoleSearchTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: TRTTrackHoleSearchTool.cxx:39
LArCellBinning.step
step
Definition: LArCellBinning.py:158
TRTTrackHoleSearchTool::m_has_been_called
std::atomic_bool m_has_been_called
Definition: TRTTrackHoleSearchTool.h:99
TRT_ID::straw_layer_begin
const_id_iterator straw_layer_begin(void) const
Iterators over full set of straw_layer ids. Straw_layer ids are sorted.
Definition: TRT_ID.h:953
TRTTrackHoleSearchTool::finalize
StatusCode finalize()
Definition: TRTTrackHoleSearchTool.cxx:87
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
TRTTrackHoleSearchTool::m_max_z
float m_max_z
Definition: TRTTrackHoleSearchTool.h:87
TRTTrackHoleSearchTool::getTrackWithHolesAndOutliers
const Trk::Track * getTrackWithHolesAndOutliers(const Trk::Track &track, const Trk::ParticleHypothesis partHyp=Trk::pion) const
Input : track, parthyp Return: A pointer to a new Trk::Track which containes the information of the i...
Definition: TRTTrackHoleSearchTool.cxx:234
AthAlgTool
Definition: AthAlgTool.h:26
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
TRTTrackHoleSearchTool::addHolesToTrack
const Trk::Track * addHolesToTrack(const Trk::Track &track, const Trk::TrackStates *holes) const
Definition: TRTTrackHoleSearchTool.cxx:440
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
TRTTrackHoleSearchTool::m_outer_radius
float m_outer_radius
Definition: TRTTrackHoleSearchTool.h:86
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Trk::phi0
@ phi0
Definition: ParamDefs.h:71
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
TrackStateOnSurface.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
TRTTrackHoleSearchTool::m_trt_outer_surf
Trk::CylinderSurface * m_trt_outer_surf
Definition: TRTTrackHoleSearchTool.h:101
Trk::CylinderBounds::halflengthZ
double halflengthZ() const
This method returns the halflengthZ.
TRT_ID::straw_id
Identifier straw_id(int barrel_ec, int phi_module, int layer_or_wheel, int straw_layer, int straw) const
Three ways of getting id for a single straw:
Definition: TRT_ID.h:581
TRTTrackHoleSearchTool::getTrackWithHoles
const Trk::Track * getTrackWithHoles(const Trk::Track &track, const Trk::ParticleHypothesis partHyp=Trk::pion) const
Input : track, parthyp Return: A pointer to a new Trk::Track which containes the information of the i...
Definition: TRTTrackHoleSearchTool.cxx:223
TRTTrackHoleSearchTool::m_locR_sigma_cut
float m_locR_sigma_cut
Definition: TRTTrackHoleSearchTool.h:94