Skip to content

Event-by-event processing framework using HDF5 and C++17

License

Notifications You must be signed in to change notification settings

LDMX-Software/fire

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔥 fire 🔥

Framework for sImulation and Reconstruction of Events.

It's a stretch but it's worth it for the cool name.

An event-by-event processing framework using HDF5 via HighFive for serialization, Boost for logging, Python3 for configuration, and C++17.

The core idea of this framework is the assumption that our data (simulated or real) can be grouped into "events" that we can assume are independent (for the software, not necessarily true in real life). Each event is given to a sequence of "processors" that can look at the current data in the event and potentially produce more data to put into the event.

The behavior of this framework is dynamically configured at run-time by running an input python script and then translating python objects into their C++ counter-parts. This configuration style is extermely flexible and allows both C++ and Python to do what they do best.

Besides this core functionality of processors looking at data event-by-event, there are optional helpers that allow processors to log through boost logging and access "conditions" through a centrally-controlled system.

Features

  • User defined custom processors to handle data generation and manipulation: fire::Processor
  • Dynamic run-time loading of libraries containing processors and creation of registered processors using their full C++ class name: fire::factory::Factory
  • Header for event-wide information: fire::EventHeader
  • Header for run-wide information: fire::RunHeader
  • Simple serialization of user-defined classes allowing for quick h5py-based analyses: fire::io
  • Run-time configuration via a python script: fire::config and \pythonpackage
  • Drop/Keep Rules: Regex-based rules for copying data from input file to output file or choosing to not save data created during processing: fire::Event
  • Veto: Voting system for processors to decide if an entire event should be saved into the output file : fire::StorageControl
  • Logging through Boost : fire::logging
  • Interface to a conditions system for support data : fire::Conditions
  • Modern CMake infrasture enabling simple find_package(fire) syntax

Dependencies

  • C++ compiler with C++17 support
  • HDF5
  • HighFive C++ interface for HDF5
    • Accessing the HDF5 C API directly is feasible; however, HighFive provides support for Exception translation and std::string which I don't want to have to figure out myself.
  • Boost Core (for various low-level tasks like demangling)
  • Boost Logging (for logging through fire)
  • Python3

Developer Dependencies

  • Boost Unit Testing Framework
  • pytest
  • doxygen