JANA2
C++ framework for multi-threaded data processing
JANA2 C++ Reference Guide

JANA2 is a cutting-edge C++ framework designed for High Energy and Nuclear Physics experimental data reconstruction. It excels in multi-threaded processing, ensuring maximum efficiency and scalability. With its intuitive setup and extensive customization options, JANA2 empowers both novice and experienced programmers to contribute effectively. Whether running on a local machine or a large computing cluster, JANA2 optimizes performance, making it the ideal choice for any scale of project.

This website provides documentation for JANA2 C++ API automatically generated by Doxygen.

Main API

  • JApplication: The main entry point into the program
  • JObject: Data containers for specific results
  • JEventSource: From a file or messaging producer, expose a stream of events. Each event is an aggregate of JObjects
  • JFactory: Given an event, calculate a specific result, potentially calling other JFactories recursively to obtain any prereqs
  • JEventProcessor: Run desired JFactories over the event stream, writing results to an output file or messaging consumer

Streaming Extensions

User-facing utilities

  • JParameter: Configure the behavior of components at runtime
  • JLogger: Publish debugging information to standard out in a structured, convenient, threadsafe way
  • JService: Share external (stateful) services such as calibration constants and magnetic field maps

Internal services

  • JParameterManager: Furnish the user with parameters extracted from command line flags and configuration files

Parallelism engine

  • JProcessingController: The interface which any parallelism engine must adhere to
  • JArrowProcessingController: The entry point into the "Arrow" engine
  • JWorker: Contains the loop for each worker thread, along with startup/shutdown logic and encapsulated worker state.
  • JScheduler: Contains the logic for giving a worker a new assignment