Breaking changes for art 2.07



  • The ServiceRegistry::instance function is now private. In order to retrieve a service, a ServiceHandle should be used. If you would like to determine within a module that a particular service has been configured please make the following change:
    - if (art::ServiceRegistry::instance().isAvailable<MyService>()) {...}
    + if (art::ServiceRegistry::isAvailable<MyService>()) {...}
  • All functions intended to be only callbacks for art-provided services have been made private. We explicitly mention the affected callbacks below.
  • All Post callbacks will be called only if the call that proceeded it (e.g. a call to the module's produce function) returned normally (that is, it did not result in an uncaught exception being thrown). Currently the Post* callbacks are sometimes invoked even if an uncaught exception has been thrown during execution of the function that precedes it in the call sequence.
  • The sPreSource and sPostSource service signals have been renamed sPreSourceEvent and sPostSourceEvent.
  • The sPostSource{Run,SubRun,Event} callbacks now receive '{Run,SubRun,Event} const&' arguments instead of no arguments.
  • FileCatalogMetadata: the inheritedFromInput function has been removed.
  • MemoryTracker: this service no longer has a header file--no ServiceHandle to it can be created. In addition, the database schema has changed to accommodate multithreading, and a pared down version of the summary is printed down to the screen instead of a detailed one. Users who wish to have module- or event-specific information should query the SQLite database. The ignoreTotal and printSummaries parameters are also no longer supported.
  • PathSelection: removed
  • RandomNumberGenerator: The engine labels now implicitly have a schedule ID appended to them. The current schedule ID value is 0, making an engine label of 'label:0'. This change in labeling will break any code that attempts to read in the dumped engine states from a file that was produced with a version older than art 2.07.01.
  • SimpleInteraction: removed
  • TimeTracker: this service no longer has a header file--no ServiceHandle to it can be created.
  • TriggerNamesService: the loadPostMap function has been removed.
  • UserInteraction: removed
  • floating_point_control: this service no longer has per-module configuration. In addition, the postEndJob, preModule, and postModule callbacks have been made private.


  • End-of-job summary:
    • The CPU-usage given in the art end-of-job timing report will only include the job-level usage. More detailed CPU usage should be gleaned from running the command-line time command, or from using a dedicated profiler like allinea.
    • The short summary now includes a memory-usage line that reports the maximum Vsize and the maximum RSS (high-water mark) of the job.
    • The summary is now emitted after all endJob calls of service callbacks have been made.
  • It is now an error to insert an Assns<B,A(,D)> product onto the event when an Assns<A,B(,D)> product has been declared via produces<>(...).
  • art::get_BranchDescription has been moved from art/Framework/Core/ to art/Framework/Principal/.
  • The TriggerNames class has been removed.
  • The art::InputSource constructor now takes an art::ModuleDescription const& argument.


  • Remove the art::DoNotRecordParents base class, which no experiment is directly using.
  • The BranchType data member has been removed from the TypeLabel class.
  • When constructing a BranchDescription, the constructor now takes a BranchType argument, independently from the TypeLabel argument.


  • The MF_MessageService library has been merged with MF_MessageLogger. Please remove any instances of MF_MessageService in your link lines.
  • Various changes of relevance only to those explicitly setting up the messagefacility outside of art. Please contact if you think you may be affected.


  • Many changes related to using cetlib/Ntuple. A new namespace has been created called cetlib::sqlite, in which the Ntuple class template, and many other SQLite facilities reside. If you have been using the SQLite facilities as provided through cetlib, please consult the changes in interface--see cetlib:source:cetlib/sqlite, taking care to read the comments in the header files. Consult for guidance.