10 issues   (10 closed — 0 open)

ART Suite Release Notes 1.00.00

ART 1.00.00.

Changes since previous version:

Overhaul of PtrVector<PROD>.

While retaining the same shape in persistent storage (the ProductID of the collection to which all references point and a collection of offsets into the collection) the interface and behavior is now much closer to that of a vector<Ptr<PROD> >. This allows the collection to work correctly with the product mixing infrastructure and provides for more efficient access to contained Ptrs (de-referencing the iterator now returns a reference to a Ptr<PROD>, not a copy).

  • The interface is superficially similar to that of vector<Ptr<PROD> > (although some methods take account of possible interaction with Ptr<PRODX>, where PROD and PRODX are compatible types.
  • PtrVectorIter<PROD> has gone away. One should use PtrVector<PROD>::const_iterator instead.

New feature: inter-product references.

This is an entirely new feature of ART conceived at the request of Mu2e allowing the creation of bi-directional one-to-one, one-to-many or many-to-many associations between objects in collections which may or may not already be in the event (and therefore may or may not be read-only).

A description of inter-product references and how to create and use them may be found at: Inter-Product References.

New feature: in-file SQLite DB.

Starting with 1.00.00, ROOT files will contain an embedded SQLite DB in which will be stored various items of metadata. Currently only the ParameterSet information is stored in this way. As we learn to use this feature better however, more metadata will be moved here from its own tree. If as an experiment you are interested in using this feature to store your own metadata in its own in-file SQLite DB, please contact us at

Product mixing improvements

For those new to product mixing, full details may be found at Product Mixing.

startEvent() signature change.

Implementers of product mixing detail objects should be aware that the signature of the optional member function startEvent has changed from no arguments to startEvent(art::Event const &). The old-signature function will still be called for now if the new one is not there, but a message will be generated as this backup feature will be removed in a future release.

New optional detail member function eventsToSkip().

eventsToSkip() will be called to determine how many events should be skipped at the beginning of a file of secondary events.

Avoid declaring a merge product which will never be produced.

art::MixHelper::declareMixOp<>() functions now have an optional bool argument outputProduct which, if false, will cause the merge product not to be declared. Thereafter, an exception will be thrown if the mix function returns true for any event (indicating there is a merge product to go in the event). This feature is to allow a mixing function to combine the information from products in different events without placing the results in the expected mix product. It is expected that this information will, for example, be summarized or aggregated in some non-trivial way into an entirely different product which should be declared with a call to MixHelper::produces<>() in the detail object's constructor and placed in the event by a put call in finalizeEvent().

Mixing does not always require RandomNumberGenerator service.

The presence of a mixing module does not now automatically require the RandomNumberGenerator service to be configured. This will now be required only if the user's detail object requires it, or if RANDOM event mixing is selected.

New control parameter wrapFiles for mixing.

Setting this to true will allow secondary event files to be re-used if necessary.

PreBeginSubRun, PreProcessEvent signal callback signature change.

Previous signatures:

void preBeginSubRun(SubRunID const&, Timestamp const&);
void preEvent(EventID const&, Timestamp const&);
New signatures:
void preBeginSubRun(SubRun const&)
void preEvent(Event const&);

Callbacks may need to be tweaked in services.

Random number system changes.

  • RandomNumberSaver module now operational: the restoration of the state of all random number engines is now available.
  • State save to file now works, and behaves as follows:
    1. If the job completed successfully, the saved state of the random number engines will be that at job end.
    2. If the job did not complete successfully, the saved state of the random number engines will be that at the beginning of the last event attempted.

Object Metadata access changes.

New command-line options --rethrow-default and --rethrow-all.

  • --rethrow-default: all exceptions default to rethrow.
  • --rethrow-all: all exceptions overridden to rethrow (cf --rethrow-default)

FileDumperOutput now prints Run and SubRun objects.

Minor changes.

GCC 4.6.1

ART (and subsidary packages) now ship requiring GCC 4.6.1. During integration testing, only a very few (<5) changes were required across three experiments required to compile against v4.6.1 vs v4.5.1.

ROOT v5.30.02.

I/O changes require the latest production version of ROOT.

BOOST v1.46.1

This includes migration from Boost Filesystem v2 to Boost Filesystem v3, which is now default (v2 will be removed in v1.48).

CLHEP v2.1.1.0

This removes the nullptr warnings.

Compiler warnings.

ART (and subsidiary packages) now build clean with the following compile options:

std=c++98 -g -O0 -pedantic  -Wall -Werror=return-type -Wextra -Wno-long-long -Winit-self -Woverloaded-virtual
ART headers should therefore not cause visible diagnostics in user code compiled with the same or less stringent settings.

Header re-locations and internal dependency improvements.

Internal physical dependencies were revised and rationalized to the point where ART library dependencies may be represented with a DAG. This involved some header changes. A script is available on request for automated updating of client code.

Reduction of unnecessary header inclusion.

Many unnecessary includes were removed or replaced by inclusion of forward-declaration headers. This may have the effect of exposing some cases in user code where an accidental indirect inclusion was being relied upon.

Obsolete class removal.

OrphanHandle and its associated header have been removed. All put() functions now return a ProductID which may be used to create a Ptr, viz:

art::ProductID cohID = evt.put(clusterOut);
art::Ptr<rb::Cluster> cl(cohID, c+clsofar, evt.productGetter(cohID));

Disused class removal.

The following classes or class templates have been removed. There should be no user-visible impact.

  • AVSimpleProducer
  • AssociationIdenticalKeyReference
  • AssociationMap
  • AssociationVector
  • DSTVProducer
  • DSVProducer
  • DataFrame
  • DataFrameCollection
  • ExtCollection
  • GenericHandle
  • IntVecRefToBaseVectorProducer
  • IntVecRefVectorProducer
  • OVSimpleProducer
  • OwnVector
  • PtrProxy
  • RangeMap
  • RangeVector
  • Ref
  • RefToBase
  • SCSimpleAnalyzer
  • SCSimpleProducer
  • SortedCollection
  • VSimpleProducer

cetbuildtools 1.13.02 (new version).

cpp0x 1.02.03 (new version).

cetlib 1.02.03 (new version).

fhicl-cpp 2.15.03 (new version).

messagefacility 1.09.03 (new version).

Time tracking
Estimated time 0.00 hour
Spent time 0.00 hour
Issues by