ART Suite Release Notes 1.00.00¶
Changes since previous version:
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
PRODXare compatible types.
PtrVectorIter<PROD>has gone away. One should use
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() 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
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
Mixing does not always require
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.
PreProcessEvent signal callback signature change.¶
void preBeginSubRun(SubRunID const&, Timestamp const&); void preEvent(EventID const&, Timestamp const&);
void preBeginSubRun(SubRun const&) void preEvent(Event const&);
Callbacks may need to be tweaked in services.
Random number system changes.¶
RandomNumberSavermodule 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:
- If the job completed successfully, the saved state of the random number engines will be that at job end.
- 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.¶
- The class
MasterProductRegistryis no longer available to user code. One should instead use the new singleton
- The metadata for a particular object is now available through its handle via the
- The method
Event::allProvenancesis no longer available. If you really need to have access to all object metadata, see the ProductDumper output module template (source:art/Framework/Modules/ProductDumper.h).
New command-line options
--rethrow-default: all exceptions default to rethrow.
--rethrow-all: all exceptions overridden to rethrow (cf
FileDumperOutput now prints
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.
I/O changes require the latest production version of ROOT.
This includes migration from Boost Filesystem v2 to Boost Filesystem v3, which is now default (v2 will be removed in v1.48).
This removes the
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-virtualART 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
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.