Skip to content

Releases: JeffersonLab/JANA2

v2.4.3

01 Aug 04:47
Compare
Choose a tag to compare

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

06 Jun 14:43
9b89ca3
Compare
Choose a tag to compare

Behavior changes

  • jana:max_inflight_events now defaults to nthreads regardless of whether nthreads was explicitly set. Previously it defaulted to 4 when nthreads was unset, and otherwise defaulted to nthreads. (Issue #443)
  • JEventSource::GetEventCount() is deprecated and replaced by GetSkippedCount(), GetEmittedEventCount(), and GetProcessedEventCount(). These behave intuitively when nskip 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

10 Jun 17:53
Compare
Choose a tag to compare

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

  • Run 1:
  • Run 2:

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

03 Feb 21:26
Compare
Choose a tag to compare

Features

  • Externally wired factories using JWiredFactoryGenerator (#399, #400)

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 to JLogger (#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

07 Nov 06:03
02089a2
Compare
Choose a tag to compare

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

18 Sep 19:51
Compare
Choose a tag to compare

What's Changed

Features

  • Added a simple JWiringService which can be used to wire JOmniFactories via a TOML file. (#353, #363)
  • Added add_jana_plugin, add_jana_library, and add_jana_test CMake macros (#364)

Bugfixes

  • A multithreading bug in JEventProcessor has been fixed.
  • JFactory::Create now checks JEventSource::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 into examples (#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 and Status into Components, 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 the jana: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 name
  • JFactorySet is no longer silent when the user attempts to include duplicates of the same factory (#343)
  • JMetadata is deprecated, to be replaced with JMultifactory. (#345)
  • All JFactories now call JEventSource::GetObjects, not just JGetObjectsFactory. (#361)

New Contributors

v2.3.1

01 Aug 16:15
4b95840
Compare
Choose a tag to compare

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

23 Jul 13:55
Compare
Choose a tag to compare

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

  • JANA code style conventions: #306
  • JANA release process: #306

Full Changelog: v2.2.0...v2.3.0

v2.2.1

08 May 01:41
72948eb
Compare
Choose a tag to compare
v2.2.1 Pre-release
Pre-release

Add support for event levels and timeslices

New features

Bugfixes

Refactoring

Full Changelog: v2.1.2...v2.2.0

v2.1.2

21 Nov 22:33
Compare
Choose a tag to compare
  • 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)