art series 2.07¶
Thread-safe art-provided services¶
All art-provided services intended to be used in a multi-threaded context are now thread-safe. Some services, however, such as
TFileService, will require serialized access. Instructions will be given at a later release for how such services are to be used.
Some breaking changes to how services behave were required to enable this. Please see the comprehensive list here.
In order to support using SQLite on NFS-mounted systems,
art must explicitly disable the locking mechanisms that SQLite depends upon. To guarantee thread-safe interactions with SQLite,
art has introduced a
DatabaseConnection service which, when used with a
cet::sqlite::Ntuple, provides a handle to an SQLite object that is implicitly thread-safe.
EventID pattern-based comparator/filter¶
art::EventIDMatcher is a functor class which can be used to filter
EventIDs using patterns. The public interface is:
explicit EventIDMatcher(std::string const& pattern); explicit EventIDMatcher(std::vector<std::string> const& patterns); bool operator()(EventID const&) const; bool match(EventID const&) const;
There are two constructors, the first takes one argument which is the pattern the matcher should use, while the second takes one argument which is a list of patterns the matcher should use. The
operator() member functions are synonyms and take an
EventID to be matched against the patterns.
The format of a pattern string consists of three fields:
Each of the
Event fields can be represented by a number, or set of numbers. The
'*' wildcard can be used to represent any number, and the
'-' characters can be used to specify sets or ranges of numbers. For example:
"1:*:*" // Accept Run 1, any SubRun, any Event "1:2:*" // Accept Run 1, SubRun 2, any Event "1:2:3" // Accept Run 1, SubRun 2, Event 3 "1:*:4" // Accept Run 1, any SubRun, Event 4 "1:2-5:*" // Accept Run 1, SubRuns 2 through 5 (inclusive), any Event "*:9:10,11" // Accept any Run, SubRun 9, Events 10 and 11 "7:2-5,8:*" // Accept Run 7, SubRuns 2 through 5 (inclusive) and 8, any Event
When specifying multiple patterns, each pattern is tried in the specified order, and if any pattern matches the
true is returned. In other words, if the event in question matches any (not all) of the patterns, the event is accepted.
EventIDFilter is a filter module that has been introduced to encapsulate the above functionality. It is configured with a sequence of patterns such that when any
art::Event matches at least one of the patterns, the
EDFilter::Pass value is returned, accepting the event. For details, type
art --print-description EventIDFilter.
Python extension module for FHiCL¶
Herb Greenlee of the MicroBooNE experiment has provided a Python extension module that converts a FHiCL document to a native Python dictionary. When setting up
fhiclcpp 4.05.01, the
PYTHONPATH environment variable is appropriately set so that users can type:
import fhicl pset = fhicl.make_pset('my_document.fcl') fhicl.pretty(pset) # print the pset
When calling the
fhicl.pretty(...) method, users will need to appropriately handle the newline characters included in the prettified string.
- A succinct memory summary is printed at the bottom of each
artjob, reporting the maximum virtual memory (
VmPeak) and the maximum resident set size (
ServiceHandle<MyService const>constructions are now allowed.
- A convenience function for retrieving the
art::InputTagcorresponding to a retrieved product has been introduced.
- Time-tracking abilities have been extended to include event-read time.
ROOT::EnableThreadSafety()is now called to support limited multi-threaded I/O with ROOT.
Please consult the list of breaking changes to determine if/how your code should be modified.