Skip to content

Simple Kalman Filter to fit PrTracks

Christoph Hasse requested to merge simpleFitter_for_prtracks into master

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 or ErrorPositionTools
  • A more lightweight FitNode like class called simple_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 in TrackEventFitter but TrajPoca 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 via simplifiedGeometry (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 of TrackEventFitter and this version, see attached plots for the CTB state.

image image image image image

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 uses LHCb::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) )

cc: @ldufour @sstahl

Edited by Christoph Hasse

Merge request reports