ATLAS Offline Software
InDetConversionTrackSelectorTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "VxVertex/Vertex.h"
7 #include "TrkTrack/Track.h"
9 // normal includes
12 #include "VxVertex/RecVertex.h"
14 #include "xAODTracking/Vertex.h"
15 #include <cmath>
16 
17 
18 namespace InDet
19 {
20 
21  InDetConversionTrackSelectorTool::InDetConversionTrackSelectorTool(const std::string& t, const std::string& n, const IInterface* p)
22  :AthAlgTool(t,n,p),
23  m_maxSiD0 (35.),
24  m_maxTrtD0 (100.),
25  m_maxSiZ0 (200.),
26  m_maxTrtZ0 (1200),
27  m_minPt (500.),
28  m_trRatio1 (0.5),
29  m_trRatio2 (0.1),
30  m_trRatio3 (0.05),
31  m_trRatioTRT(0.1),
32  m_trRatioV0 (1.),
33  m_sD0_Si (2.),
34  m_sD0_Trt (0.5),
35  m_sZ0_Trt (3.),
36  m_isConv(true)
37  {
38  // There is room for 10 bins, for future development.
39  // The default below represents one eta bin between 0 and 999
40  // and no cuts applied.
41  m_TRTTrksEtaBins.clear();
43  for (unsigned int i=0;i<10;++i) {
44  m_TRTTrksEtaBins.push_back(999);
45  m_TRTTrksBinnedRatioTRT.push_back(0);
46  }
47 
48  declareInterface<ITrackSelectorTool>(this);
49  declareProperty("maxSiD0", m_maxSiD0);
50  declareProperty("maxTrtD0", m_maxTrtD0);
51  declareProperty("maxSiZ0", m_maxSiZ0);
52  declareProperty("maxTrtZ0", m_maxTrtZ0);
53  declareProperty("minPt", m_minPt);
54  declareProperty("RatioCut1", m_trRatio1);
55  declareProperty("RatioCut2", m_trRatio2);
56  declareProperty("RatioCut3", m_trRatio3);
57  declareProperty("RatioTRT", m_trRatioTRT);
58  // See InDet Trt Track Scoring Tool for nTRT cut on TRT-only tracks
59  declareProperty("TRTTrksEtaBins" , m_TRTTrksEtaBins); /* expects 10 eta bins (set unused bins to e.g. 999) */
60  declareProperty("TRTTrksBinnedRatioTRT" , m_TRTTrksBinnedRatioTRT); /* expects 10 values */
61  declareProperty("RatioV0", m_trRatioV0);
62  declareProperty("significanceD0_Si", m_sD0_Si);
63  declareProperty("significanceD0_Trt", m_sD0_Trt);
64  declareProperty("significanceZ0_Trt", m_sZ0_Trt);
65  declareProperty("IsConversion", m_isConv);
66  declareProperty("PIDonlyForXe", m_PIDonlyForXe = false,
67  "Only check TRT PID if all hits are Xe hits");
68  }
69 
70 
72  {
73  ATH_CHECK( m_extrapolator.retrieve() );
76 
77  return StatusCode::SUCCESS;
78  }
79 
81  {
82  if(m_useEventInfoBs){
84  if (evt.isValid()) {
85  InDet::BeamSpotData temp(evt->beamStatus(), evt->beamPosX(), evt->beamPosY(), evt->beamPosZ(),
86  evt->beamPosSigmaX(), evt->beamPosSigmaY(), evt->beamPosSigmaZ(),
87  evt->beamTiltXZ(), evt->beamTiltYZ(), evt->beamPosSigmaXY());
88  return new Trk::RecVertex(temp.beamVtx());
89  } else {
90  ATH_MSG_WARNING( " Cannot get beamSpot center from xAOD::EventInfo. Using (0,0,0)... " );
91  return new Trk::Vertex(Amg::Vector3D(0,0,0));
92  }
93  }else{
95  if (beamSpotHandle.isValid()) {
96  return new Trk::RecVertex(beamSpotHandle->beamVtx());
97  } else {
98  ATH_MSG_WARNING( " Cannot get beamSpot center from BeamSpotData. Using (0,0,0)... " );
99  return new Trk::Vertex(Amg::Vector3D(0,0,0));
100  }
101  }
102  }
103 
104 
106  {
107  // Find the correct bin for applying eta-dependent cuts
108 
109  double tanThetaOver2 = std::tan( perigee.parameters()[Trk::theta] / 2.);
110  double abs_eta = (tanThetaOver2 == 0) ? 999.0 : std::fabs( std::log(tanThetaOver2) );
111 
112  for (unsigned int i=0;i<m_TRTTrksEtaBins.size();++i) {
113  if (abs_eta < m_TRTTrksEtaBins[i]) {
114  return i;
115  }
116  }
117  return m_TRTTrksEtaBins.size()-1;
118  }
119 
120 
122  {
123  const EventContext& ctx = Gaudi::Hive::currentContext();
124  bool pass = false;
125  const Trk::Perigee* perigee=dynamic_cast<const Trk::Perigee*>(track.perigeeParameters());
126  const bool vertexSuppliedByUser{vx!=nullptr};
127  const Trk::Vertex* myVertex=vx;
128  //in case no Vertex is provided by the user, beam position will be used if available
129  if (not vertexSuppliedByUser) {
130  myVertex = getBeamSpot(ctx);
131  }
132  Trk::PerigeeSurface perigeeSurface(myVertex->position());
133  const Trk::TrackParameters *firstmeaspar=nullptr;
134  for (const auto *i : *track.trackParameters()){
135  if ( i->covariance() && !dynamic_cast<const Trk::Perigee*>(i)) {
136  firstmeaspar=i;
137  break;
138  }
139  }
140  if (!firstmeaspar) {
141  //assumes perigeeParameters exist...
142  //no track selection if firstmeas + perigee does not exist !
143  firstmeaspar=track.perigeeParameters();
144  if (!firstmeaspar){
145  ATH_MSG_WARNING( " First measurment on track is missing. Using perigee Parameters, but they are missing: 0 pointer! Track selection failed " );
146  //clean up vertex
147  if (not vertexSuppliedByUser) delete myVertex;
148  return false;
149  }
150  }
151 
152  const Trk::TrackParameters* extrapolatedParameters =
153  m_extrapolator->extrapolate(ctx,
154  *firstmeaspar,
155  perigeeSurface,
157  true,
158  track.info().particleHypothesis()).release();
159  perigee = extrapolatedParameters
160  ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters)
161  : nullptr;
162  if (perigee==nullptr || !perigee->covariance() ) {
163  ATH_MSG_WARNING( "Track Selector failed to extrapolate track to the vertex: " << myVertex->position() );
164  if (extrapolatedParameters!=nullptr) {
165  ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!");
166  delete extrapolatedParameters;
167  if (not vertexSuppliedByUser) delete myVertex;
168  return false;
169  }
170  if (not vertexSuppliedByUser) delete myVertex;
171  return false;
172  }
173 
174  double qOverP = perigee->parameters()[Trk::qOverP];
175  double pt = std::fabs(1./qOverP)*std::sin(perigee->parameters()[Trk::theta]);
176  double d0 = perigee->parameters()[Trk::d0];
177  double z0 = perigee->parameters()[Trk::z0];
178  const Trk::TrackSummary* tSum = track.trackSummary();
179  if(tSum){
180  double ratioTrk = 1.0;
181  int nclus = tSum->get(Trk::numberOfPixelHits) + tSum->get(Trk::numberOfSCTHits);
182  bool isSilicon = (nclus > 0);
183  int nTrtHits = tSum->get(Trk::numberOfTRTHits);
184  int nTrtOutliers = tSum->get(Trk::numberOfTRTOutliers);
185  int ntrt = nTrtHits + nTrtOutliers;
186  int nTrtXenonHits = tSum->get(Trk::numberOfTRTXenonHits);
187  if(m_isConv) {
188  if(ntrt > 0 && (!m_PIDonlyForXe || nTrtXenonHits==ntrt) ){
189  // only check TRT PID if m_PIDonlyForXe is false or all TRT hits are Xenon hits
190  ATH_MSG_FATAL( "eProbabilityHT not available for Trk::Tracks only xAOD::TrackParticle objects" );
191  }
192 
193  // Start of track cuts
194  if ( pt >= m_minPt ) {
195 
196  // Silicon track cuts
197  if ( isSilicon && (std::fabs(d0)<=m_maxSiD0) && (fabs(z0)<=m_maxSiZ0) ) {
198  if((ntrt<=15 && ratioTrk>=m_trRatio1) ||
199  (ntrt>15 && ntrt<=25 && ratioTrk>=m_trRatio2) ||
200  (ntrt>25 && ratioTrk>=m_trRatio3)) pass = true;
201  }
202 
203  // TRT-only track cuts
204  if ( (not isSilicon) && (std::fabs(d0)<=m_maxTrtD0) && (std::fabs(z0)<=m_maxTrtZ0) ) {
205 
206  unsigned int eta_bin = getEtaBin(*perigee);
207  // TRT-only Tracks: eProbabilityHT cut below
208  // See InDet Trt Track Scoring Tool for nTRT cut on TRT-only tracks
209  double trRatioTRT = std::max( m_trRatioTRT, m_TRTTrksBinnedRatioTRT[eta_bin] );
210 
211  if ( ratioTrk >= trRatioTRT ) pass = true; // TRT Track cuts
212  }
213  } // end of track cuts for isConv
214 
215  } else {
216  //The cuts below are necessary for the V0 track selection
217  const AmgSymMatrix(5)& err = *perigee->covariance();
218  double sd0sq = err(0,0);
219  double sd0 = (sd0sq>0.)?std::sqrt(sd0sq):0.;
220  double sz0sq = err(1,1);
221  double sz0 = (sz0sq>0.)?std::sqrt(sz0sq):0.;
222  if(nclus == 0){
223  if(std::fabs(d0)>=m_sD0_Trt*sd0 && std::fabs(d0)<=m_maxTrtD0 && std::fabs(z0)<=m_sZ0_Trt*sz0 && pt>=m_minPt) pass = true;
224  }else{
225  if(std::fabs(d0)>=m_sD0_Si*sd0 && std::fabs(z0)<=m_maxSiZ0 && pt>=m_minPt) pass = true;
226  }
227  ratioTrk = 1.0;
228  if(ntrt > 0 && (!m_PIDonlyForXe || nTrtXenonHits==ntrt) ) { // only check TRT PID if m_PIDonlyForXe is false or all TRT hits are Xenon hits
229  ATH_MSG_FATAL( "eProbabilityHT not available for Trk::Tracks only xAOD::TrackParticle objects" );
230  }
231  if(ratioTrk>m_trRatioV0) pass = false;
232  }
233 
234  } else pass = false;
235  if (not vertexSuppliedByUser) delete myVertex;
236  if (perigee!=track.perigeeParameters()) delete perigee;
237  return pass;
238  }
239 
241  {
242  const EventContext& ctx = Gaudi::Hive::currentContext();
243  bool pass = false;
244  const Trk::TrackParameters* definintParameters=&(track.definingParameters());
245  const Trk::Perigee* perigee=dynamic_cast<const Trk::Perigee*>(definintParameters);
246  const Trk::Vertex* myVertex=vx;
247  const bool vertexSuppliedByUser{vx!=nullptr};
248  //in case no Vertex is provided by the user, beam position will be used if available
249  if (not vertexSuppliedByUser) {
250  myVertex = getBeamSpot(ctx);
251  }
252 
253  Trk::PerigeeSurface perigeeSurface(myVertex->position());
254  const Trk::TrackParameters *firstmeaspar=nullptr;
255  for (const auto *i : track.trackParameters()){
256  if ( i->covariance() && !dynamic_cast<const Trk::Perigee*>(i)) {
257  firstmeaspar=i;
258  break;
259  }
260  }
261  if (!firstmeaspar) {
262  //using perigee instead of firstmeasurement, since first measurement was not found...
263  firstmeaspar=&(track.definingParameters());
264  if (!firstmeaspar){
265  ATH_MSG_WARNING( " Track Paraemters at first measurement not found. Perigee not found. Cannot do TrackSelection..." );
266  if (not vertexSuppliedByUser) delete myVertex;
267  return false;
268  }
269  }
270  const Trk::TrackParameters* extrapolatedParameters =
271  m_extrapolator->extrapolate(
272  ctx, *firstmeaspar, perigeeSurface, Trk::anyDirection, true, Trk::pion).release();
273  perigee = extrapolatedParameters
274  ? dynamic_cast<const Trk::Perigee*>(extrapolatedParameters)
275  : nullptr;
276  if (perigee == nullptr || !perigee->covariance()) {
277  ATH_MSG_WARNING( "Track Selector failed to extrapolate track to the vertex: " << myVertex->position() );
278  if (extrapolatedParameters!=nullptr) {
279  ATH_MSG_WARNING( "The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
280  delete extrapolatedParameters;
281  if (not vertexSuppliedByUser) delete myVertex;
282  return false;
283  }
284  if (not vertexSuppliedByUser) delete myVertex;
285  return false;
286  }
287 
288  double qOverP = perigee->parameters()[Trk::qOverP];
289  double pt = std::fabs(1./qOverP)*std::sin(perigee->parameters()[Trk::theta]);
290  double d0 = perigee->parameters()[Trk::d0];
291  double z0 = perigee->parameters()[Trk::z0];
292  const Trk::TrackSummary* tSum = track.trackSummary();
293  if(tSum){
294  double ratioTrk = 1.0;
295  int nclus = tSum->get(Trk::numberOfPixelHits) + tSum->get(Trk::numberOfSCTHits);
296  bool isSilicon = (nclus > 0);
297  int nTrtHits = tSum->get(Trk::numberOfTRTHits);
298  int nTrtOutliers = tSum->get(Trk::numberOfTRTOutliers);
299  int ntrt = nTrtHits + nTrtOutliers;
300  int nTrtXenonHits = tSum->get(Trk::numberOfTRTXenonHits);
301 
302  if(m_isConv){
303  if(ntrt > 0 && (!m_PIDonlyForXe || nTrtXenonHits==ntrt) ){
304  // only check TRT PID if m_PIDonlyForXe is false or all TRT hits are Xenon hits
305  ATH_MSG_FATAL( "eProbabilityHT not available for Trk::TrackParticleBase only xAOD::TrackParticle objects" );
306  }
307 
308  // Start of track cuts
309  if ( pt >= m_minPt ) {
310 
311  // Silicon track cuts
312  if ( isSilicon && (std::fabs(d0)<=m_maxSiD0) && (fabs(z0)<=m_maxSiZ0) ) {
313  if((ntrt<=15 && ratioTrk>=m_trRatio1) ||
314  (ntrt>15 && ntrt<=25 && ratioTrk>=m_trRatio2) ||
315  (ntrt>25 && ratioTrk>=m_trRatio3)) pass = true;
316  }
317 
318  // TRT-only track cuts
319  if ( (not isSilicon) && (std::fabs(d0)<=m_maxTrtD0) && (std::fabs(z0)<=m_maxTrtZ0) ) {
320 
321  unsigned int eta_bin = getEtaBin(*perigee);
322  // TRT-only Tracks: eProbabilityHT cuts below
323  // See InDet Trt Track Scoring Tool for nTRT cut on TRT-only tracks
324  double trRatioTRT = std::max( m_trRatioTRT, m_TRTTrksBinnedRatioTRT[eta_bin] );
325 
326  if ( ratioTrk >= trRatioTRT ) pass = true; // TRT Track cuts
327  }
328  } // end of track cuts for isConv
329 
330  } else {
331  //The cuts below are necessary for the V0 track selection
332  const AmgSymMatrix(5)& err = *perigee->covariance();
333  double sd0sq = err(0,0);
334  double sd0 = (sd0sq>0.)?std::sqrt(sd0sq):0.;
335  double sz0sq = err(1,1);
336  double sz0 = (sz0sq>0.)?std::sqrt(sz0sq):0.;
337  if(nclus == 0){
338  if(std::fabs(d0)>=m_sD0_Trt*sd0 && std::fabs(d0)<= m_maxTrtD0 && std::fabs(z0)<=m_sZ0_Trt*sz0 && pt>=m_minPt) pass = true;
339  }else{
340  if(std::fabs(d0)>=m_sD0_Si*sd0 && std::fabs(z0)<=m_maxSiZ0 && pt>=m_minPt) pass = true;
341  }
342 
343  ratioTrk = 1.0;
344  if(ntrt > 0 && (!m_PIDonlyForXe || nTrtXenonHits==ntrt) ) {// only check TRT PID if m_PIDonlyForXe is false or all TRT hits are Xenon hits
345  ATH_MSG_FATAL( "eProbabilityHT not available for Trk::TrackParticleBase only xAOD::TrackParticle objects" );
346  }
347  if(ratioTrk>m_trRatioV0) pass = false;
348  }
349  } else pass = false;
350  if (not vertexSuppliedByUser) delete myVertex;
351  if (perigee!=&(track.definingParameters())) delete perigee;
352 
353  return pass;
354  }
355 
358  const EventContext& ctx,
359  const xAOD::Vertex* vertex) const
360  {
361  if (vertex) {
362  return vertex->position();
363  }
364  if(m_useEventInfoBs){
366  if (evt.isValid()) {
367  return Amg::Vector3D(evt->beamPosX(), evt->beamPosY(), evt->beamPosZ());
368  }else{
369  return Amg::Vector3D(0, 0, 0);
370  }
371  }
373  if (beamSpotHandle.isValid()) {
374  return beamSpotHandle->beamVtx().position();
375  } else {
376  return Amg::Vector3D(0, 0, 0);
377  }
378  }
379 
380  // ---------------------------------------------------------------------
382  {
383  const EventContext& ctx = Gaudi::Hive::currentContext();
384  bool pass = false;
385  const Trk::Perigee& perigee=tp.perigeeParameters();
386  // in case no Vertex is provided by the user, beam position will be used if
387  // available
388  Trk::PerigeeSurface perigeeSurface(getPosOrBeamSpot(ctx, vertex));
389  const Trk::TrackParameters* extrapolatedParameters =
390  m_extrapolator->extrapolate(
391  ctx, perigee, perigeeSurface, Trk::anyDirection, false, Trk::pion).release();
392  if (extrapolatedParameters == nullptr) {
393  ATH_MSG_WARNING("Extrapolation to the vertex failed: " << perigeeSurface
394  << "\n"
395  << perigee);
396  return false;
397  }
398  double qOverP = perigee.parameters()[Trk::qOverP];
399  double pt = std::fabs(1./qOverP)*std::sin(perigee.parameters()[Trk::theta]);
400  double d0 = extrapolatedParameters->parameters()[Trk::d0];
401  double z0 = extrapolatedParameters->parameters()[Trk::z0];
402 
403  double ratioTrk = 1.0;
405  bool isSilicon = (nclus > 0);
406  int nTrtHits = getCount(tp,xAOD::numberOfTRTHits);
407  int nTrtOutliers = getCount(tp,xAOD::numberOfTRTOutliers);
408  int ntrt = nTrtHits + nTrtOutliers;
409  int nTrtXenonHits = getCount(tp,xAOD::numberOfTRTXenonHits);
410 
411  if(m_isConv){
412  float temp(0);
413  if(ntrt > 0 && (!m_PIDonlyForXe || nTrtXenonHits==ntrt) ){
414  // only check TRT PID if m_PIDonlyForXe is false or all TRT hits are Xenon hits
415  ratioTrk = tp.summaryValue(temp,xAOD::eProbabilityHT) ? temp: 0 ;
416  }
417 
418  // Start of track cuts
419  if ( pt >= m_minPt ) {
420 
421  // Silicon track cuts
422  if ( isSilicon && (std::fabs(d0)<=m_maxSiD0) && (fabs(z0)<=m_maxSiZ0) ) {
423  if((ntrt<=15 && ratioTrk>=m_trRatio1) ||
424  (ntrt>15 && ntrt<=25 && ratioTrk>=m_trRatio2) ||
425  (ntrt>25 && ratioTrk>=m_trRatio3)) pass = true;
426  }
427 
428  // TRT-only track cuts
429  if ( (not isSilicon) && (std::fabs(d0)<=m_maxTrtD0) && (std::fabs(z0)<=m_maxTrtZ0) ) {
430 
431  unsigned int eta_bin = getEtaBin(perigee);
432  // TRT-only Tracks: eProbabilityHT cuts below
433  // See InDet Trt Track Scoring Tool for nTRT cut on TRT-only tracks
434  double trRatioTRT = std::max( m_trRatioTRT, m_TRTTrksBinnedRatioTRT[eta_bin] );
435 
436  if ( ratioTrk >= trRatioTRT ) pass = true; // TRT Track cuts
437  }
438  } // end of track cuts for isConv
439 
440  } else {
441  //The cuts below are necessary for the V0 track selection
442  const AmgSymMatrix(5)& err = *perigee.covariance();
443  double sd0sq = err(0,0);
444  double sd0 = (sd0sq>0.)?std::sqrt(sd0sq):0.;
445  double sz0sq = err(1,1);
446  double sz0 = (sz0sq>0.)?std::sqrt(sz0sq):0.;
447  if(nclus == 0){
448  if(std::fabs(d0)>=m_sD0_Trt*sd0 && std::fabs(d0)<= m_maxTrtD0 && std::fabs(z0)<=m_sZ0_Trt*sz0 && pt>=m_minPt) pass = true;
449  }else{
450  if(std::fabs(d0)>=m_sD0_Si*sd0 && std::fabs(z0)<=m_maxSiZ0 && pt>=m_minPt) pass = true;
451  }
452  ratioTrk = 1.0;
453  float temp(0);
454  if(ntrt > 0 && (!m_PIDonlyForXe || nTrtXenonHits==ntrt) ) // only check TRT PID if m_PIDonlyForXe is false or all TRT hits are Xenon hits
455  ratioTrk = tp.summaryValue(temp,xAOD::eProbabilityHT) ? temp: 0 ;
456  if(ratioTrk>m_trRatioV0) pass = false;
457  }
458 
459 
460  delete extrapolatedParameters;
461  return pass;
462  }
463 }//end of namespace definitions
Trk::numberOfPixelHits
@ numberOfPixelHits
number of pixel layers on track with absence of hits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:57
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
RecVertex.h
InDet::InDetConversionTrackSelectorTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: InDetConversionTrackSelectorTool.h:72
Trk::Vertex
Definition: Tracking/TrkEvent/VxVertex/VxVertex/Vertex.h:26
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
max
#define max(a, b)
Definition: cfImp.cxx:41
TrackParameters.h
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition: Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
PerigeeSurface.h
InDet::InDetConversionTrackSelectorTool::m_isConv
bool m_isConv
Conversion flag.
Definition: InDetConversionTrackSelectorTool.h:101
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
InDet::InDetConversionTrackSelectorTool::m_sD0_Si
double m_sD0_Si
Cut on D0 significance of Si tracks.
Definition: InDetConversionTrackSelectorTool.h:98
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
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::InDetConversionTrackSelectorTool::m_trRatio1
double m_trRatio1
TR ratio for tracks with 15-20 TRT hits.
Definition: InDetConversionTrackSelectorTool.h:91
xAOD::numberOfTRTXenonHits
@ numberOfTRTXenonHits
number of TRT hits on track in straws with xenon [unit8_t].
Definition: TrackingPrimitives.h:284
TrackParticleBase.h
InDet::InDetConversionTrackSelectorTool::m_trRatioV0
double m_trRatioV0
TR ratio for pion selection during V0 reconstruction.
Definition: InDetConversionTrackSelectorTool.h:97
test_pyathena.pt
pt
Definition: test_pyathena.py:11
ParticleTest.tp
tp
Definition: ParticleTest.py:25
Trk::z0
@ z0
Definition: ParamDefs.h:70
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
InDet::BeamSpotData::beamVtx
const Trk::RecVertex & beamVtx() const noexcept
Definition: BeamSpotData.h:79
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDetAccessor::qOverP
@ qOverP
perigee
Definition: InDetAccessor.h:35
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
InDet::InDetConversionTrackSelectorTool::m_sZ0_Trt
double m_sZ0_Trt
Cut on Z0 significance of TRT tracks.
Definition: InDetConversionTrackSelectorTool.h:100
Trk::RecVertex
Trk::RecVertex inherits from Trk::Vertex.
Definition: RecVertex.h:44
Track.h
Trk::TrackParticleBase
Definition: TrackParticleBase.h:41
InDet::InDetConversionTrackSelectorTool::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: InDetConversionTrackSelectorTool.h:76
InDet::InDetConversionTrackSelectorTool::m_TRTTrksBinnedRatioTRT
std::vector< double > m_TRTTrksBinnedRatioTRT
Eta-binned eProbabilityHT for TRT-only track cuts.
Definition: InDetConversionTrackSelectorTool.h:96
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:193
lumiFormat.i
int i
Definition: lumiFormat.py:92
InDet::InDetConversionTrackSelectorTool::m_trRatio2
double m_trRatio2
TR ratio for tracks with 20-25 TRT hits.
Definition: InDetConversionTrackSelectorTool.h:92
Trk::numberOfTRTOutliers
@ numberOfTRTOutliers
number of TRT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:81
InDet::InDetConversionTrackSelectorTool::m_eventInfo_key
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo_key
Definition: InDetConversionTrackSelectorTool.h:82
InDet::InDetConversionTrackSelectorTool::initialize
virtual StatusCode initialize() override
Definition: InDetConversionTrackSelectorTool.cxx:71
beamspotman.n
n
Definition: beamspotman.py:731
Trk::theta
@ theta
Definition: ParamDefs.h:72
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::numberOfSCTHits
@ numberOfSCTHits
number of SCT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:71
InDet::InDetConversionTrackSelectorTool::m_PIDonlyForXe
bool m_PIDonlyForXe
Only check TRT PID if all hits are Xe hits.
Definition: InDetConversionTrackSelectorTool.h:102
Trk::pion
@ pion
Definition: ParticleHypothesis.h:29
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
Trk::Vertex::position
const Amg::Vector3D & position() const
return position of vertex
Definition: Vertex.cxx:72
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
InDet::InDetConversionTrackSelectorTool::m_sD0_Trt
double m_sD0_Trt
Cut on D0 significance of TRT tracks.
Definition: InDetConversionTrackSelectorTool.h:99
Vertex.h
InDet::InDetConversionTrackSelectorTool::m_TRTTrksEtaBins
std::vector< double > m_TRTTrksEtaBins
Eta bins (10 expected) for TRT-only track cuts.
Definition: InDetConversionTrackSelectorTool.h:95
InDet::InDetConversionTrackSelectorTool::m_maxSiD0
double m_maxSiD0
Properties for track selection:all cuts are ANDed.
Definition: InDetConversionTrackSelectorTool.h:86
doL1CaloHVCorrections.eta_bin
eta_bin
Definition: doL1CaloHVCorrections.py:368
InDetConversionTrackSelectorTool.h
Trk::numberOfTRTHits
@ numberOfTRTHits
number of TRT outliers
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:79
InDet::InDetConversionTrackSelectorTool::InDetConversionTrackSelectorTool
InDetConversionTrackSelectorTool(const std::string &t, const std::string &n, const IInterface *p)
eProbHT cut for Si trks, ntrt<=15
Definition: InDetConversionTrackSelectorTool.cxx:21
Trk::TrackSummary
A summary of the information contained by a track.
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:287
Trk::d0
@ d0
Definition: ParamDefs.h:69
Vertex.h
InDet::InDetConversionTrackSelectorTool::m_maxTrtD0
double m_maxTrtD0
Maximal d0 at (0,0,0) for standalone TRT tracks.
Definition: InDetConversionTrackSelectorTool.h:87
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDet::InDetConversionTrackSelectorTool::getPosOrBeamSpot
Amg::Vector3D getPosOrBeamSpot(const EventContext &ctx, const xAOD::Vertex *) const
Definition: InDetConversionTrackSelectorTool.cxx:357
xAOD::numberOfTRTOutliers
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
Definition: TrackingPrimitives.h:276
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
InDet::BeamSpotData
Definition: BeamSpotData.h:21
InDet::InDetConversionTrackSelectorTool::getCount
int getCount(const xAOD::TrackParticle &tp, xAOD::SummaryType type) const
Definition: InDetConversionTrackSelectorTool.h:58
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
InDet::InDetConversionTrackSelectorTool::m_trRatio3
double m_trRatio3
TR ratio for tracks with >25 TRT hits.
Definition: InDetConversionTrackSelectorTool.h:93
InDet::InDetConversionTrackSelectorTool::getEtaBin
unsigned int getEtaBin(const Trk::Perigee &perigee) const
Definition: InDetConversionTrackSelectorTool.cxx:105
InDet::InDetConversionTrackSelectorTool::getBeamSpot
Trk::Vertex * getBeamSpot(const EventContext &ctx) const
Definition: InDetConversionTrackSelectorTool.cxx:80
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDet::InDetConversionTrackSelectorTool::decision
virtual bool decision(const Trk::Track &track, const Trk::Vertex *vertex) const override final
Select a Trk::Track
Definition: InDetConversionTrackSelectorTool.cxx:121
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
xAOD::eProbabilityHT
@ eProbabilityHT
Electron probability from High Threshold (HT) information [float].
Definition: TrackingPrimitives.h:301
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
InDet::InDetConversionTrackSelectorTool::m_maxTrtZ0
double m_maxTrtZ0
Maximal z0 at (0,0,0) for standalone TRT tracks.
Definition: InDetConversionTrackSelectorTool.h:89
InDet::InDetConversionTrackSelectorTool::m_minPt
double m_minPt
Minimum Pt of tracks.
Definition: InDetConversionTrackSelectorTool.h:90
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
Trk::TrackSummary::get
int get(const SummaryType &type) const
returns the summary information for the passed SummaryType.
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
InDet::InDetConversionTrackSelectorTool::m_maxSiZ0
double m_maxSiZ0
Maximal z0 at (0,0,0)
Definition: InDetConversionTrackSelectorTool.h:88
Trk::numberOfTRTXenonHits
@ numberOfTRTXenonHits
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:99
InDet::InDetConversionTrackSelectorTool::m_trRatioTRT
double m_trRatioTRT
TR ratio for TRT only tracks.
Definition: InDetConversionTrackSelectorTool.h:94
InDet::InDetConversionTrackSelectorTool::m_useEventInfoBs
Gaudi::Property< bool > m_useEventInfoBs
Definition: InDetConversionTrackSelectorTool.h:83