This version is 100% backwards compatible with STIR 6.1, aside from a bug fix for the blocks-on-cylindrical set-up which caused the wrong geometry, and a changed default of the tail-fitting of the scatter estimator (see below). However, C++-17 is now required.
Main new features are the capability to mash TOF bins (via SSRB utility/code) and a CUDA version of the Relative Difference Prior. There are also some import bug fixes, as well as some speed-up (hopefully) in the use of arrays.
Of course, there is also the usual code-cleanup and improvements to the documentation.
This release contains mainly code written by Nicole Jurjew (UCL) (SSRB for TOF), Imraj Singh (UCL) (CUDA version of the Relative Difference Prior), Markus Jehl (Positrigo) (fixes for blocks on cylindrical) and Kris Thielemans (UCL).
ProjData
now has most of the methods for numerical operations as Array
,
i.e. +=,-=,*=,/=,find_max()
,find_min()
,sum()
.
ProjDataInMemory
adds =,-,*,/ (as well as overloads that are faster than the implementations
in ProjData
).CudaRelativeDifferencePrior
(use Cuda Relative Difference Prior in .par files), only
available if the CUDA toolkit is found during building. Results are identical to RelativeDifferencePrior
up to numerical rounding issues. However, the code is currently limited to 3x3x3 weights.Array::sum()
(and hence images etc) now accumulates in a variable at higher precision to avoid loss of precision.PoissonLogLikelihoodWithLinearModelForMeanAndProjData
now attempts to auto-detect
if it should compute sensitivity using TOF back-projection or not. It does this by
checking if its normalisation object can only handle TOF data or not.
This should mean that the use time-of-flight sensitivities keyword should now
rarely (if ever) be necessary.
BlocksOnCylindrical
scanners that caused the buckets to not be symmetric. BlocksOnCylindrical
scanners were not axially symmetric due to a bug in how gaps were
handled. Also, downsampling of BlocksOnCylindrical
scanners in scatter simulation was inaccurate.root-config
.
See our issue tracker.
Array
classes by default use contiguous memory allocation (as opposed to a sequence of 1D vectors).
This could speed up memory allocation and destruction of arrays with a high number of underlying 1D vectors. It also allows reading/writing
data in one call to the C++ library, as opposed to many small calls. Also added move constructors to the Array
,
VectorWithOffset
classes.
PoissonLogLikelihoodWithLinearModelForMeanAndProjData
had a (minor?) problem with TOF data
that when computing the gradient, the normalisation object was not set-up with the TOF data,
but non-TOF instead. This did not happen in our normal reconstruction code, and would have thrown an error
if it occured.
Array
members find_max(), find_min(), sum(), sum_positive()
.
accumulate_Hessian_times_input
max_rd
. (Do not forget to unset those variables afterwards!)