WIP: iterable PVs
Main goal: allow PV MC checking with matching by tracks.
This MR introduces a new class to hold primary vertices. These are designed to fit into the ThOr iterable concept (are zippable and iterable, iterations can be done "unwrapped", "scalar", and in SIMD chunks - the latter option isn't used in the stack atm see Rec). Besides API breaks and data layout changes, the improvement over the existing reconstruction is that the PVs can hold "references" to the POD SOA velo tracks they are made from, especially to two (hard coded) track containers. (the latter are called forward and backward, though any two containers with zipfamilynumber that are accessible through index should work).
The internal data layout is AoS (running the HLT1 reconstruction on a quanta node in moore for me lead to a performance regression when using a simple SoA layout). The references to the tracks are small buffer optimized for up to 60 tracks per direction (tried 30, 60, 100, 200, and saw little change in throughput when increasing beyond 60). Said references are SoA, could not measure a difference in throughput between SoA and AoS.
See also:
- Rec!1831 (closed) for algorithmic changes
- Brunel!923 (closed) (obsolete, kept for the record, though reference update needed)
- Moore!446 (closed) for changes to moore
should be merged after: