- 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.