Add RunManager
Context
Our new architecture design introduced the concept of a RunManager
class that orchestrates the other subsystems (Reader, Pulse Finding, Pulse Analysis). We also planned to extract magic numbers, runtime parameters, etc. to a RunConfig
class.
Summary
Config via JSON
We decided to use a flexible JSON-based config file system instead of hard-coding members for the RunConfig
class in our original design. With this new system, RunManager
will only have to read a JSON file passed as a command line argument and pass its nested objects (named "PulseFinding", "PulseAnalysis", etc.) to the appropriate subsystems. Classes that expect certain parameters are responsible for validating the schema of the JSON config object they receive, making the system more dynamic and reducing the need for recompilation
Building
We had to add a new dependency (jsoncpp) to help us handle JSON data. The library is built and baked into the container image, so builds should work as before. The new make
target bin/vanwftk
builds an executable called vanwftk
that will use RunManager.cxx
as a the program's entrypoint. We're aiming for this to replace PulseFinding.exe
by the end of the reimplementation, but for now it's useful for us to be able to run both binaries side by side.
How was this tested
Tested that RunManager
can correctly read the sample JSON file experiments/example.json