Simple Kalman Filter to fit PrTracks
This now represents a stable enough prototype of a boiled down fitter that is able to fit long and downstream tracks.
What do we have here
A simple Kalman filter implementation that takes as input the new PrLongTracks
or PrDownstream
class and simplifies some other steps.
The main differences to the TrackKalmanFilter
used by e.g. the TrackEventFitter
are:
- use of the available hit indices into their respective hit container. → No more
MeasurementProvider
orErrorPositionTools
- A more lightweight
FitNode
like class calledsimple_fitnode
. Think of this pretty much as a data container. - No more use of the
std::variant
based measurement class. - The Closest approach residual between track and e.g.
SciFi
fiber assumes a straight trajectory in the locality of the fiber. (Already default inTrackEventFitter
butTrajPoca
is no longer supported here) - The measurement projection matrix is now calculated in a way that is understood by at least 2 People in LHCb compared to previously 0.
- Noise matrices are only determined via the approximation in
ParametrisedScatters.h
not viasimplifiedGeometry
(TrackEventFitter
has both options) - Produces the following hopefully sufficient set of states:
ClosestToBeam
,Beg-{Rich1,Rich2}
, &End-{Rich1,Rich2}
, and{first,last}-measurement
- However these states are only produced at the end of the fit, not included as
FitNode
without measurement and thus safes a bit of unnecessary math during the fit procedure.
Resolutions
-
TrackResChecker
seems to be about equally happy with the results ofTrackEventFitter
and this version, see attached plots for theCTB
state.
Open questions and ToDo's
-
What precision is required for RICH1 states? Right now it's an average of the extrapolations from the hits upstream and downstream of that position. But this average isn't cheap! -
Recently we have again and again seen some instabilities in the TrackEventFitter
.
I want to point out that this version also usesLHCb::Similarity
so likely has the same problem. Yet since this is a more compact package I'm hoping debugging will be easier.
Figure out a way to best check for instabilities. Test square root formalism? Maybe then we could move to float? -
Velo measurements are still split into 2 nodes. This is unnecessary math! (some work already done by @jadevrie in !2140 (merged) )
Edited by Christoph Hasse