Skip to content

Releases: SyneRBI/SIRF

SIRF Release 3.9.0

30 Oct 18:01

Choose a tag to compare

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_view to test for zero-copy compatibility.

    • ImageData and AcquisitionData have .asarray() in Python via __array_interface__, following the same conventions as NumPy 2.x.

      By default, asarray() provides a "view" if possible (see supports_array_view) and falls back to a deep copy otherwise. Copy can be disabled or forced by setting the copy argument accordingly. (For NumPy 1.x, the copy argument is not supported and the behaviour is the same as the default in NumPy 2.x).

      Note that with copy=False, modifying the returned NumPy array will modify the original SIRF data as well.

      asarray(copy=True) is equivalent to as_array(). The latter will be removed in a future version.

  • SIRF/STIR

    • ScatterEstimation has extra methods that allow setting masks for the tail-fitting.

    • ImageData has extra method to zoom image using information from a template image, zoom_image_as_template.

    • Error raised in AcquisitionSensitivityModel.[un]normalise methods applied to a read-only object.

    • SIRF interfaces (C++ and Python) for STIR Poisson noise generation utilities provided.

    • Python:

      • allow in-place call of ObjectiveFunction gradient in Python. Added unit test for new functionality in gradient and for the out parameter.
      • ImageData and AcquisitionDataInMemory have supports_array_view==True
  • SIRF/Gadgetron

    • ImageDataView and AcquisitionDataView classes implemented that encapsulate arrays of NumPy views of ISMRMRD_ImageData and ISMRMRD_AcquisitionData objects respectively, significantly accelerating the algebraic operations (up to a factor of about 10 for images).
  • SIRF/Registration

    • Nifty images have supports_array_view==True
  • 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

25 Jul 15:48
a4d8cae

Choose a tag to compare

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_factors method 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

29 May 16:48

Choose a tag to compare

What's Changed

Full Changelog: v3.6.0...v3.7.0

v3.6.0

15 Feb 17:07

Choose a tag to compare

  • 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/get methods for OSSPS relaxation_parameter, relaxation_gamma and upper_bound.
    • added test for scatter simulation and estimation.
  • CMake/building:

    • default DISABLE_MATLAB to ON as our Matlab support is out-of-date and could
      generate conflicts with Python shared libraries.
  • Demo scripts:

    • replaced importing reconstruction engines from calling 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:

    • Several allocate methods in STIR.py, Gadgetron.py and Reg.py are replaced with just one allocate in 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

    • Improved handling of "irregular" ISMRMRD acquisitions by providing 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

    • fixed handling of complex images in NiftiImageData.cpp.

v3.5.0

19 Jul 13:55

Choose a tag to compare

  • 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 #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().

v3.4.0

19 Jan 12:58

Choose a tag to compare

  • MR:

    • Added support for spiral trajectories that are pre-computed by the user (by exposing a trajectory setter).
    • Writing images to .dcm files fixed.
    • Running image processing chains after reconstruction fixed.
    • Use C++ 17 if Gadgetron-support is enabled.
    • Support Gadgetron master of end November 2022
      • using find_package(gadgetron) in CMake, but still support old version by looking for toolboxes.
  • 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 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.
    • 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

06 Jul 17:05

Choose a tag to compare

  • 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`)

v3.2.0

22 Mar 10:57

Choose a tag to compare

  • 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

    • 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.
  • PET/STIR

    • (C++) Replaced where possible returning stir::Succeeded::no with 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()
  • SIRF Python interface

    • Removed __div__ , __idiv__ operators for DataContainers required for Python2.
    • Added __truediv__ and __itruediv__ Python3 operators to DataContainer algebra.
  • Build system

    • export a CMake config file such that external C++ projects can use SIRF via CMake,
      see the examples/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.
  • Other changes

    • added conjugation methods to DataContainer

v3.1.1

06 Jul 10:49

Choose a tag to compare

minor fixes w.r.t. v3.1.0

v3.1.0

24 Jun 17:09

Choose a tag to compare

v3.1.0

  • MR/Gadgetron

    • Golden-angle radial phase encoding (RPE) trajectory is supported if Gadgetron toolboxes were found during building

      WARNING if Gadgetron was compiled with CUDA support, you need to build SIRF with the Gadgetron_USE_CUDA CMake variable set to ON.
    • 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
    • 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.
    • Added constructor for GadgetronImagesVector from MRAcquisitionData. This allows setting up an MR acquisition model without having to perform a reconstruction first.
  • PET/STIR

    • iterative reconstructors 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.

      Warning This is backwards incompatible, but arguably a bug fix.
  • 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 minimal
    • sirf.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

    • fix bug with older CMake (pre-3.12?) that the Python interface was not built
      #939.