ATLAS Offline Software
InDetCosmicTrackSelectorTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 // forward declares
8 #include "VxVertex/Vertex.h"
9 #include "TrkTrack/Track.h"
11 
12 // normal includes
18 
19 
20 namespace InDet
21 {
22  //----------------------------------------------------------------------------
23  InDetCosmicTrackSelectorTool::InDetCosmicTrackSelectorTool(const std::string& t, const std::string& n, const IInterface* p)
24  : AthAlgTool(t,n,p)
25  {
26  declareInterface<ITrackSelectorTool>(this);
27  }
28 
29  //----------------------------------------------------------------------------
31  = default;
32 
33  //----------------------------------------------------------------------------
35  {
37  if (!m_trackSumTool.empty()) {
38  if(m_trackSumTool.retrieve().isFailure())
39  {
40  msg(MSG::ERROR)<<" Unable to retrieve "<<m_trackSumTool<<endmsg;
41  return StatusCode::FAILURE;
42  }
44  }
45 
46  // Read handle for AtlasFieldCacheCondObj
48 
49  return StatusCode::SUCCESS;
50  }
51 
52  //----------------------------------------------------------------------------
54  {
55 
56  // decision based on the track parameters
57  if(!decision(track.perigeeParameters(), vertex, track.info().particleHypothesis()))
58  return false;
59 
60  // number of hits, silicon hits, b-layer
61  // first ask track for summary
62  std::unique_ptr<Trk::TrackSummary> summaryUniquePtr;
63  const Trk::TrackSummary * summary = track.trackSummary();
64  if (summary == nullptr && m_trackSumToolAvailable) {
65  summaryUniquePtr = m_trackSumTool->summary(Gaudi::Hive::currentContext(), track);
66  summary = summaryUniquePtr.get();
67  }
68 
69  if (nullptr==summary) {
70  ATH_MSG_DEBUG( "Track preselection: cannot create a track summary. This track will not pass." );
71  return false;
72  }
73 
74  int nPixHits = summary->get(Trk::numberOfPixelHits);
78  int nSiHitsTop = getNSiHits(&track,true);
79  int nSiHitsBottom = getNSiHits(&track,false);
80 
81  if(nPixHits<m_numberOfPixelHits) {
82  ATH_MSG_DEBUG("Track rejected because of numberOfPixelHits "<<nPixHits<<"<"<<m_numberOfPixelHits);
83  return false;
84  }
85 
87  ATH_MSG_DEBUG("Track rejected because of numberOfSCTHits "<<nSCTHits<<"<"<<m_numberOfSCTHits);
88  return false;
89  }
90 
92  ATH_MSG_DEBUG("Track rejected because of numberOfTRTHits "<<nTRTHits<<"<"<<m_numberOfTRTHits);
93  return false;
94  }
95 
97  ATH_MSG_DEBUG("Track rejected because of numberOfSiHits "<<nSiHits<<"<"<<m_numberOfSiHits);
98  return false;
99  }
100 
101  if(nSiHitsTop<m_numberOfSiHitsTop) {
102  ATH_MSG_DEBUG("Track rejected because of nSiHitsTop "<<nSiHitsTop<<"<"<<m_numberOfSiHitsTop);
103  return false;
104  }
105 
106  if(nSiHitsBottom<m_numberOfSiHitsBottom) {
107  ATH_MSG_DEBUG("Track rejected because of numberOfSiHitsBottom "<<nSiHitsBottom<<"<"<<m_numberOfSiHitsBottom);
108  return false;
109  }
110 
111  // all ok
112  return true;
113  }
114 
115  //----------------------------------------------------------------------------
117  {
118  if(!decision(&(track.definingParameters()), vertex, Trk::pion))
119  return false;
120 
121  const Trk::TrackSummary * summary = track.trackSummary();
122  if (nullptr==summary ) {
123  ATH_MSG_DEBUG( "TrackParticleBase does not have a Track Summary. Rejected." );
124  return false;
125  }
126  const Trk::Track * otrack= track.originalTrack();
127 
128  if(otrack==nullptr){
129  ATH_MSG_DEBUG( "TrackParticleBase does not contain the original cosmic track. Rejected." );
130  return false;
131  }
132 
133  int nPixHits = summary->get(Trk::numberOfPixelHits);
137  int nSiHitsTop = getNSiHits(otrack,true);
138  int nSiHitsBottom = getNSiHits(otrack,false);
139 
140  if(nPixHits<m_numberOfPixelHits) {
141  ATH_MSG_DEBUG("Track rejected because of numberOfPixelHits "<<nPixHits<<"<"<<m_numberOfPixelHits);
142  return false;
143  }
144 
146  ATH_MSG_DEBUG("Track rejected because of numberOfSCTHits "<<nSCTHits<<"<"<<m_numberOfSCTHits);
147  return false;
148  }
149 
151  ATH_MSG_DEBUG("Track rejected because of numberOfTRTHits "<<nTRTHits<<"<"<<m_numberOfTRTHits);
152  return false;
153  }
154 
156  ATH_MSG_DEBUG("Track rejected because of numberOfSiHits "<<nSiHits<<"<"<<m_numberOfSiHits);
157  return false;
158  }
159 
160  if(nSiHitsTop<m_numberOfSiHitsTop) {
161  ATH_MSG_DEBUG("Track rejected because of nSiHitsTop "<<nSiHitsTop<<"<"<<m_numberOfSiHitsTop);
162  return false;
163  }
164 
165  if(nSiHitsBottom<m_numberOfSiHitsBottom) {
166  ATH_MSG_DEBUG("Track rejected because of numberOfSiHitsBottom "<<nSiHitsBottom<<"<"<<m_numberOfSiHitsBottom);
167  return false;
168  }
169 
170  // all ok
171  return true;
172  }
173 
174  //----------------------------------------------------------------------------
176  {
177  // checking pointer first
178  if(nullptr==track) {
179  ATH_MSG_DEBUG( "Track preselection: Zero pointer to parameterbase* received (most likely a track without perigee). This track will not pass." );
180  return false;
181  }
182 
183  // getting the perigee parameters of the track
184  const Trk::Perigee * perigee(nullptr);
185  perigee = dynamic_cast<const Trk::Perigee *>(track);
186 
187  if(!perigee || !perigee->covariance()) {
188  ATH_MSG_DEBUG( "Track preselection: cannot make a measured perigee. This track will not pass." );
189  return false;
190  }
191 
192  Amg::VectorX trackParameters = perigee->parameters();
193 
194  // d0 and z0 cuts
195  double d0 = trackParameters[Trk::d0];
196  if(fabs(d0) > fabs(m_maxD0)) {
197  ATH_MSG_DEBUG("Track rejected because of d0 "<<fabs(d0)<<">"<<m_maxD0);
198  return false;
199  }
200 
201  double z0 = trackParameters[Trk::z0];
202  if(fabs(z0) > fabs(m_maxZ0)) {
203  ATH_MSG_DEBUG("Track rejected because of z0 "<<fabs(z0)<<">"<<m_maxZ0);
204  return false;
205  }
206 
207  // only check pt if mag. field is on
208  const EventContext& ctx = Gaudi::Hive::currentContext();
210  const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
211  if (fieldCondObj == nullptr) {
212  ATH_MSG_ERROR("execute: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
213  return false;
214  }
215  MagField::AtlasFieldCache fieldCache;
216  fieldCondObj->getInitializedCache (fieldCache);
217 
218  if (fieldCache.solenoidOn()){//B field
219  if (trackParameters[Trk::qOverP] == 0.) {
220  ATH_MSG_DEBUG("Track rejected because of qOverP == 0.");
221  return false;
222  }
223 
224  double pt = fabs(1./trackParameters[Trk::qOverP])*sin(trackParameters[Trk::theta]);
225  if (pt < m_minPt) {
226  ATH_MSG_DEBUG("Track rejected because of pt " << pt << " < " << m_minPt);
227  return false;
228  }
229  }
230  return true;
231  }
232 
233  //----------------------------------------------------------------------------
235  {
236  int nsilicon = 0;
237 
238  //loop over all measurements on Track
239  DataVector<const Trk::MeasurementBase>::const_iterator it = track->measurementsOnTrack()->begin();
240  DataVector<const Trk::MeasurementBase>::const_iterator itEnd = track->measurementsOnTrack()->end();
241  for ( ; it!=itEnd; ++it) {
242  const Trk::RIO_OnTrack *rot = dynamic_cast<const Trk::RIO_OnTrack *>(*it);
243  if (!rot)
244  continue;
245  const InDet::SiClusterOnTrack *siclus = dynamic_cast<const InDet::SiClusterOnTrack *>(rot);
246  if(!siclus)
247  continue;
248 
249  if(top && siclus->globalPosition().y()<0)
250  continue;
251  if(!top && siclus->globalPosition().y()>0)
252  continue;
253 
254  const SCT_ClusterOnTrack *sctclus = dynamic_cast<const SCT_ClusterOnTrack *>(siclus);
255  if(!sctclus)
256  //Pixel hit
257  nsilicon += 2;
258  else
259  nsilicon += 1;
260  }
261  return nsilicon;
262  }
263 
264 } //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
SCT_ClusterOnTrack.h
Trk::Vertex
Definition: Tracking/TrkEvent/VxVertex/VxVertex/Vertex.h:26
Amg::VectorX
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
Definition: EventPrimitives.h:30
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
InDet::InDetCosmicTrackSelectorTool::m_numberOfSCTHits
IntegerProperty m_numberOfSCTHits
Definition: InDetCosmicTrackSelectorTool.h:60
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
TrackParticleBase.h
skel.it
it
Definition: skel.GENtoEVGEN.py:396
test_pyathena.pt
pt
Definition: test_pyathena.py:11
Trk::z0
@ z0
Definition: ParamDefs.h:64
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
SiClusterOnTrack.h
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::InDetCosmicTrackSelectorTool::m_trackSumToolAvailable
bool m_trackSumToolAvailable
Definition: InDetCosmicTrackSelectorTool.h:69
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
InDet::InDetCosmicTrackSelectorTool::m_maxZ0
DoubleProperty m_maxZ0
Definition: InDetCosmicTrackSelectorTool.h:54
Track.h
Trk::TrackParticleBase
Definition: TrackParticleBase.h:41
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
InDet::InDetCosmicTrackSelectorTool::m_numberOfSiHitsBottom
IntegerProperty m_numberOfSiHitsBottom
Definition: InDetCosmicTrackSelectorTool.h:66
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
InDet::SiClusterOnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override
returns global position (gathered through Surface constraint)
Definition: SiClusterOnTrack.h:115
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::InDetCosmicTrackSelectorTool::getNSiHits
static int getNSiHits(const Trk::Track *track, bool top)
Definition: InDetCosmicTrackSelectorTool.cxx:234
InDet::InDetCosmicTrackSelectorTool::m_numberOfSiHits
IntegerProperty m_numberOfSiHits
Definition: InDetCosmicTrackSelectorTool.h:64
IDTPM::nSCTHits
float nSCTHits(const U &p)
Definition: TrackParametersHelper.h:393
beamspotman.n
n
Definition: beamspotman.py:731
IDTPM::nTRTHits
float nTRTHits(const U &p)
Definition: TrackParametersHelper.h:446
Trk::theta
@ theta
Definition: ParamDefs.h:66
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
Trk::numberOfSCTHits
@ numberOfSCTHits
number of SCT holes
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:71
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
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
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
InDet::InDetCosmicTrackSelectorTool::m_minPt
DoubleProperty m_minPt
Definition: InDetCosmicTrackSelectorTool.h:56
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
InDet::InDetCosmicTrackSelectorTool::initialize
virtual StatusCode initialize() override
Definition: InDetCosmicTrackSelectorTool.cxx:34
MagField::AtlasFieldCache::solenoidOn
bool solenoidOn() const
status of the magnets
Trk::numberOfTRTHits
@ numberOfTRTHits
number of TRT outliers
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:79
InDet::InDetCosmicTrackSelectorTool::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: InDetCosmicTrackSelectorTool.h:72
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:63
RIO_OnTrack.h
Vertex.h
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
InDet::InDetCosmicTrackSelectorTool::m_maxD0
DoubleProperty m_maxD0
Definition: InDetCosmicTrackSelectorTool.h:55
InDet::InDetCosmicTrackSelectorTool::InDetCosmicTrackSelectorTool
InDetCosmicTrackSelectorTool(const std::string &t, const std::string &n, const IInterface *p)
Definition: InDetCosmicTrackSelectorTool.cxx:23
InDet::InDetCosmicTrackSelectorTool::m_trackSumTool
ToolHandle< Trk::ITrackSummaryTool > m_trackSumTool
Definition: InDetCosmicTrackSelectorTool.h:68
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
InDet::InDetCosmicTrackSelectorTool::~InDetCosmicTrackSelectorTool
~InDetCosmicTrackSelectorTool()
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:67
InDet::InDetCosmicTrackSelectorTool::m_numberOfPixelHits
IntegerProperty m_numberOfPixelHits
Definition: InDetCosmicTrackSelectorTool.h:58
InDetCosmicTrackSelectorTool.h
top
@ top
Definition: TruthClasses.h:64
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
IDTPM::nSiHits
float nSiHits(const U &p)
Definition: TrackParametersHelper.h:427
InDet::SiClusterOnTrack
Definition: SiClusterOnTrack.h:39
InDet::SCT_ClusterOnTrack
Definition: SCT_ClusterOnTrack.h:44
InDet::InDetCosmicTrackSelectorTool::decision
virtual bool decision(const Trk::Track &track, const Trk::Vertex *vertex) const override
Definition: InDetCosmicTrackSelectorTool.cxx:53
InDet::InDetCosmicTrackSelectorTool::m_numberOfSiHitsTop
IntegerProperty m_numberOfSiHitsTop
Definition: InDetCosmicTrackSelectorTool.h:65
InDet::InDetCosmicTrackSelectorTool::m_numberOfTRTHits
IntegerProperty m_numberOfTRTHits
Definition: InDetCosmicTrackSelectorTool.h:62
SCT_Monitoring::summary
@ summary
Definition: SCT_MonitoringNumbers.h:65