This version is 100% backwards compatible with STIR 6.3 (aside from bug fixes of course).
This is a release with an important TOF bug fix, considerable improvements in the Python interface, support for libparallelproj 2, speed-up in CUDA code and normalisation code, and example/documentation improvements (including an example script to process Siemens Quadra data from e7tools output). Of course, there is also the usual code-cleanup.
Main code contributions were by Kris Thielemans (UCL), Zekai Li (UMCG), Denis Prokopenko (KCL),
Nicole Jurjew (UCL), Markus Jehl (Positrigo), Dimitra Kyriakopoulou (Academy of Athens).
Thanks also to Christian Hinge (U Copenhagen) for additional testing of Quadra reconstructions.
Overall overview and release management was by Kris Thielemans (UCL).
ArcCorrection should now work correctly for TOF data (although we don't use it).
ProjDataInfo::clone()
combined with dynamic_cast.
The object is now cloned once and ownership is transferred safely after type checking.ProjDataInfo, images, ExamData, priors/penalties, objective functions.
stirextra module is now a submodule, so use stir.extra instead
(although the former will work, but with a warning).
Some of the more useful examples, including Vision_files_preprocess.py,
are now installed as part of the module, to make them easy to call. You can
now for instance do
python -m stir.projdata_visualisation -h
and in Python
import stir
from stir.projdata_visualisation import launch_GUI
launch_GUI('proj_data_filename')
matplotlib.widgets.
make_fan_sum_data.
CudaGibbsPenalty.
This results in a ~20% speed-up, but also code simplification.
std::move for input arrays.
stir_buildblock,
but this might change in the future). This avoids
circular dependencies between libraries, and should therefore avoid linking problems
in external projects. It could also make it possible to enable shared libraries
(not recommended yet).${STIR_LIBRARIES} CMake variable is used, as previously already recommended
(see the STIR-UsersGuide). However, developers that extend STIR via the STIR_LOCAL
mechanism might have to change their STIR library dependencies (see the
PR for details).
HDF5::HDF5 target to specify dependencies on,
as opposed to HDF5_CXX_LIBRARIES etc. This should be more future proof
and avoids problems with the STIR conda-forge build. (This can be switched off
with the CMake option USE_HDF5_TARGET=OFF.)
ROOT_CXX_STANDARD specifies the C++ standard used to build ROOT, so STIR now uses this as (minimum) C++ version. (From ROOT 6.34, CMake will automatically ensure that ROOT dependencies (such as STIR) use the same C++ standard).ROOT_CXX_STANDARD = 17, matching pre-built releases and conda packages.
For custom builds of ROOT below v6.32 that use a more recent C++ standard, the STIR user must specify the appropriate C++ standard manually during configuration by specifying CMAKE_CXX_STANDARD.
See our issue tracker.
ProjDataInfoGenericNoArcCorr class hierarchy by merging ProjDataInfoGeneric into it
and deriving it from ProjDataInfoCylindricalNoArcCorr.
See Issue #1307 for rationale.ProjDataInfo with dynamic_cast with
a sequence of if statements (or equivalent), make sure you test for ProjDataInfoGeneric
before testing for ProjDataInfoCylindricalNoArcCorr.(or even ProjDataInfoCylindrical). It is therefore strongly **recommended** to test via
proj_data.get_proj_data_info_sptr()->get_scanner_ptr()->get_scanner_geometry() == "Cylindrical")
etc
PR #1696
ProjDataInfo::clone() now uses covariant return types, avoiding need for explicit downcasting.
Also added the DataWithProjDataInfo class, reducing duplicate C++ code.
ProjDataInfoGeneric is now identical to ProjDataInfoGenericNoArcCorr.
ProjDataInfoBlocksOnCylindricalNoArcCorr will be removed in v7.0 as it is almost identical to ProjDataInfoGenericNoArcCorr.
std::sprintf() with std::snprintf(), see #1586.std::istrstream() with std::istringstream(), see #1637.All new features and most code changes were accompanied by new tests.