Summary of changes in STIR release 6.2
Overall summary
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 @NicoleJurjew (UCL) (SSRB for TOF), @Imraj-Singh (UCL) (CUDA version of the Relative Difference Prior), @markus-jehl (Positrigo) (fixes for blocks on cylindrical) and @KrisThielemans (UCL).
Patch release info
- 6.2.0 released 23/07/2024
GitHub Milestone 6.2
Summary for end users (also to be read by developers)
New functionality
ProjData
now has most of the methods for numerical operations asArray
, i.e. +=,-=,*=,/=,find_max()
,find_min()
,sum()
.
ProjDataInMemory
adds =,-,*,/ (as well as overloads that are faster than the implementations inProjData
).
PR #1439 and PR #1448- New prior
CudaRelativeDifferencePrior
(useCuda Relative Difference Prior
in.par
files), only available if the CUDA toolkit is found during building. Results are identical toRelativeDifferencePrior
up to numerical rounding issues. However, the code is currently limited to 3x3x3 weights.
Added timings for the RDP (both non-CUDA and CUDA) to thestir_timings
utility.
PR #1408
Changed functionality
- The default minimum scale factor for tail-fitting in the scatter estimation is now 0.05 (was 0.4). This (temporarily) resolves a
problem that for the Siemens mMR, the default factor was too large (see issue #1280).
**WARNING:**This potentially changes your scatter estimates. (You can check log files of the scatter estimation to see what the
scaling factors are.) However, the Siemens mMR example files already lowered the default scale factor to .1, so if you use(d) those, you will get identical results. Array::sum()
(and hence images etc) now accumulates in a variable at higher precision to avoid loss of precision.
PR #1439PoissonLogLikelihoodWithLinearModelForMeanAndProjData
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 theuse time-of-flight sensitivities
keyword should now rarely (if ever) be necessary.
PR #1458- SSRB now allows to mash TOF bins.
PR #1464 SPECT_dicom_to_interfile
improvements:- remove requirement for the
is_planar
parameters. As STIR can only read SPECT sinograms, we now read/set all fields from a
planar scan as well. There is therefore no need anymore for the boolean, and it is just ignored. Output of a conversion of
planar data is now directly readable into STIR. - do checks if sequences are present to avoid seg-faults
See PR #1473
- remove requirement for the
Bug fixes
- There was a bug in the computation of the detector coordinates for
BlocksOnCylindrical
scanners that caused the buckets to not be symmetric.
PR #1462 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.
PR #1466- The "Hessian times input" calculations of the Poisson log-likelihood for projection data were incorrect when the forward projection of the "input" contains negatives. We now detect this and throw an error if it occurs. A proper fix will have to be for later.
See Issue #1461
Build system
- C++-17 is now required.
- Force C++ version according to CERN ROOT versions: ROOT 6.28.10 needs C++17 and 6.30.2 needs C++20. Also some fixes when relying on
root-config
. - Optionally enable CUDA as a CMake language (for the CUDA RDP). You should use CMake 3.23 or later if you use CUDA. If you have the CUDA Toolkit but an old version of CMake that you cannot update, you will have to set
DISABLE_STIR_CUDA
toON
.
Known problems
See our issue tracker.
What is new for developers (aside from what should be obvious from the above):
Changed functionality
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 theArray
,VectorWithOffset
classes.
PR #1236 and PR #1438.
Bug fixes
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.
Fixed in PR #1427.
Other code changes
- Fixed an incompatibility with C++20.
- Enabled OpenMP for
Array
membersfind_max(), find_min(), sum(), sum_positive()
.
PR #1449. - Changes to allow reading Siemens Biograph Vision data: iSSRB and SSRB are now included in the SWIG interface; minor changes to a
shell script altering e7tools headers.
Test changes
C++ tests
- Objective functions (both projection-data and list-mode) and priors now have a numerical test for
accumulate_Hessian_times_input
PR #1418
recon_test_pack
- The output of
simulate_PET_data_for_tests.sh
can now be varied by setting environment variables, e.g.max_rd
. (Do not forget to
unset those variables afterwards!) - New test
run_test_SSRB.sh
New Contributors
- @Imraj-Singh made their first contribution in #1408
Full Changelog: rel_6.1.0...rel_6.2.0