Releases: JeffersonLab/JANA2
v2.4.3
Behavior changes
-
JHasOutputs represents variadic output names as
std::vector<std::vector<std::string>>
, which now allows for multiple variadic outputs with arbitrary lengths (Pull request #458) -
Removed the never-used JEventProcessorSequential and JEventProcessorSequentialRoot. All their functionality has been backported to JEventProcessor. (Pull request #456)
-
JInspector is now launched using the parameter
jana:inspect=true
instead of the command-line argument--interactive
, which works regardless of which executable runs JANA. (Pull request 459)
Bugfixes
-
Relax JFactory::Create cycle detector for the sake of JEventSourceEVIOpp (Pull request #461)
-
Fix JFactoryPodioT template error when using Podio LinkCollections (Pull request #462)
-
JEventUnfolder erroneously inserted outputs even though KeepChildNextParent was returned (Pull request #458)
-
JEventUnfolder supports parent events with zero children (Pull request #456)
-
JTopologyBuilder creates a chain of TapArrows so that independent JEventProcessors can be pipelined, allowing new-style JEventProcessors to have comparable performance to the old-style ones. (Pull request 456)
Features
- Variadic inputs now support an EmptyInputPolicy, which allows components to optionally retrieve all databundles/collections for a given type and EventLevel, analogous to JEvent::GetFactoryAll(). (Pull request #454)
Usability improvements and refactoring
-
Improve the JANA tutorial and examples by creating a new paradigm, in which a toy reconstruction codebase is systematically built up piece-by-piece. Two versions exist, one using a lightweight (GlueX-style) datamodel, and the other using a Podio datamodel. Apart from the datamodel choice, the two versions are functionally identical. (Pull request #453)
-
Improve debugging by having the JANA1-style JEvent::GetSingle directly throw a JException instead of a size_t, thereby producing a full stack trace (Pull request #461)
-
Renamed JEventProcessor::Process(const JEvent&) to ProcessSequential to reduce user confusion (Note that this feature was experimental and unused up until now) (Pull request #456)
-
JTopologyBuilder::connect() wires arrows using port id instead of port index, reducing confusion while manually configuring topologies. (Pull request #456)
-
JFactoryT uses JDatabundle under the hood, as part of a deeper long-term refactoring. (Pull request #458, Issues #254, #276)
v2.4.2
Behavior changes
jana:max_inflight_events
now defaults tonthreads
regardless of whethernthreads
was explicitly set. Previously it defaulted to 4 whennthreads
was unset, and otherwise defaulted tonthreads
. (Issue #443)JEventSource::GetEventCount()
is deprecated and replaced byGetSkippedCount()
,GetEmittedEventCount()
, andGetProcessedEventCount()
. These behave intuitively whennskip
is used. (Issue #428)
Features
- Added
jana:output_processed_event_numbers
parameter to assist with debugging (Issue #425) - Ported
janaroot
plugin from JANA1 - JFactory detects and excepts on cycles (Issue #423)
- Improved scale test visualizations, including plotting multiple scaling tests on the same plot and supporting log scaled axes.
Bugfixes
- Missing template argument in VariadicPodioOutput
- JEvent was being marked as warmed up prematurely
- JAutoactivator was being called last instead of first (Issue #440)
- If the user attempted to run without providing a JEventSource, processing would crash with an ArithmeticException instead of a helpful error message (Issue #437)
JEventSource::FinishEvent()
was being called spuriously (Issue #424)
Refactoring
- Preliminary support for random-access JEventSources is provided via
JEventSource::Skip()
. This feature should be considered experimental for now because it doesn't work with barrier events yet. (Issue #422)
v2.4.1
Features
This release introduces CCDB caching, significantly improving performance and reducing memory usage for applications that frequently access calibration constants. The improvements apply to all the applications using JANA2. The performance tests are mainly conducted using the monitoring_hists
and beam_online
plugins of halld_recon (hd_root
).
Performance Highlights
Event Processing Rates
1000 events, 32 threads
Plugins: monitoring_hists
, beam_online
(Primary test case)
Configuration | Cache ON | Cache OFF |
---|---|---|
monitoring_hists + beam_online | 19 Hz | 1.2 Hz |
beam_online only | 74.7 Hz | 1.7 Hz |
Startup Time
Configuration | Cache ON | Cache OFF |
---|---|---|
monitoring_hists + beam_online | 17 sec | 44 sec |
beam_online only | 11 sec | 10 min (!) |
Memory Usage
Cache OFF
Cache ON
Resident Memory: 1k vs. 100k Events (Cache ON)
📄 Full Changelog: [v2.4.0 → v2.4.1]
Key Benefits
- Significant rate improvements observed
- Memory usage reduction
- Faster startup times
v2.4.0
Features
Bugfixes
- Fix parameter strictness check (#394)
- Fix Podio deprecation warnings (#389)
- Fix ODR violation (#396)
- Fix
JFactory::Create()
logic (#383) - Fix
JEventProcessor
deletion order (#391) - Fix double-free in
JLockService
destructor (#388)
Refactoring
- Migrate
JStreamLog
uses toJLogger
(#390, #395, #398) - Reorganize and deprecate
Compatibility/
headers (#392, #397) - Refactor arrow execution machinery (#385, #387, #393)
Full Changelog: v2.3.3...v2.4.0
v2.3.3
2.3.3
Bugfixes
- Fix problem with user-defined factory generators (#366)
- JEventProcessor::Process() called before BeginRun() (#367)
- Lock overwrite in RootFillLock() (#369)
- JFactory::Finish() is called (#377)
Features
- JTopologyBuilder supports topologies with arbitrarily nested levels (#346)
- Barrier events are back (#371)
Refactoring
- Improved log output (#368)
- JTest uses new-style component interfaces (#374)
- JArrows now fire on individual events (#375, #378)
Full Changelog: v2.3.2...v2.3.3
v2.3.2
What's Changed
Features
- Added a simple
JWiringService
which can be used to wireJOmniFactories
via a TOML file. (#353, #363) - Added
add_jana_plugin
,add_jana_library
, andadd_jana_test
CMake macros (#364)
Bugfixes
- A multithreading bug in
JEventProcessor
has been fixed. JFactory::Create
now checksJEventSource::GetObjects
(#361)JPluginLoader
no longer loads plugins twice in certain cases (#343)JParameterManager::FilterParameters
marks parameters as 'used', thereby avoiding spurious 'unused parameter' warnings. (#331)JTypeInfo::to_string_with_si_prefix
generates the correct SI prefix in certain cases (#348)
Refactoring
- Plugins and their headers are now installed to a directory that doesn't conflict with a system install (#330)
JPluginLoader
has been extensively rewritten (#339)JCsvWriter
has been moved intoexamples
(#350)- JANA's internal performance testing RNG has been refactored to be more reproducible, and to avoid ASAN violations. (#315)
JPodioExample
has been split into several reusable examples. (#352)- Code was moved from
Omni
andStatus
intoComponents
, making the layered architecture clearer (#351) - Documentation has been overhauled, including adding an extensive JANA1-to-JANA2 migration guide (#334, #336, #342, #354, #357, #359)
- CI testing has been extended (#332, #341)
Behavior changes:
- JANA now has one internal logger, configurable via the
jana:loglevel
parameter. External loggers are now configurable via thejana:global_loglevel
parameter. - Log output has been streamlined: oversized tables are now YAML, and essential information is now logged at
WARN
level. (#362) JPluginLoader
now stops when a plugin fails to load, rather than continuing searching for another plugin with the same name.JPluginLoader
no longer accepts paths as part of a valid plugin nameJFactorySet
is no longer silent when the user attempts to include duplicates of the same factory (#343)JMetadata
is deprecated, to be replaced withJMultifactory
. (#345)- All
JFactories
now callJEventSource::GetObjects
, not justJGetObjectsFactory
. (#361)
New Contributors
-
@RaiqaRasool made their first contribution in #332
-
Full Changelog: v2.3.1...v2.3.2
v2.3.1
Bugfix: janadot
produces nearly empty output files
This release fixes a bug which caused janadot
plugin to stop producing output. It also drops support for Podio <= 00-17 by replacing the user-provided PodioTypeMap
with the builtin PodioT::collection_type
.
Full Changelog: v2.3.0...v2.3.1
v2.3.0
Features
- There is a new "interactive mode" accessible by pressing Ctrl-C during running. This pauses processing and allows the user to manually fire individual arrows, as well as look up information about components, collections, topology, and processing performance: #307, #322
- Users can now configure how strict JParameterManager will be about extra (e.g. misspelled) parameters: #302
- Users can now configure how much detail the parameters table will show at startup: #302
- Users can now directly look up which factories produce or consume each collection, and which collections are produced or consumed by each factory: #312
- Users can access expanded, constexpr version information from JVersion.h: #320
Bugfixes
- Improved CI coverage: #300, #319, #323
- Improved exception handling logic in all components: #301
- Components not being destroyed when they should: #299
jana-generate.py
no longer pulls in ROOT dependency by default, breaking the tutorial: #310- CMake compiler_definitions inconsistent with jana_config.h: #313
- Suppress spurious error messages during JVersion.h creation: #317
- Factory parameters show up in parameters table: #311
- jana-config script sets RPATH correctly: #309
Refactoring
- Users no longer need to import and forward defines such as
JANA2_HAVE_PODIO
because they have been moved intoJVersion.h
: #313 - Code deduplication: jana_config.h fully replaced by JVersion.h: #313
- Dead code removal: JSubeventMailbox: #304
- All library code uses
#pragma once
instead of header guards: #308 - Example programs are installed to
$PREFIX/bin
instead of$PREFIX/programs
: #309
Documentation
Full Changelog: v2.2.0...v2.3.0
v2.2.1
Add support for event levels and timeslices
New features
- Add support for timeslices by @nathanwbrei in #278
- Develop TimesliceExample by @nathanwbrei in #281
- TimesliceExample: Wire factories externally by @nathanwbrei in #289
- Add JFactory "REGENERATE" flag by @nathanwbrei in #285
- Polish timeslice example by @nathanwbrei in #290
Bugfixes
- Fixes for the next PODIO version by @veprbl in #269
- Small fix to pushd and popd around source thisroot.sh by @kkauder in #272
- PodioExample: add schema_version by @wdconinc in #271
- fix: no copy constructor in PodioExample.cc by @wdconinc in #273
- Bugfix: Exceptions in JPluginLoader produce correct exit code by @nathanwbrei in #286
- Service initialization fixes by @nathanwbrei in #287
- Small fixes inspired by debugging eicrecon by @nathanwbrei in #288
Refactoring
- Arrow refactoring by @nathanwbrei in #270
- Cleanup: Remove obsolete, unused functionality by @nathanwbrei in #282
- JService is now a JComponent by @nathanwbrei in #283
Full Changelog: v2.1.2...v2.2.0
v2.1.2
- Fix rough edges involving PODIO and JMultifactories (“TODO: NWB:” in the code) (#263, #247, #253)
- Fix exported CMake target’s link libraries and compile definitions (#242)
- Fix parameter manager bugs: No more ”loses equality with itself after stringification!” warnings (#256, #233)
- Add support for std::array parameters (#236)
- Deprecate PodioTypeMap/data model glue (#262)
- Improve performance test suite (for regression testing!) (#260)
- Fix race condition which emerges when nthreads > 80 (#227)