New ODIN implementation
This is an alternative to !3065 (closed)
I'm proposing a completely new implementation of the ODIN class, where the ODIN raw bank is decoded on demand and the internal storage is just the raw bank, reducing the object size (on top of DataObject) to 40 bytes instead of the current O(100) (it's difficult to judge from the number of data members).
The new class is in a dedicated (versioned) namespace to allow for multiple independent versions.
The changes are (and cannot be) backward compatible, in particular because I replaced some enum
s to enum class
and because I renamed the enum
TriggerType
to TriggerTypes
for consistency with the others.
I also refactored the encoding/decoding into the ODIN constructor and a special factory for decoding old versions of the bank (currently supporting only 7 and 6, but 6 can be dropped at some point). This partially addresses the issue with the copy of the decoding code in Allen.
The only issue still to be addressed is the fact that I cannot read an old ODIN object from a ROOT file. There are a few tests failing for this reason, but AFAIR we never really stored the ODIN object to file in production, so we could drop the tests or find how to implement a custom TStreamer to address schema evolution (which would be needed only to support Run2 data).
Closes #123 (closed)
Requires Lbcom!562 (merged) Rec!2464 (merged) Phys!950 (merged) Moore!877 (merged) Allen!587 (merged) Analysis!818 (merged) Panoptes!132 (merged) Castelao!114 (closed)
Includes !3250 (merged)