CMS 3D CMS Logo

BaseCkfTrajectoryBuilder.cc
Go to the documentation of this file.
2 
8 
16 
20 
26 
28  std::unique_ptr<TrajectoryFilter> filter,
29  std::unique_ptr<TrajectoryFilter> inOutFilter)
30  : theSeedAs5DHit(conf.getParameter<bool>("seedAs5DHit")),
31  theFilter(std::move(filter)),
32  theInOutFilter(std::move(inOutFilter)),
33  theUpdatorName(conf.getParameter<std::string>("updator")),
34  thePropagatorAlongName(conf.getParameter<std::string>("propagatorAlong")),
35  thePropagatorOppositeName(conf.getParameter<std::string>("propagatorOpposite")),
36  theEstimatorName(conf.getParameter<std::string>("estimator")),
37  theRecHitBuilderName(conf.getParameter<std::string>("TTRHBuilder")) {
38  if (conf.exists("clustersToSkip"))
39  edm::LogError("BaseCkfTrajectoryBuilder")
40  << "ERROR: " << typeid(*this).name() << " has a clustersToSkip parameter set";
41 }
42 
44 
47  return TrajectoryFilterFactory::get()->create(pset.getParameter<std::string>("ComponentType"), pset, iC);
48 }
49 
52  TrajectorySeed::range hitRange = seed.recHits();
53 
54  PTrajectoryStateOnDet pState(seed.startingState());
55  const GeomDet* gdet = theMeasurementTracker->geomTracker()->idToDet(pState.detId());
56  TSOS outerState =
58 
59  if (as5D) {
61  TSOS invalidState(gdet->surface());
62  auto hitLayer = theMeasurementTracker->geometricSearchTracker()->detLayer(pState.detId());
63  result.emplace(invalidState, outerState, recHit, 0, hitLayer);
64  return;
65  }
66 
67  for (TrajectorySeed::const_iterator ihit = hitRange.first; ihit != hitRange.second; ihit++) {
68  TrackingRecHit::RecHitPointer recHit = ihit->cloneSH();
69  const GeomDet* hitGeomDet = recHit->det();
70 
71  const DetLayer* hitLayer = theMeasurementTracker->geometricSearchTracker()->detLayer(ihit->geographicalId());
72 
73  TSOS invalidState(hitGeomDet->surface());
74  if (ihit == hitRange.second - 1) {
75  // the seed trajectory state should correspond to this hit
76  if (&gdet->surface() != &hitGeomDet->surface()) {
77  edm::LogError("CkfPattern")
78  << "CkfTrajectoryBuilder error: the seed state is not on the surface of the detector of the last seed hit";
79  return; // FIXME: should throw exception
80  }
81 
82  //TSOS updatedState = outerstate;
83  result.emplace(invalidState, outerState, recHit, 0, hitLayer);
84  } else {
85  TSOS innerState = backwardPropagator(seed)->propagate(outerState, hitGeomDet->surface());
86 
87  // try to recover if propagation failed
88  if
89  UNLIKELY(!innerState.isValid())
91  pState, &(hitGeomDet->surface()), forwardPropagator(seed)->magneticField());
92 
93  if (innerState.isValid()) {
94  TSOS innerUpdated = theUpdator->update(innerState, *recHit);
95  result.emplace(invalidState, innerUpdated, recHit, 0, hitLayer);
96  }
97  }
98  }
99 
100  // method for debugging
101  // fix somehow
102  // fillSeedHistoDebugger(result.begin(),result.end());
103 }
104 
106  TempTrajectory result(seed.direction(), seed.nHits());
108 
109  LogDebug("CkfPattern") << " initial trajectory from the seed: " << PrintoutHelper::dumpCandidate(result, true);
110 
111  return result;
112 }
113 
115  if
116  UNLIKELY(traj.measurements().size() > 400) {
117  edm::LogError("BaseCkfTrajectoryBuilder_InfiniteLoop");
118  LogTrace("BaseCkfTrajectoryBuilder_InfiniteLoop")
119  << "Cropping Track After 400 Measurements:\n"
120  << " Last predicted state: " << traj.lastMeasurement().predictedState() << "\n"
121  << " Last layer subdetector: " << (traj.lastLayer() ? traj.lastLayer()->subDetector() : -1) << "\n"
122  << " Found hits: " << traj.foundHits() << ", lost hits: " << traj.lostHits() << "\n\n";
123  return false;
124  }
125  // Called after each new hit is added to the trajectory, to see if it is
126  // worth continuing to build this track candidate.
127  if (inOut) {
128  // if (theInOutFilter == 0) edm::LogError("CkfPattern") << "CkfTrajectoryBuilder error: trying to use dedicated filter for in-out tracking phase, when none specified";
129  return theInOutFilter->toBeContinued(traj);
130  } else {
131  return theFilter->toBeContinued(traj);
132  }
133 }
134 
135 bool BaseCkfTrajectoryBuilder::qualityFilter(const TempTrajectory& traj, bool inOut) const {
136  // Called after building a trajectory is completed, to see if it is good enough
137  // to keep.
138  if (inOut) {
139  // if (theInOutFilter == 0) edm::LogError("CkfPattern") << "CkfTrajectoryBuilder error: trying to use dedicated filter for in-out tracking phase, when none specified";
140  return theInOutFilter->qualityFilter(traj);
141  } else {
142  return theFilter->qualityFilter(traj);
143  }
144 }
145 
146 void BaseCkfTrajectoryBuilder::addToResult(std::shared_ptr<const TrajectorySeed> const& seed,
147  TempTrajectory& tmptraj,
149  bool inOut) const {
150  // quality check
151  if (!qualityFilter(tmptraj, inOut))
152  return;
153  Trajectory traj = tmptraj.toTrajectory();
154  traj.setSharedSeed(seed);
155  // discard latest dummy measurements
156  while (!traj.empty() && !traj.lastMeasurement().recHit()->isValid())
157  traj.pop();
158  LogDebug("CkfPattern") << inOut << "=inOut option. pushing a Trajectory with: " << traj.foundHits() << " found hits. "
159  << traj.lostHits()
160  << " lost hits. Popped :" << (tmptraj.measurements().size()) - (traj.measurements().size())
161  << " hits.";
162  result.push_back(std::move(traj));
163 }
164 
167  bool inOut) const {
168  // quality check
169  if (!qualityFilter(tmptraj, inOut))
170  return;
171  // discard latest dummy measurements
172  TempTrajectory traj = tmptraj;
173  while (!traj.empty() && !traj.lastMeasurement().recHit()->isValid())
174  traj.pop();
175  LogDebug("CkfPattern") << inOut << "=inOut option. pushing a TempTrajectory with: " << traj.foundHits()
176  << " found hits. " << traj.lostHits()
177  << " lost hits. Popped :" << (tmptraj.measurements().size()) - (traj.measurements().size())
178  << " hits.";
179  result.push_back(std::move(traj));
180 }
181 
183  // quality check
184  if (!qualityFilter(traj, inOut))
185  return;
186  // discard latest dummy measurements
187  while (!traj.empty() && !traj.lastMeasurement().recHitR().isValid())
188  traj.pop();
189  LogDebug("CkfPattern") << inOut << "=inOut option. pushing a TempTrajectory with: " << traj.foundHits()
190  << " found hits. " << traj.lostHits();
191  // <<" lost hits. Popped :"<<(ttraj.measurements().size())-(traj.measurements().size())<<" hits.";
192  result.push_back(std::move(traj));
193 }
194 
196  const TrajectorySeed& seed, const TempTrajectory& traj) const {
197  if (traj.empty()) {
198  //set the currentState to be the one from the trajectory seed starting point
199  PTrajectoryStateOnDet const& ptod = seed.startingState();
200  DetId id(ptod.detId());
202  const Surface* surface = &g->surface();
203 
204  TSOS currentState(
207  return StateAndLayers(currentState,
208  theNavigationSchool->nextLayers(*lastLayer, *currentState.freeState(), traj.direction()));
209  } else {
210  TSOS const& currentState = traj.lastMeasurement().updatedState();
211  return StateAndLayers(
212  currentState, theNavigationSchool->nextLayers(*traj.lastLayer(), *currentState.freeState(), traj.direction()));
213  }
214 }
215 
217  // possibly do some sanity check here
219 }
220 
222  std::cerr << "ERROR SetEvent called on " << typeid(*this).name()
223  << (theMeasurementTracker ? " with valid " : "witout any ") << "MeasurementTrackerEvent" << std::endl;
224 }
225 
227  std::cerr << "ERROR unSet called on " << typeid(*this).name()
228  << (theMeasurementTracker ? " with valid " : "witout any ") << "MeasurementTrackerEvent" << std::endl;
229 }
230 
232  const edm::EventSetup& iSetup,
233  const MeasurementTrackerEvent* data) {
235  edm::ESHandle<Propagator> propagatorAlongHandle;
236  edm::ESHandle<Propagator> propagatorOppositeHandle;
239 
240  iSetup.get<TrackingComponentsRecord>().get(theUpdatorName, updatorHandle);
241  iSetup.get<TrackingComponentsRecord>().get(thePropagatorAlongName, propagatorAlongHandle);
242  iSetup.get<TrackingComponentsRecord>().get(thePropagatorOppositeName, propagatorOppositeHandle);
243  iSetup.get<TrackingComponentsRecord>().get(theEstimatorName, estimatorHandle);
244  iSetup.get<TransientRecHitRecord>().get(theRecHitBuilderName, recHitBuilderHandle);
245 
246  theUpdator = updatorHandle.product();
247  thePropagatorAlong = propagatorAlongHandle.product();
248  thePropagatorOpposite = propagatorOppositeHandle.product();
249  theEstimator = estimatorHandle.product();
250  theTTRHBuilder = recHitBuilderHandle.product();
251 
252  setData(data);
253  if (theFilter)
254  theFilter->setEvent(iEvent, iSetup);
255  if (theInOutFilter)
256  theInOutFilter->setEvent(iEvent, iSetup);
257  setEvent_(iEvent, iSetup);
258 }
MeasurementTrackerEvent::geomTracker
const TrackingGeometry * geomTracker() const
Definition: MeasurementTrackerEvent.h:65
BaseCkfTrajectoryBuilder::addToResult
void addToResult(std::shared_ptr< const TrajectorySeed > const &seed, TempTrajectory &traj, TrajectoryContainer &result, bool inOut=false) const
Definition: BaseCkfTrajectoryBuilder.cc:146
Chi2MeasurementEstimatorBase.h
Propagator.h
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
electrons_cff.bool
bool
Definition: electrons_cff.py:372
TempTrajectory::direction
PropagationDirection direction() const
Definition: TempTrajectory.cc:118
MeasurementTrackerEvent.h
MessageLogger.h
GeomDet
Definition: GeomDet.h:27
BaseCkfTrajectoryBuilder::thePropagatorAlong
const Propagator * thePropagatorAlong
Definition: BaseCkfTrajectoryBuilder.h:171
TrajectoryFilter.h
ESHandle.h
DetLayer::subDetector
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel,...
DetLayer
Definition: DetLayer.h:21
TrajectorySeed::range
std::pair< const_iterator, const_iterator > range
Definition: TrajectorySeed.h:21
HLT_2018_cff.magneticField
magneticField
Definition: HLT_2018_cff.py:348
BaseCkfTrajectoryBuilder::theFilter
std::unique_ptr< TrajectoryFilter > theFilter
Definition: BaseCkfTrajectoryBuilder.h:181
BaseCkfTrajectoryBuilder::setEvent
void setEvent(const edm::Event &event) const override
Definition: BaseCkfTrajectoryBuilder.cc:221
TempTrajectory
Definition: TempTrajectory.h:40
TransientRecHitRecord.h
BaseCkfTrajectoryBuilder::TrajectoryContainer
std::vector< Trajectory > TrajectoryContainer
Definition: BaseCkfTrajectoryBuilder.h:62
BaseCkfTrajectoryBuilder::theEstimator
const Chi2MeasurementEstimatorBase * theEstimator
Definition: BaseCkfTrajectoryBuilder.h:173
TransientRecHitRecord
Definition: TransientRecHitRecord.h:14
BaseCkfTrajectoryBuilder::findStateAndLayers
StateAndLayers findStateAndLayers(const TrajectorySeed &seed, const TempTrajectory &traj) const
Definition: BaseCkfTrajectoryBuilder.cc:195
TrajectorySeed::const_iterator
recHitContainer::const_iterator const_iterator
Definition: TrajectorySeed.h:20
Surface
Definition: Surface.h:36
BaseCkfTrajectoryBuilder::~BaseCkfTrajectoryBuilder
~BaseCkfTrajectoryBuilder() override
Definition: BaseCkfTrajectoryBuilder.cc:43
TrajectoryMeasurement::updatedState
TrajectoryStateOnSurface const & updatedState() const
Definition: TrajectoryMeasurement.h:184
Propagator::magneticField
virtual const MagneticField * magneticField() const =0
TrackingRecHit::RecHitPointer
std::shared_ptr< TrackingRecHit const > RecHitPointer
Definition: TrackingRecHit.h:24
Trajectory::foundHits
int foundHits() const
Definition: Trajectory.h:206
BaseCkfTrajectoryBuilder::qualityFilter
bool qualityFilter(const TempTrajectory &traj, bool inOut=false) const
Definition: BaseCkfTrajectoryBuilder.cc:135
BaseCkfTrajectoryBuilder::setData
void setData(const MeasurementTrackerEvent *data)
Definition: BaseCkfTrajectoryBuilder.cc:216
BaseCkfTrajectoryBuilder::theTTRHBuilder
const TransientTrackingRecHitBuilder * theTTRHBuilder
Definition: BaseCkfTrajectoryBuilder.h:174
Trajectory::lostHits
int lostHits() const
Definition: Trajectory.h:217
TrajectoryStateUpdator.h
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
TkTransientTrackingRecHitBuilder.h
BaseCkfTrajectoryBuilder::theSeedAs5DHit
bool theSeedAs5DHit
Definition: BaseCkfTrajectoryBuilder.h:179
TRecHit5DParamConstraint.h
BaseCkfTrajectoryBuilder::theInOutFilter
std::unique_ptr< TrajectoryFilter > theInOutFilter
Definition: BaseCkfTrajectoryBuilder.h:182
DetId
Definition: DetId.h:17
GeometricSearchTracker.h
UNLIKELY
#define UNLIKELY(x)
Definition: Likely.h:21
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
BaseCkfTrajectoryBuilder::BaseCkfTrajectoryBuilder
BaseCkfTrajectoryBuilder(const edm::ParameterSet &conf, std::unique_ptr< TrajectoryFilter > filter, std::unique_ptr< TrajectoryFilter > inOutFilter=nullptr)
Definition: BaseCkfTrajectoryBuilder.cc:27
TrackingGeometry::idToDet
virtual const GeomDet * idToDet(DetId) const =0
BaseCkfTrajectoryBuilder::toBeContinued
bool toBeContinued(TempTrajectory &traj, bool inOut=false) const
Definition: BaseCkfTrajectoryBuilder.cc:114
PTrajectoryStateOnDet::detId
unsigned int detId() const
Definition: PTrajectoryStateOnDet.h:65
TrajectoryMeasurement::predictedState
TrajectoryStateOnSurface const & predictedState() const
Definition: TrajectoryMeasurement.h:174
NavigationSchool::nextLayers
std::vector< const DetLayer * > nextLayers(const DetLayer &detLayer, Args &&... args) const
Definition: NavigationSchool.h:33
TrajectoryStateOnSurface::freeState
FreeTrajectoryState const * freeState(bool withErrors=true) const
Definition: TrajectoryStateOnSurface.h:58
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
BaseCkfTrajectoryBuilder::createTrajectoryFilter
static std::unique_ptr< TrajectoryFilter > createTrajectoryFilter(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)
Definition: BaseCkfTrajectoryBuilder.cc:45
cmsutils::bqueue::size
size_type size() const
Definition: bqueue.h:201
BaseCkfTrajectoryBuilder::theUpdator
const TrajectoryStateUpdator * theUpdator
Definition: BaseCkfTrajectoryBuilder.h:170
Trajectory::setSharedSeed
void setSharedSeed(const std::shared_ptr< const TrajectorySeed > &seed)
Definition: Trajectory.h:316
TempTrajectory::lastMeasurement
const TrajectoryMeasurement & lastMeasurement() const
Definition: TempTrajectory.h:159
LayerMeasurements.h
GeometricSearchTracker::detLayer
const DetLayer * detLayer(const DetId &id) const
obsolete method. Use idToLayer() instead.
Definition: GeometricSearchTracker.h:53
TempTrajectory::measurements
const DataContainer & measurements() const
Definition: TempTrajectory.h:177
BaseCkfTrajectoryBuilder::backwardPropagator
const Propagator * backwardPropagator(const TrajectorySeed &seed) const
Definition: BaseCkfTrajectoryBuilder.h:163
TempTrajectory::foundHits
int foundHits() const
Definition: TempTrajectory.h:184
edm::ESHandle< TrajectoryStateUpdator >
BaseCkfTrajectoryBuilder::thePropagatorAlongName
const std::string thePropagatorAlongName
Definition: BaseCkfTrajectoryBuilder.h:186
BaseCkfTrajectoryBuilder::theMeasurementTracker
const MeasurementTrackerEvent * theMeasurementTracker
Definition: BaseCkfTrajectoryBuilder.h:175
BaseCkfTrajectoryBuilder::moveToResult
void moveToResult(TempTrajectory &&traj, TempTrajectoryContainer &result, bool inOut=false) const
Definition: BaseCkfTrajectoryBuilder.cc:182
ALCARECOTkAlBeamHalo_cff.filter
filter
Definition: ALCARECOTkAlBeamHalo_cff.py:27
TrajectoryFilterFactory.h
BaseCkfTrajectoryBuilder::theUpdatorName
const std::string theUpdatorName
Definition: BaseCkfTrajectoryBuilder.h:185
BaseCkfTrajectoryBuilder::StateAndLayers
std::pair< TSOS, std::vector< const DetLayer * > > StateAndLayers
Definition: BaseCkfTrajectoryBuilder.h:59
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
BaseCkfTrajectoryBuilder::TempTrajectoryContainer
std::vector< TempTrajectory > TempTrajectoryContainer
Definition: BaseCkfTrajectoryBuilder.h:63
edm::ParameterSet::exists
bool exists(std::string const &parameterName) const
checks if a parameter exists
Definition: ParameterSet.cc:674
PrintoutHelper::dumpCandidate
static std::string dumpCandidate(const Candidate &candidate, bool showErrors=false)
Definition: PrintoutHelper.h:25
BaseCkfTrajectoryBuilder::theRecHitBuilderName
const std::string theRecHitBuilderName
Definition: BaseCkfTrajectoryBuilder.h:189
TrajectoryStateUpdator::update
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const =0
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
MeasurementTrackerEvent
Definition: MeasurementTrackerEvent.h:15
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
BaseCkfTrajectoryBuilder::seedMeasurements
void seedMeasurements(const TrajectorySeed &seed, TempTrajectory &result, bool as5D) const
Definition: BaseCkfTrajectoryBuilder.cc:51
BaseCkfTrajectoryBuilder::thePropagatorOpposite
const Propagator * thePropagatorOpposite
Definition: BaseCkfTrajectoryBuilder.h:172
TempTrajectory::lostHits
int lostHits() const
Definition: TempTrajectory.h:194
TempTrajectory::toTrajectory
Trajectory toTrajectory() const
Convert to a standard Trajectory.
Definition: TempTrajectory.cc:176
MeasurementTrackerEvent::geometricSearchTracker
const GeometricSearchTracker * geometricSearchTracker() const
Definition: MeasurementTrackerEvent.h:66
BaseCkfTrajectoryBuilder::setEvent_
virtual void setEvent_(const edm::Event &iEvent, const edm::EventSetup &iSetup)=0
Trajectory::lastMeasurement
TrajectoryMeasurement const & lastMeasurement() const
Definition: Trajectory.h:150
beam_dqm_sourceclient-live_cfg.cerr
cerr
Definition: beam_dqm_sourceclient-live_cfg.py:17
iEvent
int iEvent
Definition: GenABIO.cc:224
trajectoryStateTransform::transientState
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
Definition: TrajectoryStateTransform.cc:35
BaseCkfTrajectoryBuilder::theNavigationSchool
const NavigationSchool * theNavigationSchool
Definition: BaseCkfTrajectoryBuilder.h:176
BaseCkfTrajectoryBuilder::forwardPropagator
const Propagator * forwardPropagator(const TrajectorySeed &seed) const
Definition: BaseCkfTrajectoryBuilder.h:160
edm::EventSetup
Definition: EventSetup.h:57
Propagator::propagate
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
Trajectory::pop
void pop()
Definition: Trajectory.cc:30
get
#define get
Trajectory::measurements
DataContainer const & measurements() const
Definition: Trajectory.h:178
TrajectoryMeasurement::recHit
ConstRecHitPointer const & recHit() const
Definition: TrajectoryMeasurement.h:190
BaseCkfTrajectoryBuilder::unset
void unset() const override
Definition: BaseCkfTrajectoryBuilder.cc:226
Trajectory.h
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
BaseCkfTrajectoryBuilder::thePropagatorOppositeName
const std::string thePropagatorOppositeName
Definition: BaseCkfTrajectoryBuilder.h:187
Trajectory
Definition: Trajectory.h:38
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
TrackingComponentsRecord.h
BaseCkfTrajectoryBuilder.h
TrajectorySeed
Definition: TrajectorySeed.h:17
EventSetup.h
TempTrajectory::lastLayer
const DetLayer * lastLayer() const
Redundant method, returns the layer of lastMeasurement() .
Definition: TempTrajectory.h:237
TrajectoryStateTransform.h
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
mps_fire.result
result
Definition: mps_fire.py:303
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
PTrajectoryStateOnDet
Definition: PTrajectoryStateOnDet.h:10
NavigationSchool.h
TRecHit5DParamConstraint
Definition: TRecHit5DParamConstraint.h:9
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
BaseCkfTrajectoryBuilder::theEstimatorName
const std::string theEstimatorName
Definition: BaseCkfTrajectoryBuilder.h:188
TempTrajectory.h
edm::ConsumesCollector
Definition: ConsumesCollector.h:39
TempTrajectory::pop
void pop()
Definition: TempTrajectory.cc:44
BaseCkfTrajectoryBuilder::createStartingTrajectory
TempTrajectory createStartingTrajectory(const TrajectorySeed &seed) const
Definition: BaseCkfTrajectoryBuilder.cc:105
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
SurveyInfoScenario_cff.seed
seed
Definition: SurveyInfoScenario_cff.py:295
g
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
MeasurementTracker.h
TempTrajectory::empty
bool empty() const
True if trajectory has no measurements.
Definition: TempTrajectory.h:210
Trajectory::empty
bool empty() const
True if trajectory has no measurements.
Definition: Trajectory.h:233
TrackingComponentsRecord
Definition: TrackingComponentsRecord.h:12