Merged requested to merge kalman_no_ref_nodes into master
Closes #4 (closed), #6 (closed)
This should happen together with LHCb!998 (merged)
- TVF now performs a reference node-free Kalman filter. It does not and cannot create reference nodes anymore.
- As a consequence, now a single scheduler is created and populates the node computations as they will be performed.
- The mathematical formulation has been simplified, as branches upon the contained node types are no longer needed.
- The code has been validated against TMF.
- Smoother base pointers are now populated in populateBasePointers. The containing smoothed state can be copied to the proper reference vector with a templated option.
- Noise matrix and transport vector are now AOSOA types, part of NodeParameters.
- updateMaterialCorrections is not invoked on every iteration by default. In fact, its execution depends on a runtime parameter. Therefore, the noise matrix will be copied in initializeBasePointers in case the material does not update. This introduces the necessity for copies, the impact should be evaluated.
- Likewise, there was a runtime option to determine if the transport was updated on every iteration. Since enabling this option would imply quite a lot of copying, the option has been removed in TVF (note: updateTransport updates the transport matrix (5x5), the inverted transport matrix (5x5) and the transport vector). Instead, if not updating the transport is considered, it would be more convenient to run all tracks again, not requiring any copies or the execution of initializeBasePointers.
- The seed covariance matrix is now determined to be: 400 0 400 0 0 0.01 0 0 0 0.01 0 0 0 0 0.0001, a value that was used for all fits.
- An option has been added for verbose printing in TVFit.
- All the code has been moved to .h or .h_impl files. The reason is the fit itself needed to become templated.
- Scheduler was only used if the number of tracks >= vector width. Since very few iterations are invoked with few tracks, now the scheduler is always used. The code and debugging are as a consequence more readable.
- Since the scheduler is always used, the ground is prepared for vectorizing other functions. Now they can always rely on it.