- 24.x.x
- Bug fixes:
- Fix bug with 'median' and 'mean' methods in Masker averaging over the wrong axes.
- Enhancements:
- Removed multiple exits from numba implementation of KullbackLeibler divergence (#1901)
- Dependencies:
- Added scikit-image to CIL-Demos conda install command as needed for new Callbacks notebook.
-
24.2.0
- New Features:
- Added SVRG and LSVRG stochastic functions (#1625)
- Added SAG and SAGA stochastic functions (#1624)
- Allow
SumFunction
with 1 item (#1857) - Added PD3O algorithm (#1834)
- Added Barzilai-Borwein step size rule to work with GD, ISTA, FISTA (#1859)
- Added callback
optimisation.utilities.callbacks.EarlyStoppingObjectiveValue
which stops iterations if an algorithm objective changes less than a provided threshold (#1892) - Added callback
optimisation.utilities.callbacks.CGLSEarlyStopping
which replicates the automatic behaviour of CGLS in CIL versions <=24. (#1892) - Added
labels
module withImageDimension
,AcquisitionDimension
,AcquisitionType
,AngleUnit
,FillType
(#1692)
- Enhancements:
- Use ravel instead of flat in KullbackLeibler numba backend (#1874)
- Upgrade Python wrapper (#1873, #1875)
- Updated the documentation for the algorithm base class (#1809)
- Add checks on out argument passed to processors to ensure correct dtype and size (#1805)
- Internal refactor: Replaced string-based label checks with enum-based checks for improved type safety and consistency (#1692)
- Internal refactor: Separate framework into multiple files (#1692)
- Allow the SIRT algorithm to take
initial=None
(#1906) - Add checks on equality method of
AcquisitionData
andImageData
for equality of data type and geometry (#1919) - Add check on equality method of
AcquisitionGeometry
for equality of dimension labels (#1919)
- Testing:
- New unit tests for operators and functions to check for in place errors and the behaviour of
out
(#1805) - Updates in SPDHG vs PDHG unit test to reduce test time and adjustments to parameters (#1898)
- Drop Jenkins in favour of GHA for conda builds (#1914)
- New unit tests for
DataContainer
,AcquisitionData
andImageData
to check equality method (__eq__
) behaves as expected (#1919)
- New unit tests for operators and functions to check for in place errors and the behaviour of
- Bug fixes:
ImageData
removes dimensions of size 1 from the input array. This fixes an issue where single slice reconstructions from 3D data would fail due to shape mismatches (#1885)- Make Binner accept accelerated=False (#1887)
- Added checks on memory allocations within
FiniteDifferenceLibrary.cpp
and verified the status of the return inGradientOperator
(#1929) - Build release version of
cilacc.dll
for Windows. Previously was defaulting to the debug build (#1928) - Armijo step size rule now by default initialises the search for a step size from the previously calculated step size (#1934)
- Changes that break backwards compatibility:
- CGLS will no longer automatically stop iterations once a default tolerance is reached. The option to pass
tolerance
will be deprecated to be replaced byoptimisation.utilities.callbacks
(#1892)
- CGLS will no longer automatically stop iterations once a default tolerance is reached. The option to pass
- New Features:
-
24.1.0
- New Features:
- Added method to plot filter in
GenericFilteredBackProjection
(#1667) - Added wavelet operator, wrapping PyWavelets operator as a CIL operator (#1615)
- Added PaganinProcessor processor, to perform phase retrieval from phase contrast images (#1737)
- Added L1Sparsity function, allowing calculations of
|Ax-b|_1
and its proximal, in the case of orthogonal operators,A
(#1618) - Options in algorithms GD, ISTA and FISTA to pass a
cil.optimisation.utilities.StepSizeRule
or acil.optimisation.utilities.Preconditioner
(#1768) - an implementation of the Armijo Rule as a child class of
cil.optimisation.utilities.StepSizeRule
(#1768) - Sensitivity preconditioners added as child classes of
cil.optimisation.utilities.Preconditioner
(#1768)
- Added method to plot filter in
- Enhancements:
- Added
geometry
property toBlockDataContainer
. Adds__eq__
toBlockGeometry
(#1799) - Raises error in
BlockDataContainer.pnorm
if the shape of the containers is not the same (#1799) - Operators and functions now also return when out is specified (#1742)
- The CIL function class now has a
__neg__
function, so you can write-YourFunction(x)
rather than-1*YourFunction(x)
(#1808) - Added documentation for the Partitioner to
framework.rst
(#1828) - Added CIL vs SIRF tests comparing preconditioned ISTA in CIL and MLEM in SIRF (#1823)
- Update to CCPi-Regularisation toolkit v24.0.1 (#1868)
- Added
- Bug fixes:
- gradient descent
update_objective
called twice on the initial point.(#1789) - ProjectionMap operator bug fix in adjoint and added documentation (#1743)
- BlockOperator that would return a BlockDataContainer of shape (1,1) now returns the appropriate DataContainer. BlockDataContainer direct and adjoint methods accept DataContainer as parameter (#1802).
- BlurringOperator: remove check for geometry class (old SIRF integration bug) (#1807)
- The
ZeroFunction
andConstantFunction
now have a Lipschitz constant of 1. (#1768) - Update dataexample remote data download to work with windows and use zenodo_get for data download (#1774)
- gradient descent
- Changes that break backwards compatibility:
- Merged the files
BlockGeometry.py
andBlockDataContainer.py
inframework
to one fileblock.py
. Please usefrom cil.framework import BlockGeometry, BlockDataContainer
as before (#1799) - Bug fix in
FGP_TV
function to set the default behaviour not to enforce non-negativity (#1826).
- Merged the files
- New Features:
-
24.0.0
- Update to new CCPi-Regularisation toolkit v24.0.0. This is a backward incompatible release of the toolkit.
- CIL plugin support for TIGRE version v2.6
- CIL plugin support for ASTRA-TOOLBOX version v2.1
- Dropped support for python 3.8 and 3.9
- Added support for python 3.11 and 3.12
- Dropped support for numpy 1.21 and 1.22
- Added support for numpy 1.25 and 1.26
- Set CMake Policy CMP0148 to OLD to avoid warnings in CMake 3.27
- AcquisitionGeometry prints the first and last 10 angles, or all if there are 30 or less, rather than the first 20
- Added a weight argument to the L1Norm function
- Allow reduction methods on the DataContainer class to accept axis argument as string which matches values in dimension_labels
- Added the functions
set_norms
andget_norms
to theBlockOperator
class - Internal variable name change in BlockOperator to aid understanding
- Fixed formatting errors in the L2NormSquared and LeastSquares documentation
- Bug fix for BlockDataContainer as iterator
- Dropped support for IPP versions older than 2021.10 due to header changes
- Fix build include directories
- Proximal of MixedL21Norm with numpy backend now accepts numpy ndarray, DataContainer and float as tau parameter
- ZeroOperator no longer relies on the default of allocate
- Bug fix in SIRF TotalVariation unit tests with warm_start
- Allow show2D to be used with 3D
DataContainer
instances - Added the a
Sampler
class as a CIL optimisation utility - Update documentation for symmetrised gradient
- Added documentation for CompositionOperator and SumOperator
- Updated FISTA and ISTA algorithms to allow input functions to be None
- Bug fix in the adjoint of the Diagonal Operator for complex values
- Update conda build action to v2 for 2.5x quicker builds
- Add docker image, test & push to
ghcr.io/tomographicimaging/cil
- Quality metrics have added mask option
- Bug fix for norm of CompositionOperator
- Functions updated to use sapyb
- Fix KullbackLeibler numba gradient ignoring mask
- show1D slice_list parameter can now be of type tuple
- Deprecated
Algorithm
'smax_iteration
,log_file
,**kwargs
,max_iteration_stop_criterion
,objective_to_string
,verbose_output
,verbose_header
,run(print_interval)
- Added
optimisation.utilities.callbacks
- Added
Callback
(abstract base class),ProgressCallback
,TextProgressCallback
,LogfileCallback
- Deprecated
Algorithm.run(callback: Callable)
- Added
Algorithm.run(callbacks: list[Callback])
- Added
- Allow
CentreOfRotationCorrector.xcorrelation
to accept a list of two values inprojection_index
to use for the correlation - Bug fix in
CentreOfRotationCorrector.xcorrelation
finding correlation angles for limited angle data - New unit tests have been implemented for operators and functions to check for in place errors and the behaviour of
out
. - Bug fix for missing factor of 1/2 in SIRT update objective and catch in place errors in the SIRT constraint
- Bug fix to allow safe in place calculation for the soft shrinkage algorithm
- Allow Masker to take integer arrays in addition to boolean
- Add remote data class to example data to enable download of relevant datasets from remote repositories
- Improved import error/warning messages
- New adjoint operator
- Bug fix for complex matrix adjoint
- Removed the following code which was deprecated since v22.0.0:
info
parameter incil.optimisation.functions.TotalVariation
sinogram_geometry
andvolume_geometry
parameters incil.plugins.astra.processors.FBP
and incil.plugins.tigre.processors.FBP
aquisition_geometry
(misspelled) parameter incil.plugins.tigre.processors.ProjectionOperator
FBP
kwarg (and thus all kwargs) incil.processors.CentreOfRotationCorrector
andcil.processors.CofR_image_sharpness
TXRMDataReader
- Added the ApproximateGradientSumFunction and SGFunction to allow for stochastic gradient algorithms to be created using functions with an approximate gradient and deterministic algorithms
-
23.1.0
- Fix bug in IndicatorBox proximal_conjugate
- Allow CCPi Regulariser functions for non CIL object
- Add norm for CompositionOperator
- Refactor SIRT algorithm to make it more computationally and memory efficient
- Optimisation in L2NormSquared
- Added support for partitioner, when partitions have size 1
- Fix for show_geometry bug for 2D data
- FBP split processing bug fix - now respects panel origin set in geometry
- Binner/Padder/Slicer bug fix - now respects panel origin set in geometry
- Added warmstart capability to proximal evaluation of the CIL TotalVariation function.
- Bug fix in the LinearOperator norm with an additional flag for the algorithm linearOperator.PowerMethod
- Tidied up documentation in the framework folder
-
23.0.1
- Fix bug with NikonReader requiring ROI to be set in constructor.
-
23.0.0
- Partitioner is now able to create batches even if angle is not the outer dimension
- Renamed
max_iteration_stop_cryterion
method in the Algorithm class tomax_iteration_stop_criterion
- Removed (previously deprecated)
very_verbose
parameter inAlgorithm
's run method. - Removed (previously deprecated)
axpby
method in DataContainer. - Deprecate use of integer compression in NEXUSDataWriter.
- Improved and tidied up documentation for all readers and writers, including hiding special members.
- Use arguments instead of kwargs in all readers and writers with multiple kwargs, making documentation easier.
- Update Apache2 License Headers.
-
22.2.0
- BlockGeometry is iterable
- Added
partition
toAcquisitionData
to partition the data with 3 methods:sequential
,staggered
andrandom_permutation
- TIGRE and ASTRA
ProjectionOperator
now supportBlockGeometry
asacquisition_geometry
parameter, returning aBlockOperator
- Added pre-set filters for
recon.FBP
andrecon.FDK
. Filters now include ram-lak, hamming, hann, cosine, shepp-logan. - Added RAWFileWriter to export data containers to raw files
- Extended IndicatorBox to behave as IndicatorBoxPixelwise by passing masks in lower and upper bounds
- Implemented IndicatorBox in numba and numpy
- Dropped support for Python 3.6 and NumPy 1.15
- Jenkins PR tests on Python 3.8 and NumPy 1.20
- added yml file to create test environment
- LeastSquares fixed docstring and unified gradient code when out is passed or not.
- Add compression to 8bit and 16bit to TIFFWriter
- Added convenience centre of rotation methods to
AcquisitionGeometry
class.get_centre_of_rotation()
calculates the centre of rotation of the systemset_centre_of_rotation()
sets the system centre of rotation with an offset and angleset_centre_of_rotation_by_slice()
sets the system centre of rotation with offsets from two slices
- Binner processor reworked:
- Significant speed increase available via the C++ backend
- Returned geometry is correctly offset where binning/cropping moves the origin
- Slicer refactoring
- Returned geometry is correctly offset where slicing/cropping moves the origin
- Padder refactoring
- Returned geometry is correctly offset where padding moves the origin
- Github Actions:
- update test python and numpy versions to 3.9 and 1.22
- Update conda build action to v1.4.4
- Fixes actions to run on ubuntu-20.04
- Update version of upload_artifact github action to version 3.1.1
- Update version of download_artifact github action to version 3.0.1
- Update version of checkout github action to version 3.1.0
- Update build-sphinx action to version 0.1.3
io.utilities.HDF5_utilities
Added utility functions to browse hdf5 files and read datasets into numpy array- Implemented the analytical norm for GradientOperator
- Added
ImageData.apply_circular_mask
method to mask out detector edge artefacts on reconstructed volumes - ROI selection, aspect ratio toggle and Play widget added to islicer
- Add show1D display utility
-
22.1.0
- use assert_allclose in test_DataContainer
- added multiple colormaps to show2D
- Fix segfault in GradientOperator due to parameter overflows on windows systems
- Fix angle display precision and matplotlib warning for sinograms with show2D
-
22.0.0
- Strongly convex functionality in TotalVariation and FGP_TV Functions
- Refactored KullbackLeibler function class. Fix bug on gradient method for SIRF objects
- Numba added as a CIL requirement
- Simplify initialisation of
CentreOfRotation.ImageSharpness
with new parameterbackend
- Added ISTA algorithm. Improve inheritance of proximal gradient algorithms
- Updated interface to
plugins.tigre
/plugins.astra
FBP
andProjectionOperator
classes - Update NikonDataReader to parse and set up geometry with:
ObjectTilt
CentreOfRotationTop
andCentreOfRotationBottom
- Cleaned up unit test structure and output
- Removal of deprecated code:
- AcquisitionGeometry
__init__
no longer returns a configured geometry, use factorycreate
methods instead subset
method removed, useget_slice
orreorder
methods- NikonDataReader
normalize
kwarg removed, usenormalise
- Algorithms initialisation
x_init
kwarg removed, useinitial
- Removed deprecated numpy calls
- AcquisitionGeometry
- DataProcessors use weak-reference to input data
- Merged CIL-ASTRA code in to CIL repository simplifying test, build and install procedures
- Modules not moved should be considered deprecated
- CIL remains licensed as APACHE-2.0
- Minor bug fixes to the CPU 2D Parallel-beam FBP
- Add ndim property for DataContainer class
- Fixes show_geometry compatibility issue with matplotlib 3.5
- Added ZEISSDataReader with cone/parallel beam, slicing, TXM Functionality
- Raise exception if filename or data haven't been set in NexusDataWriter
- Fixes error when update_objective_interval is set to 0 in an algorithm run
- Deprecated:
- TXRMDataReader is deprecated in favour of ZEISSDataReader
- GitHub Actions:
- Update to version 0.1.1 of lauramurgatroyd/build-sphinx-action for building the documentation - ensures docs are always built from cil master
-
21.4.1
- Removed prints from unittests and cleanup of unittest code.
- CMake:
- install script re-allows selection of non default install directory (#1246)
- TIFF writer uses logging
- Added unittests for TIFF functionality
-
21.4.0
- PEP 440 compliant version
- CMake fix due to use of pip install.
- Recon.FBP allows 'astra' backend
- Fixed PowerMethod for square/non-square, complex/float matrices with stopping criterion.
- CofR image_sharpness improved for large datasets
- Geometry alignment fix for 2D datasets
- CGLS update for sapyb to enable complex data, bugfix in use of initial
- added sapyb and deprecated axpby. All algorithm updated to use sapyb.
- Allow use of square brackets in file paths to TIFF and Nikon datasets
-
21.3.1
- Added matplotlib version dependency to conda recipe
- Fixed TIGRE wrappers for geometry with a virtual detector
- Fixed TIGRE wrappers for cone-beam geometry with tilted rotation axis
-
21.3.0
- Accelerated PDHG which handles strong convexity of functions
- TotalVariation Function handles SIRF ImageData
- Simulated datasets and volume added to DataExamples
- TIGRE wrappers for parallel-beam geometry added
- NEXUSWriter and NEXUSReader offer (8bit and 16bit) compression of data
- show2D show_geom now return an object that can be saved with a
save
method - GradientOperator can be now used with SIRF DataContainers, both PET and MR
- Add anisotropy in TotalVariation function
- CCPi Regularisation plugin is refactored, only FGP_TV, FGP_dTV, TGV and TNV are exposed. Docstrings and functionality unit tests are added. Tests of the functions are meant to be in the CCPi-Regularisation toolkit itself.
- Add dtype for ImageGeometry, AcquisitionGeometry, VectorGeometry, BlockGeometry
- Fix GradientOperator to handle pseudo 2D CIL geometries
- Created recon module with FBP and FDK using fast filtering library and TIGRE backprojectors
- Added Intel IPP based library for filtering step of FBP
- PDHG memory optimisation
- ScaledFunction memory Optimisation
- The github actions are merged into one action with multiple jobs
- The conda build job uploads an artifact of the build tar.bz file which is later used by the documentation build job - which installs the package into a miniconda environment.
- Documentation pages for recon, astra and cil-plugins are published.
-
21.2.0
- add version string from git describe
- add CCPi-Regularisation toolkit in unittests
- show_geometry implemented to display AcquisitionGeometry objects, can be imported from utilities.display
- CentreOfRotationCorrector.image_sharpness implemented which finds the rotation axis offset by maximising sharpness of a single slice reconstruction
- Renamed CentreOfRotationCorrector.xcorr to CentreOfRotationCorrector.xcorrelation
- Implemented Padder processor
-
21.1.0
- Added TomoPhantom plugin to create 2D/3D + channel ImageData phantoms based on the TomoPhantom model library
- Fixed bug in Zeiss reader geometry direction of rotation
-
21.0.0
- Show2D now takes 4D datasets and slice information as input
- TIGRE reconstruction package wrapped for cone-beam tomography
- Datacontainers have get_slice method which returns a dataset with a single slice of the data
- Datacontainers have reorder method which reorders the data in memory as requested, or for use with 'astra' or 'tigre'
- Subset method has been deprecated
- AcquisitionData and ImageData enforce requirement for a geometry on creation
- New processors AbsorptionTransmissionConverter and TransmissionAbsorptionConverter to convert between Absorption and Transmission
- Implemented Binner and Slicer processors
- Implemented MaskGenerator and Masker processors
-
20.11.2
- fixed windows build
- NikonDataReader converts Nikon geometry to CIL geometry from xtekct file including detector and centre-or-rotation offsets
- NexusdataReader supports files written with old versions of NexusDataWriter
-
20.11
- python module renamed to cil
- renamed Identity->IdentityOperator, Gradient->GradientOperator, SymmetrisedGradient->SymmetrisedGradientOperator
-
20.09.1
- FiniteDifferenceOperator takes into consideration voxel size
- Added CentreOfRotationCorrector
- Removed CenterOfRotationFinder
- moved TestData to utilities and renamed as dataexample
- verbosity of Algorithms is independent of the update_objective_interval
- added unittests
- renamed
- GradientDescent to GD
- SparseFiniteDiff to SparseFiniteDifferenceOperator
- LinearOperatorMatrix to MatrixOperator
- bugfix update_objective of SPDHG
-
20.09
- added SPDHG algorithm
- added TotalVariation function
- Redesign of the AcquisitionGeometry class allowing more general acquisition trajectories than currently possible.
- Added ZEISS reader
-
20.04
- Significant upgrades to the operator and function classes to allow more flexible definition of optimisation problems
- Added multithreaded C library for calculation of finite difference and some data processing
- Added Gradient operator using C library and numpy backends
-
19.10
- Improved usability with reader/writers and plotting utilities
- Substantially improved test coverage
-
19.07
- Introduction of BlockFramework
- major revision and restructuring of the whole code
- rewritten io package
-
19.02
- introduction of Algorithm class
- unit test expanded and moved to test directory
- unified build system on Jenkins based on CCPi-VirtualMachine repo
- switched to calendar versioning YY.0M.
-
0.10.0
-
0.9.4
- Initial release