Skip to content

v6.2.0

Latest
Compare
Choose a tag to compare
@KrisThielemans KrisThielemans released this 23 Jul 08:30
· 46 commits to master since this release
e50e6b1

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

Summary for end users (also to be read by developers)

New functionality

  • 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).
    PR #1439 and PR #1448
  • New prior 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.
    Added timings for the RDP (both non-CUDA and CUDA) to the stir_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 #1439
  • 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.
    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

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 to ON.

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 the Array, 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 members find_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

Full Changelog: rel_6.1.0...rel_6.2.0