Main repository for the CCP SynerBI software
PET:
set
/get
methods for OSSPS relaxation_parameter
, relaxation_gamma
and upper_bound
.CMake/building:
DISABLE_MATLAB
to ON
as our Matlab support is out-of-date and could
generate conflicts with Python shared libraries.Demo scripts:
exec
to importing via importlib.import_module
thus enabling code completion (and getting rid of Codacy complaints about undefined modules).Python interfaces for the reconstruction engines:
DataContainer
class that does not copy data between Python and C++.return None
in the method Datacontainer.shape()
replaced with more Pythonesque return (0,)
.MR
IgnoreMask
object that allows the user to specify which kind of acquisitions is to be ignored. By default, no acquisition is ignored when reading from file.Registration
SIRF/common:
Replaced Python implementation of DataContainer
methods with simple Python wraps of their C++ implementation.
Provided C++ tools for accessing the examples data (examples_data_path
and utility functions such as append_path
in common/utilities.h
).
MR
Re-designed handling of "irregular" ISMRMRD acquisitions, making it user-controlled and more flexible. See https://github.com/SyneRBI/SIRF/pull/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()
and get_STIR_examples_dir()
.
Added SIRF interfaces to STIR functions for LogcoshPrior
and RelativeDifferencePrior
.
Added SIRF interfaces to STIR functions for kappa
(spatially variant penalty strengths) for QP, Log-cosh, and RDP.
Fixed IterativeReconstructor.get_objective_function()
.
MR:
.dcm
files fixed.master
of end November 2022
find_package(gadgetron)
in CMake, but still support old version by looking for toolboxes.PET/SPECT
PinholeSPECTUBMatrix
acquisition model. Examples are provided (but the code is not yet tested).sirf.STIR.AcquisitionData
constructor 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.Documentation
Changed Python test framework to pytest.
Added support for the extraction of subsets of STIR and Gadgetron acquisition data.
Added a new acquisition model SPECTUBMatrix
for (simple) usage in SPECT.
sirf.STIR.ImageData
has 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 method norm()
added.
path for ISMRMRD shared library when generating MR data fixed.
extension processing in ISMRMRDImageData::write
fixed.
Python int array check/conversion ensuring C++ compatibility added.
C/Python interfaces for computing prior value added.
added CITATION.cff
file (replacing .zenodo.json`)
To avoid appending to an existing .h5
file, 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
MR Geometry
PET/STIR
stir::Succeeded::no
with throwing exception.PETAcquisitionDataInMemory::norm
.SIRF Python interface
__div__
, __idiv__
operators for DataContainers
required for Python2.__truediv__
and __itruediv__
Python3 operators to DataContainer algebra.Build system
examples/C++
directory for basic usage.Other changes
minor fixes w.r.t. v3.1.0
MR/Gadgetron
Gadgetron
toolboxes were found during buildingGadgetron_USE_CUDA
CMake variable set to ON
.sort_by_time()
in most places. This ensures that only consistent images are reconstructed.MRAcquisitionModel
CoilSensitivitiesVector
class now has forward and backward method using the encoding classes getting rid of the duplicate FFT code used to compute coil sensitivities
from MRAcquisitionData
.GadgetronImagesVector
from MRAcquisitionData
. This allows setting up an MR acquisition model without having to perform a reconstruction first.PET/STIR
set_current_estimate
and get_current_estimate
now create a clone to avoid surprising modifications of arguments. The old behaviour of set_current_estimate
can still be achieved by set_estimate
.SIRF Python interface
range_geometry
and domain_geometry
methods of AcquisitionModel
classes, required by CIL algorithms, now obtain data via respective C++ AcquisitionModel
classes accessors, in line with our strategy of keeping interface code minimalsirf.Gadgetron.AcquisitionData.get_info
was renamed to get_ISMRMRD_info
to avoid
confusion with the other get_info()
methods that return a string. (get_info
still works but issues a deprecation warning).Build system
sirf.STIR.ScatterEstimation
and ScatterSimulation
to allow (non-TOF) scatter estimation in PETAcquisitionModelUsingParallelproj
). This uses Joseph interpolation, but importantly can use your GPU (if CUDA was found during building).sirf.STIR.ImageData
, optionally give the number of times to sample a voxel. This is useful when the shape partially - but not completely - fills a voxel.storage_scheme
is set to memory
, PETAcquisitionData
allows direct modification, whereas before a copy would need to be created first. (Internally, it uses STIR ProjDataInMemory
, instead of ProjDataFromStream
).examples
, data
and doc
to the install directory, i.e. ${CMAKE_INSTALL_PREFIX}/share/SIRF-<version_major>.<version_minor>
directory.SIRF_DATA_PATH
environment variable is set, examples_data_path
will search for the examples data there, or in SIRF_INSTALL_PATH/share/SIRF-<version_major>.<version_minor>/data
directory. In MATLAB, the example_data_path
function has the version set by CMake at install time.__version__
in sirf
python package.NiftiImageData
.NotImplemented
instead of throwing error, opening the door for future implementations of operations on data.FATAL_ERROR
at a later stage.Registration
: renamed Resample
to Resampler
and NiftyResample
to NiftyResampler
. Old names are now deprecated but should still work.AcquisitionModel
forward
, direct
, backward
and adjoint
signatures have changed in Python. Subset information should now be set via num_subsets
and subset_num
members. The
forwardand
backwardmembers can still be called with the previous syntax but this will be removed in a later version. Note that default values of
num_subsetsand
subset_num` are 0 and 1 respectively, such that default behaviour is default behaviour (i.e. process all data) is unchanged.find_package(Python)
which are available with CMake 3.12+. SIRF CMake files will accept both Python_EXECUTABLE
or PYTHON_EXECUTABLE
, for the latter it will send a deprecation warning.PETAcquisitionData.axpby
now uses STIR's axpby
and is therefore faster.stir::AcquisitionDataInMemory
of as_array
, fill
, dot
, norm
, etc. (by using STIR iterators).DataContainer
algebra unit tests for all DataContainer
inherited classes.CMake
option BUILD_DOCUMENTATION
to use doxygen to build C++ documentation.
It will be installed in the share/SIRF-version/doc/doxygen
.fill
method in MR DataContainer
accepts numpy
array, number or DataContainer
.get_index_to_physical_point_matrix()
returned a wrong matrix in MATLAB and Python.examples_data_path
now should work for any platform, not just linux.PET/STIR
set_image_data_processor
to PETAcquisitionModel
. This allows for instance image-based PSF modelling..nii
)MR/Gadgetron
.h5
images (coming from ISMRMRD and Gadgetron). This means we can now convert them to other SIRF image types (e.g., NiftiImageData
and STIRImageData
). This is necessary for any kind of synergistic reconstruction. Further, to the best of our knowledge, this is the first ISMRMRD to NIfTI converter out there!Registration
NiftyResample
through the wrapping of NiftyMoMo.out = forward(in)
forward(out, in)
out = adjoint(in)
adjoint(out, in)
Matlab
and SPM
are present, the SPM wrapper is available from C++
, Matlab
and Python
.SPM
). There are therefore new methods add_floating_image
and clear_floating_images
on top of the original set_floating_image
. Methods extracting the results of registrations can now be called with an index (get_output(idx = 0)
, get_transformation_matrix_forward(idx = 0)
, etc.). This index defaults to the first to maintain backwards compatibility.NiftiImageData
, e.g., a.pad([10,10,0],[10,10,0])
to add 10 voxels to the minimum and maximum of the x- and y-directions.Other
.h5
images (coming from ISMRMRD and Gadgetron). This means we can now convert them to other SIRF image types (e.g., NiftiImageData
and STIRImageData
). This is necessary for any kind of synergistic reconstruction. Further, to the best of our knowledge, this is the first ISMRMRD to NIfTI converter out there!NiftyResample
through the wrapping of NiftyMoMo.Resample::process()
has been marked as deprecated. Instead, the following methods have been added to C++, python and matlab NiftyResample:
out = forward(in)
forward(out, in)
out = adjoint(in)
adjoint(out, in)
out = backward(in)
<- alias for adjointbackward(out, in)
<- alias for adjointset_image_data_processor
to PETAcquisitionModel
. This allows for instance image-based PSF modelling.Matlab
and SPM
are present, the SPM wrapper is available from C++
, Matlab
and Python
.SPM
). There are therefore new methods add_floating_image
and clear_floating_images
on top of the original set_floating_image
. Methods extracting the results of registrations can now be called with an index (get_output(idx = 0)
, get_transformation_matrix_forward(idx = 0)
, etc.). This index defaults to the first to maintain backwards compatibility.NiftiImageData
, e.g., a.pad([10,10,0],[10,10,0])
to add 10 voxels to the minimum and maximum of the x- and y-directions..nii
)