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.