1.11.00
Art Suite Release Notes 1.11.00 (2014/08/25).¶
- Previous version's release notes.
External package changes.¶
[ Version changes only ].
GCC
4.9.1 (new qualifiers e6 and gcc491).CMake
3.0.1 (some new CMake policy warnings -- see build system changes for details).Boost
1.56.0.Python
2.7.8.SQLite
3.08.05.00.Intel TBB
4.2.5.ROOT
5.34.20.
*BREAKING CHANGE* When calculating object checkums (which ROOT does in order to check validity ofClassVersion
) of e.g. data products, any base classes are now taken into account. This means that, order for thecheckClassVersion
step of builds to work correctly, the dictionary library containing the dictionary data for a subclass must be linked against the dictionary library containing the dictionary data for the bae class, if they are in different libraries. For those using theart_make()
CMake function, theDICT_LIBRARIES
option can help here. For explicit use of theart_dictionary()
CMake function, the option is namedDICTIONARY_LIBRARIES
.xrootd
4.0.3.cstxsd
4.0.0 (build simplified due to newer version: special builds ofboost
andxerces_c
are no longer required.MySQL client
5.5.39.PostGresQL
9.1.14.GDB
7.8. This product was separated from the GCC distribution when the build of GDB was simplified.
C++14 support.¶
The e6 qualifier has been introduced. In addition to implying the use of GCC 4.9.1, it also implies that any C++ code must be compiled with the -std=c++1y
option (as opposed to the -std=c++11
option required for e1
- e5
). Linking against an e6-qualified UPS product (say) therefore requires that you also compile your code with this option. This standard is additive: code which compiled under -std=c++11
should not fail to compile merely because the standard against which it is compiled has changed. However, we have evidence that GCC 4.9.1 is able to spot and flag certain problems that were missed by e.g. 4.8.2, such as some instances of narrowing conversions. Incidental header injection has been reduced, meaning that if you were accidentally relying on a nested header inclusion (a C++ library header including <iostream>
, for example) successful compilation will require the explicit inclusion of the required header.
Currently, e5
and e6
versions of the art suite and externals are provided; in the near future we will be taking advantage of C++14 features within art, requiring the use of e6
and -std=c++1y
going forward.
- Generic lambda functions.
One can now write (for example):
without having to specify the argument to the lambda function as (e.g.)std::for_each(v.cbegin(), v.cend(), [](auto const & item) { ... }
item_t const &
. The benefits are even greater for composite container types such asstd::map
.
This single feature should greatly improve the clarity of code using it, and alo be a mechansim for removing most uses ofstd::bind
, and many uses ofstd::function
in argument lists. Lambda functions also make the use of standard algorithms (see<algorithm>
) much more attractive, leading to less explicit loops and more compact, expressive code. For a longer treatment of lambdas in general and how they can be useful, please see http://msdn.microsoft.com/en-us/library/dd293608.aspx, http://blog.smartbear.com/c-plus-plus/c11-tutorial-lambda-expressions-the-nuts-and-bolts-of-functional-programming/, or www.cprogramming.com/c++11/c++11-lambda-closures.html). - Binary, std::string and time literals.
- Relaxed
constexpr
restrictions.
For a reasonable treatment of these and other features, see Wikipedia's C++14 entry, but please note that variable templates are not supported by GCC 4.9.1.
Build system changes (cetbuildtools
, etc.).¶
- With the advent of
cetbuildtools
4.0.0, the structure of theproduct_deps
file has been enhanced, and there is a corresponding change to thesetup_for_development
file. You should not change one without changing the other, but since 4.0.1 either the old form or the new one is accepted. The old form is deprecated however, and support will be removed in the future. There is a script,migrate-package
, that will upgrade theproduct_deps
andsetup_for_development
files in order to work best with newercetbuildtools
. Usage:setup cetbuildtools v4_01_04 # (say) migrate-package <package-top-dir>
- One is now able to specify different versions of a package for different qualifiers e.g. the
qualifier_list
section could haves4
(see rows built against art 1.11.03 ands3
rows built against art 1.10.00b in the same version of the packge. This may be done in theproduct_list
section, viz:art v1_11_03 s4 art v1_10_00b s3
This is transitive (ie dependencies such asartdaq_core
may do the job for you), so you should avoid listing products in theproduct_list
andqualifier_list
sections if they are brought in by dependencies. To assist in trimming down thequalifier_list
table, your attention is drawn to the rectangle-kill (C-x r k
) function of emacs (wiki, emacs manual), and the equivalent visual-select function (C-v d
) of vim (wiki, vim manual). - *BREAKING CHANGE* CMake 3.0.1 has some new policy requirements, and these may lead to new warnings. Using
cetbuildtools
4.0.0 or newer to compile a package usingart_make()
orart_dictionary
from an art prior to 1.11.02 will result in (harmless) complaints from CMake, as nonexistent dependencies are now detected and complained about. install_fhicl()
,install_gdml()
andcet_test(... DATAFILES ...)
all use the newcet_copy()
function instead ofCONFIGURE()
orFILE(COPY ...)
. This means that changes to installed files will not result in a forced re-run of CMake the next time make is invoked.cetbuildtools
now determines which-std=
flag to use base on the qualifier. If the user specifies an incompatible-std=
flag, this is an error at the CMake stage. Any clauses you may have adding (say)-std=c++11
should be removed.
Art suite highlghts.¶
As usual, one should review the release notes pages for the products comprising the art suite by following the links below. In particular though, three new keywords (@erase
, @sequence
and @table
) have been added to the FHiCL language, and the ParameterSetRegistry
has been improved in order to improve the reading and writing performance for jobs with large numbers of parameter sets. Please see the linked release notes for these packages below for further details.
Art 1.11.00.¶
New features:¶
- Feature #6803: EmptyEvent_source.cc Doesn't support second time. Only nanosec time.
Behavior Change TheEmptyEvent
module allowed setting of the timestamp via parameters, but applied semantics that were inherited from CMS. In order to provide a timestamp for an event, one is expected now to provide a plugin inheriting from source:art/Framework/Core/EmptyEventTimestampPlugin.h. To do this, one must build a library whose name ends inPluginClassName_plugin.so
, and add the parameter:timestampPlugin: { plugin_type: PluginClassName }
to the configuration for yourEmptyEvent
source. ThetimestampPlugin
parameter set will be passed to your subclass' constructor, so you can add your own parameters to this set and configure the plugin as you might configure, say, an analyzer.
- Feature #5217: File opening slow due to parsing of saved configuration.
See notes for Bug #5805, below. - Feature #3690: MAC build of ART and ART externals.
This is finally officially achieved with the splitting ofartdaq
intoartdaq_core
andartdaq
to reduce the dependencies, allowing the NOvA DDT to be built on Mac OS X.
Bug fixes:¶
- Bug #2976: mu2e -S filelist runs on more than the filelist.
Behavior Change: - An source list file (empty or otherwise) will always override specification in FHiCL.
- A source file list specification is incompatible with command-line specification of file names (either with -s, --source or as non-option arguments).
- Bug #5805: Attacking parameter set bloat.
The size taken up in a file by parameter sets has been reduced, and the performance improved generally, in the following ways:- The persistent form of a parameter set in the on-file DB no longer has unconditional expansion of nested parameter sets; instead, they are represented by
@id::<hash>
in the event that this representation is smaller than the fully-expanded representation. - Parameter sets in an input file are no longer parsed unconditionally; instead, they are read into an in-memory backing DB and only turned into
ParameterSet
when they are requested specifically. - Upon writing an output file, parameter sets are transferred from the backing DB to the on-file DB without being parsed.
- Parsed parameter sets are stored in-memory in a registry using
std::unordered_map
, leading to approximately constant-time lookup instead of logarithmic.
- The persistent form of a parameter set in the on-file DB no longer has unconditional expansion of nested parameter sets; instead, they are represented by
- Bug #6527: Calling
removeCachedProduct()
on a new Handle segfaults. - Bug #6643: large memory cost for simple art job in nova offline.
Subrun- and run-level data products are now loaded on-demand, allowingremoveCachedProduct()
to have the intended effect of reducing memory footprint. - Bug #6652: problem with root 5.34.19.
There are some problems with ROOT and recent versions of xrootd. The version of xrootd has been rolled back to 3.3.4 - Bug #6801: Possible failure of
config_dumper
to dump services configuration.
This was due to the fact that many service parameter sets do not have service_type defined in their persistent version, as this was an automatic parameter added at service construction time. This parameter is now generated as part of the initial configuration post-processing, meaning that the parameter is now saved with the rest of the parameter set. - Bug #6823: Metadata field "parents" is not compatable with SAM.
Per-stream metadata items produced by user implementations ofFileCatalogMetadataPlugin
now override matching items generated by the output module itself.
Known issues:¶
- Accessing files in an art executable through xrootd causes a segfault at application tear-down due to an interaction between ROOT and xrootd 4.0.3.