This version is 100% backwards compatible with STIR 5.0 as far as usage goes. However, there are changes in the output of scatter estimation and ECAT8 normalisation, see below for more information.
Of course, there is also the usual code-cleanup and improvements to the documentation. See also the 5.2 milestone on GitHub.
Overall code management and assistance by Kris Thielemans (UCL and ASC). Other main contributors were Daniel Deidda (NPL) and Markus Jehl (Positrigo).
InterfileNormHeaderSiemens) such that
hard-coded variables for the Siemens mMR have been removed. Further testing of this functionality is still required however.
set_up() method of the ray-tracing projection matrix now skips further processing
if it was already called with data of the same characteristics. This will means that any cached data
will be re-used, potentially leading to a speed-up when re-using it from Python.
InverseSSRB now works for BlocksOnCylindrical after a rewrite.
set_fan_data_add_gaps_help across segments to reduce computation time.
SegmentIndices, ViewgramIndices and SinogramIndices, used by ProjData related classes, as opposed
to having to specify all the elements directly, e.g. in C++
auto sinogram = proj_data.get_sinogram(sinogram_indices);
This makes these functions more future proof, in particular for TOF. The older functions are now deprecated.
Note that as Bin is now derived from ViewgramIndices, instantations of Bin can now be used to specify the indices as well in most places.
stir.ProjData.read_from_file as opposed to stir.ProjData_read_from_file. The former is supported since SWIG 3.0, and the default from SWIG 4.1.
DetectionPosition and DetectionPositionPair.bin.time_frame_num is now no longer a function in Python, but acts like a variable
(as the other Bin members).
RadionuclideDBProjDataInMemoryrestart_reconstruction_every_scatter_iteration
to true either via a parameter file or via the set_restart_reconstruction_every_scatter_iteration() function.
Scanner::check_consistency also checks if the energy resolution is less than 20 (as it is FWHM/reference_energy).
std::runtime_error instead of std::string.
use_view_offset was removed from the interpolate_projdata functions. View-offset is now always taken into account.
distributable.cxx was changed from verbosity 2 (which is the STIR default) to verbosity 3.
This is to reduce the default output during iterative reconstructions.
Succeeded class has a new method bool succeeded() enabling more concise code (avoiding the need for comparing with Succeeded::yes which is especially verbose in Python).
interpolate_axial_position, extend_sinogram_in_views and extend_segment_in_views
ProjData related classes that explicitly use axial_pos_num, view_num etc in their arguments are now deprecated,
and should be replaced by their respective versions that use SegmentIndices, ViewgramIndices or SinogramIndices. The former will not be
compatible with TOF information that will be introduced in version 6.0.0.
error and warning functions are now no longer included from common.h and need to be included manually when used (as was already the case for #include "stir/info.h").
CListEventCylindricalScannerWithDiscreteDetectors to template class
CListEventScannerWithDiscreteDetectors (templated in ProjDataInfoT). This enables
re-use for generic/blocksoncylindrical scanners.
ProjDataInMemory to avoid streams, causing a speed-up of some
operations, and removing a limit of total size of 2GB.
extend_segment_in_views does not handle view offsets correctly and does not work for BlocksOnCylindrical scanners extend_segment was added that works for Cylindrical and BlocksOnCylindrical and allows extension in tangential and axial direction as well.
sample_function_on_regular_grid did not handle offset correctly in all places