Releases: SyneRBI/SIRF
SIRF Release 3.9.0
Changes
-
Python interface
-
Performance of acquisitions and images data algebra improved, acquisitions algebra running up to 3 times faster and images algebra up to 15 times faster.
-
DataContainer.supports_array_viewto test for zero-copy compatibility. -
ImageDataandAcquisitionDatahave.asarray()in Python via__array_interface__, following the same conventions as NumPy 2.x.By default,
asarray()provides a "view" if possible (seesupports_array_view) and falls back to a deep copy otherwise. Copy can be disabled or forced by setting thecopyargument accordingly. (For NumPy 1.x, thecopyargument is not supported and the behaviour is the same as the default in NumPy 2.x).
Note that withcopy=False, modifying the returned NumPy array will modify the original SIRF data as well.asarray(copy=True)is equivalent toas_array(). The latter will be removed in a future version.
-
-
SIRF/STIR
-
ScatterEstimationhas extra methods that allow setting masks for the tail-fitting. -
ImageDatahas extra method to zoom image using information from a template image,zoom_image_as_template. -
Error raised in
AcquisitionSensitivityModel.[un]normalisemethods applied to a read-only object. -
SIRF interfaces (C++ and Python) for STIR Poisson noise generation utilities provided.
-
Python:
- allow in-place call of
ObjectiveFunctiongradientin Python. Added unit test for new functionality ingradientand for theoutparameter. ImageDataandAcquisitionDataInMemoryhavesupports_array_view==True
- allow in-place call of
-
-
SIRF/Gadgetron
ImageDataViewandAcquisitionDataViewclasses implemented that encapsulate arrays of NumPy views ofISMRMRD_ImageDataandISMRMRD_AcquisitionDataobjects respectively, significantly accelerating the algebraic operations (up to a factor of about 10 for images).
-
SIRF/Registration
- Nifty images have
supports_array_view==True
- Nifty images have
-
CI and testing
- made tests return value handling compatible with a future version of pytest.
- added algebraic tests for STIR AcquisitionData subsets.
SIRF Release 3.8.0
What's Changed
-
SIRF/STIR (PET and SPECT)
- use direct STIR operations for arrays, potentially resulting in speed-up when using STIR 6.2 or later
- fixed STIR linking problems by adding STIR_REGISTRIES to Reg executables
- added
compute_attenuation_factorsmethod to AcquisitionSensitivityModel - added means for setting maximal and minimal value for scale factor in stir::ScatterEstimation
- added support for the STIR 6.2 (somewhat experimental) Cuda Relative Difference Prior
-
MR
- fixed density_weight shape issue caused by upgrading numpy to version 2.0
-
CMake/building:
- set CMP0074 policy to NEW, i.e. honour _ROOT env variables
SIRF Release 3.7.0
What's Changed
- CMake improvements when coping with old Gadgetron by @KrisThielemans in #1236
- Enabling PET reconstruction from list mode data by @evgueni-ovtchinnikov in #1103
- Added optional argument out in all gradient-computing methods by @evgueni-ovtchinnikov in #1246
- sapyb to return even if out is not None by @paskino in #1254
- Computing Hessian products with image data objects and related stuff by @evgueni-ovtchinnikov in #1253
- Updated data submodule by @evgueni-ovtchinnikov in #1256
- V3.7.0 prep by @KrisThielemans in #1258
Full Changelog: v3.6.0...v3.7.0
v3.6.0
-
PET:
- ensured compatibility with STIR 6.0, which supports Time-of-Flight data.
- added extra members to ScatterEstimation to set behaviour of OSEM used during scatter estimation.
- added missing
set/getmethods for OSSPSrelaxation_parameter,relaxation_gammaandupper_bound. - added test for scatter simulation and estimation.
-
CMake/building:
- default
DISABLE_MATLABtoONas our Matlab support is out-of-date and could
generate conflicts with Python shared libraries.
- default
-
Demo scripts:
- replaced importing reconstruction engines from calling
execto importing viaimportlib.import_modulethus enabling code completion (and getting rid of Codacy complaints about undefined modules).
- replaced importing reconstruction engines from calling
-
Python interfaces for the reconstruction engines:
- Several allocate methods in STIR.py, Gadgetron.py and Reg.py are replaced with just one allocate in
DataContainerclass that does not copy data between Python and C++. return Nonein the methodDatacontainer.shape()replaced with more Pythonesquereturn (0,).
- Several allocate methods in STIR.py, Gadgetron.py and Reg.py are replaced with just one allocate in
-
MR
- Improved handling of "irregular" ISMRMRD acquisitions by providing
IgnoreMaskobject that allows the user to specify which kind of acquisitions is to be ignored. By default, no acquisition is ignored when reading from file.
- Improved handling of "irregular" ISMRMRD acquisitions by providing
-
Registration
- fixed handling of complex images in NiftiImageData.cpp.
v3.5.0
-
SIRF/common:
-
Replaced Python implementation of
DataContainermethods with simple Python wraps of their C++ implementation. -
Provided C++ tools for accessing the examples data (
examples_data_pathand utility functions such asappend_pathincommon/utilities.h).
-
-
MR
-
Re-designed handling of "irregular" ISMRMRD acquisitions, making it user-controlled and more flexible. See #1174 for more information.
-
Allow user to set radial, goldenangle, spiral and rpe trajectories.
-
Added setter for acquisition header information and encoding limits. This allows the user to modify the reconstructed k-space dimensions and enables e.g. retrospective motion resolved or time-resolved reconstructions, or combinations of such dimensions. The acquisition model picks up these changes automatically if the encoding limits are set correctly.
-
Added Gadgetron gadgets that allow for k-space filtering, coil compression and partial fourier reconstruction.
-
-
PET/SPECT
-
Added SIRF interfaces to STIR functions to know where its files are:
get_STIR_doc_dir()andget_STIR_examples_dir(). -
Added SIRF interfaces to STIR functions for
LogcoshPriorandRelativeDifferencePrior. -
Added SIRF interfaces to STIR functions for
kappa(spatially variant penalty strengths) for QP, Log-cosh, and RDP. -
Fixed
IterativeReconstructor.get_objective_function().
-
v3.4.0
-
MR:
- Added support for spiral trajectories that are pre-computed by the user (by exposing a trajectory setter).
- Writing images to
.dcmfiles fixed. - Running image processing chains after reconstruction fixed.
- Use C++ 17 if Gadgetron-support is enabled.
- Support Gadgetron
masterof end November 2022- using
find_package(gadgetron)in CMake, but still support old version by looking for toolboxes.
- using
-
PET/SPECT
- Require STIR 5.0 and support 5.1.
- If SIRF is compiled with STIR 5.1, we now support Pinhole SPECT via the
PinholeSPECTUBMatrixacquisition model. Examples are provided (but the code is not yet tested). sirf.STIR.AcquisitionDataconstructor taking a scanner now has an extra optional argument
tof_mash_factor (defaulting to 1). This is only functional if a STIR version supporting TOF is used.- C++: Renamed PETAcquisitionData and derived classes to STIRAcquisitionData* as STIR now supports SPECT in addition to PET modality. Backward compatibility ensured by defining old nomenclature via typedefs until the release of SIRF 4.
-
Documentation
- revision of READMEs for the examples.
-
Changed Python test framework to pytest.
-
Added support for the extraction of subsets of STIR and Gadgetron acquisition data.
v3.3.0
-
Added a new acquisition model
SPECTUBMatrixfor (simple) usage in SPECT.
sirf.STIR.ImageDatahas now a way to set/get the modality. -
interactive Python demos superseded by SIRF-Exercises notebooks removed.
-
arguments setting number of CG iterations and verbosity of output
of acquisition models methodnorm()added. -
path for ISMRMRD shared library when generating MR data fixed.
-
extension processing in
ISMRMRDImageData::writefixed. -
Python int array check/conversion ensuring C++ compatibility added.
-
C/Python interfaces for computing prior value added.
-
added
CITATION.cfffile (replacing .zenodo.json`)
v3.2.0
-
To avoid appending to an existing
.h5file, writing methods now first check whether the file to which data is to be written already exists, and if so, delete it before writing. -
A version.h is created by CMake and installed to access version minor and major from C++.
-
MR
- added acquisition models for 2D non-cartesian encoding.
- The 2D radial, golden-angle increment radial and stack-of-stars trajectory are supported.
-
MR Geometry
- fixed GadgetronImagesVector::reorient() to only consider slice index
and ignore dimensions such as contrast, repetition etc.
- fixed GadgetronImagesVector::reorient() to only consider slice index
-
PET/STIR
- (C++) Replaced where possible returning
stir::Succeeded::nowith throwing exception. - (C++) Fixed a bug in
PETAcquisitionDataInMemory::norm. - (C++) Expose advanced parameters from STIR to sirf.STIR.RayTracingMatrix
- (Python) Expose advanced parameters from STIR to sirf.STIR.RayTracingMatrix and add get_info()
- (C++) Replaced where possible returning
-
SIRF Python interface
- Removed
__div__,__idiv__operators forDataContainersrequired for Python2. - Added
__truediv__and__itruediv__Python3 operators to DataContainer algebra.
- Removed
-
Build system
- export a CMake config file such that external C++ projects can use SIRF via CMake,
see theexamples/C++directory for basic usage. - during the build step the executable ismrmrd_generate_cartesian_shepp_logan is called
to generate simulated data to be used in tests such that the test data are compatible with
the installed ISMRMRD version. - we now require ISMRMRD v1.4.2.1 to allow for the -w flag for the creation of Shepp
Logan test data during build.
- export a CMake config file such that external C++ projects can use SIRF via CMake,
-
Other changes
- added conjugation methods to DataContainer
v3.1.1
v3.1.0
v3.1.0
-
MR/Gadgetron
- Golden-angle radial phase encoding (RPE) trajectory is supported if
Gadgetrontoolboxes were found during building
WARNING if Gadgetron was compiled with CUDA support, you need to build SIRF with theGadgetron_USE_CUDACMake variable set toON. - Automatic calling of
sort_by_time()in most places. This ensures that only consistent images are reconstructed. - Encoding classes perform the Fourier transformations instead of the
MRAcquisitionModel CoilSensitivitiesVectorclass now has forward and backward method using the encoding classes getting rid of the duplicate FFT code used to computecoil sensitivitiesfromMRAcquisitionData.- Added constructor for
GadgetronImagesVectorfromMRAcquisitionData. This allows setting up an MR acquisition model without having to perform a reconstruction first.
- Golden-angle radial phase encoding (RPE) trajectory is supported if
-
PET/STIR
- iterative reconstructors
set_current_estimateandget_current_estimatenow create a clone to avoid surprising modifications of arguments. The old behaviour ofset_current_estimatecan still be achieved byset_estimate.
Warning This is backwards incompatible, but arguably a bug fix.
- iterative reconstructors
-
SIRF Python interface
range_geometryanddomain_geometrymethods ofAcquisitionModelclasses, required by CIL algorithms, now obtain data via respective C++AcquisitionModelclasses accessors, in line with our strategy of keeping interface code minimalsirf.Gadgetron.AcquisitionData.get_infowas renamed toget_ISMRMRD_infoto avoid
confusion with the otherget_info()methods that return a string. (get_infostill works but issues a deprecation warning).
-
Build system
- fix bug with older CMake (pre-3.12?) that the Python interface was not built
#939.
- fix bug with older CMake (pre-3.12?) that the Python interface was not built