Breaking changes for art series 2.09


Change in exception-handling defaults

The default exception handling for all art::Exception categories has changed to Rethrow. This change affects the following exception categories, whose default behavior has switched from SkipEvent to Rethrow:

Category Notes
ProductNotFound used in product retrieval
InvalidReference used in art::Ptr object retrieval
NullPointerError used in retrieving principals
EventTimeout not used in art/artdaq
DataCorruption used in I/O
NotFound used primarily for metadata retrieval

Relocation of the RootDB subdirectory and library

The art/Persistency/RootDB subdirectory has been moved to art/Framework/IO/Root/RootDB. Any header dependencies should be updated with the new path, and any link-time dependencies of the library art_Persistency_RootDB should be adjusted to art_Framework_IO_Root_RootDB.

The most likely utility used from the RootDB directory is the art::SQlite3Wrapper class. It is still provided with the directory/library changes mentioned above.

SourceHelper usage

Any art::Source detail classes that have an art::SourceHelper data member must ensure that it is a reference:

art::SourceHelper sh_;        // run-time exception when calling 'sh_.make*Principal(...)'
art::SourceHelper const& sh_; // okay

By having a reference data member, the SourceHelper object used by the detail class is the one provided by art, which must manipulate the SourceHelper object's state after any reconstitutes calls have been made in the constructor of the detail class.

Module construction re-ordering

Producers and filters are now constructed before analyzers and output modules. Although this is not a breaking change per se, users who relied on a given module construction order should expect different results. Note that the order in which art modules are constructed is unspecified and should not be relied upon.

  canvas/canvas_root_io refactoring

Location of art_dictionary CMake macro

The art_dictionary CMake macro has been moved from canvas to canvas_root_io. In order for users to invoke the macro, the CMAKE_MODULE_PATH variable in the top-level CMake file of each repository must be updated to refer to $ENV{CANVAS_ROOT_IO_DIR} instead of $ENV{CANVAS_DIR}. This change can be made automatically by using the following installed script (after setting up art):

bash ${CANVAS_ROOT_IO_DIR}/tools/migration/ <top-level dir>

Location of ROOT dictionary utilities

All ROOT dictionary utilities formerly provided by canvas are now located in canvas_root_io. We do not expect this relocation to directly affect anyone. However, if you suspect you may be affected, please consult . We may be able to provide a script that helps users adjust their dependencies.

N.B. Even though the ROOT-dictionary libraries have been relocated, UPS ensures that ROOT can find the dictionaries whenever art is setup.


The fhiclcpp types system has undergone some changes for ease of understanding and for better conceptual clarity with respect to the C++ standard template library:

  • The dtype type alias has been replaced with the more explicit default_type type alias for any templates that support default values.
  • The rtype type alias has been replaced with the value_type type alias.