FPGATrackSim: store sliced hits in LogicalEventInputHeader, output to ROOT
The road union tool is now responsible for assigning logical layers and slicing the hits into vectors before passing those vectors onto pattern recognition. However, while we were storing all the unsliced input hits and all the output roads, we were not storing the collections of sliced hits, so it was not possible to produce slicing engine test vectors.
This commit fixes that by adding a new LogicalEventInputHeader branch to the output ROOT file. A pointer to this object is then given to the road union tool, and when it slices the hits it stores a copy in the towers of that object-- one tower per each slice. This will then be available for output test vector generation.
As part of this I broke the inheritance between RoadUnionTool and the RoadFinder interface. The road union tool is no longer "just" a road finder-- it's now a proxy for the slicing engine, which is materially different and needs to have a different interface. So keeping the inheritance didn't make sense-- we now need a way of connecting the internal hit storage to the output ROOT file, for instance, which is something the road finders don't need.
We also don't want to support running without the road union tool anymore, which is what this inheritance made possible. The individual road finders still use the common interface, so it's still possible to switch between pattern recognition options, but all pattern recognition must now go through this tool.
One question is about the overall memory management here-- because the LogicalEventInputHeader branch stores vectors of hits but the road finders need to ingest vectors of smart pointers to hits. I didn't fully reconcile this, but maybe it is worth adding a function to the LogicalEventInputHeader's towers to return a vector of smart pointers-- and then call that in the road union tool. If that seems like a good idea I can add it.
Tagging @jahreda, @imaznas, @lipeles, @acamplan for review and visibility.