All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Grid::delete_orders
and the corresponding switch
--delete-orders
in the subcommand write
of the CLIlumi
to channel
in PyO3 Python interface. This
concerns 1) the argument names of convolute_with_one
and similar functions;
2) the module pineappl.lumi
was moved to pineappl.boc
; 3) the class
LumiEntry
was renamed to Channel
.into()
needs to be explicitly called on subgrids when calling
pineappl.grid.set_subgrid()
pineappl.grid.PyPidBasis
with
pineappl.evolution.PidBasis
pineappl.grid.PyOperatorSliceInfo
with
pineappl.evolution.OperatorSliceInfo
Py
prefixes, for instance PyEvolveInfo
was renamed
to EvolveInfo
pineappl plot
no longer shows a channel breakdown in the panel
with absolute PDF predictions. However, this feature can be enabled with via
a new array added at the start of the scriptpineappl.grid.Grid.create()
and
pineappl.fk_table.FkTable.from_grid()
methods; use the constructors
of the respective class insteadpineappl
plot
. Previously this would always show a 7-pt. variation irrespective of
the parameter passed to --scales
Grid::evolve_with_slice_iter2
which is able to perform
evolutions with two different EKOsConvolution
Grid::convolutions
and Grid::set_convolution
pineappl_grid_convolve_with_one
and
pineappl_grid_convolve_with_two
which replace the deprecated function
similarly named with convolute
in CAPIPidBasis::charge_conjugate
and PidBasis::guess
Grid::set_pid_basis
methodGrid::subgrids
and Grid::subgrids_mut
methodsconv_fun_uncert_from
to subcommand plot
to allow
choosing with convolution function uncertainty should be plottedOrder
and ParseOrderError
to the new module boc
--split-lumi
of pineappl write
to --split-channels
. The
old switch can still be used--lumis
of pineappl read
to --channels
. The old switch
can still be used--ignore-lumis
of pineappl diff
to --ignore-channels
.
The old switch can still be usedGrid::lumi
to Grid::channels
, Grid::split_lumi
to
Grid::split_channels
, Grid::rewrite_lumi
to Grid::rewrite_channels
and
Grid::set_lumis
to Grid::set_channels
. The term ‘channel’ is now used
everywhere instead of ‘lumi’, ‘luminosity function’, etc.LumiEntry
to Channel
and ParseLumiEntryError
to
ParseChannelError
. Both structures have been moved to the module boc
lumi_entry
to channel
Grid::set_channels
to Grid::channels_mut
TryFromGridError::InvalidLumi
to TryFromGridError::InvalidChannel
lumi_id_types
of OperatorInfo
and OperatorSliceInfo
to
pid_basis
, which is now of type PidBasis
pineappl::lumi
to pineappl::convolutions
--pdf
to --conv-fun
in the subcommand uncert
. This
switch now optionally accepts a list of indices, which determines the
corresponding convolution function (PDF/FF), for which the uncertainty should
calculatedno_pdf_unc
to no_conv_fun_unc
in subcommand plot
Grid::axes
, Grid::convolute_eko
and the structs EkoInfo
and GridAxes
Grid::has_pdf1
, Grid::has_pdf2
, Grid::initial_state_1
and Grid::initial_state_2
pids::charge_conjugate
; this function has been replaced with the
new function PidBasis::charge_conjugate
pids::determine_lumi_id_types
; this function has been replaced with
the new function PidBasis::guess
TryFromGridError::MetadataMissing
Grid::subgrid
and Grid::set_subgrid
methods; these functions have
been replaced with Grid::subgrids
and Grid::subgrids_mut
--pdf-with-scale-cov
from pineappl uncert
Grid::evolve_with_slice_iter
, AlphasTable
and OperatorSliceInfo
,
which define a new interface supporting very large evolution kernels that
have been introduced in EKO v0.13. This interface will replace Grid::evolve
--dont-sort
switch to pineappl channels
, which displays the channel
sizes ordered by channel index (instead of channel size)Grid::rotate_pid_basis
and pineappl write --rotate-pid-basis
. This
allows to change the meaning of the used particle IDs, and supported formats
are PDG MC IDs and the evolution basispineappl write --rewrite-order
that lets the user change the
exponents of each orderconvolute
to convolve
,
because the latter is the proper verb of ‘convolution’. The old name
convolute
is now an alias of convolve
, which means both can be used. The
methods Grid::convolute*
are left unchanged and will be renamed in later
version--silence-lhapdf
to --lhapdf-banner
and suppress LHAPDF’s
banners by default, unless --lhapdf-banner
is givenGrid::evolve
has now been marked deprecatedlhapdf
to managed-lhapdf
crate which automatically
downloads PDF sets when they are neededGrid::delete_channels
and its CLI variant pineappl write
--delete-channels
. This command wasn’t working properly before--allow-extrapolation
, which, when present,
allows LHAPDF to extrapolate PDF values outside its valid region in x
.
If this option is not present the PDFs are set to zero, which remains the
default behaviorBinRemapper::new
, the limits are now checked for overlaps, in
which case a new error is returnedParseBinRemapperError
to allow capturing errors from
BinRemapper::new
SubGrid
that was exported in the CAPI as the type
pineappl_subgrid
. This type was not used anymore and was a left-over of the
changes in the previous version.Grid::dedup_channels
, the C function pineappl_grid_dedup_channels
and the new switch --dedup-channels
to the CLI that detect equal subgrids
and reduce the space requirements of a griddouble_ratio_pdf
to the pineappl plot
toolGrid::merge
methodpineappl_grid_export_mu2_slice
,
pineappl_grid_nonzero_mu2_slices
, pineappl_subgrid_delete
,
pineappl_grid_replace_and_delete
, pineappl_subgrid_import_mu2_slice
and
pineappl_subgrid_new2
, which were only used in the C++ programs that were
the predecessors of the export
and import
functionality now implemented
in the CLIlumi_id_types=pdg_mc_ids
was not present. Now when
this metadata is not present it is assumed PDG MC IDs are usedGrid::optimize_using
and its corresponding C function
pineappl_grid_optimize_using
, which optimize a Grid
like
Grid::optimize
, but allow for more fine-grained selection of optimization
options, which are listed in the new bitflags GridOptFlags
pineappl plot
now produces a more cleaned-up matplotlib script, in which
the most important information, which a user may whish to change, is at the
top of the filepineappl pdfunc
was renamed into pineappl uncert
, which is now also able
to calculate scale uncertainties, which in turn have been removed from
pineappl convolute
pineappl help
now relies on installed man pagesGrid::evolve
to require more x-grid values than needed;
this result in errors similar to the following: ‘no operator for x =
0.0018585113621881083 found’ where this x-grid value is a point that is used
in a masked order--no-pdf-unc
to plot
subcommand to skip the time-consuming
computation of PDF uncertaintiespineappl_grid_merge_bins
to the CAPI. This function
corresponds to Grid::merge_bins
and merges a range of bins together into a
new bin.Grid::split_lumi
, which splits the luminosity such that
it contains a single combination per partonic channel. This function is
available through the CAPI via pineappl_grid_split_lumi
and via the CLI
through pineappl write --split-lumi
--orders
switch to pull to allow the selection of a subset of
perturbative ordershelp
to show manpages of for each subcommand of
pineappl
--limit
in pull
now allows the value 0
for faster pull
computationpineappl plot
export
, which is able to convert some PineAPPL grids
into the APPLgrid formatpineappl evolve
pineappl import
now also imports fastNLO’s metadata:
fastNLOTable::GetDimLabels()
is stored as the value of the key
x{1,2,...}_labels
fastNLOTable::GetXSDescr()
is stored as the value of the key y_label
fastNLOTable::GetScDescr()
is stored as the value of the key
fastnlo_scenario
--silence-libraries
which did not work properly and relied
on non-portable code--force-positive
must be given at the same level as
--silence-lhapdf
delete
, optimize
, set
and update
were merged into
the new write
subcommand. Also the options --merge-bins
, --scale
and
--scale-by-order
were merged into write
remap
was merged into write
as the option --remap
,
which expects as a single argument the remapping string. The option --norm
was renamed to --remap-norm
, and --ignore-obs-norm
was renamed to
--remap-norm-ignore
. Note that the latter now counts dimensions from zero
onward, instead from one (old behavior)info
and obl
were merged into the new subcommand
read
pineappl convolute
to not show
results for more than two PDF setspineappl convolute
to ignore a possible --order
parameter for additionally given PDF setspineappl plot
to show wrong pulls if the central
PDF set had asymmetric uncertaintiespineappl sum --integrated
. This subcommand did not always work as
expected, use pineappl obs --merge-bins
insteadpineappl_grid_scale_by_bin
to the CAPI that corresponds
to Grid::scale_by_bin
analyze
, which performs various analyses. For time
being only one analysis is available: ckf
. This calculates the per-channel
K factors which can be compared against the per-bin K factors--orders
to evolve
to allow evolving a subset of orders of
the full grid--fktable
to the CLI subcommand pineappl obl
to detect
whether a grid is also an FK tableGrid::evolve_info
which extracts the information need to
generate EKOs. This function is less restrictive than Grid::axes
, which it
will replacepineappl import
now converts also scale-variation log-grids from
flexible-scale fastNLO tablesGrid::evolve
, which will succeed Grid::convolute_eko
and
is more robust, faster and easier to understandLumiCache::setup
, which caused wrong results returned by
Grid::convolute
, if lumi_cache
is reused for a second grid with different
Q2/x1/x2 parameterspineappl_applgrid
and
pineappl_fastnlo
--dis-pid
switch to import
subcommand--no-optimize
switch to import
subcommand--silence-fastnlo
to --silence-libraries
, which now silences also
APPLgridimport
converter, which now is able to convert most APPLgrids and
fastNLO tables on ploughshareREMAPPING
string that were handled incorrectlypineappl
integration tests, which resolves that problem
that cargo build
had to be called beforeGrid::convolute_eko
that lead to wrong result when
subgrids had different x-gridspdfunc
, plot
and pull
subcommands. For instance, pineappl pdfunc ... NNPDF40_nnlo_as_01180
calculates the central value using the average over all replicas, whereas
pineappl pdfunc ... NNPDF40_nnlo_as_01180/0
uses the zeroth member. The
calculated uncertainties are the same for bothimport
pineappl plot
pineappl_grid_clone
, which clones a given
grid--silence-fastnlo
to --silence-libraries
, which also
covers APPLgrid. For backwards compatibility the previous name still works--force-positive
to CLI to cut out negative PDF valuespineappl_grid_key_value
to read out metadata and
pineappl_string_delete
to delete string allocated from the previous
function--ignore-bin-limits
to diff
that ignores possibly
different bin limits. However, the number of total bins must still be the
same between both gridsimport
--digits-abs
, --digits-rel
and --digits
to various
subcommand to influence the number of (fractional) digits printedpdfset=label
, where pdfset
must
be an LHAPDF identifier, and results using this set are displayed using
label
instead of pdfset
.pineappl
ops --scale-by-bin=
o
, b
and l
import
, which at this stage converts fastNLO tables to
PineAPPL grids. This program was previously an example and written in C++ and
now has been removed.--bins
option to the CLI subcommand sum
, which allows to sum
bins together--fk-table
option to the CLI subcommand optimize
, which allows
the optmization of FK tables based on assumptions of heavy-flavor PDFsops
which collects various modifying operations on
grids. The switches --cc1
and --cc2
charge conjugate the first and second
PDF, respectively, and charge conjugates the luminosity function
correspondingly such that the convolutions are unchangedpineappl convolute ... -s 1
the scale-variation columns are no
longer shown. The output would be zero, but this doesn’t make sense. All
other values of -s
are unaffected.Grid::optimize
that strips empty orderspineappl obl --bins
, which had the wrong column headers if there were
more than one observablepineappl_grid_set_remapper
sum
to sum over bins of a gridpull
to view where the differences between two PDF
sets are coming fromfastNLOCoeffAddFix
). Tables of type fastNLOCoeffAddFlex
are not supported
yet--subgrid-pull
to the plot
subcommand; this generates
several plots showing the where the pull between two PDFs comes from in x1
and x2
, and also in rapidity y
and invariant mass M
optimize
method such that it removes all entries of a
luminosity function that are empty across orders and bins. This required a
change in merge
, which now allows the merge of grids with different
luminosities and ordersLHAPDF-set-name=label
, which uses the set LHAPDF-set-name
to load it from
LHAPDF, but label
is the name that appears in the plot legendsubgrids
command: --muf
, --mur
, --x1
and
--x2
to print the corresponding grid values and --stats
to print
information about the space requirements of the subgrid type--delete
, which allows to delete bins from a gridobl
, which stands for orders (o), bins (b) and lumis
(l), that shows information about the all contained subgrids in a grid;
pineappl obl -l
will replace pineappl lumis
in the future--orders1
, --orders2
, --scale1
and --scale2
to the
subcommand pineappl diff
, which allow the selection of orders and scaling
of grids that should be comparedpineappl
no longer prints both the differential
and integrated cross sections. Instead it either prints the differential
cross sections, or, if the switch -i
or --integrated
is given, the
integrated cross sections (without bin limits and/or normalizations) are
printedpineappl_subgrid_q2_slice
,
pineappl_subgrid_filled_q2_slices
and pineappl_subgrid_replace_and_delete
have been replaced by pineappl_grid_export_q2_slice
,
pineappl_grid_nonzero_q2_slices
and pineappl_grid_replace_and_delete
,
respectively.pineappl_subgrid_fill_q2_slice
has been replaced by
function pineappl_subgrid_import_q2_slice
pineappl_subgrid_new
has been replaced by a function
with the similar name but different argumentspineappl
subcommand channels
, convolute
and
pdf_uncertainty
. By default only the differential cross sections are shown
(integrated numbers divided by bin widths), but the flag -i
or
--integrated
can be given to switch to the integrated numbers, which are
not divided by bin widths.EmptySubgridV1
plot
subcommand: bounding boxes are
properly calculated now, added support for higher-dimensional distributionsplot
subcommand such that the legend is put in between panels,
thereby producing less overlapping elementspineappl_subgrid_new
and
pineappl_subgrid_import_q2_slice
with pineappl_subgrid_new2
and
pineappl_subgrid_import_mu2_slice
, respectively. The latter support
independent renormalization and factorization scalespineappl_grid_export_q2_slice
and
pineappl_grid_nonzero_q2_slices
to pineappl_grid_export_mu2_slice
and
pineappl_grid_nonzero_mu2_slices
, respectivelysubgrids
now does not print empty grids; the old behavior
can be restored with the new switch --show-empty
pineappl diff
now behaves differently whenever luminities are different and
errors out when this is the case. This can be adjusted using
--ignore-lumis
git_version
that prevented uploading
pineappl_capi
and pineappl_cli
to crates.iopineappl_grid_bin_limits
,
pineappl_grid_lumi
, pineappl_lumi_combinations
, pineappl_lumi_count
,
pineappl_lumi_entry
remap
subcommand which allows to change the binning and dimensions of
a distribution--silence_lhapdf
switch to suppress the output of LHAPDFLagrangeSparseGrid
, which can be generated using
the new subcommand optimize
from existing grids; this data structure uses
less memory and is a bit fasteroptimize
, which optimizes the size for each grid, both
in memory and when written as a fileLagrangeSubgridV2
, which allows for different x1
and x2
limits, for example for DIS processesinfo
: --get
, --keys
, --show
,
which lets one read a single or all key-values pairs of each grid file.set
which allows to modify the key-value storagepineappl_grid_set_key_value
and
pineappl_grid_optimize
--ignore_orders
to the diff subcommand, which sums over
all orders and is therefore useful if two grids are compared that should have
the same contents in principle, but in practice have different ordersplot
, which allows to plot the information contained
in a griddiff
are now properly sorted and do not
change randomly.diff
now shows the differential cross sections of both grids
with the same number of digits as the subcommands convolute
and similar.Grid::bin_limit
and replaced it with Grid::bin_info
uintptr_t
has been changed to the more common type
size_t
LagrangeSubgrid
type from V1
to V2
. This subgrid
type supports DIS and allows to reconstruct static scales. If a static scale
has been detected, optimize
can remove the interpolation in the Q^2
dimension.diff
did not show differences in per cent, although it
printed a per cent sign. Now it shows relative differences, which is always
useful, even when the differences are smaller than sub-per mille.--absolute
, --orders
, and --lumis
to the subcommand
channels
wrappers/python
and the
example in examples/python-dy-aa
--normalize
to the subcommand orders
, which can be used
to specify the orders that should be used to normalize to.pdf_uncertainty
pineappl
has a new subcommand pdf_uncertainty
to calculate PDF
uncertaintiesexamples/capi-dy-aa
one can find an example how to use the C APIGrid::with_subgrid_type
that allows the selection of a custom
Subgrid type--absolute
switch to the subcommand convolute
of pineappl
, which
shows all values of the scale variation as absolute numbersGrid::convolute
to speed up convolutions--orders
switch to the subcommand pdf_uncertainty
, to caclulate the
PDF uncertainty only with the specified perturbative ordersinfo
which shows the highest orders in alphas and
alphadiff
which compares two grids with each otherreweight
of SubgridParams
is set to true
by default now
(was false
before)pineappl
, bin widths are printed noworders
of pineappl
to normalise each leading order to
the sum of all leading orders, not only the firstpdf_uncertainty
of pineappl
to show the correct
integrated results (bin width was missing)