Q. What is JANA?

A. JANA is a framework for event reconstruction in experimental nuclear physics experiments like those carried out at Jefferson Lab.

Q. What features does JANA have?

A. Here's a list of the major features:

  • Multi-threaded event reconstruction
  • JANA was designed from the first line of code to support multi-threading in anticipation of modern many-core architectures.

  • Plugins
  • Plugins allow a program to be supplemented with additional modules at run time without recompiling/ relinking. The design is open enough to allow a trivial executable with all specializations implemented via plugins. Specifically, the algorithm for reading events in, all reconstruction algorithms, and the code for writing the output file could all come from plugins.

  • Configuration Parameters
  • Configuration parameters can be used to configure aspects of a program's algorithms work or just how the program functions. For example, one can implement debugging flags for specific algorithms using configuration parameters.

  • Network Interface via cMsg
  • A special plugin (janactl) is included with JANA than when attached, allows a remote process to probe and have some limited control over a process using the cMsg publish/subscribe messaging system developed at JLab.

  • Algorithm (factory) Tagging
  • JANA allows multiple algorithms that produce the same type of data objects to exist simultaneously within the same executable. The algorithms each have a user supplied "Tag" which can be used at run time to direct which algorithm should be used.

  • Profiling and Performance utilities
  • JANA has some optional functions for recording the call graph among algorithms and the times spent in each algorithm. This is activated by attaching the supplied janadot plugin. This will produce a file suitable for the graphviz dot program to make a nice graphical chart of the program's flow and timing.

  • Thread aware stream logging
  • JANA contains streambuffer objects (jout and jerr) that if used in place of the standard cout and cerr will do a better job of interspersing lines of out put to the terminal rather than the randomly interspersed characters often seen from multi-threaded programs.

  • Scripts for generating code templates
  • Want to make a new plugin? Type "mkplugin MyPlugin" for a complete template including directory and Makefile. Similar scripts are included for makeing factories (algorithms), event sources, and even just plain classes. All with commented headers that include the time/date, user, host, and platform it was created on.

  • Integrated Geometry API
  • Optional API that can be used to interface JANA programs with external geometry databases.

  • Integrated Calibration API
  • Optional API that can be used to interface JANA programs with external calibration and conditions databases.

  • Object dump, geometry, and calibration command line utilities
  • A set of command-line utilities that can be used to dump object information or even geometry and calibration information via the above mentioned APIs

  • Automated ROOT tree generation
  • Optional plugin (janaroot) can automatically generate ROOT TTree objects using information supplied through the ToStrings() method of data classes. This is useful for quickly getting data objects into ROOT for analysis or display. It is not suitable for all applications however.

Last Updated February 11 2011 12:19:28 PM