Art Suite Release Notes 1.16.00 (2015/09/28).

Platform and compiler support.

  • Support continues for e7-qualified builds using GCC 4.9.2 and the C++14 standard for non-OS X platforms. e7 builds will likely experience problems on OS X platforms running Xcode >= 7.0 (see known issues, below).

External package changes.

ups v5_1_5 v5_2_0 first implementation of ups platform command
cmake v3_0_1 Dropped from distribution
cmake v3_1_2 Dropped from distribution
cmake v3_2_1 Continues to be shipped
cmake v3_3_2 New version, better formatting of parallel make messages.
valgrind v3_11_0
gitflow v1_8_0 v1_8_0a setup getopt on OSX
boost v1_57_0 v1_57_0a
sqlite v3_08_08_02 v3_08_10_02
python v2_7_9 v2_7_10
cppunit v1_12_1b v1_12_1c
gccxml v0_9_20140718a v0_9_20150423
ninja v1_6_0a needs to build with python v2_7_10
clhep v2_2_0_5 v2_2_0_8
tbb v4_3_5 v4_4_0
xrootd v3_3_4c v3_3_4d
xerces_c v3_1_1d v3_1_2
cry v1_7d v1_7e
lhapdf v5_9_1c v5_9_1d
log4cpp v1_1_1c v1_1_1d
mysql_client v5_5_42 v5_5_45
postgresql v9_3_6 v9_3_9
pythia v6_4_28c v6_4_28d
gsl v1_16 v1_16a
root v5_34_30 v5_34_32
genie v2_8_6c v2_8_6d
dk2nu v01_01_03c v01_02_00 per NOvA request
cstxsd v4_0_0c v4_0_0d
qt v5_4_2 v5_4_2a
geant4 v4_9_6_p04b v4_9_6_p04c
ifdhc v1_8_5 v1_8_7
ifbeam v1_4_12 v1_4_14
nucondb v1_4_12 v1_4_14
cetpkgsupport v1_08_06 v1_08_07
cetbuildtools v4_12_06 v4_14_01
ifdh_art v1_12_02 v1_13_00
nutools v1_14_02 v1_15_00
artdaq_core v1_04_17 v1_04_18

Art suite highlights.

As always, one should visit the package-level release notes linked below, but the highlights are:

  • A new Results data product to enable an analysis-level workflow
  • A technology preview for configuration validation and description
  • Relaxed restrictions on instances of Event, SubRun, and Run products

Art 1.16.00.

New features:

[ Release feature ] Issue #7449 - Analysis support requires ability to store objects in file in branch other than Run, SubRun, or Event.

Users wishing to write or read file-level products may implement a subclass of art::ResultsProducer (#include "art/Framework/Core/ResultsProducer.h"). ResultsProducer plugins are managed and executed by instances of RootOutput, and operate entirely within the scope of one output stream. Configure plugins for a particular RootOutput by providing a results parameter set, like so:

outputs.o1: {
  module_type: RootOutput
  fileName: "out.root" 
  results: {
    producers: {
      rp1: {
        plugin_type: RPTest
        # ...
    rpPath: [ rp1 ] # Arbitrary name, sequence order implies execution order.
Any data products produced by rp1 will be in saved a new tree Results in out.root with one and only one row with the module label (for purposes of e.g. getByLabel()) o1#rp1, with the labels of the output module and the ResultsProducer plugin separated by a literal #. The user should specify one or more paths containing an ordered sequence of plugin labels, with each plugin label appearing at most once. One should not rely on one path being executed before or after another, and in the case of no path being specified a default path will be created listing all defined plugins for that output stream in the order they are obtained from the ParameterSet (currently sorted lexically).

Required and optional functions and invocations of ResultsProducer plugins are described fully in source:art/Framework/Core/ResultsProducer.h, but highlights are as follows:
  • Implement a constructor taking a fhicl::ParameterSet const & as argument (or a suitable validation object as allowed by feature #8770). In this function, declare appropriate InResults data products.
  • Incoming InResults data products in input files are available to the optional readResults(art::Results const &) function (via e.g. art::Results::getByLabel()) which is invoked when each new input file is opened. These incoming data products are NEVER transferred to the output file, which is a major departure from the behavior of the other record types (Event, SubRun and Run). InResults products put() into the Results for a particular output stream are available to downstream ResultsProducer implementations in writeResults(). A well-written ResultsProducer plugin should be able to deal with obtaining incoming InResults data from either or both of these two entry points.

A modular extension has been added to allow the cetskelgen utility to produce a skeleton for ResultsProducer plugins.

Finally, the syntax of outputCommands keep and drop statements has been enhanced to allow an optional third comonent, viz:

keep|drop <branch-spec> [<InEvent|InSubRun|InRun|InResults>]
with the expected behavior of narrowing the applicability of the statement to the sepcified branch type. A branch type of * is equivalent to the default behavior: the statement will apply to all branch types. This feature can also be seen as useful in the context of new feature #2352 described below.

[ Technology preview ] Configuration validation and description

Users will now benefit from configuration validation for any art-provided modules and services that are specified in their FHiCL files. The validation facility ensures that the user-provided configuration for an art-provided service or module (as included in a trigger path or end path) is a configuration that is supported by the particular service or module. Any misspecified parameters (extra, missing, or misspelled parameters) will trigger an exception, which ends the art process and emits a message stating how the job was misconfigured. For details about this, and also details as to how users can enable configuration validation and description for their own modules and services, see here. Implements Feature #9099.

Other new features

  • Issue #2352 - ProductList to allow same module label, instance name and product type for different branch types.
  • Issue #8602 - Exit status after a signal should be an error.
    Upon catching a signal that would cause the program to exit, art will exit with code 128 + n. This behavior may be modified in the case of SIGINT with the FHiCL configuration services.scheduler.SIGINTisNotError : true.

Bug fixes and minor improvements:

  • Minor improvements to dictionary checking, dictionary linking and class version checks.
  • New options --annotate, --prefix-annotate to modify the behavior of --debug-config-out.
  • Issue #8823 - art exit code rationalization.
  • Issue #9648 - --memcheck should run MemoryTracker instead of SimpleMemoryCheck.
  • Issue #9643 - -o option overrides implicitly-included end_paths modules.
  • Issue #9769 - Dereferencing a default-constructed (or cleared) Handle does not throw.

Breaking changes:

  • Issue #9879 - The functions fhicl::ParameterSet::get_keys() and fhicl::ParameterSet::get_pset_keys() are renamed to fhicl::ParameterSet::get_names() and fhicl::ParameterSet::get_pset_names() respectively. If your compiler warns or stops with error on use of deprecated entities (e.g. -Wdeprecated) then a warning or error will be issued as appropriate.

Known issues:

  • Due to issues with GCC 4.9.2 interacting with the Xcode 7.0 command-line tools and a problem with a test (Issue #10343), there will be no OS X build of art 1.16.00.
  • Issue #10364 - art::ResultsProducer::produces<>() requires both template arguments (product class type and branch type) to be specified, as the default branch type of InEvent is inappropriate.
  • [ Backwards incompatibility ] Issue #10614 - Versions 1.16.00 to 1.17.01 are unable to read input files that were produced prior to 1.16.00 due to a missing check on the new ResultsTree object. This is fixed in 1.17.02. This backwards incompatibility does not affect any files produced from this version forward.

messagefacility 1.16.04 (new version).

fhicl-cpp 3.12.03 (new version).

cetlib 1.15.00 (new version).

cpp0x 1.04.11 (new version).