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).
RadionuclideDB
ProjDataInMemory
restart_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