# Summary of changes in STIR release 1.3 (dated 25/11/2004)

Release of 2D FBP and 3DRP.
Aside from that, this is mostly an optimisation and bug-fix release, together with some code changes for gcc 3.4.

Nearly all work on this update was by Kris Thielemans (but FBP2D and FBP3DRP originate in PARAPET days).
Thanks to Frédéric Schoenahl and Hagen Moelle for contributing patches for gcc 3.4, and Frédéric Schoenahl, Hagen Moelle, Katie Dinelle and Oliver Nix for testing.
Also many thanks to Mérence Sibomana for updating the LLN ecat matrix library to iron out some problems with STIR.

## Summary for endusers (also to be read by developers)

### New utilities

- FBP2D, our implementation of the Filtered Back Projection algorithm.
- FBP3DRP, our implementation of the 3D Reprojection algorithm.

### Bugs removed that affect users

- poisson_noise did not work properly in STIR 1.2
- filled in patient_orientation in ECAT headers. Without it, some display programs reorient the image.
- on some systems there were problems with synchronising input and output when asking questions to the user via a terminal.
- fixed bug in ECAT6 IO causing wrong reading/writing of float values in the headers on some systems with recent compilers. In addition, ECAT6 IO should now work on 64-bit systems. Warning: bugs existed since PARAPET days (or indeed before that) but would have appeared when doing 'make run_tests'.

### Code changes that influence your results

- Updated bin-size and scanner radius for the Advance as suggested by Roman Krais quite a while ago...
- Interfile parsing of sinogram headers now has a different guessing routine if "originating system" is not recognised. However, as long as all scanner parameters are specified, nothing should change.
- when reading ECAT7 sinograms, and the bin_size from the header and the STIR info do not match, the header info is now used (in previous version, it was the STIR info). This should have little impact, as for normal scanners, they are the same.
- lm_to_projdata: changed naming convention from fgbd to fgdb according to standard CTI rules

### New functionality of existing utilities

- added support for Discovery LS and ST
- stir_math: added option --output-format to specify output file format for images
- list_ROI_values: can now have more than 1 ROI (with names) in the .par file, can output CV
- generate_image: added keys "X number of samples to take per voxel" etc
- get_time_frame_info.cxx: added --mid-time option, added possibility to list more than 1 frame (while keeping command line compatible), added --num-time-frames option
- recon_test/bcktest.cxx: added more command line arguments, including parsing the projector from a file, changing the output filename etc. WARNING: the command line parameters are INCOMPATIBLE with before.

### Code changes that do not influence your results

- interactive asking of parameters by OSMAPOSL (and FBP2D) no longer crashes.
- When directly reading ECAT7 files, STIR no longer generates a corresponding Interfile header for it. This avoids problems with read-only directories and potential race-conditions for multiple STIR utilities reading the same file.
- conv_to_ecat7 now produces ECAT7 sinograms with 2-byte ints as data-type (except when writing attenuation files). This is slower but allows a larger number of frames.
- scanner name matching now ignores case and white space

### Installation procedure changes

- Makefiles slightly changed to allow compiling with Visual Studio's command line compilers (set CXX=cl). Changed the EXTRA_OPT Makefile option to EXTRA_CFLAGS, and similar changes to make things more logical (see User's Guide).

### Documentation changes

- doxygen documentation has expanded and improved, also because we are now using doxygen 1.3.9. In particular, the include statements in the documentation generated by doxygen are now correct.
- Nearly all 'overview' documentation is now written in LaTeX format, as opposed to RTF. Aside from some nice features in the PDF files, this should allow easier integration with doxygen at a later stage.

### recon_test_pack changes

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

### New functionality

- added code for FFT, see include/stir/numerics/fourier. This code is tested indirectly in test_ArrayFilter (by comparing withordinary convolution). Another test program is not yet included in the distribution as it relies on comparing results with the Numerical Recipes FFT code, which we cannot redistribute.
- some more functions for coordinates and array indexing. see the ChangeLog

### Other code changes

- more tests: ProjDataInfo, symmetries (used for forward and back projection), ArrayFilter, ROIs, VAX float conversions...
- major changes in the VectorWithOffset class (and a bit in Array). The big difference is now that you can resize (also make it smaller, we had only grow() before) and reserve capacity, similar to std::vector. (tested for memory leaks on Linux using http://valgrind.kde.org/)
- changed full array iterators a little bit to allow for more compiler optimisations.
- sorted out most (but I guess not all) bugs in the LOR classes.
- bug fixes in Shape3D (see ChangeLog). However, 2 bugs compensated eachother such that results were correct anyway.
- changes to symmetries and the ray tracing projection matrix to work in more general cases.
- new Array IO being introduced, allowing for more flexibility and uses less temporary memory. Replace all usage of Array:write_data with IO/write_data (and similar for read_data).
- more functionality and/or new utilities round(), modulo(), norm() etc
- add preliminary code for having projectors by 'densel' (i.e. voxel but for general DiscretisedDensity) as opposed to by Bin.
- major changes in Scanner.cxx. Most of interest is that block/bucket info is added for many scanners. This will be at present only be used when using an ECAT7 normalisation file.
- sorted out problem in Makefile with auto-generation of dependencies (on include files) if you are not using gcc 3.*.
- changed test.mk mechanism to make it far easier to add test programs. Also, tests are now performed as different targets, so "make -k run_tests" will run all tests, regardless of any failures.