ATLAS Offline Software
Loading...
Searching...
No Matches
TrackHandle_TrackParticle.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class TrackHandle_TrackParticle //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: May 2008 //
12// //
14
17#include "VP1Base/VP1Msg.h"
22
23//____________________________________________________________________
25public:
26
27 const Trk::Track * createTrack(Trk::TrackStates* trackStateOnSurfaces) const
28 {
29 if (!trackStateOnSurfaces) {
30 VP1Msg::messageDebug("TrackHandle_TrackParticle WARNING: Could not create track due to null TSOS vector");
31 return nullptr;
32 }
33 if (trackStateOnSurfaces->empty()) {
34 VP1Msg::messageDebug("TrackHandle_TrackParticle WARNING: Could not create track due to empty TSOS vector");
35 delete trackStateOnSurfaces;
36 return nullptr;
37 }
38 Trk::TrackInfo ti(Trk::TrackInfo::Unknown,theclass->extrapolationParticleHypothesis());
39 std::unique_ptr<Trk::TrackStates> sink(trackStateOnSurfaces);
40 const Trk::Track* trk =
41 new Trk::Track(ti,
42 std::move(sink),
43 nullptr /*fitquality*/);
44 if (VP1Msg::verbose())
45 VP1Msg::messageVerbose("TrackHandle_TrackParticle created track with "
46 +QString::number(trackStateOnSurfaces->size())+" parameters");
47 return trk;
48 }
49
50
55
56};
57
58//____________________________________________________________________
60 : TrackHandleBase(ch), m_d(new Imp)
61{
62 m_d->theclass = this;
63 m_d->trackparticle = tp;
64 m_d->trkTrack = nullptr;
65 m_d->trkTrackInit = false;
66
67}
68
69//____________________________________________________________________
74
75//____________________________________________________________________
77{
78 QStringList l;
79 l << "TrackParticle:";
81 return l;
82}
83
84//____________________________________________________________________
86{
87 const Trk::Perigee* p = m_d->trackparticle->perigee();
88 if (!common()->trackSanityHelper()->isSafe(p))
89 return Amg::Vector3D(0,0,0);//fixme: warn?
90 return p->momentum();
91}
92
93//____________________________________________________________________
95{
96 const Trk::Perigee* p = m_d->trackparticle->perigee();
97 if (!common()->trackSanityHelper()->isSafe(p))
98 return unknown();//fixme: warn
99 return p->charge();
100}
101
102//____________________________________________________________________
104{
105 if (m_d->trkTrackInit)
106 return m_d->trkTrack;
107 m_d->trkTrackInit = true;
108 const std::vector<const Trk::TrackParameters*>& trackpars = m_d->trackparticle->trackParameters();
109 Trk::TrackStates* trackStateOnSurfaces = new Trk::TrackStates;
110
111 if (!trackpars.empty()) {
112 bool needresorting = trackpars.at(0)!=m_d->trackparticle->perigee();//Needed since TrackParticles are (at the moment)
113 //created with the first parameter put last
114 if (needresorting) {
115 const Trk::TrackParameters* p = trackpars.at(trackpars.size()-1);
116 if (p)
117 trackStateOnSurfaces->push_back(new Trk::TrackStateOnSurface(nullptr,p->uniqueClone(),nullptr));
118 }
119 unsigned limit(needresorting?trackpars.size()-1:trackpars.size());
120
121 //NB: We only ever created this handle if charge()!=0.0:
122 for (unsigned i = 0; i < limit; ++i) {
123 const Trk::TrackParameters* p = trackpars.at(i);
124 if (!p)
125 continue;
126 if (!common()->trackSanityHelper()->isSafe(p))
127 continue;
128 trackStateOnSurfaces->push_back(new Trk::TrackStateOnSurface(nullptr,p->uniqueClone(),nullptr));
129 }
130 }
131
132 m_d->trkTrack = m_d->createTrack(trackStateOnSurfaces);
133 return m_d->trkTrack;
134}
135
136//____________________________________________________________________
140
141//____________________________________________________________________
143{
144 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfPixelHits) : 0;
145}
146//____________________________________________________________________
148{
149 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfSCTHits) : 0;
150}
151//____________________________________________________________________
153{
154 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfTRTHits) : 0;
155}
156//____________________________________________________________________
158{
159 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfRpcPhiHits) + m_d->trackparticle->trackSummary()->get(Trk::numberOfTgcPhiHits) + m_d->trackparticle->trackSummary()->get(Trk::numberOfCscPhiHits) : 0;
160}
161//____________________________________________________________________
163{
164 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfMdtHits) : 0;
165}
166//____________________________________________________________________
168{
169 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfRpcEtaHits) + m_d->trackparticle->trackSummary()->get(Trk::numberOfRpcPhiHits) : 0;
170}//____________________________________________________________________
172{
173 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfTgcEtaHits) + m_d->trackparticle->trackSummary()->get(Trk::numberOfTgcPhiHits) : 0;
174}
175//____________________________________________________________________
177{
178 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfCscEtaHits) + m_d->trackparticle->trackSummary()->get(Trk::numberOfCscPhiHits) : 0;
179}
180
181//____________________________________________________________________
183{
184 return (m_d->trackparticle->trackSummary()) ? m_d->trackparticle->trackSummary()->get(Trk::numberOfCscEtaHits) + m_d->trackparticle->trackSummary()->get(Trk::numberOfMdtHits) : 0;
185}
186
187
188
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
static double unknown()
friend class TrackCollHandleBase
TrackHandleBase(TrackCollHandleBase *)
QStringList baseInfo() const
TrackSysCommonData * common() const
const Trk::Track * createTrack(Trk::TrackStates *trackStateOnSurfaces) const
virtual QStringList clicked() const
Called when user selects the node (stringlist is displayed in messagebox).
const Trk::Track * provide_pathInfoTrkTrack() const
TrackHandle_TrackParticle(TrackCollHandleBase *, const Rec::TrackParticle *)
virtual Amg::Vector3D momentum() const
virtual unsigned getNMuonPrecisionHits() const
virtual unsigned getNMuonPhiHits() const
The number of phi hits is part of hit counts below (i.e.
virtual unsigned getNPixelHits() const
Contains information about the 'fitter' of this track.
represents the track state (measurement, material, fit parameters and quality) at a surface.
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84
static bool verbose()
Definition VP1Msg.h:31
static void messageDebug(const QString &)
Definition VP1Msg.cxx:39
Eigen::Matrix< double, 3, 1 > Vector3D
DataVector< const Trk::TrackStateOnSurface > TrackStates
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ numberOfPixelHits
number of pixel layers on track with absence of hits