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::repair to repair bugs that survived by writing bugged grids to
disk, for example https://github.com/NNPDF/pineappl/issues/338. The CLI
offers this functionality via pineappl write --repair and it can also be
accessed via PythonGrid::merge that was
triggered when exporting some PineAPPL grids generated from the ‘pinejet’
groupGrid::evolve now makes use of parallelization to take advantage
of the number of CPU cores available using the Rayon crate; the number of CPU
cores to be used can be controlled via the RAYON_NUM_THREADS environment
variableV3 metadata reader to the pineappl evolve CLI for EKOs
generated with v0.15.0 or higherpineappl_grid_evolve_info_shape,
pineappl_grid_evolve_info, and pineappl_grid_evolve to evolve gridspineappl_fktable_optimize to optimize FK Table-like objects
given an optimization assumptionGrid::merge_channel_factors and Channel::factorpineappl export to fail when called with grid
having non-trivial factors in their channel definitionsPineAPPL 1.0 is a major rewrite from the previous version, allowing grids to have an arbitrary number of convolutions in the initial (PDFs with a factorization scale) and in the final (FFs with a fragmentation scale) state. This required a change in the file format that is used to write out grids, but the old file format can still be read with this new version.
Grid::delete_orders and the corresponding switch
--delete-orders in the subcommand write of the CLI--xir and --xif, which allow varying the
renormalization and factorization scales with a custom factor in the
subcommand convolve+p to its LHAPDF name, as a fragmentation function by adding
+f and both by adding +pf or +fp--fk-table-fac0 and --fk-table-frg0 to pineappl read to
read out the squared factorization and fragmentation scales of FK-tablespineappl_channels_new and pineappl_channels_delete
to create and delete an instance of Channels objectpineappl_grid_channels and pineappl_channels_count to get
the channel objects for a given grid and their numberspineappl_channels_combinations to retrieve the
number of combinations of channels for a specified entry, and
pineappl_channels_entry to retrieve the channel combination for a given
entrypineappl_grid_new2 to create a grid with the
new features introduced in v1.0.0; this includes the support for an
arbitrary number of initial and final state hadronspineappl_grid_fill2,
pineappl_grid_fill_all2, and pineappl_grid_fill_array2pineappl_grid_conv_types, pineappl_grid_convolutions_len,
and pineappl_grid_kinematics_lenpineappl_grid_convolve to convolve grids
with an arbitrary combination of initial and final state hadronspineappl_grid_subgrid_shape, pineappl_grid_subgrid_node_values,
and pineappl_grid_subgrid_arraychannel! now accepts a channel specification that is of the
format factor * (pid, ..) + ...lumi 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.PidBasispineappl.grid.PyOperatorSliceInfo with
pineappl.evolution.OperatorSliceInfoPy prefixes, for instance PyEvolveInfo was renamed
to EvolveInfopineappl 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 scriptGrid::fill of the parameter ntuple to
reflect the ordering of kinematics given to Grid::newpineappl write: --remap to
--set-bins, --remap-norm-ignore to --div-bin-norm-dims and
--remap-norm to --mul-bin-norm. These names should reflect the
corresponding operations--fktable to --fk-table of pineappl readpineappl.grid.Grid.create() and
pineappl.fk_table.FkTable.from_grid() methods; use the constructors
of the respective class insteadGrid::with_subgrid_typeGrid::convolve_subgrid and --subgrid-pull from pineappl plot
that was using the method. The CLI subgrid-pull plotting routine only ever
worked for grids with two convolutionsNPDFDim = 2 to be incorrectly importedpineappl_applgrid that lead to linking problems with ROOT
and gfortranpineappl
plot. Previously this would always show a 7-pt. variation irrespective of
the parameter passed to --scalesGrid::evolve_with_slice_iter2 which is able to perform
evolutions with two different EKOsConvolutionGrid::convolutions and Grid::set_convolutionpineappl_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::guessGrid::set_pid_basis methodGrid::subgrids and Grid::subgrids_mut methods--conv-fun-uncert-from to subcommand plot to allow
choosing which 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 boclumi_entry to channelGrid::set_channels to Grid::channels_mutTryFromGridError::InvalidLumi to TryFromGridError::InvalidChannellumi_id_types of OperatorInfo and OperatorSliceInfo to
pid_basis, which is now of type PidBasispineappl::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 plotGrid::axes, Grid::convolute_eko
and the structs EkoInfo and GridAxesGrid::has_pdf1, Grid::has_pdf2, Grid::initial_state_1
and Grid::initial_state_2pids::charge_conjugate; this function has been replaced with the
new function PidBasis::charge_conjugatepids::determine_lumi_id_types; this function has been replaced with
the new function PidBasis::guessTryFromGridError::MetadataMissingGrid::subgrid and Grid::set_subgrid methods; these functions have
been replaced with Grid::subgrids and Grid::subgrids_mut--pdf-with-scale-cov from pineappl uncertGrid::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::newSubGrid 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 GridOptFlagspineappl 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 convolutepineappl 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 plotexport, which is able to convert some PineAPPL grids
into the APPLgrid formatpineappl evolvepineappl import now also imports fastNLO’s metadata:
fastNLOTable::GetDimLabels() is stored as the value of the key
x{1,2,...}_labelsfastNLOTable::GetXSDescr() is stored as the value of the key y_labelfastNLOTable::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-lhapdfdelete, optimize, set and update were merged into
the new write subcommand. Also the options --merge-bins, --scale and
--scale-by-order were merged into writeremap 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
readpineappl 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_binanalyze, 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 bothimportpineappl plotpineappl_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 limport, 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_remappersum 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 Moptimize 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_slicepineappl_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.EmptySubgridV1plot 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-emptypineappl diff now behaves differently whenever luminities are different and
errors out when this is the case. This can be adjusted using
--ignore-lumisgit_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_entryremap 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_infouintptr_t has been changed to the more common type
size_tLagrangeSubgrid 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
channelswrappers/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_uncertaintypineappl 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)