# Summary of changes in STIR release 2.4 (dated 31/07/2013)

This release was mostly prepared by Charalampos Tsoumpas (King's College London). Special thanks to Irene Polycarpou for her rigorous validation and the invaluable help while debugging the code. Minor changes and bug fixes by Kris Thielemans (Algorithms and Software Consulting Ltd, University College London).

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

### Important bug fixes

- corrected BUG in memory allocation in InputStreamWithRecords (introduced in STIR 2.3). This potentially affected all list mode handling.

### New functionality

- Addition of motion utilities and an objective function for reconstructing a single motion corrected image from gated projection data.
- Conversion routines for reading/writing GIPL images.
- A conversion routine to create Interfile data from raw GATE projection data output.
- 4 new scanners: Siemens mMR, nanoPET (Mediso), HYPER (HyperImage FP7 project), PANDA (KCL internal).
- Added "-t tolerance" option to compare_projdata.
- Python support:
  - Added input files for python examples.
  - Added test scripts using py.test (these need to be run manually at present)
  - Added ByteOrder, NumericType, Segment, TimedObject, InterfileOutputFileFormat, ECAT7OutputFileFormat (applicable to all swig interfaces)
  - Added get_num_dimensions() and shape() to Array

### Changed functionality

- `PoissonLogLikelihoodWithLinearKineticModelAndDynamicProjectionData` now defaults to using all segments (to be consistent with other objective functions)

### Build system

- Using CMake is now recommended (see the wiki). Some options such as shared libraries and SWIG support can only be enabled when using CMake. Hand-crafted project files for Visual Studio are no longer distributed.
- use CMake FOLDER properties to group projects in Visual Studio (and XCode etc?), needs CMake 2.8.3
- disable export of cmake settings as it's no longer supported by CMake

### Known problems

- On Windows, using shared libraries fails. We need to sort out dependencies between libraries to fix this.
- This release is known to fail when both MPI and shared libraries are enabled. You will see linking errors in all non_MPI executables.
- The recon_test_pack routines fail with the MPI version. A work-around is to prefix the reconstruction executables with `mpirun -np 4` or so).
- The MPI version of OSMAPOSL and OSSPS cannot compute the value of the objective function. Therefore, setting the `report objective function values interval` keyword to 1 will cause a crash.
- ECAT6 is no longer supported
- The interpolating back-projector still gives problems in the centre of the images on some architectures/compiler/optimisation settings. We recommend to use the ray-tracing matrix (with additional rays) instead.
- When using `GRAPHICS=X` (i.e. on Unix/Linux/MacOSX) the window displaying the bitmaps is sometimes empty. This might depend on your X server settings. This affects `manip_image`, `manip_projdata` and `display_projdata`. We have currently no work-around (aside from using `GRAPHICS=PGM` or `stir_write_pgm`).

### Minor bug fixes

- fixed possible race-condition in OPENMP version of FBP2D (but it's still too slow to be practical)
- list_lm_events: reset output-format to decimal after printing a gating event (previously all remaining output was in hex); also added newline after printing an unknown event.
- fix a (nearly irrelevant) bug in reading a file signature that lead to uninitialised memory being returned if the file size was shorter than 1024 bytes (but that doesn't really happen for normal files).
- A few error messages in ECAT IO would actually crash as opposed to writing a decent message.
- A few changes to the CMakeLists.txt files for cmake clarifying dependencies between libraries. This makes shared libraries better suppported, but there are still circular dependencies. This doesn't seem to create trouble on most systems, but makes shared libraries fail on some (e.g. msys on windows).

### Documentation changes

- Added documentation on new features, more on using CMake, etc
- The Wiki expands more and more, so use it in addition to the provided PDFs.

### recon_test_pack changes

- updated version number and added some clarification to the README.txt
- added a test script for the motion version
- added a test script for the scatter simulation
- relaxed test for OSSPS in `run_tests.sh` to avoid problem of outer rim voxels on cygwin (and others?)
- small updates to test scrips, giving early exit if a STIR executable not found and feedback which STIR executable is being used

### Other changes to tests

- added a test for warping images
- changed IO tests in test_Array to accomodate for gcc 4.8.1 numerical precision (flagged and tested by Justin Mikell)

## What's new for developers (aside from what should be obvious from the above):

### Major bugs fixed

- corrected BUG in memory allocation in InputStreamWithRecords (introduced in STIR 2.3). This potentially affected all list mode handling.

### New functionality

- Lots of warping/motion stuff!

### Other code changes

- modifications to the scatter estimation code changes to be able to run multiple scatter simulation from the same ScatterEstimation object (possibly re-using the cache). Results are identical.
- removed a few `using std::cout` (and other items in the `std` namespace) from some include files as this created problems on some compilers. This might affect your code if it relied on these `using` statements.
- replaced a few output lines to `std::cerr` with calls to `stir::info` (still many more to do).

### Build system

- changes to test-macros for CMake to allow linking without the registries (such as IO_registries), speeding up the linking process of some tests.
- fixes for MPI. The CMake files might now work on more MPI platforms.