# Summary of changes in STIR release 2.3 (dated 04/05/2013)

This update was mostly prepared by Kris Thielemans (Algorithms and Software Consulting Ltd). The FORE implementation was developed over many years with main authors Matthias Egger, Claire Labbé, Oliver Nix, Kris Thielemans. The SimSET updates were checked by Robert Harrison.

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

### Important bug fixes

- The routines to handle SimSET data did have some problems in the previous release, but should work now. Check SimSET/README.txt for some information.
  - `run_SimSET.sh` had a few crucial lines commented out.
  - corrected the case where scatter_parameter is 4|5|9|10 in `conv_SimSET_projdata_to_STIR.sh`

### New functionality

- Addition of the FORE algorithm.
- Dynamic projection data can now be read from Interfile data. This means that the parametric image estimation routines need less ECAT7 support (still required for images at present).
- Expanded the interface for using STIR from Python. This works now but needs documentation. There's functions to copy STIR arrays to `numpy` arrays, indexing STIR arrays with tuples, etc. To use this, you will need to get a recent version of SWIG and enable the `BUILD_SWIG_PYTHON` option when using CMake.
- Preliminary support for using STIR from Octave. However, this is partially broken due to problems in SWIG for octave.

### Changed functionality

- `ProjMatrixByBinFromFile` now assumes that if an LOR isn't found in the file, it's empty (in previous STIR versions, we called error())

### 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.
- For the normal Makefiles, we now use the `-Ofast` option for gcc if it supports it.

### Known problems

- This release has a memory allocation problem when processing list mode data. Depending on your system, compiler, bad luck, you might get wrong results. If you use list mode, please upgrade to STIR 2.4.
- This release is known to fail when both MPI and shared libraries are enabled. You will see linking errors in all non_MPI executables.
- On Windows, using shared libraries fails. We need to sort out dependencies between libraries to fix this.
- The recon_test_pack routines fail with the MPI version. See the mailing list for a work-around.
- 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 Visual Studio (Express) with the provided solution files, there is a linking problem for some utilities. It is recommended to use the new `CMake` files for building instead (see the wiki).
- 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

- This update contains a few fixes for Visual C++ 2010 and 2012, e.g. in Debug mode and on 64bit systems, Intel C++ (adapt the makefile to use xiar when using -fast).
- 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).
- `test_Scanner.cxx`: declare `ecat_model` function in case it isn't in `ecat_model.h`

### Documentation changes

- 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
- removed the ECAT6 tests

### Other changes to tests

None

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

### Major bugs fixed

None

### New functionality

- BasicCoordinate, VectorWithOffset and Array now have new members at() (checking for out-of-range index access) and empty() (like std::vector).
- error() and warning() now support using boost::format. The old (unsafe) printf-like syntax will be removed in a future version.

### Other code changes

- removed `_scanner_sptr` member of `MultipleProjData`, added a few `set_*()` functions.
- `error` and `warning` have now an additional version using only 1 argument that writes to stream, i.e. like info()
- `PoissonLogLikelihoodWithLinearModelForMean`: added get/set pair for (sub)sensitivity_filename(s)
- `OSMAPOSLReconstruction:` overloading `IterativeReconstruction::get_objective_function()` with a return-type specifying it'll always be a Poisson log likelihood.
- no longer have `using std::vector` and/or `using std::ios` etc in some .h files
- A few minor changes for SWIG compatibility