Installation
This package provides both a C++ evaluator with python bindings and a set of
python tools to convert, validate, and inspect files with corrections It is
installed as a python package (see e.g.
this tutorial for
an introduction), using scikit-build and
thus CMake, for the C++ components. Builds have been
tested in Windows, OS X, and Linux, and the python bindings can be compiled
against both python2 (with limited functionality) and python3, as well as from
within a CMSSW environment. Note that CMSSW 11_2_X and above has ROOT
accessible from python 3.
Inside CMSSW
For CMSSW releases from the 11_3_X branch on, correctionlib is included as the
py3-correctionlib tool, and from the 12_1_X branch version 2.0, which has
the schema version 2.0 that is used by most of the corrections. If the tool
included in CMSSW supports the version you want to use, no additional
installation is needed. The package version can also be found with the
command-line tool:
correction config --version
In CMSSW 10_6_30, there is a dedicated backport of correctionlib, however it
is only the python 2 version and hence only provides the correctionlib._core
bindings.
For older release cycles the package can be installed in the user area with
python3 -m pip install --user --no-binary=correctionlib correctionlib
for python3. Alternatively,
this script,
can be used to install a py3-correctionlib tool similar to the one provided in
more recent releases, or a py2-correctionlib tool with limited functionality.
The package can be built as follows:
git clone --recursive git@github.com:cms-nanoAOD/correctionlib.git
cd correctionlib
make PYTHON=python
make install # set PREFIX=... to change from default (./correctionlib)
where python is the name of the python scram tool you intend to link against.
This will output a correctionlib directory that acts as a python package, and
can be moved where needed.
Outside CMSSW
To install in an environment that has python 3, you can simply
python3 -m pip install correctionlib
(possibly with --user, or in a virtualenv, etc.)
Wheels or installing from source?
The above command will try to use python wheels, prebuilt binary packages,
since it is faster and more efficient.
When using the C++ evaluator, e.g. from ROOT or a standalone executable,
the C++ ABI needs to be compatible, otherwise you will get linker errors such
as undefined symbol: _ZN10correction13CorrectionSet9from_file....
To avoid this pass the --no-binary=correctionlib option to pip install,
which will start from the source package and build the C++ components in your environment.
If you wish to install the latest development version, this should work:
python3 -m pip install git+https://github.com/cms-nanoAOD/correctionlib.git
With python 2 (outside CMSSW)
To compile with python2 support, consider using python 3 :). If you considered
that and still want to use python2, the following recipe may work to install
only the correctionlib._core evaluator, which allows to use the C++ evaluator
from python2 and python3 (the schema tools and high-level bindings are
python3-only):
git clone --recursive git@github.com:cms-nanoAOD/correctionlib.git
cd correctionlib
make PYTHON=python2
make install # set PREFIX=... to change from default (./correctionlib)
This will output a correctionlib directory that acts as a python package, and
can be moved where needed.
Usage from python and C++
After the installation following one of the recipes above, the correctionlib
python package should be available, as well as the correction command-line
utility. In case the latter is not on your path for some reason, it can also be
invoked via python3 -m correctionlib.cli.
The C++ evaluator library is distributed as part of the python package, and it
can be linked to directly without using python. If you are using CMake you can
depend on it by including the output of correction config --cmake in your
cmake invocation. A complete cmake example that builds a user C++ application
against correctionlib and ROOT RDataFrame can be
found here.
For manual compilation, include and linking definitions can similarly be found
via correction config --cflags --ldflags. For example, the demo application
can be compiled with:
wget https://raw.githubusercontent.com/cms-nanoAOD/correctionlib/master/src/demo.cc
g++ $(correction config --cflags --ldflags --rpath) demo.cc -o demo