Move data truncation from packing sequence to data providers
See the general description of the packing in #151
In Run 2 during the event packing persistency data truncation was applied, to remove noise bits to help with compression performance. This worked but had some side effects such as the values in the data objects where modified after they were used in HLT2, so the objects as resurrected later on did not 100% bitwise represent what the HLT operated on, and thus small differences where possible.
The solution to this is to move the truncation into the data producer algorithms themselves.
Another part of this task is to review the best truncation scheme to use to facilitate making the floating point representations of each value more easily compressed, which means having padding zeros in the lower 'noise' bits. This can be done with floating point values by using a 'relative truncation' scheme, which directly masks out the noise bits in the floating point mantissa, instead of an absolute truncation scheme, that aims to truncate the values to a given precision (e.g. 2 d.p. etc.). In Run 2 we used the absolute scheme, which has its advantages (fixed precision) but requires the floating point values to be stored in their 'scaled int' forms in order for compression of the padding zeros to be taken best advantage of.
For details on how these truncations can be performed, see the utility header file
https://gitlab.cern.ch/lhcb/LHCb/-/blob/master/Kernel/LHCbMath/LHCbMath/Truncate.h
(to be updated soon by LHCb!2502 (merged))
In Run 2 the packing is handled by the data types and algorithms defined in the 'EventPacker' package
https://gitlab.cern.ch/lhcb/LHCb/-/tree/master/Event%2FEventPacker
In particular the packed data struct representations can be found in
https://gitlab.cern.ch/lhcb/LHCb/-/tree/master/Event%2FEventPacker%2FEvent
https://gitlab.cern.ch/lhcb/LHCb/-/tree/master/Event%2FEventPacker%2Fsrc%2Flib
The utility used during run 2 to perform the absolute scale based data truncation and storage as int is
https://gitlab.cern.ch/lhcb/LHCb/-/blob/master/Event/EventPacker/Event/StandardPacker.h
The LHCbMath Truncate.h header above provide a more modern and flexible alternative to this 'standardPacker' so should be what we migrate to going forward.