diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000000..ba26f5568a
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,15 @@
+---
+Language : Cpp
+# BasedOnStyle : GNU
+AlwaysBreakAfterReturnType: TopLevelDefinitions
+AlwaysBreakTemplateDeclarations: true
+BraceWrapping:
+ SplitEmptyFunction: false
+ColumnLimit: 130
+IndentPPDirectives: AfterHash
+PointerAlignment: Left
+SortIncludes: false
+SortUsingDeclarations: false
+SpaceBeforeParens: ControlStatements
+Standard: Cpp11
+...
diff --git a/.gitattributes b/.gitattributes
index 70faca108b..7d845e399e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,14 @@
+# currently empty attributes (using pre-commit)
+[attr]cppfiles
+[attr]cfiles
+[attr]pyfiles
+*.cpp cppfiles
+*.cxx cppfiles
+*.h cppfiles
+*.inl cppfiles
+*.txx cppfiles
+*.c cfiles
+*.py pyfiles
*.v -text -diff
*.s -text -diff
*.scn -text -diff
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
new file mode 100644
index 0000000000..1ffa1ebeb8
--- /dev/null
+++ b/.github/workflows/check.yml
@@ -0,0 +1,13 @@
+name: Check
+on:
+- push
+- pull_request
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ name: pre-commit
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ - run: sudo apt-get install -yqq clang-format
+ - uses: pre-commit/action@v2.0.0
diff --git a/.gitignore b/.gitignore
index 52958752bb..fea9b2b25e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -84,4 +84,7 @@ install_manifest.txt
# other stuff
.cache
*.idea
-*.user
\ No newline at end of file
+*.user
+
+build
+out
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000000..f1589c12c3
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,6 @@
+repos:
+- repo: git://github.com/doublify/pre-commit-clang-format
+ rev: 62302476d0da01515660132d76902359bed0f782
+ hooks:
+ - id: clang-format
+ files: \.(c|cc|cxx|cpp|h|hpp|hxx|inl|txx)$
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fc92c31b73..15473dd98a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -123,6 +123,10 @@ if(NOT DISABLE_CERN_ROOT)
endif()
endif()
+if(NOT DISABLE_HDF5_SUPPORT)
+ find_package(HDF5 COMPONENTS CXX)
+endif()
+
if(NOT DISABLE_AVW)
find_package(AVW)
endif()
diff --git a/CMakeLists.txt.user.4.10-pre1 b/CMakeLists.txt.user.4.10-pre1
new file mode 100644
index 0000000000..b7880ef2eb
--- /dev/null
+++ b/CMakeLists.txt.user.4.10-pre1
@@ -0,0 +1,9206 @@
+
+
+
+
+
+ EnvironmentId
+ {c62e0ab5-e250-4d63-8bd6-413f8f0df425}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ 1
+ true
+ true
+ true
+ false
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ true
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Desktop
+ {7a6826a5-1cc3-4f1a-a2f0-7c499b37d398}
+ 0
+ 0
+ 57
+
+
+ BUILD_DOCUMENTATION:BOOL=OFF
+ CMAKE_BUILD_TYPE:STRING=Debug
+ CMAKE_CXX_COMPILER:STRING=/usr/bin/g++
+ CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
+ CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
+ DISABLE_AVW:BOOL=ON
+ DISABLE_CERN_ROOT:BOOL=ON
+ DISABLE_CERN_ROOT_SUPPORT:BOOL=ON
+ DISABLE_HDF5_SUPPORT:BOOL=ON
+ DISABLE_ITK:BOOL=ON
+ DISABLE_LLN_MATRIX:BOOL=ON
+ DISABLE_RDF:BOOL=ON
+ DISABLE_SIMSET:BOOL=OFF
+ DISABLE_STIR_LOCAL:BOOL=ON
+ QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
+ SIMSET_INCLUDE_DIRS:PATH=/home/nikos/Workspace/src/2.9.2/src
+ SIMSET_LIBRARY:FILEPATH=/home/nikos/Workspace/src/2.9.2/lib/libsimset.so
+ STIR_OPENMP:BOOL=OFF
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug
+
+
+ -j7
+
+ Current executable
+
+ true
+ CMake Build
+
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ true
+ CMake Build
+
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+ Debug
+ CMakeProjectManager.CMakeBuildConfiguration
+
+
+
+ BUILD_DOCUMENTATION:BOOL=OFF
+ CMAKE_BUILD_TYPE:STRING=Release
+ CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}
+ CMAKE_C_COMPILER:STRING=/usr/bin/gcc
+ CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
+ DISABLE_AVW:BOOL=ON
+ DISABLE_CERN_ROOT:BOOL=ON
+ DISABLE_HDF5_SUPPORT:BOOL=ON
+ DISABLE_ITK:BOOL=ON
+ DISABLE_LLN_MATRIX:BOOL=ON
+ DISABLE_RDF:BOOL=ON
+ DISABLE_SIMSET:BOOL=OFF
+ DISABLE_STIR_LOCAL:BOOL=ON
+ QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
+ SIMSET_INCLUDE_DIRS:PATH=/home/nikos/Workspace/src/2.9.2/src
+ SIMSET_LIBRARY:FILEPATH=/home/nikos/Workspace/src/2.9.2/lib/libsimset.so
+ STIR_OPENMP:BOOL=ON
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Release
+
+
+ -j7
+
+ Current executable
+
+ true
+ CMake Build
+
+ CMakeProjectManager.MakeStep
+
+ 1
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+
+
+ clean
+
+ true
+ CMake Build
+
+ CMakeProjectManager.MakeStep
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+ Release
+ CMakeProjectManager.CMakeBuildConfiguration
+
+ 2
+
+
+ 0
+ Deploy
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ Deploy Configuration
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ find_ML_singles_from_delayed
+ CMakeProjectManager.CMakeRunConfiguration.find_ML_singles_from_delayed
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ zeropad_planes
+ CMakeProjectManager.CMakeRunConfiguration.zeropad_planes
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ list_detector_and_bin_info
+ CMakeProjectManager.CMakeRunConfiguration.list_detector_and_bin_info
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_proj_data_in_memory
+ CMakeProjectManager.CMakeRunConfiguration.test_proj_data_in_memory
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_convert_array
+ CMakeProjectManager.CMakeRunConfiguration.test_convert_array
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_export_array
+ CMakeProjectManager.CMakeRunConfiguration.test_export_array
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_NestedIterator
+ CMakeProjectManager.CMakeRunConfiguration.test_NestedIterator
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_multiple_proj_data
+ CMakeProjectManager.CMakeRunConfiguration.test_multiple_proj_data
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_GeneralisedPoissonNoiseGenerator
+ CMakeProjectManager.CMakeRunConfiguration.test_GeneralisedPoissonNoiseGenerator
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_SeparableMetzArrayFilter
+ CMakeProjectManager.CMakeRunConfiguration.test_SeparableMetzArrayFilter
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_Fourier
+ CMakeProjectManager.CMakeRunConfiguration.test_Fourier
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_integrate_discrete_function
+ CMakeProjectManager.CMakeRunConfiguration.test_integrate_discrete_function
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_overlap_interpolate
+ CMakeProjectManager.CMakeRunConfiguration.test_overlap_interpolate
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ correct_projdata
+ CMakeProjectManager.CMakeRunConfiguration.correct_projdata
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_BSplines
+ CMakeProjectManager.CMakeRunConfiguration.test_BSplines
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_BSplinesRegularGrid
+ CMakeProjectManager.CMakeRunConfiguration.test_BSplinesRegularGrid
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_IR_filters
+ CMakeProjectManager.CMakeRunConfiguration.test_IR_filters
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_matrices
+ CMakeProjectManager.CMakeRunConfiguration.test_matrices
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_BSplinesRegularGrid1D
+ CMakeProjectManager.CMakeRunConfiguration.test_BSplinesRegularGrid1D
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_erf
+ CMakeProjectManager.CMakeRunConfiguration.test_erf
+/home/nikos/Workspace/src/STIR/src/test/numerics/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/numerics
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_modelling
+ CMakeProjectManager.CMakeRunConfiguration.test_modelling
+/home/nikos/Workspace/src/STIR/src/test/modelling/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/modelling
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_ParametricDiscretisedDensity
+ CMakeProjectManager.CMakeRunConfiguration.test_ParametricDiscretisedDensity
+/home/nikos/Workspace/src/STIR/src/test/modelling/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test/modelling
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ rebin_sgl_file
+ CMakeProjectManager.CMakeRunConfiguration.rebin_sgl_file
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ add_ecat7_header_to_sgl
+ CMakeProjectManager.CMakeRunConfiguration.add_ecat7_header_to_sgl
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ manip_image
+ CMakeProjectManager.CMakeRunConfiguration.manip_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ print_sgl_values
+ CMakeProjectManager.CMakeRunConfiguration.print_sgl_values
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ scan_sgl_file
+ CMakeProjectManager.CMakeRunConfiguration.scan_sgl_file
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_to_ecat6
+ CMakeProjectManager.CMakeRunConfiguration.conv_to_ecat6
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ copy_ecat7_header
+ CMakeProjectManager.CMakeRunConfiguration.copy_ecat7_header
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ ifheaders_for_ecat7
+ CMakeProjectManager.CMakeRunConfiguration.ifheaders_for_ecat7
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ ecat_swap_corners
+ CMakeProjectManager.CMakeRunConfiguration.ecat_swap_corners
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ is_ecat7_file
+ CMakeProjectManager.CMakeRunConfiguration.is_ecat7_file
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_to_ecat7
+ CMakeProjectManager.CMakeRunConfiguration.conv_to_ecat7
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ print_ecat_singles_values
+ CMakeProjectManager.CMakeRunConfiguration.print_ecat_singles_values
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ convecat6_if
+ CMakeProjectManager.CMakeRunConfiguration.convecat6_if
+/home/nikos/Workspace/src/STIR/src/utilities/ecat/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ find_fwhm_in_image
+ CMakeProjectManager.CMakeRunConfiguration.find_fwhm_in_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_time_of_flight
+ CMakeProjectManager.CMakeRunConfiguration.test_time_of_flight
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ read_geo_factors
+ CMakeProjectManager.CMakeRunConfiguration.read_geo_factors
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ extract_dynamic_images
+ CMakeProjectManager.CMakeRunConfiguration.extract_dynamic_images
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_GEHDF5_to_interfile
+ CMakeProjectManager.CMakeRunConfiguration.conv_GEHDF5_to_interfile
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ construct_randoms_from_GEsingles
+ CMakeProjectManager.CMakeRunConfiguration.construct_randoms_from_GEsingles
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ read_nontof_conv_tof
+ CMakeProjectManager.CMakeRunConfiguration.read_nontof_conv_tof
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ extract_segments
+ CMakeProjectManager.CMakeRunConfiguration.extract_segments
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ calculate_attenuation_coefficients
+ CMakeProjectManager.CMakeRunConfiguration.calculate_attenuation_coefficients
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ compare_image
+ CMakeProjectManager.CMakeRunConfiguration.compare_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ compare_projdata
+ CMakeProjectManager.CMakeRunConfiguration.compare_projdata
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ list_image_values
+ CMakeProjectManager.CMakeRunConfiguration.list_image_values
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ stir_math
+ CMakeProjectManager.CMakeRunConfiguration.stir_math
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ find_ML_normfactors3D
+ CMakeProjectManager.CMakeRunConfiguration.find_ML_normfactors3D
+/home/nikos/Workspace/src/STIR/src/utilities/
+ norm norm_sino_f1g1d0b0.hs forward_model.hs 3 3
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+ /home/nikos/Desktop/cur_Active/York/norm/
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ shift_image_origin
+ CMakeProjectManager.CMakeRunConfiguration.shift_image_origin
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ list_projdata_info
+ CMakeProjectManager.CMakeRunConfiguration.list_projdata_info
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ postfilter
+ CMakeProjectManager.CMakeRunConfiguration.postfilter
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ list_image_info
+ CMakeProjectManager.CMakeRunConfiguration.list_image_info
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ display_projdata
+ CMakeProjectManager.CMakeRunConfiguration.display_projdata
+/home/nikos/Workspace/src/STIR/src/utilities/
+ sim_SSino_f1g1d0b0.hs
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+ /home/nikos/Desktop/tmp/
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ do_linear_regression
+ CMakeProjectManager.CMakeRunConfiguration.do_linear_regression
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ create_projdata_template
+ CMakeProjectManager.CMakeRunConfiguration.create_projdata_template
+/home/nikos/Workspace/src/STIR/src/utilities/
+ tmpl_scanner
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+ /home/nikos/Desktop/cur_Active/XCAT_Test_Short/
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ SSRB
+ CMakeProjectManager.CMakeRunConfiguration.SSRB
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ list_ROI_values
+ CMakeProjectManager.CMakeRunConfiguration.list_ROI_values
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ poisson_noise
+ CMakeProjectManager.CMakeRunConfiguration.poisson_noise
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ apply_normfactors3D
+ CMakeProjectManager.CMakeRunConfiguration.apply_normfactors3D
+/home/nikos/Workspace/src/STIR/src/utilities/
+ norm_sino norm ones.hs 0 3 3 1 1 0 0
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+ /home/nikos/Desktop/cur_Active/York/norm/
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ attenuation_coefficients_to_projections
+ CMakeProjectManager.CMakeRunConfiguration.attenuation_coefficients_to_projections
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ manip_projdata
+ CMakeProjectManager.CMakeRunConfiguration.manip_projdata
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ get_time_frame_info
+ CMakeProjectManager.CMakeRunConfiguration.get_time_frame_info
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ generate_image
+ CMakeProjectManager.CMakeRunConfiguration.generate_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ zoom_image
+ CMakeProjectManager.CMakeRunConfiguration.zoom_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ abs_image
+ CMakeProjectManager.CMakeRunConfiguration.abs_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_interfile_to_gipl
+ CMakeProjectManager.CMakeRunConfiguration.conv_interfile_to_gipl
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ convert_to_binary_image
+ CMakeProjectManager.CMakeRunConfiguration.convert_to_binary_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ construct_randoms_from_singles
+ CMakeProjectManager.CMakeRunConfiguration.construct_randoms_from_singles
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ apply_normfactors
+ CMakeProjectManager.CMakeRunConfiguration.apply_normfactors
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ warp_image
+ CMakeProjectManager.CMakeRunConfiguration.warp_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ rebin_projdata
+ CMakeProjectManager.CMakeRunConfiguration.rebin_projdata
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ write_proj_matrix_by_bin
+ CMakeProjectManager.CMakeRunConfiguration.write_proj_matrix_by_bin
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_gipl_to_interfile
+ CMakeProjectManager.CMakeRunConfiguration.conv_gipl_to_interfile
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ shift_image
+ CMakeProjectManager.CMakeRunConfiguration.shift_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ back_project
+ CMakeProjectManager.CMakeRunConfiguration.back_project
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_GATE_raw_ECAT_projdata_to_interfile
+ CMakeProjectManager.CMakeRunConfiguration.conv_GATE_raw_ECAT_projdata_to_interfile
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ estimate_scatter
+ CMakeProjectManager.CMakeRunConfiguration.estimate_scatter
+/home/nikos/Workspace/src/STIR/src/scatter_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/scatter_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ create_tail_mask_from_ACFs
+ CMakeProjectManager.CMakeRunConfiguration.create_tail_mask_from_ACFs
+/home/nikos/Workspace/src/STIR/src/scatter_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/scatter_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ upsample_and_fit_single_scatter
+ CMakeProjectManager.CMakeRunConfiguration.upsample_and_fit_single_scatter
+/home/nikos/Workspace/src/STIR/src/scatter_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/scatter_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ mult_image_parameters
+ CMakeProjectManager.CMakeRunConfiguration.mult_image_parameters
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/modelling_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ warp_and_accumulate_gated_images
+ CMakeProjectManager.CMakeRunConfiguration.warp_and_accumulate_gated_images
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ get_dynamic_images_from_parametric_images
+ CMakeProjectManager.CMakeRunConfiguration.get_dynamic_images_from_parametric_images
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/modelling_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ extract_single_images_from_dynamic_image
+ CMakeProjectManager.CMakeRunConfiguration.extract_single_images_from_dynamic_image
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/modelling_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ apply_patlak_to_images
+ CMakeProjectManager.CMakeRunConfiguration.apply_patlak_to_images
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/modelling_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ make_parametric_image_from_components
+ CMakeProjectManager.CMakeRunConfiguration.make_parametric_image_from_components
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/modelling_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ mult_model_with_dyn_images
+ CMakeProjectManager.CMakeRunConfiguration.mult_model_with_dyn_images
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/modelling_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ write_patlak_matrix
+ CMakeProjectManager.CMakeRunConfiguration.write_patlak_matrix
+/home/nikos/Workspace/src/STIR/src/modelling_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/modelling_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ lm_to_projdata_bootstrap
+ CMakeProjectManager.CMakeRunConfiguration.lm_to_projdata_bootstrap
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/listmode_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ lm_to_projdata
+ CMakeProjectManager.CMakeRunConfiguration.lm_to_projdata
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+ lm_to_projdata.par
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+ /home/nikos/Desktop/cur_Active/XCAT_Test_Short/
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/listmode_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ lm_fansums
+ CMakeProjectManager.CMakeRunConfiguration.lm_fansums
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/listmode_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ list_lm_events
+ CMakeProjectManager.CMakeRunConfiguration.list_lm_events
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/listmode_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ find_maxima_in_image
+ CMakeProjectManager.CMakeRunConfiguration.find_maxima_in_image
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ list_lm_countrates
+ CMakeProjectManager.CMakeRunConfiguration.list_lm_countrates
+/home/nikos/Workspace/src/STIR/src/listmode_utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/listmode_utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ FBP2D
+ CMakeProjectManager.CMakeRunConfiguration.FBP2D
+/home/nikos/Workspace/src/STIR/src/analytic/FBP2D/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/analytic/FBP2D
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ FBP3DRP
+ CMakeProjectManager.CMakeRunConfiguration.FBP3DRP
+/home/nikos/Workspace/src/STIR/src/analytic/FBP3DRP/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/analytic/FBP3DRP
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ OSMAPOSL
+ CMakeProjectManager.CMakeRunConfiguration.OSMAPOSL
+/home/nikos/Workspace/src/STIR/src/iterative/OSMAPOSL/
+ OSMAPOSL_test_lm.par
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+ /home/nikos/Desktop/tmp/
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/iterative/OSMAPOSL
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ OSSPS
+ CMakeProjectManager.CMakeRunConfiguration.OSSPS
+/home/nikos/Workspace/src/STIR/src/iterative/OSSPS/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/iterative/OSSPS
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ POSMAPOSL
+ CMakeProjectManager.CMakeRunConfiguration.POSMAPOSL
+/home/nikos/Workspace/src/STIR/src/iterative/POSMAPOSL/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/iterative/POSMAPOSL
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ POSSPS
+ CMakeProjectManager.CMakeRunConfiguration.POSSPS
+/home/nikos/Workspace/src/STIR/src/iterative/POSSPS/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/iterative/POSSPS
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_to_SimSET_att_image
+ CMakeProjectManager.CMakeRunConfiguration.conv_to_SimSET_att_image
+/home/nikos/Workspace/src/STIR/src/SimSET/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/SimSET
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ write_phg_image_info
+ CMakeProjectManager.CMakeRunConfiguration.write_phg_image_info
+/home/nikos/Workspace/src/STIR/src/SimSET/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/SimSET
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ conv_SimSET_projdata_to_STIR
+ CMakeProjectManager.CMakeRunConfiguration.conv_SimSET_projdata_to_STIR
+/home/nikos/Workspace/src/STIR/src/SimSET/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/SimSET
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ stir_write_pgm
+ CMakeProjectManager.CMakeRunConfiguration.stir_write_pgm
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_DataSymmetriesForBins_PET_CartesianGrid
+ CMakeProjectManager.CMakeRunConfiguration.test_DataSymmetriesForBins_PET_CartesianGrid
+/home/nikos/Workspace/src/STIR/src/recon_test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/recon_test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_PoissonLogLikelihoodWithLinearModelForMeanAndProjData
+ CMakeProjectManager.CMakeRunConfiguration.test_PoissonLogLikelihoodWithLinearModelForMeanAndProjData
+/home/nikos/Workspace/src/STIR/src/recon_test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/recon_test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ fwdtest
+ CMakeProjectManager.CMakeRunConfiguration.fwdtest
+/home/nikos/Workspace/src/STIR/src/recon_test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/recon_test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ bcktest
+ CMakeProjectManager.CMakeRunConfiguration.bcktest
+/home/nikos/Workspace/src/STIR/src/recon_test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/recon_test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ recontest
+ CMakeProjectManager.CMakeRunConfiguration.recontest
+/home/nikos/Workspace/src/STIR/src/recon_test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/recon_test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_display
+ CMakeProjectManager.CMakeRunConfiguration.test_display
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_linear_regression
+ CMakeProjectManager.CMakeRunConfiguration.test_linear_regression
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_filename_functions
+ CMakeProjectManager.CMakeRunConfiguration.test_filename_functions
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_interpolate
+ CMakeProjectManager.CMakeRunConfiguration.test_interpolate
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_Array
+ CMakeProjectManager.CMakeRunConfiguration.test_Array
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ forward_project
+ CMakeProjectManager.CMakeRunConfiguration.forward_project
+/home/nikos/Workspace/src/STIR/src/utilities/
+ forward_model norm_im.hv tmpl_scanner.hs
+ 3768
+ false
+ true
+ false
+ false
+ true
+ true
+ /home/nikos/Desktop/cur_Active/York/norm/
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_stir_math
+ CMakeProjectManager.CMakeRunConfiguration.test_stir_math
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_IO_ITKMulticomponent
+ CMakeProjectManager.CMakeRunConfiguration.test_IO_ITKMulticomponent
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_IO_ParametricDiscretisedDensity
+ CMakeProjectManager.CMakeRunConfiguration.test_IO_ParametricDiscretisedDensity
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_warp_image
+ CMakeProjectManager.CMakeRunConfiguration.test_warp_image
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_IO_DynamicDiscretisedDensity
+ CMakeProjectManager.CMakeRunConfiguration.test_IO_DynamicDiscretisedDensity
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_OutputFileFormat
+ CMakeProjectManager.CMakeRunConfiguration.test_OutputFileFormat
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_DynamicDiscretisedDensity
+ CMakeProjectManager.CMakeRunConfiguration.test_DynamicDiscretisedDensity
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_IO_DiscretisedDensity
+ CMakeProjectManager.CMakeRunConfiguration.test_IO_DiscretisedDensity
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_VectorWithOffset
+ CMakeProjectManager.CMakeRunConfiguration.test_VectorWithOffset
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_IndexRange
+ CMakeProjectManager.CMakeRunConfiguration.test_IndexRange
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ find_ML_normfactors
+ CMakeProjectManager.CMakeRunConfiguration.find_ML_normfactors
+/home/nikos/Workspace/src/STIR/src/utilities/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/utilities
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_ArcCorrection
+ CMakeProjectManager.CMakeRunConfiguration.test_ArcCorrection
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_coordinates
+ CMakeProjectManager.CMakeRunConfiguration.test_coordinates
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_Scanner
+ CMakeProjectManager.CMakeRunConfiguration.test_Scanner
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_VoxelsOnCartesianGrid
+ CMakeProjectManager.CMakeRunConfiguration.test_VoxelsOnCartesianGrid
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_ROIs
+ CMakeProjectManager.CMakeRunConfiguration.test_ROIs
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_ArrayFilter
+ CMakeProjectManager.CMakeRunConfiguration.test_ArrayFilter
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_ByteOrder
+ CMakeProjectManager.CMakeRunConfiguration.test_ByteOrder
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_zoom_image
+ CMakeProjectManager.CMakeRunConfiguration.test_zoom_image
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_find_fwhm_in_image
+ CMakeProjectManager.CMakeRunConfiguration.test_find_fwhm_in_image
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+
+ dwarf
+
+ cpu-cycles
+
+
+ 250
+ -F
+ true
+ 4096
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ kcachegrind
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+
+ test_proj_data_info
+ CMakeProjectManager.CMakeRunConfiguration.test_proj_data_info
+/home/nikos/Workspace/src/STIR/src/test/
+
+ 3768
+ false
+ true
+ false
+ false
+ true
+
+ /home/nikos/Workspace/src/build-STIR-Desktop-Debug/src/test
+
+ 136
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 21
+
+
+ Version
+ 21
+
+
diff --git a/documentation/devel/README.md b/documentation/devel/README.md
new file mode 100644
index 0000000000..f3226412f6
--- /dev/null
+++ b/documentation/devel/README.md
@@ -0,0 +1,8 @@
+# Information specific for developers
+
+Please check files here for information/code practices for developers.
+
+- Do read our [contribution guidelines](../../CONTRIBUTING.md)
+- Set your editor settings appropriately: [instructions](editor-settings.md)
+- Install git hooks for serious development: [instructions](git-hooks.md)
+- Read the documentation, including the STIR developers guide
\ No newline at end of file
diff --git a/documentation/devel/editor-settings.md b/documentation/devel/editor-settings.md
new file mode 100644
index 0000000000..999f00a84d
--- /dev/null
+++ b/documentation/devel/editor-settings.md
@@ -0,0 +1,5 @@
+# Developer documentation: editor settings
+
+White-spaces and indentation with multiple developers are a pain. Please adhere to
+our white-space policy, which we try to enforce via [clang-format](https://clang.llvm.org/docs/ClangFormat.html).
+Check that site for integration with your editor/IDE.
diff --git a/documentation/devel/git-hooks.md b/documentation/devel/git-hooks.md
new file mode 100644
index 0000000000..28ec3a5d86
--- /dev/null
+++ b/documentation/devel/git-hooks.md
@@ -0,0 +1,28 @@
+# Developer documentation: how to install (software for) git hooks
+
+You first need to have Python and pip
+
+## Install [pre-commit](https://pre-commit.com)
+See https://pre-commit.com/#install but the following might work.
+
+ pip install pre-commit
+
+If this fails with a permission error, try adding `--user` to the command.
+
+If that fails with a message about `PyYAML` and `distutils`, try
+
+ pip install --ignore-installed PyYAML
+
+## Install clang-format
+### debian/Ubuntu
+ sudo apt install clang-format
+### MacOS
+ brew install clang-format
+### Others
+search the internet and tell us
+
+## Enable pre-commit hooks
+```sh
+cd /whereever/STIR
+pre-commit install
+```
diff --git a/examples/C++/General_Reconstruction/General_Reconstruction.cxx b/examples/C++/General_Reconstruction/General_Reconstruction.cxx
index 277dc792ff..d24605ce04 100644
--- a/examples/C++/General_Reconstruction/General_Reconstruction.cxx
+++ b/examples/C++/General_Reconstruction/General_Reconstruction.cxx
@@ -5,53 +5,40 @@
#include
START_NAMESPACE_STIR
-General_Reconstruction::
-General_Reconstruction()
-{
- this->set_defaults();
-}
+General_Reconstruction::General_Reconstruction() { this->set_defaults(); }
void
-General_Reconstruction::set_defaults()
-{
-
-}
+General_Reconstruction::set_defaults() {}
void
-General_Reconstruction::initialise_keymap()
-{
- this->parser.add_start_key("General reconstruction");
- this->parser.add_stop_key("End General reconstruction");
+General_Reconstruction::initialise_keymap() {
+ this->parser.add_start_key("General reconstruction");
+ this->parser.add_stop_key("End General reconstruction");
- this->parser.add_parsing_key("reconstruction method", &this->reconstruction_method_sptr);
+ this->parser.add_parsing_key("reconstruction method", &this->reconstruction_method_sptr);
}
bool
-General_Reconstruction::post_processing()
-{
- return false;
+General_Reconstruction::post_processing() {
+ return false;
}
Succeeded
-General_Reconstruction::process_data()
-{
- HighResWallClockTimer t;
- t.reset();
- t.start();
-
- //return reconstruction_object.reconstruct() == Succeeded::yes ?
- // EXIT_SUCCESS : EXIT_FAILURE;
- if (reconstruction_method_sptr->reconstruct() == Succeeded::yes)
- {
- t.stop();
- std::cout << "Total Wall clock time: " << t.value() << " seconds" << std::endl;
- return Succeeded::yes;
- }
- else
- {
- t.stop();
- return Succeeded::no;
- }
+General_Reconstruction::process_data() {
+ HighResWallClockTimer t;
+ t.reset();
+ t.start();
+
+ // return reconstruction_object.reconstruct() == Succeeded::yes ?
+ // EXIT_SUCCESS : EXIT_FAILURE;
+ if (reconstruction_method_sptr->reconstruct() == Succeeded::yes) {
+ t.stop();
+ std::cout << "Total Wall clock time: " << t.value() << " seconds" << std::endl;
+ return Succeeded::yes;
+ } else {
+ t.stop();
+ return Succeeded::no;
+ }
}
END_NAMESPACE_STIR
diff --git a/examples/C++/General_Reconstruction/General_Reconstruction.h b/examples/C++/General_Reconstruction/General_Reconstruction.h
index a97321c60a..f2da886158 100644
--- a/examples/C++/General_Reconstruction/General_Reconstruction.h
+++ b/examples/C++/General_Reconstruction/General_Reconstruction.h
@@ -16,31 +16,26 @@
#include "stir/CartesianCoordinate3D.h"
#include "Reconstruction.h"
-
START_NAMESPACE_STIR
class Succeeded;
-class General_Reconstruction : public ParsingObject
-{
+class General_Reconstruction : public ParsingObject {
public:
- //!
- //! \brief General_Reconstuction
- //! \details Default constructor
- General_Reconstruction();
+ //!
+ //! \brief General_Reconstuction
+ //! \details Default constructor
+ General_Reconstruction();
- virtual Succeeded process_data();
-protected:
+ virtual Succeeded process_data();
- void set_defaults();
- void initialise_keymap();
- bool post_processing();
+protected:
+ void set_defaults();
+ void initialise_keymap();
+ bool post_processing();
private:
-
- shared_ptr < Reconstruction < DiscretisedDensity < 3, float > > >
- reconstruction_method_sptr;
-
+ shared_ptr>> reconstruction_method_sptr;
};
END_NAMESPACE_STIR
diff --git a/examples/C++/src/demo1.cxx b/examples/C++/src/demo1.cxx
index 8b9a10168d..ed91da07d9 100644
--- a/examples/C++/src/demo1.cxx
+++ b/examples/C++/src/demo1.cxx
@@ -6,20 +6,20 @@
\brief A simple program that backprojects some projection data.
It illustrates
- - basic interaction with the user,
- - reading of images and projection data
- - construction of a specified type of back-projector,
- - how to use back-project all projection data
- - output of images
+ - basic interaction with the user,
+ - reading of images and projection data
+ - construction of a specified type of back-projector,
+ - how to use back-project all projection data
+ - output of images
See README.txt in the directory where this file is located.
- \author Kris Thielemans
+ \author Kris Thielemans
*/
/*
Copyright (C) 2004- 2011, Hammersmith Imanet Ltd
- This software is distributed under the terms
+ This software is distributed under the terms
of the GNU General Public Licence (GPL)
See STIR/LICENSE.txt for details
*/
@@ -33,25 +33,20 @@
#include "stir/utilities.h"
#include "stir/Succeeded.h"
-int main()
-{
+int
+main() {
using namespace stir;
-
+
/////////////// input sinogram
- const std::string input_filename =
- ask_filename_with_extension("Input file",".hs");
+ const std::string input_filename = ask_filename_with_extension("Input file", ".hs");
- shared_ptr
- proj_data_sptr(ProjData::read_from_file(input_filename));
- shared_ptr
- proj_data_info_sptr(proj_data_sptr->get_proj_data_info_sptr()->clone());
+ shared_ptr proj_data_sptr(ProjData::read_from_file(input_filename));
+ shared_ptr proj_data_info_sptr(proj_data_sptr->get_proj_data_info_sptr()->clone());
/////////////// template image (for sizes etc)
- const std::string template_filename =
- ask_filename_with_extension("Template image file",".hv");
+ const std::string template_filename = ask_filename_with_extension("Template image file", ".hv");
- shared_ptr >
- density_sptr(read_from_file >(template_filename));
+ shared_ptr> density_sptr(read_from_file>(template_filename));
density_sptr->fill(0);
diff --git a/examples/C++/src/demo2.cxx b/examples/C++/src/demo2.cxx
index 028122ef07..4c9f367dd6 100644
--- a/examples/C++/src/demo2.cxx
+++ b/examples/C++/src/demo2.cxx
@@ -4,23 +4,23 @@
\file
\ingroup examples
\brief A small modification of demo1.cxx to ask the user for the
- back projector she wants to use.
+ back projector she wants to use.
It illustrates
- - how to ask the user for objects for which different types
- exist (e.g. back-projector, forward-projectors, image processors
- etc), anything based on the RegisteredObject hierarchy.
- - that STIR is able to select basic processing units at run-time
- - how to use the (very) basic display facilities in STIR
+ - how to ask the user for objects for which different types
+ exist (e.g. back-projector, forward-projectors, image processors
+ etc), anything based on the RegisteredObject hierarchy.
+ - that STIR is able to select basic processing units at run-time
+ - how to use the (very) basic display facilities in STIR
See README.txt in the directory where this file is located.
- \author Kris Thielemans
+ \author Kris Thielemans
*/
/*
Copyright (C) 2004- 2012, Hammersmith Imanet Ltd
- This software is distributed under the terms
+ This software is distributed under the terms
of the GNU General Public Licence (GPL)
See STIR/LICENSE.txt for details
*/
@@ -34,31 +34,25 @@
#include "stir/Succeeded.h"
#include "stir/display.h"
-int main()
-{
+int
+main() {
using namespace stir;
-
+
/////////////// input sinogram
- const std::string input_filename =
- ask_filename_with_extension("Input file",".hs");
+ const std::string input_filename = ask_filename_with_extension("Input file", ".hs");
- shared_ptr
- proj_data_sptr(ProjData::read_from_file(input_filename));
- shared_ptr
- proj_data_info_sptr(proj_data_sptr->get_proj_data_info_sptr()->clone());
+ shared_ptr proj_data_sptr(ProjData::read_from_file(input_filename));
+ shared_ptr proj_data_info_sptr(proj_data_sptr->get_proj_data_info_sptr()->clone());
/////////////// template image (for sizes etc)
- const std::string template_filename =
- ask_filename_with_extension("Template image file",".hv");
+ const std::string template_filename = ask_filename_with_extension("Template image file", ".hv");
- shared_ptr >
- density_sptr(read_from_file >(template_filename));
+ shared_ptr> density_sptr(read_from_file>(template_filename));
density_sptr->fill(0);
/////////////// back project
- shared_ptr back_projector_sptr
- (BackProjectorByBin::ask_type_and_parameters());
+ shared_ptr back_projector_sptr(BackProjectorByBin::ask_type_and_parameters());
back_projector_sptr->set_up(proj_data_info_sptr, density_sptr);
diff --git a/examples/C++/src/demo3.cxx b/examples/C++/src/demo3.cxx
index 3ae745d11f..989d9b3bd4 100644
--- a/examples/C++/src/demo3.cxx
+++ b/examples/C++/src/demo3.cxx
@@ -6,10 +6,10 @@
\brief A modification of demo2.cxx that parses all parameters from a parameter file.
It illustrates
- - basic class derivation principles
- - how to use ParsingObject to have automatic capabilities of parsing
- parameters files (and interactive questions to the user)
- - how most STIR programs parse the parameter files.
+ - basic class derivation principles
+ - how to use ParsingObject to have automatic capabilities of parsing
+ parameters files (and interactive questions to the user)
+ - how most STIR programs parse the parameter files.
Note that the same functionality could be provided without deriving
a new class from ParsingObject. One could have a KeyParser object
@@ -17,12 +17,12 @@
See README.txt in the directory where this file is located.
- \author Kris Thielemans
+ \author Kris Thielemans
*/
/*
Copyright (C) 2004- 2012, Hammersmith Imanet Ltd
- This software is distributed under the terms
+ This software is distributed under the terms
of the GNU General Public Licence (GPL)
See STIR/LICENSE.txt for details
*/
@@ -38,29 +38,27 @@
namespace stir {
-class MyStuff: public ParsingObject
-{
+class MyStuff : public ParsingObject {
public:
void set_defaults();
void initialise_keymap();
void run();
+
private:
std::string input_filename;
std::string template_filename;
shared_ptr back_projector_sptr;
- shared_ptr > > output_file_format_sptr;
+ shared_ptr>> output_file_format_sptr;
};
void
-MyStuff::set_defaults()
-{
+MyStuff::set_defaults() {
back_projector_sptr.reset(new BackProjectorByBinUsingInterpolation);
- output_file_format_sptr = OutputFileFormat >::default_sptr();
+ output_file_format_sptr = OutputFileFormat>::default_sptr();
}
-void
-MyStuff::initialise_keymap()
-{
+void
+MyStuff::initialise_keymap() {
parser.add_start_key("MyStuff parameters");
parser.add_key("input file", &input_filename);
parser.add_key("template image file", &template_filename);
@@ -70,16 +68,12 @@ MyStuff::initialise_keymap()
}
void
-MyStuff::run()
-{
+MyStuff::run() {
- shared_ptr
- proj_data_sptr(ProjData::read_from_file(input_filename));
- shared_ptr
- proj_data_info_sptr(proj_data_sptr->get_proj_data_info_sptr()->clone());
+ shared_ptr proj_data_sptr(ProjData::read_from_file(input_filename));
+ shared_ptr proj_data_info_sptr(proj_data_sptr->get_proj_data_info_sptr()->clone());
- shared_ptr >
- density_sptr(read_from_file >(template_filename));
+ shared_ptr> density_sptr(read_from_file>(template_filename));
density_sptr->fill(0);
@@ -94,20 +88,19 @@ MyStuff::run()
display(*density_sptr, density_sptr->find_max(), "Output");
}
-}// end of namespace stir
+} // end of namespace stir
-int main(int argc, char **argv)
-{
+int
+main(int argc, char** argv) {
using namespace stir;
- if (argc!=2)
- {
- std::cerr << "Normal usage: " << argv[0] << " parameter-file\n";
- std::cerr << "I will now ask you the questions interactively\n";
- }
+ if (argc != 2) {
+ std::cerr << "Normal usage: " << argv[0] << " parameter-file\n";
+ std::cerr << "I will now ask you the questions interactively\n";
+ }
MyStuff my_stuff;
my_stuff.set_defaults();
- if (argc!=2)
+ if (argc != 2)
my_stuff.ask_parameters();
else
my_stuff.parse(argv[1]);
diff --git a/examples/PET_simulation/generate_input_data.sh b/examples/PET_simulation/generate_input_data.sh
index aaf4790307..ab83aa01c8 100755
--- a/examples/PET_simulation/generate_input_data.sh
+++ b/examples/PET_simulation/generate_input_data.sh
@@ -49,6 +49,7 @@ template_sino=my_DSTE_3D_rd1_template.hs
cat > my_input.txt < target_type;
+ typedef DiscretisedDensity<3, float> target_type;
protected:
- shared_ptr > objective_function_sptr;
+ shared_ptr> objective_function_sptr;
private:
std::string input_filename;
std::string image_filename;
int num_iterations;
float step_size;
- shared_ptr > > output_file_format_sptr;
+ shared_ptr>> output_file_format_sptr;
void initialise_keymap();
bool post_processing();
};
-MyStuff::MyStuff()
-{
- set_defaults();
-}
+MyStuff::MyStuff() { set_defaults(); }
void
-MyStuff::set_defaults()
-{
+MyStuff::set_defaults() {
objective_function_sptr.reset(new PoissonLogLikelihoodWithLinearModelForMeanAndProjData);
- output_file_format_sptr = OutputFileFormat >::default_sptr();
+ output_file_format_sptr = OutputFileFormat>::default_sptr();
num_iterations = 10;
step_size = 0.001;
}
-void
-MyStuff::initialise_keymap()
-{
+void
+MyStuff::initialise_keymap() {
parser.add_start_key("MyStuff parameters");
parser.add_key("input file", &input_filename);
parser.add_key("image filename", &image_filename);
@@ -85,27 +79,22 @@ MyStuff::initialise_keymap()
parser.add_stop_key("End");
}
-bool MyStuff::
-post_processing()
-{
- if (is_null_ptr(this->objective_function_sptr))
- {
- error("objective_function_sptr is null");
- return true;
+bool
+MyStuff::post_processing() {
+ if (is_null_ptr(this->objective_function_sptr)) {
+ error("objective_function_sptr is null");
+ return true;
}
return false;
}
void
-MyStuff::run()
-{
+MyStuff::run() {
/////// load initial density from file
- shared_ptr >
- density_sptr(read_from_file >(image_filename));
+ shared_ptr> density_sptr(read_from_file>(image_filename));
//////// gradient it copied Density filled with 0's
- shared_ptr >
- gradient_sptr(density_sptr->get_empty_copy());
+ shared_ptr> gradient_sptr(density_sptr->get_empty_copy());
/////// setup objective function object
objective_function_sptr->set_up(density_sptr);
@@ -132,25 +121,24 @@ MyStuff::run()
/////// Return the objective function values and improvement
std::cout << "The initial Objective Function Value = " << my_objective_function_value1 << "\n";
- std::cout << "The Objective Function Value of after " << num_iterations << " iteration(s) ="
- << my_objective_function_value2 << "\n";
+ std::cout << "The Objective Function Value of after " << num_iterations << " iteration(s) =" << my_objective_function_value2
+ << "\n";
std::cout << "A change of " << my_objective_function_value2 - my_objective_function_value1 << "\n";
}
-}// end of namespace stir
+} // end of namespace stir
-int main(int argc, char **argv)
-{
+int
+main(int argc, char** argv) {
using namespace stir;
- if (argc!=2)
- {
- std::cerr << "Normal usage: " << argv[0] << " parameter-file\n";
- std::cerr << "I will now ask you the questions interactively\n";
- }
+ if (argc != 2) {
+ std::cerr << "Normal usage: " << argv[0] << " parameter-file\n";
+ std::cerr << "I will now ask you the questions interactively\n";
+ }
MyStuff my_stuff;
my_stuff.set_defaults();
- if (argc!=2)
+ if (argc != 2)
my_stuff.ask_parameters();
else
my_stuff.parse(argv[1]);
diff --git a/recon_test_pack/OSMAPOSL_test_lmf.par b/recon_test_pack/OSMAPOSL_test_lmf.par
new file mode 100755
index 0000000000..775ae5d047
--- /dev/null
+++ b/recon_test_pack/OSMAPOSL_test_lmf.par
@@ -0,0 +1,38 @@
+OSMAPOSLParameters :=
+objective function type:= PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBin
+PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBin Parameters:=
+ list mode filename := PET_ACQ_small.l.hdr.STIR
+ max ring difference num to process := 2
+ projector pair type := Matrix
+ Projector Pair Using Matrix Parameters :=
+ Matrix type := Ray Tracing
+ Ray tracing matrix parameters :=
+ ; use multiple (almost) parallel LORs for every bin in the sinogram
+ ; to avoid discretisation artefacts
+ number of rays in tangential direction to trace for each bin:= 3
+ ; you could disable some symmetries if you have enough memory
+ ; this would for instance allow you to increase the number of subsets
+ ; do_symmetry_90degrees_min_phi:=0
+ End Ray tracing matrix parameters :=
+ End Projector Pair Using Matrix Parameters :=
+
+ Bin Normalisation type := From ProjData
+ Bin Normalisation From ProjData :=
+ normalisation projdata filename:= my_acfs.hs
+ End Bin Normalisation From ProjData:=
+
+ ;num_events_to_store := 100
+ recompute sensitivity :=1
+ use subset sensitivities:= 0
+ sensitivity filename:= my_sens_t_lm_pr_seg2.hv
+ zoom := 1
+
+additive sinogram := my_MLrandoms_f1.hs
+
+end PoissonLogLikelihoodWithLinearModelForMeanAndListModeDataWithProjMatrixByBin Parameters:=
+enforce initial positivity condition:= 1
+number of subsets:= 1
+number of subiterations:= 1
+save estimates at subiteration intervals:= 1
+output filename prefix := my_output_t_lm_pr_seg2
+END :=
diff --git a/recon_test_pack/Siemens_mMR_seg2.hs b/recon_test_pack/Siemens_mMR_seg2.hs
index f419f744ec..6337e33864 100644
--- a/recon_test_pack/Siemens_mMR_seg2.hs
+++ b/recon_test_pack/Siemens_mMR_seg2.hs
@@ -44,4 +44,6 @@ Number of crystals per singles unit in transaxial direction := 9
end scanner parameters:=
effective central bin size (cm) := 0.208815
number of time frames := 1
+start vertical bed position (mm) := 0
+start horizontal bed position (mm) := 0
!END OF INTERFILE :=
diff --git a/recon_test_pack/lm_generate_atten_cylinder.par b/recon_test_pack/lm_generate_atten_cylinder.par
index 0aa3511bfb..c7227c749c 100644
--- a/recon_test_pack/lm_generate_atten_cylinder.par
+++ b/recon_test_pack/lm_generate_atten_cylinder.par
@@ -1,8 +1,8 @@
generate_image Parameters :=
output filename:=my_atten_image
-X output image size (in pixels):=111
-Y output image size (in pixels):=111
-Z output image size (in pixels):=65
+X output image size (in pixels):=100
+Y output image size (in pixels):=100
+Z output image size (in pixels):=127
X voxel size (in mm):= 3
Y voxel size (in mm):= 3
Z voxel size (in mm) := 0.40625
@@ -16,7 +16,7 @@ Ellipsoidal Cylinder Parameters:=
radius-x (in mm):=100
radius-y (in mm):=100
length-z (in mm):=110
- origin (in mm):={70,10,20}
+ origin (in mm):={70,0,0}
END:=
value := 0.096
diff --git a/recon_test_pack/lm_to_projdata.par b/recon_test_pack/lm_to_projdata.par
old mode 100755
new mode 100644
diff --git a/recon_test_pack/root_header.hroot b/recon_test_pack/root_header.hroot
index f509a4cf52..0e929b2f7b 100644
--- a/recon_test_pack/root_header.hroot
+++ b/recon_test_pack/root_header.hroot
@@ -11,7 +11,11 @@ Default bin size (cm) := 0.208626
Maximum number of non-arc-corrected bins := 344
Default number of arc-corrected bins := 344
View offset (degrees) := 0
+Number of TOF time bins := 410
+Size of timing bin (ps) := 10.00
+Timing resolution (ps) := 400.0
+%TOF mashing factor:= 82
GATE scanner type := GATE_Cylindrical_PET
GATE_Cylindrical_PET Parameters :=
diff --git a/recon_test_pack/run_test_listmode_recon.sh b/recon_test_pack/run_test_listmode_recon.sh
index 7e11805093..0948e5d1f5 100755
--- a/recon_test_pack/run_test_listmode_recon.sh
+++ b/recon_test_pack/run_test_listmode_recon.sh
@@ -78,7 +78,7 @@ ThereWereErrors=0
echo "=== Simulate normalisation data"
# For normalisation data we are going to use a cylinder in the center,
# with water attenuation values
-echo "=== Gnerete fake emission image"
+echo "=== Generate fake emission image"
generate_image lm_generate_atten_cylinder.par
echo "=== Calculate ACFs"
calculate_attenuation_coefficients --ACF my_acfs.hs my_atten_image.hv Siemens_mMR_seg2.hs > my_create_acfs.log 2>&1
diff --git a/recon_test_pack/run_test_simulate_and_recon.sh b/recon_test_pack/run_test_simulate_and_recon.sh
index cb2329481b..9405b3937e 100755
--- a/recon_test_pack/run_test_simulate_and_recon.sh
+++ b/recon_test_pack/run_test_simulate_and_recon.sh
@@ -78,6 +78,7 @@ LC_ALL=C
export LC_ALL
./simulate_PET_data_for_tests.sh
+
if [ $? -ne 0 ]; then
echo "Error running simulation"
exit 1
diff --git a/recon_test_pack/run_test_simulate_and_recon_with_motion.sh b/recon_test_pack/run_test_simulate_and_recon_with_motion.sh
index 64c006b613..9f28d1d198 100755
--- a/recon_test_pack/run_test_simulate_and_recon_with_motion.sh
+++ b/recon_test_pack/run_test_simulate_and_recon_with_motion.sh
@@ -124,7 +124,7 @@ fi
echo "=== create template sinogram (DSTE in 3D with max ring diff 2 to save time)"
template_sino=my_DSTE_3D_rd2_template.hs
cat > my_input.txt <'3.0. If you have
+echo a later version, you might have to update your test pack.
+echo Please check the web site.
+echo
+
+if [ $# -eq 1 ]; then
+ echo "Prepending $1 to your PATH for the duration of this script."
+ PATH=$1:$PATH
+fi
+
+# first need to set this to the C locale, as this is what the STIR utilities use
+# otherwise, awk might interpret floating point numbers incorrectly
+LC_ALL=C
+export LC_ALL
+
+echo "=== create template sinogram. We'll use a test_scanner which is small and
+has TOF info"
+template_sino=my_test_scanner_template.hs
+cat > my_input.txt < my_create_${template_sino}.log 2>&1
+if [ $? -ne 0 ]; then
+ echo "ERROR running create_projdata_template. Check my_create_${template_sino}.log"; exit 1;
+fi
+
+export INPUT_ROOT_FILE=test_PET_GATE.root
+export EXCLUDE_RANDOM=1
+export EXCLUDE_SCATTERED=1
+
+INPUT=root_header.hroot TEMPLATE=$template_sino OUT_PROJDATA_FILE=my_tof_sinogram lm_to_projdata --test_timing_positions lm_to_projdata.par > my_write_TOF_values_${template_sino}.log 2>&1
+
+if [ $? -ne 0 ]; then
+ echo "ERROR running lm_to_projdata --test_timing_positions. Check my_write_TOF_values_${template_sino}.log"; exit 1;
+fi
+
+echo "Comparing values in TOF sinogram ..."
+list_projdata_info --all my_tof_sinogram_f179g1d0b0.hs > my_sino_values_$template_sino.log 2>&1
+if [ $? -ne 0 ]; then
+ echo "ERROR running list_projdata_info. Check my_sino_values_$template_sino.log";
+ exit 1;
+fi
+
+
+TOF_bins=$(grep 'Total number of timing positions' my_sino_values_$template_sino.log | awk -F ':' '{ print $2 }')
+echo "Total number of TOF bins:" $TOF_bins
+
+Timming_Locations=$(grep 'Timing location' my_sino_values_$template_sino.log | awk -F ':' '{ print $2 }')
+echo "Timming_Locations:" $Timming_Locations
+
+Data_mins=$(grep 'Data min' my_sino_values_$template_sino.log | awk -F ':' '{ print $2 }')
+echo "Data mins:" $Data_mins
+
+Data_maxs=$(grep 'Data max' my_sino_values_$template_sino.log | awk -F ':' '{ print $2 }')
+echo "Data maxs:" $Data_maxs
+
+for i in $(seq 5)
+do
+ if [ $(( $((i-1 - TOF_bins/2)) - Data_mins[i])) -ne 0 ]; then
+ echo "Wrong values in TOF sinogram. Error. $(( $(($((i-1)) -TOF_bins/2)) - Data_mins[i]))"
+ exit 1
+ fi
+done
+
+
+echo
+echo '--------------- End of Time-Of-Flight tests -------------'
+echo
+echo "Everything seems to be fine !"
+echo 'You could remove all generated files using "rm -f my_* *.log"'
+exit 0
+
diff --git a/recon_test_pack/run_test_zoom_image.sh b/recon_test_pack/run_test_zoom_image.sh
index 9613e5296e..0233aaeffb 100755
--- a/recon_test_pack/run_test_zoom_image.sh
+++ b/recon_test_pack/run_test_zoom_image.sh
@@ -156,6 +156,7 @@ template_sino=my_DSTE_3D_rd2_template.hs
cat > my_input.txt < my_input.txt < scanner_ptr (
- Scanner::get_scanner_from_name(default_scanner_name));
+ shared_ptr scanner_ptr(Scanner::get_scanner_from_name(default_scanner_name));
- if (find_ECAT_system_type(*scanner_ptr)==0)
- {
- warning("ECAT6OutputFileFormat: default_scanner_name %s is not supported\n",
- default_scanner_name.c_str());
- return true;
- }
+ if (find_ECAT_system_type(*scanner_ptr) == 0) {
+ warning("ECAT6OutputFileFormat: default_scanner_name %s is not supported\n", default_scanner_name.c_str());
+ return true;
+ }
return false;
}
-NumericType
-ECAT6OutputFileFormat::
-set_type_of_numbers(const NumericType& new_type, const bool warn)
-{
- const NumericType supported_type_of_numbers =
- NumericType("signed integer", 2);
- if (new_type != supported_type_of_numbers)
- {
+NumericType
+ECAT6OutputFileFormat::set_type_of_numbers(const NumericType& new_type, const bool warn) {
+ const NumericType supported_type_of_numbers = NumericType("signed integer", 2);
+ if (new_type != supported_type_of_numbers) {
if (warn)
warning("ECAT6OutputFileFormat: output type of numbers is currently fixed to short (2 byte signed integers)\n");
type_of_numbers = supported_type_of_numbers;
- }
- else
+ } else
type_of_numbers = new_type;
return type_of_numbers;
-
}
-ByteOrder
-ECAT6OutputFileFormat::
-set_byte_order(const ByteOrder& new_byte_order, const bool warn)
-{
- if (new_byte_order != ByteOrder::little_endian)
- {
+ByteOrder
+ECAT6OutputFileFormat::set_byte_order(const ByteOrder& new_byte_order, const bool warn) {
+ if (new_byte_order != ByteOrder::little_endian) {
if (warn)
warning("ECAT6OutputFileFormat: byte_order is currently fixed to little-endian\n");
file_byte_order = ByteOrder::little_endian;
- }
- else
+ } else
file_byte_order = new_byte_order;
return file_byte_order;
}
-Succeeded
-ECAT6OutputFileFormat::
-actual_write_to_file(std::string& filename,
- const DiscretisedDensity<3,float>& density) const
-{
- shared_ptr scanner_ptr(
- Scanner::get_scanner_from_name(default_scanner_name));
-
+Succeeded
+ECAT6OutputFileFormat::actual_write_to_file(std::string& filename, const DiscretisedDensity<3, float>& density) const {
+ shared_ptr scanner_ptr(Scanner::get_scanner_from_name(default_scanner_name));
+
add_extension(filename, ".img");
ECAT6_Main_header mhead;
make_ECAT6_Main_header(mhead, *scanner_ptr, "", density);
mhead.num_frames = 1;
-
- FILE *fptr= cti_create (filename.c_str(), &mhead);
- if (fptr == NULL)
- {
- warning("ECAT6OutputFileFormat::write_to_file: error opening output file %s\n",
- filename.c_str());
+
+ FILE* fptr = cti_create(filename.c_str(), &mhead);
+ if (fptr == NULL) {
+ warning("ECAT6OutputFileFormat::write_to_file: error opening output file %s\n", filename.c_str());
return Succeeded::no;
}
- Succeeded success =
- DiscretisedDensity_to_ECAT6(fptr,
- density,
- mhead,
- 1 /*frame_num*/);
+ Succeeded success = DiscretisedDensity_to_ECAT6(fptr, density, mhead, 1 /*frame_num*/);
fclose(fptr);
-
+
return success;
}
END_NAMESPACE_ECAT6
END_NAMESPACE_ECAT
END_NAMESPACE_STIR
-
-
diff --git a/src/IO/ECAT7DynamicDiscretisedDensityInputFileFormat.cxx b/src/IO/ECAT7DynamicDiscretisedDensityInputFileFormat.cxx
index 8f8449b5a0..b2f8ff1cf4 100644
--- a/src/IO/ECAT7DynamicDiscretisedDensityInputFileFormat.cxx
+++ b/src/IO/ECAT7DynamicDiscretisedDensityInputFileFormat.cxx
@@ -34,9 +34,8 @@
#include
#include
-
#ifndef HAVE_LLN_MATRIX
-#error HAVE_LLN_MATRIX not defined: you need the lln ecat library.
+# error HAVE_LLN_MATRIX not defined: you need the lln ecat library.
#endif
#include "stir/IO/stir_ecat7.h"
@@ -49,11 +48,8 @@ START_NAMESPACE_ECAT7
\preliminary
*/
-bool
-ECAT7DynamicDiscretisedDensityInputFileFormat::
-actual_can_read(const FileSignature& signature,
- std::istream& input) const
-{
+bool
+ECAT7DynamicDiscretisedDensityInputFileFormat::actual_can_read(const FileSignature& signature, std::istream& input) const {
if (strncmp(signature.get_signature(), "MATRIX", 6) != 0)
return false;
@@ -63,70 +59,53 @@ actual_can_read(const FileSignature& signature,
}
unique_ptr
-ECAT7DynamicDiscretisedDensityInputFileFormat::
-read_from_file(std::istream& input) const
-{
- //TODO
- error("read_from_file for ECAT7 with istream not implemented %s:%s. Sorry",
- __FILE__, __LINE__);
- return
- unique_ptr();
+ECAT7DynamicDiscretisedDensityInputFileFormat::read_from_file(std::istream& input) const {
+ // TODO
+ error("read_from_file for ECAT7 with istream not implemented %s:%s. Sorry", __FILE__, __LINE__);
+ return unique_ptr();
}
unique_ptr
-ECAT7DynamicDiscretisedDensityInputFileFormat::
-read_from_file(const std::string& filename) const
-{
- if (is_ECAT7_image_file(filename))
- {
- Main_header mhead;
- if (read_ECAT7_main_header(mhead, filename) == Succeeded::no)
- {
- error("ECAT7DynamicDiscretisedDensityInputFileFormat::read_from_file cannot read %s as ECAT7 (failed to read main header)", filename.c_str());
- return unique_ptr();
- }
-
- TimeFrameDefinitions time_frame_definitions(filename);
- shared_ptr scanner_sptr(find_scanner_from_ECAT_system_type(mhead.system_type));
-
- unique_ptr
- dynamic_image_ptr
- (new DynamicDiscretisedDensity(time_frame_definitions,
- static_cast(mhead.scan_start_time),
- scanner_sptr)
- );
-
- dynamic_image_ptr->set_calibration_factor(mhead.calibration_factor);
-
- dynamic_image_ptr->set_isotope_halflife(mhead.isotope_halflife);
-
- // TODO get this from the subheader fields or so
- // dynamic_image_ptr->_is_decay_corrected =
- // shead.processing_code & DecayPrc
- dynamic_image_ptr->set_if_decay_corrected(false);
-
- for (unsigned int frame_num=1; frame_num <= dynamic_image_ptr->get_num_time_frames(); ++ frame_num)
- {
- shared_ptr dens_sptr
- (ECAT7_to_VoxelsOnCartesianGrid(filename,
- frame_num,
- /* gate_num, data_num, bed_num */ 1,0,0)
- );
- if (is_null_ptr(dens_sptr))
- error("read_from_file for DynamicDiscretisedDensity: No frame %d available", frame_num);
- dynamic_image_ptr->set_density(*dens_sptr, frame_num );
- }
- return dynamic_image_ptr;
- }
- else
- {
- error("read_from_file for DynamicDiscretisedDensity: ECAT7 file %s is not an image file", filename.c_str());
- // return something to satisfy compilers
+ECAT7DynamicDiscretisedDensityInputFileFormat::read_from_file(const std::string& filename) const {
+ if (is_ECAT7_image_file(filename)) {
+ Main_header mhead;
+ if (read_ECAT7_main_header(mhead, filename) == Succeeded::no) {
+ error("ECAT7DynamicDiscretisedDensityInputFileFormat::read_from_file cannot read %s as ECAT7 (failed to read main header)",
+ filename.c_str());
return unique_ptr();
}
+
+ TimeFrameDefinitions time_frame_definitions(filename);
+ shared_ptr scanner_sptr(find_scanner_from_ECAT_system_type(mhead.system_type));
+
+ unique_ptr dynamic_image_ptr(
+ new DynamicDiscretisedDensity(time_frame_definitions, static_cast(mhead.scan_start_time), scanner_sptr));
+
+ dynamic_image_ptr->set_calibration_factor(mhead.calibration_factor);
+
+ dynamic_image_ptr->set_isotope_halflife(mhead.isotope_halflife);
+
+ // TODO get this from the subheader fields or so
+ // dynamic_image_ptr->_is_decay_corrected =
+ // shead.processing_code & DecayPrc
+ dynamic_image_ptr->set_if_decay_corrected(false);
+
+ for (unsigned int frame_num = 1; frame_num <= dynamic_image_ptr->get_num_time_frames(); ++frame_num) {
+ shared_ptr dens_sptr(
+ ECAT7_to_VoxelsOnCartesianGrid(filename, frame_num,
+ /* gate_num, data_num, bed_num */ 1, 0, 0));
+ if (is_null_ptr(dens_sptr))
+ error("read_from_file for DynamicDiscretisedDensity: No frame %d available", frame_num);
+ dynamic_image_ptr->set_density(*dens_sptr, frame_num);
+ }
+ return dynamic_image_ptr;
+ } else {
+ error("read_from_file for DynamicDiscretisedDensity: ECAT7 file %s is not an image file", filename.c_str());
+ // return something to satisfy compilers
+ return unique_ptr();
+ }
}
END_NAMESPACE_ECAT
END_NAMESPACE_ECAT7
END_NAMESPACE_STIR
-
diff --git a/src/IO/ECAT7DynamicDiscretisedDensityOutputFileFormat.cxx b/src/IO/ECAT7DynamicDiscretisedDensityOutputFileFormat.cxx
index 674c8f5289..1d29a6c02b 100644
--- a/src/IO/ECAT7DynamicDiscretisedDensityOutputFileFormat.cxx
+++ b/src/IO/ECAT7DynamicDiscretisedDensityOutputFileFormat.cxx
@@ -36,32 +36,25 @@ START_NAMESPACE_STIR
START_NAMESPACE_ECAT
START_NAMESPACE_ECAT7
-const char * const
-ECAT7DynamicDiscretisedDensityOutputFileFormat::registered_name = "ECAT7";
+const char* const ECAT7DynamicDiscretisedDensityOutputFileFormat::registered_name = "ECAT7";
-ECAT7DynamicDiscretisedDensityOutputFileFormat::
-ECAT7DynamicDiscretisedDensityOutputFileFormat(const NumericType& type,
- const ByteOrder& byte_order)
-{
+ECAT7DynamicDiscretisedDensityOutputFileFormat::ECAT7DynamicDiscretisedDensityOutputFileFormat(const NumericType& type,
+ const ByteOrder& byte_order) {
this->set_defaults();
this->set_type_of_numbers(type);
this->set_byte_order(byte_order);
}
-void
-ECAT7DynamicDiscretisedDensityOutputFileFormat::
-initialise_keymap()
-{
+void
+ECAT7DynamicDiscretisedDensityOutputFileFormat::initialise_keymap() {
this->parser.add_start_key("ECAT7 Output File Format Parameters");
this->parser.add_stop_key("End ECAT7 Output File Format Parameters");
this->parser.add_key("default scanner name", &default_scanner_name);
base_type::initialise_keymap();
}
-void
-ECAT7DynamicDiscretisedDensityOutputFileFormat::
-set_defaults()
-{
+void
+ECAT7DynamicDiscretisedDensityOutputFileFormat::set_defaults() {
this->default_scanner_name = "ECAT 962";
base_type::set_defaults();
this->file_byte_order = ByteOrder::big_endian;
@@ -71,69 +64,53 @@ set_defaults()
}
bool
-ECAT7DynamicDiscretisedDensityOutputFileFormat::
-post_processing()
-{
+ECAT7DynamicDiscretisedDensityOutputFileFormat::post_processing() {
if (base_type::post_processing())
return true;
- shared_ptr scanner_ptr(
- Scanner::get_scanner_from_name(this->default_scanner_name));
+ shared_ptr scanner_ptr(Scanner::get_scanner_from_name(this->default_scanner_name));
- if (find_ECAT_system_type(*scanner_ptr)==0)
- {
- warning("ECAT7DynamicDiscretisedDensityOutputFileFormat: default_scanner_name %s is not supported\n",
- this->default_scanner_name.c_str());
- return true;
- }
+ if (find_ECAT_system_type(*scanner_ptr) == 0) {
+ warning("ECAT7DynamicDiscretisedDensityOutputFileFormat: default_scanner_name %s is not supported\n",
+ this->default_scanner_name.c_str());
+ return true;
+ }
return false;
}
-NumericType
-ECAT7DynamicDiscretisedDensityOutputFileFormat::
-set_type_of_numbers(const NumericType& new_type, const bool warn)
-{
- const NumericType supported_type_of_numbers =
- NumericType("signed integer", 2);
- if (new_type != supported_type_of_numbers)
- {
+NumericType
+ECAT7DynamicDiscretisedDensityOutputFileFormat::set_type_of_numbers(const NumericType& new_type, const bool warn) {
+ const NumericType supported_type_of_numbers = NumericType("signed integer", 2);
+ if (new_type != supported_type_of_numbers) {
if (warn)
- warning("ECAT7DynamicDiscretisedDensityOutputFileFormat: output type of numbers is currently fixed to short (2 byte signed integers)\n");
+ warning("ECAT7DynamicDiscretisedDensityOutputFileFormat: output type of numbers is currently fixed to short (2 byte signed "
+ "integers)\n");
this->type_of_numbers = supported_type_of_numbers;
- }
- else
+ } else
this->type_of_numbers = new_type;
return this->type_of_numbers;
}
-ByteOrder
-ECAT7DynamicDiscretisedDensityOutputFileFormat::
-set_byte_order(const ByteOrder& new_byte_order, const bool warn)
-{
- if (new_byte_order != ByteOrder::big_endian)
- {
+ByteOrder
+ECAT7DynamicDiscretisedDensityOutputFileFormat::set_byte_order(const ByteOrder& new_byte_order, const bool warn) {
+ if (new_byte_order != ByteOrder::big_endian) {
if (warn)
warning("ECAT7DynamicDiscretisedDensityOutputFileFormat: byte_order is currently fixed to big-endian\n");
this->file_byte_order = ByteOrder::big_endian;
- }
- else
+ } else
this->file_byte_order = new_byte_order;
return this->file_byte_order;
}
-Succeeded
-ECAT7DynamicDiscretisedDensityOutputFileFormat::
-actual_write_to_file(std::string& filename,
- const DynamicDiscretisedDensity& dynamic_density) const
-{
+Succeeded
+ECAT7DynamicDiscretisedDensityOutputFileFormat::actual_write_to_file(std::string& filename,
+ const DynamicDiscretisedDensity& dynamic_density) const {
add_extension(filename, ".img");
- return
- dynamic_density.write_to_ecat7(filename);
+ return dynamic_density.write_to_ecat7(filename);
}
-
-//template class ECAT7DynamicDiscretisedDensityOutputFileFormat;
+// template class ECAT7DynamicDiscretisedDensityOutputFileFormat;
END_NAMESPACE_ECAT7
END_NAMESPACE_ECAT
diff --git a/src/IO/ECAT7OutputFileFormat.cxx b/src/IO/ECAT7OutputFileFormat.cxx
index f90a8a01df..65a1f0195e 100644
--- a/src/IO/ECAT7OutputFileFormat.cxx
+++ b/src/IO/ECAT7OutputFileFormat.cxx
@@ -35,120 +35,90 @@ START_NAMESPACE_STIR
START_NAMESPACE_ECAT
START_NAMESPACE_ECAT7
-const char * const
-ECAT7OutputFileFormat::registered_name = "ECAT7";
+const char* const ECAT7OutputFileFormat::registered_name = "ECAT7";
-ECAT7OutputFileFormat::
-ECAT7OutputFileFormat(const NumericType& type,
- const ByteOrder& byte_order)
-{
+ECAT7OutputFileFormat::ECAT7OutputFileFormat(const NumericType& type, const ByteOrder& byte_order) {
base_type::set_defaults();
set_type_of_numbers(type);
set_byte_order(byte_order);
}
-void
-ECAT7OutputFileFormat::
-initialise_keymap()
-{
+void
+ECAT7OutputFileFormat::initialise_keymap() {
parser.add_start_key("ECAT7 Output File Format Parameters");
parser.add_stop_key("End ECAT7 Output File Format Parameters");
parser.add_key("default scanner name", &default_scanner_name);
base_type::initialise_keymap();
}
-void
-ECAT7OutputFileFormat::
-set_defaults()
-{
+void
+ECAT7OutputFileFormat::set_defaults() {
default_scanner_name = "ECAT 962";
base_type::set_defaults();
file_byte_order = ByteOrder::big_endian;
type_of_numbers = NumericType::SHORT;
set_key_values();
-
}
bool
-ECAT7OutputFileFormat::
-post_processing()
-{
+ECAT7OutputFileFormat::post_processing() {
if (base_type::post_processing())
return true;
shared_ptr scanner_ptr(Scanner::get_scanner_from_name(default_scanner_name));
- if (find_ECAT_system_type(*scanner_ptr)==0)
- {
- warning("ECAT7OutputFileFormat: default_scanner_name %s is not supported\n",
- default_scanner_name.c_str());
- return true;
- }
+ if (find_ECAT_system_type(*scanner_ptr) == 0) {
+ warning("ECAT7OutputFileFormat: default_scanner_name %s is not supported\n", default_scanner_name.c_str());
+ return true;
+ }
return false;
}
-NumericType
-ECAT7OutputFileFormat::
-set_type_of_numbers(const NumericType& new_type, const bool warn)
-{
- const NumericType supported_type_of_numbers =
- NumericType("signed integer", 2);
- if (new_type != supported_type_of_numbers)
- {
+NumericType
+ECAT7OutputFileFormat::set_type_of_numbers(const NumericType& new_type, const bool warn) {
+ const NumericType supported_type_of_numbers = NumericType("signed integer", 2);
+ if (new_type != supported_type_of_numbers) {
if (warn)
warning("ECAT7OutputFileFormat: output type of numbers is currently fixed to short (2 byte signed integers)\n");
type_of_numbers = supported_type_of_numbers;
- }
- else
+ } else
type_of_numbers = new_type;
return type_of_numbers;
-
}
-ByteOrder
-ECAT7OutputFileFormat::
-set_byte_order(const ByteOrder& new_byte_order, const bool warn)
-{
- if (new_byte_order != ByteOrder::big_endian)
- {
+ByteOrder
+ECAT7OutputFileFormat::set_byte_order(const ByteOrder& new_byte_order, const bool warn) {
+ if (new_byte_order != ByteOrder::big_endian) {
if (warn)
warning("ECAT7OutputFileFormat: byte_order is currently fixed to big-endian\n");
file_byte_order = ByteOrder::big_endian;
- }
- else
+ } else
file_byte_order = new_byte_order;
return file_byte_order;
}
-Succeeded
-ECAT7OutputFileFormat::
-actual_write_to_file(std::string& filename,
- const DiscretisedDensity<3,float>& density) const
-{
+Succeeded
+ECAT7OutputFileFormat::actual_write_to_file(std::string& filename, const DiscretisedDensity<3, float>& density) const {
shared_ptr scanner_ptr(Scanner::get_scanner_from_name(default_scanner_name));
-
+
add_extension(filename, ".img");
Main_header mhead;
make_ECAT7_main_header(mhead, *scanner_ptr, "", density);
mhead.num_frames = 1;
- mhead.acquisition_type =
- mhead.num_frames>1 ? DynamicEmission : StaticEmission;
-
- MatrixFile* mptr= matrix_create (filename.c_str(), MAT_CREATE, &mhead);
- if (mptr == 0)
- {
- warning("ECAT7OutputFileFormat::write_to_file: error opening output file %s\n",
- filename.c_str());
+ mhead.acquisition_type = mhead.num_frames > 1 ? DynamicEmission : StaticEmission;
+
+ MatrixFile* mptr = matrix_create(filename.c_str(), MAT_CREATE, &mhead);
+ if (mptr == 0) {
+ warning("ECAT7OutputFileFormat::write_to_file: error opening output file %s\n", filename.c_str());
return Succeeded::no;
}
-
- Succeeded success =
- DiscretisedDensity_to_ECAT7(mptr, density, 1 /*frame_num*/);
+
+ Succeeded success = DiscretisedDensity_to_ECAT7(mptr, density, 1 /*frame_num*/);
matrix_close(mptr);
-
+
return success;
}
diff --git a/src/IO/ECAT7ParametricDensityOutputFileFormat.cxx b/src/IO/ECAT7ParametricDensityOutputFileFormat.cxx
index 0778b22ddb..788048a419 100644
--- a/src/IO/ECAT7ParametricDensityOutputFileFormat.cxx
+++ b/src/IO/ECAT7ParametricDensityOutputFileFormat.cxx
@@ -36,24 +36,19 @@ START_NAMESPACE_ECAT
START_NAMESPACE_ECAT7
template
-const char * const
-ECAT7ParametricDensityOutputFileFormat::registered_name = "ECAT7";
+const char* const ECAT7ParametricDensityOutputFileFormat::registered_name = "ECAT7";
template
-ECAT7ParametricDensityOutputFileFormat::
-ECAT7ParametricDensityOutputFileFormat(const NumericType& type,
- const ByteOrder& byte_order)
-{
+ECAT7ParametricDensityOutputFileFormat::ECAT7ParametricDensityOutputFileFormat(const NumericType& type,
+ const ByteOrder& byte_order) {
this->set_defaults();
this->set_type_of_numbers(type);
this->set_byte_order(byte_order);
}
template
-void
-ECAT7ParametricDensityOutputFileFormat::
-initialise_keymap()
-{
+void
+ECAT7ParametricDensityOutputFileFormat::initialise_keymap() {
this->parser.add_start_key("ECAT7 Output File Format Parameters");
this->parser.add_stop_key("End ECAT7 Output File Format Parameters");
this->parser.add_key("default scanner name", &default_scanner_name);
@@ -61,89 +56,68 @@ initialise_keymap()
}
template
-void
-ECAT7ParametricDensityOutputFileFormat::
-set_defaults()
-{
+void
+ECAT7ParametricDensityOutputFileFormat::set_defaults() {
this->default_scanner_name = "ECAT 962";
base_type::set_defaults();
this->file_byte_order = ByteOrder::big_endian;
this->type_of_numbers = NumericType::SHORT;
this->set_key_values();
-
}
template
bool
-ECAT7ParametricDensityOutputFileFormat::
-post_processing()
-{
+ECAT7ParametricDensityOutputFileFormat::post_processing() {
if (base_type::post_processing())
return true;
- shared_ptr scanner_ptr(
- Scanner::get_scanner_from_name(this->default_scanner_name));
+ shared_ptr scanner_ptr(Scanner::get_scanner_from_name(this->default_scanner_name));
- if (find_ECAT_system_type(*scanner_ptr)==0)
- {
- warning("ECAT7ParametricDensityOutputFileFormat: default_scanner_name %s is not supported\n",
- this->default_scanner_name.c_str());
- return true;
- }
+ if (find_ECAT_system_type(*scanner_ptr) == 0) {
+ warning("ECAT7ParametricDensityOutputFileFormat: default_scanner_name %s is not supported\n",
+ this->default_scanner_name.c_str());
+ return true;
+ }
return false;
}
template
-NumericType
-ECAT7ParametricDensityOutputFileFormat::
-set_type_of_numbers(const NumericType& new_type, const bool warn)
-{
- const NumericType supported_type_of_numbers =
- NumericType("signed integer", 2);
- if (new_type != supported_type_of_numbers)
- {
+NumericType
+ECAT7ParametricDensityOutputFileFormat::set_type_of_numbers(const NumericType& new_type, const bool warn) {
+ const NumericType supported_type_of_numbers = NumericType("signed integer", 2);
+ if (new_type != supported_type_of_numbers) {
if (warn)
- warning("ECAT7ParametricDensityOutputFileFormat: output type of numbers is currently fixed to short (2 byte signed integers)\n");
+ warning("ECAT7ParametricDensityOutputFileFormat: output type of numbers is currently fixed to short (2 byte signed "
+ "integers)\n");
this->type_of_numbers = supported_type_of_numbers;
- }
- else
+ } else
this->type_of_numbers = new_type;
return this->type_of_numbers;
-
}
template
-ByteOrder
-ECAT7ParametricDensityOutputFileFormat::
-set_byte_order(const ByteOrder& new_byte_order, const bool warn)
-{
- if (new_byte_order != ByteOrder::big_endian)
- {
+ByteOrder
+ECAT7ParametricDensityOutputFileFormat::set_byte_order(const ByteOrder& new_byte_order, const bool warn) {
+ if (new_byte_order != ByteOrder::big_endian) {
if (warn)
warning("ECAT7ParametricDensityOutputFileFormat: byte_order is currently fixed to big-endian\n");
this->file_byte_order = ByteOrder::big_endian;
- }
- else
+ } else
this->file_byte_order = new_byte_order;
return this->file_byte_order;
}
template
-Succeeded
-ECAT7ParametricDensityOutputFileFormat::
-actual_write_to_file(std::string& filename,
- const ParametricDiscretisedDensity& parametric_density) const
-{
- shared_ptr scanner_ptr(
- Scanner::get_scanner_from_name(this->default_scanner_name));
-
+Succeeded
+ECAT7ParametricDensityOutputFileFormat::actual_write_to_file(
+ std::string& filename, const ParametricDiscretisedDensity& parametric_density) const {
+ shared_ptr scanner_ptr(Scanner::get_scanner_from_name(this->default_scanner_name));
+
add_extension(filename, ".img");
- typedef
- typename ParametricDiscretisedDensity::SingleDiscretisedDensityType
- SingleDensityType;
+ typedef typename ParametricDiscretisedDensity::SingleDiscretisedDensityType SingleDensityType;
// somewhat naughty trick to get elemT of DiscretisedDensityT
typedef typename DiscretisedDensityT::full_value_type KinParsT;
@@ -154,34 +128,28 @@ actual_write_to_file(std::string& filename,
mhead.num_frames = KinParsT::size();
mhead.acquisition_type = DynamicEmission;
-
- MatrixFile* mptr= matrix_create (filename.c_str(), MAT_CREATE, &mhead);
- if (mptr == 0)
- {
- warning("ECAT7ParametricDensityOutputFileFormat::write_to_file: error opening output file %s\n",
- filename.c_str());
+
+ MatrixFile* mptr = matrix_create(filename.c_str(), MAT_CREATE, &mhead);
+ if (mptr == 0) {
+ warning("ECAT7ParametricDensityOutputFileFormat::write_to_file: error opening output file %s\n", filename.c_str());
return Succeeded::no;
}
-
- for (unsigned int f=1; f<=KinParsT::size(); ++f)
- {
- parametric_density.construct_single_density(single_density,f);
- Succeeded success =
- DiscretisedDensity_to_ECAT7(mptr, single_density, f);
- if (success == Succeeded::no)
- {
- matrix_close(mptr);
- return success;
- }
+
+ for (unsigned int f = 1; f <= KinParsT::size(); ++f) {
+ parametric_density.construct_single_density(single_density, f);
+ Succeeded success = DiscretisedDensity_to_ECAT7(mptr, single_density, f);
+ if (success == Succeeded::no) {
+ matrix_close(mptr);
+ return success;
}
+ }
matrix_close(mptr);
-
+
return Succeeded::yes;
}
-template class ECAT7ParametricDensityOutputFileFormat;
+template class ECAT7ParametricDensityOutputFileFormat;
END_NAMESPACE_ECAT7
END_NAMESPACE_ECAT
END_NAMESPACE_STIR
-
diff --git a/src/IO/GEHDF5Wrapper.cxx b/src/IO/GEHDF5Wrapper.cxx
index 8bc4b135d4..b875b39fba 100644
--- a/src/IO/GEHDF5Wrapper.cxx
+++ b/src/IO/GEHDF5Wrapper.cxx
@@ -37,66 +37,61 @@
#include "stir/info.h"
#include
-
START_NAMESPACE_STIR
namespace GE {
namespace RDF_HDF5 {
std::uint32_t
-GEHDF5Wrapper::read_dataset_uint32(const std::string& dataset_name)
-{
- std::uint32_t tmp=0U;
+GEHDF5Wrapper::read_dataset_uint32(const std::string& dataset_name) {
+ std::uint32_t tmp = 0U;
H5::DataSet dataset = file.openDataSet(dataset_name);
dataset.read(&tmp, H5::PredType::NATIVE_UINT32);
return tmp;
}
std::int32_t
-GEHDF5Wrapper::read_dataset_int32(const std::string& dataset_name)
-{
- std::int32_t tmp=0;
+GEHDF5Wrapper::read_dataset_int32(const std::string& dataset_name) {
+ std::int32_t tmp = 0;
H5::DataSet dataset = file.openDataSet(dataset_name);
dataset.read(&tmp, H5::PredType::NATIVE_INT32);
return tmp;
}
-bool GEHDF5Wrapper::check_GE_signature(const std::string& filename)
-{
- try
- {
- if(!H5::H5File::isHdf5(filename))
- return false;
+bool
+GEHDF5Wrapper::check_GE_signature(const std::string& filename) {
+ try {
+ if (!H5::H5File::isHdf5(filename))
+ return false;
- H5::H5File file;
- file.openFile( filename, H5F_ACC_RDONLY );
+ H5::H5File file;
+ file.openFile(filename, H5F_ACC_RDONLY);
- return (check_GE_signature(file));
- }
- catch(...)
- {
- return false;
- }
+ return (check_GE_signature(file));
+ } catch (...) {
+ return false;
+ }
}
-bool GEHDF5Wrapper::check_GE_signature(H5::H5File& file)
-{
- if(file.getId() == -1)
- error("File is not open. Aborting");
-
- H5::StrType vlst(0,37); // 37 here is the length of the string (PW got it from the text file generated by list2txt with the LIST000_decomp.BLF
- std::string read_str_manufacturer;
-
- H5::DataSet dataset2= file.openDataSet("/HeaderData/ExamData/manufacturer");
- dataset2.read(read_str_manufacturer,vlst);
-
- if(read_str_manufacturer == "GE MEDICAL SYSTEMS")
- {
- return true;
- }
- return false;
+bool
+GEHDF5Wrapper::check_GE_signature(H5::H5File& file) {
+ if (file.getId() == -1)
+ error("File is not open. Aborting");
+
+ H5::StrType vlst(
+ 0,
+ 37); // 37 here is the length of the string (PW got it from the text file generated by list2txt with the LIST000_decomp.BLF
+ std::string read_str_manufacturer;
+
+ H5::DataSet dataset2 = file.openDataSet("/HeaderData/ExamData/manufacturer");
+ dataset2.read(read_str_manufacturer, vlst);
+
+ if (read_str_manufacturer == "GE MEDICAL SYSTEMS") {
+ return true;
+ }
+ return false;
}
-// // Checks if input file is listfile.
+// // Checks if input file is listfile.
// AB: todo do we want this func? helps test from filename
/*
bool
@@ -118,774 +113,750 @@ GEHDF5Wrapper::is_list_file(const std::string& filename)
}
*/
-
// AB todo: only valid for RDF9 (until they tell us otherwise)
bool
-GEHDF5Wrapper::is_list_file() const
-{
- // have we already checked this?
- if(is_list)
- return true;
-
- if(file.getId() == -1)
- error("File is not open. Aborting");
-
- // All RDF files shoudl have this DataSet
- H5::DataSet dataset = file.openDataSet("/HeaderData/RDFConfiguration/isListFile");
- std::uint32_t is_list_file;
- dataset.read(&is_list_file, H5::PredType::NATIVE_UINT32);
- return is_list_file;
-
+GEHDF5Wrapper::is_list_file() const {
+ // have we already checked this?
+ if (is_list)
+ return true;
+
+ if (file.getId() == -1)
+ error("File is not open. Aborting");
+
+ // All RDF files shoudl have this DataSet
+ H5::DataSet dataset = file.openDataSet("/HeaderData/RDFConfiguration/isListFile");
+ std::uint32_t is_list_file;
+ dataset.read(&is_list_file, H5::PredType::NATIVE_UINT32);
+ return is_list_file;
}
-// Checks if file is a sino file.
+// Checks if file is a sino file.
// AB todo: only valid for RDF9 (until they tell us otherwise)
bool
-GEHDF5Wrapper::is_sino_file() const
-{
- if(is_sino)
- return true;
- if(file.getId() == -1)
- error("File is not open. Aborting");
-
- // If this Group exists, its a sino file.
- // huh, no C++ way to do this without try catch. https://stackoverflow.com/questions/35668056/test-group-existence-in-hdf5-c
- return H5Lexists( file.getId(), "/SegmentData/Segment2", H5P_DEFAULT ) > 0;
+GEHDF5Wrapper::is_sino_file() const {
+ if (is_sino)
+ return true;
+ if (file.getId() == -1)
+ error("File is not open. Aborting");
+
+ // If this Group exists, its a sino file.
+ // huh, no C++ way to do this without try catch. https://stackoverflow.com/questions/35668056/test-group-existence-in-hdf5-c
+ return H5Lexists(file.getId(), "/SegmentData/Segment2", H5P_DEFAULT) > 0;
}
bool
-GEHDF5Wrapper::is_geo_file() const
-{
- // Apparently the norm file has the geo file inside. This means that the geo file is superfluous.
- // For now, lets just make this fucntion is_geo_or_norm_file(). Perhaps later versions will no be like this and this we need to change this function.
-
- if(is_geo || is_norm)
- return true;
- if(file.getId() == -1)
- error("File is not open. Aborting");
- return H5Lexists( file.getId(), "/SegmentData/Segment4/3D_Norm_Correction/slice1", H5P_DEFAULT ) > 0;
- // AB if you want to make sure geo is definetly geo, and not geo or norm, add to the avobe line: && !H5Lexists( file.getId(), "/3DCrystalEfficiency/crystalEfficiency", H5P_DEFAULT );
+GEHDF5Wrapper::is_geo_file() const {
+ // Apparently the norm file has the geo file inside. This means that the geo file is superfluous.
+ // For now, lets just make this fucntion is_geo_or_norm_file(). Perhaps later versions will no be like this and this we need to
+ // change this function.
+
+ if (is_geo || is_norm)
+ return true;
+ if (file.getId() == -1)
+ error("File is not open. Aborting");
+ return H5Lexists(file.getId(), "/SegmentData/Segment4/3D_Norm_Correction/slice1", H5P_DEFAULT) > 0;
+ // AB if you want to make sure geo is definetly geo, and not geo or norm, add to the avobe line: && !H5Lexists( file.getId(),
+ // "/3DCrystalEfficiency/crystalEfficiency", H5P_DEFAULT );
}
bool
-GEHDF5Wrapper::is_norm_file() const
-{
- if(is_norm)
- return true;
- if(file.getId() == -1)
- error("File is not open. Aborting");
+GEHDF5Wrapper::is_norm_file() const {
+ if (is_norm)
+ return true;
+ if (file.getId() == -1)
+ error("File is not open. Aborting");
- return H5Lexists( file.getId(), "/3DCrystalEfficiency/crystalEfficiency", H5P_DEFAULT ) > 0;
+ return H5Lexists(file.getId(), "/3DCrystalEfficiency/crystalEfficiency", H5P_DEFAULT) > 0;
}
-GEHDF5Wrapper::GEHDF5Wrapper()
-{
- // Not much.
+GEHDF5Wrapper::GEHDF5Wrapper() {
+ // Not much.
}
-GEHDF5Wrapper::GEHDF5Wrapper(const std::string& filename)
-{
- if(open(filename) == Succeeded::no)
- error("GEHDF5Wrapper: Error opening HDF5 file. Abort.");
+GEHDF5Wrapper::GEHDF5Wrapper(const std::string& filename) {
+ if (open(filename) == Succeeded::no)
+ error("GEHDF5Wrapper: Error opening HDF5 file. Abort.");
}
unsigned int
-GEHDF5Wrapper::check_geo_type()
-{
- if(!is_geo )
- error("Not a geo file. Aborting");
- if(file.getId() == -1)
- error("File is not open. Aborting");
-
- unsigned int geo_type=0;
- H5::DataSet str_geo_size = file.openDataSet("/HeaderData/Sorter/Segment4/dimension3Size");
- str_geo_size.read(&geo_type, H5::PredType::NATIVE_UINT32);
- if (geo_type>1)
- geo_type=3;
- else
- geo_type=2;
- return geo_type;
+GEHDF5Wrapper::check_geo_type() {
+ if (!is_geo)
+ error("Not a geo file. Aborting");
+ if (file.getId() == -1)
+ error("File is not open. Aborting");
+
+ unsigned int geo_type = 0;
+ H5::DataSet str_geo_size = file.openDataSet("/HeaderData/Sorter/Segment4/dimension3Size");
+ str_geo_size.read(&geo_type, H5::PredType::NATIVE_UINT32);
+ if (geo_type > 1)
+ geo_type = 3;
+ else
+ geo_type = 2;
+ return geo_type;
}
// Function that error checks the input file and sets flags for the correct formats. GEHDF5Wrapper.file must be already open.
-// AB todo: this file is only valid for RDF 9.
-Succeeded
-GEHDF5Wrapper::check_file()
-{
- if(file.getId()==-1)
- error("File is not open. Aborting");
- if(!check_GE_signature(file))
- error("File is HDF5 but not GE data. Aborting");
-
- //AB: We are openign a new file. The same class should not be used twice, but lets make sure that if it happens, we reseted the file identifiers.
- is_list=false; is_norm=false;is_geo=false;is_sino=false;
-
- //AB Find out the RDF version of the file.
- H5::DataSet str_file_version = file.openDataSet("/HeaderData/RDFConfiguration/fileVersion/majorVersion");
- str_file_version.read(&rdf_ver, H5::PredType::NATIVE_UINT32);
-
- //AB Lets just error for now.
- if (rdf_ver!=9)
- error("Only RDF version 9 supported. Aborting");
-
- if(is_list_file())
- {
- is_list = true;
- // AB Now lets check all things that are required
- if (rdf_ver == 9) //AB todo: is this valid for 10?
- {
- // Check 1: Is the file compressed?
- unsigned int is_compressed;
- H5::DataSet str_file_version = file.openDataSet("/HeaderData/ListHeader/isListCompressed");
- str_file_version.read(&is_compressed, H5::PredType::NATIVE_UINT32);
- if (is_compressed)
- error("The RDF9 Listmode file is compressed, we won't be able to read it. Please uncompress it and retry. Aborting");
- }
-
- return Succeeded::yes;
- }
- if(is_sino_file())
- {
- is_sino = true;
- if (rdf_ver == 9) //AB todo: is this valid for 10?
- {
- // Check 1: Is the file compressed?
- unsigned int is_compressed;
- H5::DataSet str_file_version = file.openDataSet("/HeaderData/Sorter/Segment2/compDataSegSize");
- str_file_version.read(&is_compressed, H5::PredType::NATIVE_UINT32);
- if (is_compressed)
- error("The RDF9 file sinogram is compressed, we won't be able to read it. Please uncompress it and retry. Aborting");
- }
- return Succeeded::yes;
- }
- if(is_norm_file())
+// AB todo: this file is only valid for RDF 9.
+Succeeded
+GEHDF5Wrapper::check_file() {
+ if (file.getId() == -1)
+ error("File is not open. Aborting");
+ if (!check_GE_signature(file))
+ error("File is HDF5 but not GE data. Aborting");
+
+ // AB: We are openign a new file. The same class should not be used twice, but lets make sure that if it happens, we reseted the
+ // file identifiers.
+ is_list = false;
+ is_norm = false;
+ is_geo = false;
+ is_sino = false;
+
+ // AB Find out the RDF version of the file.
+ H5::DataSet str_file_version = file.openDataSet("/HeaderData/RDFConfiguration/fileVersion/majorVersion");
+ str_file_version.read(&rdf_ver, H5::PredType::NATIVE_UINT32);
+
+ // AB Lets just error for now.
+ if (rdf_ver != 9)
+ error("Only RDF version 9 supported. Aborting");
+
+ if (is_list_file()) {
+ is_list = true;
+ // AB Now lets check all things that are required
+ if (rdf_ver == 9) // AB todo: is this valid for 10?
{
- is_norm=true;
- is_geo =true; // in RFD9, if its norm, it is also geo (it contains it)
- // Check the type of geo file it contains.
- geo_dims = check_geo_type();
-
- return Succeeded::yes;
+ // Check 1: Is the file compressed?
+ unsigned int is_compressed;
+ H5::DataSet str_file_version = file.openDataSet("/HeaderData/ListHeader/isListCompressed");
+ str_file_version.read(&is_compressed, H5::PredType::NATIVE_UINT32);
+ if (is_compressed)
+ error("The RDF9 Listmode file is compressed, we won't be able to read it. Please uncompress it and retry. Aborting");
}
- if(is_geo_file())
+
+ return Succeeded::yes;
+ }
+ if (is_sino_file()) {
+ is_sino = true;
+ if (rdf_ver == 9) // AB todo: is this valid for 10?
{
- is_geo=true;
- geo_dims = check_geo_type();
-
- return Succeeded::yes;
+ // Check 1: Is the file compressed?
+ unsigned int is_compressed;
+ H5::DataSet str_file_version = file.openDataSet("/HeaderData/Sorter/Segment2/compDataSegSize");
+ str_file_version.read(&is_compressed, H5::PredType::NATIVE_UINT32);
+ if (is_compressed)
+ error("The RDF9 file sinogram is compressed, we won't be able to read it. Please uncompress it and retry. Aborting");
}
- // should not get here.
- return Succeeded::no;
+ return Succeeded::yes;
+ }
+ if (is_norm_file()) {
+ is_norm = true;
+ is_geo = true; // in RFD9, if its norm, it is also geo (it contains it)
+ // Check the type of geo file it contains.
+ geo_dims = check_geo_type();
+
+ return Succeeded::yes;
+ }
+ if (is_geo_file()) {
+ is_geo = true;
+ geo_dims = check_geo_type();
+
+ return Succeeded::yes;
+ }
+ // should not get here.
+ return Succeeded::no;
}
Succeeded
-GEHDF5Wrapper::open(const std::string& filename)
-{
- if(!file.isHdf5(filename))
- error("GEHDF5Wrapper: The input file is not HDF5! Abort.");
+GEHDF5Wrapper::open(const std::string& filename) {
+ if (!file.isHdf5(filename))
+ error("GEHDF5Wrapper: The input file is not HDF5! Abort.");
- file.openFile(filename, H5F_ACC_RDONLY);
+ file.openFile(filename, H5F_ACC_RDONLY);
- //AB: check if the input file is valid, not only as a HDF5, also a valid PET file.
- check_file();
+ // AB: check if the input file is valid, not only as a HDF5, also a valid PET file.
+ check_file();
- initialise_exam_info();
- initialise_proj_data_info_from_HDF5();
+ initialise_exam_info();
+ initialise_proj_data_info_from_HDF5();
- // functions above will throw actually, so if we get here, it worked.
- return Succeeded::yes;
+ // functions above will throw actually, so if we get here, it worked.
+ return Succeeded::yes;
}
-shared_ptr GEHDF5Wrapper::get_scanner_from_HDF5()
-{
- std::string read_str_scanner;
- H5::StrType vlst(0,37); // 37 here is the length of the string (PW got it from the text file generated by list2txt with the LIST000_decomp.BLF
-
- H5::DataSet dataset = file.openDataSet("/HeaderData/ExamData/scannerDesc");
- dataset.read(read_str_scanner,vlst);
-
- float effective_ring_diameter;
- int num_transaxial_blocks_per_bucket = 0;
- int num_axial_blocks_per_bucket = 0;
- int axial_blocks_per_unit = 0;
- int radial_blocks_per_unit = 0;
- int axial_units_per_module = 0;
- int radial_units_per_module = 0;
- int axial_modules_per_system = 0;
- int radial_modules_per_system = 0;
- int max_num_non_arccorrected_bins = 0;
- int num_transaxial_crystals_per_block = 0;
- int num_axial_crystals_per_block = 0 ;
- float detector_axial_size = 0.0;
- float intrinsic_tilt = 0.0;
- int num_detector_layers = 1;
-
- H5::DataSet str_effective_ring_diameter = file.openDataSet("/HeaderData/SystemGeometry/effectiveRingDiameter");
- H5::DataSet str_axial_blocks_per_module = file.openDataSet("/HeaderData/SystemGeometry/axialBlocksPerModule");
- H5::DataSet str_radial_blocks_per_module = file.openDataSet("/HeaderData/SystemGeometry/radialBlocksPerModule");
- H5::DataSet str_axial_blocks_per_unit = file.openDataSet("/HeaderData/SystemGeometry/axialBlocksPerUnit");
- H5::DataSet str_radial_blocks_per_unit = file.openDataSet("/HeaderData/SystemGeometry/radialBlocksPerUnit");
- H5::DataSet str_axial_units_per_module = file.openDataSet("/HeaderData/SystemGeometry/axialUnitsPerModule");
- H5::DataSet str_radial_units_per_module = file.openDataSet("/HeaderData/SystemGeometry/radialUnitsPerModule");
- H5::DataSet str_axial_modules_per_system = file.openDataSet("/HeaderData/SystemGeometry/axialModulesPerSystem");
- H5::DataSet str_radial_modules_per_system = file.openDataSet("/HeaderData/SystemGeometry/radialModulesPerSystem");
- //! \todo P.W: Find the crystal gaps and other info missing.
- H5::DataSet str_detector_axial_size = file.openDataSet("/HeaderData/SystemGeometry/detectorAxialSize");
- H5::DataSet str_intrinsic_tilt = file.openDataSet("/HeaderData/SystemGeometry/transaxial_crystal_0_offset");
-
- H5::DataSet str_max_number_of_non_arc_corrected_bins;
- // TODO RDF10, what happens here?
- if (rdf_ver == 9)
- { // Bug in RDF9 makes this dimension2Size instead of the expected dimension1Size
- if(is_sino_file())
- str_max_number_of_non_arc_corrected_bins = file.openDataSet("/HeaderData/Sorter/dimension2Size");
- else
- str_max_number_of_non_arc_corrected_bins = file.openDataSet("/HeaderData/Sorter/dimension1Size");
- }
- H5::DataSet str_axial_crystals_per_block = file.openDataSet("/HeaderData/SystemGeometry/axialCrystalsPerBlock");
- H5::DataSet str_radial_crystals_per_block = file.openDataSet("/HeaderData/SystemGeometry/radialCrystalsPerBlock");
- // Convert to numbers.
-
- str_radial_blocks_per_module.read(&num_transaxial_blocks_per_bucket, H5::PredType::NATIVE_UINT32);
- str_axial_blocks_per_module.read(&num_axial_blocks_per_bucket, H5::PredType::NATIVE_UINT32);
- str_axial_blocks_per_unit.read(&axial_blocks_per_unit, H5::PredType::NATIVE_UINT32);
- str_radial_blocks_per_unit.read(&radial_blocks_per_unit, H5::PredType::NATIVE_UINT32);
- str_axial_units_per_module.read(&axial_units_per_module, H5::PredType::NATIVE_UINT32);
- str_radial_units_per_module.read(&radial_units_per_module, H5::PredType::NATIVE_UINT32);
- str_axial_modules_per_system.read(&axial_modules_per_system, H5::PredType::NATIVE_UINT32);
- str_radial_modules_per_system.read(&radial_modules_per_system, H5::PredType::NATIVE_UINT32);
- str_detector_axial_size.read(&detector_axial_size, H5::PredType::NATIVE_FLOAT);
- str_intrinsic_tilt.read(&intrinsic_tilt, H5::PredType::NATIVE_FLOAT);
- str_effective_ring_diameter.read(&effective_ring_diameter, H5::PredType::NATIVE_FLOAT);
- str_max_number_of_non_arc_corrected_bins.read(&max_num_non_arccorrected_bins, H5::PredType::NATIVE_UINT32);
- str_radial_crystals_per_block.read(&num_transaxial_crystals_per_block, H5::PredType::NATIVE_UINT32);
- str_axial_crystals_per_block.read(&num_axial_crystals_per_block, H5::PredType::NATIVE_UINT32);
-
- int num_rings = num_axial_blocks_per_bucket*num_axial_crystals_per_block*axial_modules_per_system;
- int num_detectors_per_ring = num_transaxial_blocks_per_bucket*num_transaxial_crystals_per_block*radial_modules_per_system;
- float ring_spacing = detector_axial_size/num_rings;
-
- //PW Bin Size, default num of arc corrected bins and inner ring radius not found in RDF header.
- // They will be set from the default STIR values
- shared_ptr scanner_sptr(Scanner::get_scanner_from_name(read_str_scanner));
- if (is_null_ptr(scanner_sptr))
- error("Scanner read from RDF file is " + read_str_scanner + ", but this is not supported yet");
-
- scanner_sptr->set_num_detectors_per_ring(num_detectors_per_ring);
- scanner_sptr->set_num_rings(num_rings);
- if (!is_list_file())
- scanner_sptr->set_max_num_non_arccorrected_bins(max_num_non_arccorrected_bins);
- scanner_sptr->set_ring_spacing(ring_spacing);
- scanner_sptr->set_default_intrinsic_tilt(intrinsic_tilt*_PI/180);
- scanner_sptr->set_num_axial_blocks_per_bucket(num_axial_blocks_per_bucket);
- scanner_sptr->set_num_transaxial_blocks_per_bucket(num_transaxial_blocks_per_bucket);
- scanner_sptr->set_num_axial_crystals_per_block(num_axial_crystals_per_block);
- scanner_sptr->set_num_transaxial_crystals_per_block(num_transaxial_crystals_per_block);
- scanner_sptr->set_num_detector_layers(num_detector_layers);
- scanner_sptr->set_reference_energy(511.F);
-
- if (fabs(scanner_sptr->get_effective_ring_radius() - effective_ring_diameter/2) > .1F)
- {
- const float def_DOI = .0F;
- warning("GEHDF5Wrapper: default STIR effective ring radius is "
- + std::to_string(scanner_sptr->get_effective_ring_radius())
- + ", while RDF says " + std::to_string(effective_ring_diameter/2)
- + "\nWill adjust scanner info to fit with the RDF file using default average DOI of "
- + std::to_string(def_DOI) + "mm");
- scanner_sptr->set_inner_ring_radius((effective_ring_diameter/2) - def_DOI);
- scanner_sptr->set_average_depth_of_interaction(def_DOI);
- }
- if (scanner_sptr->get_default_bin_size() <= 0.F)
- {
- warning("GEHDF5Wrapper: default bin-size is not set. This will create trouble for FBP etc");
- }
- if (scanner_sptr->get_default_num_arccorrected_bins() <= 0)
- {
- warning("GEHDF5Wrapper: default num_arccorrected bins is not set. This will create trouble for FBP etc");
- }
- if (scanner_sptr->get_energy_resolution() <= 0)
- {
- warning("GEHDF5Wrapper: energy resolution is not set. This will create trouble for scatter estimation");
- }
-
- return scanner_sptr;
-
+shared_ptr
+GEHDF5Wrapper::get_scanner_from_HDF5() {
+ std::string read_str_scanner;
+ H5::StrType vlst(
+ 0,
+ 37); // 37 here is the length of the string (PW got it from the text file generated by list2txt with the LIST000_decomp.BLF
+
+ H5::DataSet dataset = file.openDataSet("/HeaderData/ExamData/scannerDesc");
+ dataset.read(read_str_scanner, vlst);
+
+ float effective_ring_diameter;
+ int num_transaxial_blocks_per_bucket = 0;
+ int num_axial_blocks_per_bucket = 0;
+ int axial_blocks_per_unit = 0;
+ int radial_blocks_per_unit = 0;
+ int axial_units_per_module = 0;
+ int radial_units_per_module = 0;
+ int axial_modules_per_system = 0;
+ int radial_modules_per_system = 0;
+ int max_num_non_arccorrected_bins = 0;
+ int num_transaxial_crystals_per_block = 0;
+ int num_axial_crystals_per_block = 0;
+ float detector_axial_size = 0.0;
+ float intrinsic_tilt = 0.0;
+ int num_detector_layers = 1;
+
+ H5::DataSet str_effective_ring_diameter = file.openDataSet("/HeaderData/SystemGeometry/effectiveRingDiameter");
+ H5::DataSet str_axial_blocks_per_module = file.openDataSet("/HeaderData/SystemGeometry/axialBlocksPerModule");
+ H5::DataSet str_radial_blocks_per_module = file.openDataSet("/HeaderData/SystemGeometry/radialBlocksPerModule");
+ H5::DataSet str_axial_blocks_per_unit = file.openDataSet("/HeaderData/SystemGeometry/axialBlocksPerUnit");
+ H5::DataSet str_radial_blocks_per_unit = file.openDataSet("/HeaderData/SystemGeometry/radialBlocksPerUnit");
+ H5::DataSet str_axial_units_per_module = file.openDataSet("/HeaderData/SystemGeometry/axialUnitsPerModule");
+ H5::DataSet str_radial_units_per_module = file.openDataSet("/HeaderData/SystemGeometry/radialUnitsPerModule");
+ H5::DataSet str_axial_modules_per_system = file.openDataSet("/HeaderData/SystemGeometry/axialModulesPerSystem");
+ H5::DataSet str_radial_modules_per_system = file.openDataSet("/HeaderData/SystemGeometry/radialModulesPerSystem");
+ //! \todo P.W: Find the crystal gaps and other info missing.
+ H5::DataSet str_detector_axial_size = file.openDataSet("/HeaderData/SystemGeometry/detectorAxialSize");
+ H5::DataSet str_intrinsic_tilt = file.openDataSet("/HeaderData/SystemGeometry/transaxial_crystal_0_offset");
+
+ H5::DataSet str_max_number_of_non_arc_corrected_bins;
+ // TODO RDF10, what happens here?
+ if (rdf_ver == 9) { // Bug in RDF9 makes this dimension2Size instead of the expected dimension1Size
+ if (is_sino_file())
+ str_max_number_of_non_arc_corrected_bins = file.openDataSet("/HeaderData/Sorter/dimension2Size");
+ else
+ str_max_number_of_non_arc_corrected_bins = file.openDataSet("/HeaderData/Sorter/dimension1Size");
+ }
+ H5::DataSet str_axial_crystals_per_block = file.openDataSet("/HeaderData/SystemGeometry/axialCrystalsPerBlock");
+ H5::DataSet str_radial_crystals_per_block = file.openDataSet("/HeaderData/SystemGeometry/radialCrystalsPerBlock");
+ // Convert to numbers.
+
+ str_radial_blocks_per_module.read(&num_transaxial_blocks_per_bucket, H5::PredType::NATIVE_UINT32);
+ str_axial_blocks_per_module.read(&num_axial_blocks_per_bucket, H5::PredType::NATIVE_UINT32);
+ str_axial_blocks_per_unit.read(&axial_blocks_per_unit, H5::PredType::NATIVE_UINT32);
+ str_radial_blocks_per_unit.read(&radial_blocks_per_unit, H5::PredType::NATIVE_UINT32);
+ str_axial_units_per_module.read(&axial_units_per_module, H5::PredType::NATIVE_UINT32);
+ str_radial_units_per_module.read(&radial_units_per_module, H5::PredType::NATIVE_UINT32);
+ str_axial_modules_per_system.read(&axial_modules_per_system, H5::PredType::NATIVE_UINT32);
+ str_radial_modules_per_system.read(&radial_modules_per_system, H5::PredType::NATIVE_UINT32);
+ str_detector_axial_size.read(&detector_axial_size, H5::PredType::NATIVE_FLOAT);
+ str_intrinsic_tilt.read(&intrinsic_tilt, H5::PredType::NATIVE_FLOAT);
+ str_effective_ring_diameter.read(&effective_ring_diameter, H5::PredType::NATIVE_FLOAT);
+ str_max_number_of_non_arc_corrected_bins.read(&max_num_non_arccorrected_bins, H5::PredType::NATIVE_UINT32);
+ str_radial_crystals_per_block.read(&num_transaxial_crystals_per_block, H5::PredType::NATIVE_UINT32);
+ str_axial_crystals_per_block.read(&num_axial_crystals_per_block, H5::PredType::NATIVE_UINT32);
+
+ int num_rings = num_axial_blocks_per_bucket * num_axial_crystals_per_block * axial_modules_per_system;
+ int num_detectors_per_ring = num_transaxial_blocks_per_bucket * num_transaxial_crystals_per_block * radial_modules_per_system;
+ float ring_spacing = detector_axial_size / num_rings;
+ // PW Bin Size, default num of arc corrected bins and inner ring radius not found in RDF header.
+ // They will be set from the default STIR values
+ shared_ptr scanner_sptr(Scanner::get_scanner_from_name(read_str_scanner));
+ if (is_null_ptr(scanner_sptr))
+ error("Scanner read from RDF file is " + read_str_scanner + ", but this is not supported yet");
+
+ scanner_sptr->set_num_detectors_per_ring(num_detectors_per_ring);
+ scanner_sptr->set_num_rings(num_rings);
+ if (!is_list_file())
+ scanner_sptr->set_max_num_non_arccorrected_bins(max_num_non_arccorrected_bins);
+ scanner_sptr->set_ring_spacing(ring_spacing);
+ scanner_sptr->set_default_intrinsic_tilt(intrinsic_tilt * _PI / 180);
+ scanner_sptr->set_num_axial_blocks_per_bucket(num_axial_blocks_per_bucket);
+ scanner_sptr->set_num_transaxial_blocks_per_bucket(num_transaxial_blocks_per_bucket);
+ scanner_sptr->set_num_axial_crystals_per_block(num_axial_crystals_per_block);
+ scanner_sptr->set_num_transaxial_crystals_per_block(num_transaxial_crystals_per_block);
+ scanner_sptr->set_num_detector_layers(num_detector_layers);
+ scanner_sptr->set_reference_energy(511.F);
+
+ if (fabs(scanner_sptr->get_effective_ring_radius() - effective_ring_diameter / 2) > .1F) {
+ const float def_DOI = .0F;
+ warning("GEHDF5Wrapper: default STIR effective ring radius is " + std::to_string(scanner_sptr->get_effective_ring_radius()) +
+ ", while RDF says " + std::to_string(effective_ring_diameter / 2) +
+ "\nWill adjust scanner info to fit with the RDF file using default average DOI of " + std::to_string(def_DOI) + "mm");
+ scanner_sptr->set_inner_ring_radius((effective_ring_diameter / 2) - def_DOI);
+ scanner_sptr->set_average_depth_of_interaction(def_DOI);
+ }
+ if (scanner_sptr->get_default_bin_size() <= 0.F) {
+ warning("GEHDF5Wrapper: default bin-size is not set. This will create trouble for FBP etc");
+ }
+ if (scanner_sptr->get_default_num_arccorrected_bins() <= 0) {
+ warning("GEHDF5Wrapper: default num_arccorrected bins is not set. This will create trouble for FBP etc");
+ }
+ if (scanner_sptr->get_energy_resolution() <= 0) {
+ warning("GEHDF5Wrapper: energy resolution is not set. This will create trouble for scatter estimation");
+ }
+
+ return scanner_sptr;
}
-void GEHDF5Wrapper::initialise_proj_data_info_from_HDF5()
-{
+void
+GEHDF5Wrapper::initialise_proj_data_info_from_HDF5() {
shared_ptr scanner_sptr = get_scanner_from_HDF5();
this->proj_data_info_sptr =
- ProjDataInfo::construct_proj_data_info(scanner_sptr,
- /*span*/ 2,
- /* max_delta*/ scanner_sptr->get_num_rings()-1,
- /* num_views */ scanner_sptr->get_num_detectors_per_ring()/2,
- /* num_tangential_poss */ scanner_sptr->get_max_num_non_arccorrected_bins(),
- /* arc_corrected */ false
- );
- this->proj_data_info_sptr->
- set_bed_position_horizontal(this->read_dataset_int32("/HeaderData/AcqParameters/LandmarkParameters/absTableLongitude")/10.F); /* units in RDF are 0.1 mm */
- //this->proj_data_info_sptr->set_gantry_tilt(this->read_dataset_uint32("/HeaderData/AcqParameters/LandmarkParameters/gantryTilt")); /* units in RDF are 0.25 degrees, patient relative */
- this->proj_data_info_sptr->
- set_bed_position_vertical(this->read_dataset_int32("/HeaderData/AcqParameters/LandmarkParameters/tableElevation")/10.F); /* units in RDF are 0.1 mm */
+ ProjDataInfo::construct_proj_data_info(scanner_sptr,
+ /*span*/ 2,
+ /* max_delta*/ scanner_sptr->get_num_rings() - 1,
+ /* num_views */ scanner_sptr->get_num_detectors_per_ring() / 2,
+ /* num_tangential_poss */ scanner_sptr->get_max_num_non_arccorrected_bins(),
+ /* arc_corrected */ false);
+ this->proj_data_info_sptr->set_bed_position_horizontal(
+ this->read_dataset_int32("/HeaderData/AcqParameters/LandmarkParameters/absTableLongitude") /
+ 10.F); /* units in RDF are 0.1 mm */
+ // this->proj_data_info_sptr->set_gantry_tilt(this->read_dataset_uint32("/HeaderData/AcqParameters/LandmarkParameters/gantryTilt"));
+ // /* units in RDF are 0.25 degrees, patient relative */
+ this->proj_data_info_sptr->set_bed_position_vertical(
+ this->read_dataset_int32("/HeaderData/AcqParameters/LandmarkParameters/tableElevation") /
+ 10.F); /* units in RDF are 0.1 mm */
}
-unsigned int GEHDF5Wrapper::get_num_singles_samples()
-{
- return m_num_singles_samples;
+unsigned int
+GEHDF5Wrapper::get_num_singles_samples() {
+ return m_num_singles_samples;
}
-
-void GEHDF5Wrapper::initialise_exam_info()
-{
- this->exam_info_sptr.reset(new ExamInfo());
- this->exam_info_sptr->imaging_modality = ImagingModality(ImagingModality::PT);
- {
- const std::uint32_t patientEntry = read_dataset_uint32("/HeaderData/AcqParameters/LandmarkParameters/patientEntry");
- const std::uint32_t patientPosition = read_dataset_uint32("/HeaderData/AcqParameters/LandmarkParameters/patientPosition");
- PatientPosition::OrientationValue orientation;
- PatientPosition::RotationValue rotation;
- switch (patientEntry)
- {
- case AcqPatientEntries::ACQ_HEAD_FIRST: orientation = PatientPosition::OrientationValue::head_in; break;
- case AcqPatientEntries::ACQ_FEET_FIRST: orientation = PatientPosition::OrientationValue::feet_in; break;
- default: orientation = PatientPosition::OrientationValue::unknown_orientation;
- }
- switch (patientPosition)
- {
- case AcqPatientPositions::ACQ_SUPINE: rotation = PatientPosition::RotationValue::supine; break;
- case AcqPatientPositions::ACQ_PRONE: rotation = PatientPosition::RotationValue::prone; break;
- case AcqPatientPositions::ACQ_LEFT_DECUB: rotation = PatientPosition::RotationValue::left; break;
- case AcqPatientPositions::ACQ_RIGHT_DECUB: rotation = PatientPosition::RotationValue::right; break;
- default: rotation = PatientPosition::RotationValue::unknown_rotation; break;
- }
- exam_info_sptr->patient_position = PatientPosition(orientation, rotation);
+void
+GEHDF5Wrapper::initialise_exam_info() {
+ this->exam_info_sptr.reset(new ExamInfo());
+ this->exam_info_sptr->imaging_modality = ImagingModality(ImagingModality::PT);
+ {
+ const std::uint32_t patientEntry = read_dataset_uint32("/HeaderData/AcqParameters/LandmarkParameters/patientEntry");
+ const std::uint32_t patientPosition = read_dataset_uint32("/HeaderData/AcqParameters/LandmarkParameters/patientPosition");
+ PatientPosition::OrientationValue orientation;
+ PatientPosition::RotationValue rotation;
+ switch (patientEntry) {
+ case AcqPatientEntries::ACQ_HEAD_FIRST:
+ orientation = PatientPosition::OrientationValue::head_in;
+ break;
+ case AcqPatientEntries::ACQ_FEET_FIRST:
+ orientation = PatientPosition::OrientationValue::feet_in;
+ break;
+ default:
+ orientation = PatientPosition::OrientationValue::unknown_orientation;
+ }
+ switch (patientPosition) {
+ case AcqPatientPositions::ACQ_SUPINE:
+ rotation = PatientPosition::RotationValue::supine;
+ break;
+ case AcqPatientPositions::ACQ_PRONE:
+ rotation = PatientPosition::RotationValue::prone;
+ break;
+ case AcqPatientPositions::ACQ_LEFT_DECUB:
+ rotation = PatientPosition::RotationValue::left;
+ break;
+ case AcqPatientPositions::ACQ_RIGHT_DECUB:
+ rotation = PatientPosition::RotationValue::right;
+ break;
+ default:
+ rotation = PatientPosition::RotationValue::unknown_rotation;
+ break;
}
- // PW Get the high and low energy threshold values from HDF5 header.
- unsigned int low_energy_thres = 0;
- unsigned int high_energy_thres = 0;
+ exam_info_sptr->patient_position = PatientPosition(orientation, rotation);
+ }
+ // PW Get the high and low energy threshold values from HDF5 header.
+ unsigned int low_energy_thres = 0;
+ unsigned int high_energy_thres = 0;
+
+ H5::DataSet str_low_energy_thres = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/lower_energy_limit");
+ H5::DataSet str_high_energy_thres = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/upper_energy_limit");
+
+ str_low_energy_thres.read(&low_energy_thres, H5::PredType::NATIVE_UINT32);
+ str_high_energy_thres.read(&high_energy_thres, H5::PredType::NATIVE_UINT32);
+
+ // PW Set these values in exam_info_sptr.
+ exam_info_sptr->set_high_energy_thres(static_cast(high_energy_thres));
+ exam_info_sptr->set_low_energy_thres(static_cast(low_energy_thres));
+
+ // read time since 1970
+ std::uint32_t scanStartTime = 0;
+ H5::DataSet scanStartTime_dataset = file.openDataSet("/HeaderData/AcqStats/scanStartTime");
+ scanStartTime_dataset.read(&scanStartTime, H5::PredType::NATIVE_UINT32);
+ exam_info_sptr->start_time_in_secs_since_1970 = double(scanStartTime);
+
+ // get time frame
+ std::uint32_t frameStartTime = 0;
+ std::uint32_t frameDuration = 0;
+ H5::DataSet frameStartTime_dataset = file.openDataSet("/HeaderData/AcqStats/frameStartTime");
+ H5::DataSet frameDuration_dataset = file.openDataSet("/HeaderData/AcqStats/frameDuration");
+
+ frameStartTime_dataset.read(&frameStartTime, H5::PredType::NATIVE_UINT32);
+ frameDuration_dataset.read(&frameDuration, H5::PredType::NATIVE_UINT32);
+ const double frame_start_time = double(frameStartTime - scanStartTime);
+
+ std::vector> tf{{frame_start_time, frame_start_time + frameDuration / 1000}};
+
+ TimeFrameDefinitions tm(tf);
+ exam_info_sptr->set_time_frame_definitions(tm);
+}
- H5::DataSet str_low_energy_thres = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/lower_energy_limit");
- H5::DataSet str_high_energy_thres = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/upper_energy_limit");
+Succeeded
+GEHDF5Wrapper::initialise_listmode_data() {
+ if (!is_list_file())
+ error("The file provided is not listmode. Aborting");
+
+ if (rdf_ver == 9) {
+ m_address = "/ListData/listData";
+ // These values are not in the file are come from info shared by GE.
+ m_size_of_record_signature = 6;
+ m_max_size_of_record = 16;
+
+ unsigned int num_time_slices = 0;
+ H5::DataSet timeframe_dataspace = file.openDataSet("/HeaderData/SinglesHeader/numValidSamples");
+ timeframe_dataspace.read(&num_time_slices, H5::PredType::NATIVE_UINT32);
+ if (num_time_slices == 0) {
+ error("Zero number of valid samples singles samples in data. Aborting");
+ }
- str_low_energy_thres.read(&low_energy_thres, H5::PredType::NATIVE_UINT32);
- str_high_energy_thres.read(&high_energy_thres, H5::PredType::NATIVE_UINT32);
+ m_num_singles_samples = num_time_slices;
- // PW Set these values in exam_info_sptr.
- exam_info_sptr->set_high_energy_thres(static_cast(high_energy_thres));
- exam_info_sptr->set_low_energy_thres(static_cast(low_energy_thres));
+ } else
+ return Succeeded::no;
- // read time since 1970
- std::uint32_t scanStartTime = 0;
- H5::DataSet scanStartTime_dataset = file.openDataSet("/HeaderData/AcqStats/scanStartTime");
- scanStartTime_dataset.read(&scanStartTime, H5::PredType::NATIVE_UINT32);
- exam_info_sptr->start_time_in_secs_since_1970=double(scanStartTime);
+ m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address)));
- // get time frame
- std::uint32_t frameStartTime = 0;
- std::uint32_t frameDuration = 0;
- H5::DataSet frameStartTime_dataset = file.openDataSet("/HeaderData/AcqStats/frameStartTime");
- H5::DataSet frameDuration_dataset = file.openDataSet("/HeaderData/AcqStats/frameDuration");
+ m_dataspace = m_dataset_sptr->getSpace();
+ int dataset_list_Ndims = m_dataspace.getSimpleExtentNdims();
- frameStartTime_dataset.read(&frameStartTime, H5::PredType::NATIVE_UINT32);
- frameDuration_dataset.read(&frameDuration, H5::PredType::NATIVE_UINT32);
- const double frame_start_time = double(frameStartTime - scanStartTime);
+ // We allocate dims_out in the stack for efficiecy and safety but we need an error check just in case then
+ if (dataset_list_Ndims > m_max_dataset_dims)
+ error("Dataset dimensions (" + std::to_string(dataset_list_Ndims) + ") bigger than maximum of" +
+ std::to_string(m_max_dataset_dims) + ". This is unexpected, Aborting.");
+ hsize_t dims_out[m_max_dataset_dims];
- std::vector >tf{{frame_start_time,frame_start_time+frameDuration/1000}};
+ m_dataspace.getSimpleExtentDims(dims_out, NULL);
+ m_list_size = dims_out[0];
+ const hsize_t tmp_size_of_record_signature = m_size_of_record_signature;
+ m_memspace_ptr = new H5::DataSpace(dataset_list_Ndims, &tmp_size_of_record_signature);
- TimeFrameDefinitions tm(tf);
- exam_info_sptr->set_time_frame_definitions(tm);
+ return Succeeded::yes;
}
-Succeeded GEHDF5Wrapper::initialise_listmode_data()
-{
- if(!is_list_file())
- error("The file provided is not listmode. Aborting");
-
- if(rdf_ver==9)
- {
- m_address = "/ListData/listData";
- // These values are not in the file are come from info shared by GE.
- m_size_of_record_signature = 6;
- m_max_size_of_record = 16;
-
- unsigned int num_time_slices = 0;
- H5::DataSet timeframe_dataspace = file.openDataSet("/HeaderData/SinglesHeader/numValidSamples");
- timeframe_dataspace.read(&num_time_slices, H5::PredType::NATIVE_UINT32);
- if(num_time_slices==0)
- {
- error("Zero number of valid samples singles samples in data. Aborting");
- }
-
- m_num_singles_samples=num_time_slices;
-
- }
- else
- return Succeeded::no;
+Succeeded
+GEHDF5Wrapper::initialise_singles_data() {
- m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address)));
+ if (!is_list_file() && !is_sino_file())
+ error("The file provided is not listmode or sinogram data. Aborting");
+ if (rdf_ver == 9) {
+ m_address = "/Singles/CrystalSingles/sample";
+ // Get the DataSpace (metadata) corresponding to the DataSet that we want to read
+ m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address + "1")));
m_dataspace = m_dataset_sptr->getSpace();
- int dataset_list_Ndims = m_dataspace.getSimpleExtentNdims();
-
- // We allocate dims_out in the stack for efficiecy and safety but we need an error check just in case then
- if (dataset_list_Ndims>m_max_dataset_dims)
- error("Dataset dimensions ("+ std::to_string(dataset_list_Ndims) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) + ". This is unexpected, Aborting.");
- hsize_t dims_out[m_max_dataset_dims];
-
- m_dataspace.getSimpleExtentDims( dims_out, NULL);
- m_list_size=dims_out[0];
- const hsize_t tmp_size_of_record_signature = m_size_of_record_signature;
- m_memspace_ptr = new H5::DataSpace( dataset_list_Ndims,
- &tmp_size_of_record_signature);
-
- return Succeeded::yes;
-}
-
-Succeeded GEHDF5Wrapper::initialise_singles_data()
-{
-
- if(!is_list_file() && !is_sino_file())
- error("The file provided is not listmode or sinogram data. Aborting");
-
- if(rdf_ver==9)
- {
- m_address = "/Singles/CrystalSingles/sample";
- // Get the DataSpace (metadata) corresponding to the DataSet that we want to read
- m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address + "1")));
- m_dataspace = m_dataset_sptr->getSpace();
- // Create an array to host the size of the dimensions
- const int rank = m_dataspace.getSimpleExtentNdims();
- // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
- if (rank>m_max_dataset_dims)
- error("Dataset dimensions ("+ std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) + ". This is unexpected, Aborting.");
- hsize_t dims[m_max_dataset_dims];
- // Read size of dimensions
- m_dataspace.getSimpleExtentDims( dims, NULL);
-
- m_NX_SUB = dims[0]; // hyperslab dimensions
- m_NY_SUB = dims[1];
- m_NZ_SUB = (rank==2)? 1 : dims[2]; // Signa has rank==2, but this stay shere just in case...
-
-
- unsigned int num_time_slices = 0;
- H5::DataSet timeframe_dataspace = file.openDataSet("/HeaderData/SinglesHeader/numValidSamples");
- timeframe_dataspace.read(&num_time_slices, H5::PredType::NATIVE_UINT32);
- if(num_time_slices==0)
- {
- error("Zero number of valid samples singles samples in data. Aborting");
- }
+ // Create an array to host the size of the dimensions
+ const int rank = m_dataspace.getSimpleExtentNdims();
+ // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
+ if (rank > m_max_dataset_dims)
+ error("Dataset dimensions (" + std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) +
+ ". This is unexpected, Aborting.");
+ hsize_t dims[m_max_dataset_dims];
+ // Read size of dimensions
+ m_dataspace.getSimpleExtentDims(dims, NULL);
+
+ m_NX_SUB = dims[0]; // hyperslab dimensions
+ m_NY_SUB = dims[1];
+ m_NZ_SUB = (rank == 2) ? 1 : dims[2]; // Signa has rank==2, but this stay shere just in case...
+
+ unsigned int num_time_slices = 0;
+ H5::DataSet timeframe_dataspace = file.openDataSet("/HeaderData/SinglesHeader/numValidSamples");
+ timeframe_dataspace.read(&num_time_slices, H5::PredType::NATIVE_UINT32);
+ if (num_time_slices == 0) {
+ error("Zero number of valid samples singles samples in data. Aborting");
+ }
- m_num_singles_samples=num_time_slices;
+ m_num_singles_samples = num_time_slices;
#if 0
m_NX = dims[0]; // output buffer dimensions
m_NY = dims[1];
m_NZ = (rank==2)? 1 : dims[2];
#endif
- }
- else
- return Succeeded::no;
+ } else
+ return Succeeded::no;
- return Succeeded::yes;
+ return Succeeded::yes;
}
-Succeeded GEHDF5Wrapper::initialise_proj_data(const unsigned int view_num)
-{
- if(!is_sino_file())
- error("The file provided is not sinogram data. Aborting");
+Succeeded
+GEHDF5Wrapper::initialise_proj_data(const unsigned int view_num) {
+ if (!is_sino_file())
+ error("The file provided is not sinogram data. Aborting");
- if(view_num == 0 || view_num > static_cast(this->get_scanner_sptr()->get_num_detectors_per_ring()/2))
- error("internal error in GE HDF5 code: view number "+ std::to_string(view_num) +" is incorrect");
+ if (view_num == 0 || view_num > static_cast(this->get_scanner_sptr()->get_num_detectors_per_ring() / 2))
+ error("internal error in GE HDF5 code: view number " + std::to_string(view_num) + " is incorrect");
- if(rdf_ver==9)
- {
- m_address = "/SegmentData/Segment2/3D_TOF_Sinogram/view" + std::to_string(view_num);
-
- m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address)));
- m_dataspace = m_dataset_sptr->getSpace();
- // Create an array to host the size of the dimensions
- const int rank = m_dataspace.getSimpleExtentNdims();
- // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
- if (rank>m_max_dataset_dims)
- error("Dataset dimensions ("+ std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) + ". This is unexpected, Aborting.");
- hsize_t dims[m_max_dataset_dims];
- // Read size of dimensions
- m_dataspace.getSimpleExtentDims( dims, NULL);
-
- // AB for signa, these where [1981,27,357] and [45,448,357]
- m_NX_SUB = dims[0] ; // hyperslab dimensions
- m_NY_SUB = dims[1];
- m_NZ_SUB = dims[2];
+ if (rdf_ver == 9) {
+ m_address = "/SegmentData/Segment2/3D_TOF_Sinogram/view" + std::to_string(view_num);
+
+ m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address)));
+ m_dataspace = m_dataset_sptr->getSpace();
+ // Create an array to host the size of the dimensions
+ const int rank = m_dataspace.getSimpleExtentNdims();
+ // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
+ if (rank > m_max_dataset_dims)
+ error("Dataset dimensions (" + std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) +
+ ". This is unexpected, Aborting.");
+ hsize_t dims[m_max_dataset_dims];
+ // Read size of dimensions
+ m_dataspace.getSimpleExtentDims(dims, NULL);
+
+ // AB for signa, these where [1981,27,357] and [45,448,357]
+ m_NX_SUB = dims[0]; // hyperslab dimensions
+ m_NY_SUB = dims[1];
+ m_NZ_SUB = dims[2];
#if 0
// AB todo: ??? why are these different?
m_NX = 45; // output buffer dimensions
m_NY = 448;
m_NZ = 357;
#endif
- }
- else
- return Succeeded::no;
+ } else
+ return Succeeded::no;
- return Succeeded::yes;
+ return Succeeded::yes;
}
// PW The geo factors are stored in geo3d file under the file path called /SegmentData/Segment4/3D_Norm_correction/slice%d where
// slice numbers go from 1 to 16. Here this path is initialised, along with the output buffer and hyperslab.
//
-Succeeded GEHDF5Wrapper::initialise_geo_factors_data(const unsigned int slice_num)
-{
- if(!is_geo_file())
- error("The file provided is not geometry data. Aborting");
+Succeeded
+GEHDF5Wrapper::initialise_geo_factors_data(const unsigned int slice_num) {
+ if (!is_geo_file())
+ error("The file provided is not geometry data. Aborting");
- if(slice_num == 0)
- error("internal error in GE HDF5 geo code: slice number "+ std::to_string(slice_num) +" is incorrect");
+ if (slice_num == 0)
+ error("internal error in GE HDF5 geo code: slice number " + std::to_string(slice_num) + " is incorrect");
- if(rdf_ver==9)
+ if (rdf_ver == 9) {
+ m_address = "/SegmentData/Segment4/3D_Norm_Correction/slice";
{
- m_address = "/SegmentData/Segment4/3D_Norm_Correction/slice";
- {
- // Open Dataset and get Dataspace(metadata)
- m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address + std::to_string(slice_num))));
- m_dataspace = m_dataset_sptr->getSpace();
-
- // Read dimensions
- const int rank = m_dataspace.getSimpleExtentNdims();
- // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
- if (rank>m_max_dataset_dims)
- error("Dataset dimensions ("+ std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) + ". This is unexpected, Aborting.");
- hsize_t dims[m_max_dataset_dims];
-
- m_dataspace.getSimpleExtentDims( dims, NULL);
-
- m_NX_SUB = dims[0]; // hyperslab dimensions
- m_NY_SUB = dims[1];
- m_NZ_SUB = (rank==2)? 1 : dims[2]; // Signa has rank==2, but this stay shere just in case...
+ // Open Dataset and get Dataspace(metadata)
+ m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address + std::to_string(slice_num))));
+ m_dataspace = m_dataset_sptr->getSpace();
+
+ // Read dimensions
+ const int rank = m_dataspace.getSimpleExtentNdims();
+ // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
+ if (rank > m_max_dataset_dims)
+ error("Dataset dimensions (" + std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) +
+ ". This is unexpected, Aborting.");
+ hsize_t dims[m_max_dataset_dims];
+
+ m_dataspace.getSimpleExtentDims(dims, NULL);
+
+ m_NX_SUB = dims[0]; // hyperslab dimensions
+ m_NY_SUB = dims[1];
+ m_NZ_SUB = (rank == 2) ? 1 : dims[2]; // Signa has rank==2, but this stay shere just in case...
#if 0
m_NX = dims[0]; // output buffer dimensions
m_NY = dims[1];
m_NZ = (rank==2)? 1 : dims[2]; // Signa has rank==2, but this stay shere just in case...
#endif
- }
}
- else
- return Succeeded::no;
+ } else
+ return Succeeded::no;
- return Succeeded::yes;
+ return Succeeded::yes;
}
// This info is in norm3d file
-Succeeded GEHDF5Wrapper::initialise_efficiency_factors()
-{
- if(!is_norm_file())
- error("The file provided is not norm data. Aborting");
+Succeeded
+GEHDF5Wrapper::initialise_efficiency_factors() {
+ if (!is_norm_file())
+ error("The file provided is not norm data. Aborting");
- if(rdf_ver==9)
- {
-
- m_address = "/3DCrystalEfficiency/crystalEfficiency";
- // Get the DataSpace (metadata) corresponding to the DataSet that we want to read
- m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address)));
- m_dataspace = m_dataset_sptr->getSpace();
- // Create an array to host the size of the dimensions
- const int rank = m_dataspace.getSimpleExtentNdims();
- // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
- if (rank>m_max_dataset_dims)
- error("Dataset dimensions ("+ std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) + ". This is unexpected, Aborting.");
- hsize_t dims[m_max_dataset_dims];
- // Read size of dimensions
- m_dataspace.getSimpleExtentDims( dims, NULL);
-
-
- m_NX_SUB = dims[0]; // hyperslab dimensions
- // TODO: Why is this divided by 2??
- m_NY_SUB = dims[1]/2; // should be equal to scanner_sptr->get_num_detectors_per_ring();
- m_NZ_SUB = (rank==2)? 1 : dims[2];
+ if (rdf_ver == 9) {
+
+ m_address = "/3DCrystalEfficiency/crystalEfficiency";
+ // Get the DataSpace (metadata) corresponding to the DataSet that we want to read
+ m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address)));
+ m_dataspace = m_dataset_sptr->getSpace();
+ // Create an array to host the size of the dimensions
+ const int rank = m_dataspace.getSimpleExtentNdims();
+ // We allocate dims in the stack for efficiecy and safety but we need an error check just in case then
+ if (rank > m_max_dataset_dims)
+ error("Dataset dimensions (" + std::to_string(rank) + ") bigger than maximum of" + std::to_string(m_max_dataset_dims) +
+ ". This is unexpected, Aborting.");
+ hsize_t dims[m_max_dataset_dims];
+ // Read size of dimensions
+ m_dataspace.getSimpleExtentDims(dims, NULL);
+
+ m_NX_SUB = dims[0]; // hyperslab dimensions
+ // TODO: Why is this divided by 2??
+ m_NY_SUB = dims[1] / 2; // should be equal to scanner_sptr->get_num_detectors_per_ring();
+ m_NZ_SUB = (rank == 2) ? 1 : dims[2];
#if 0
m_NX = dims[0]; // output buffer dimensions
m_NY = dims[1]/2; // should be equal to scanner_sptr->get_num_detectors_per_ring();
m_NZ = (rank==2)? 1 : dims[2];
#endif
- }
- else
- return Succeeded::no;
-
+ } else
+ return Succeeded::no;
- return Succeeded::yes;
+ return Succeeded::yes;
}
-float GEHDF5Wrapper::get_coincidence_time_window() const
-{
- if(!is_list_file() && !is_sino_file())
- error("The file provided is not list or sino data. Aborting");
+float
+GEHDF5Wrapper::get_coincidence_time_window() const {
+ if (!is_list_file() && !is_sino_file())
+ error("The file provided is not list or sino data. Aborting");
- H5::DataSet ds_coincTimingPrecision = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/coincTimingPrecision");
- H5::DataSet ds_posCoincidenceWindow = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/posCoincidenceWindow");
- float coincTimingPrecision = 0;
- int posCoincidenceWindow = 0;
- ds_coincTimingPrecision.read(&coincTimingPrecision,H5::PredType::NATIVE_FLOAT);
- ds_posCoincidenceWindow.read(&posCoincidenceWindow,H5::PredType::NATIVE_INT32);
+ H5::DataSet ds_coincTimingPrecision = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/coincTimingPrecision");
+ H5::DataSet ds_posCoincidenceWindow = file.openDataSet("/HeaderData/AcqParameters/EDCATParameters/posCoincidenceWindow");
+ float coincTimingPrecision = 0;
+ int posCoincidenceWindow = 0;
+ ds_coincTimingPrecision.read(&coincTimingPrecision, H5::PredType::NATIVE_FLOAT);
+ ds_posCoincidenceWindow.read(&posCoincidenceWindow, H5::PredType::NATIVE_INT32);
- return (2*posCoincidenceWindow+1) *coincTimingPrecision*1e-9;
+ return (2 * posCoincidenceWindow + 1) * coincTimingPrecision * 1e-9;
}
-
// Developed for listmode access
-Succeeded GEHDF5Wrapper::read_list_data( char* output,std::streampos& current_offset, const hsize_t size) const
-{
- if(!is_list_file())
- error("The file provided is not list data. Aborting");
- hsize_t pos = static_cast(current_offset);
- m_dataspace.selectHyperslab( H5S_SELECT_SET, &size, &pos );
- m_dataset_sptr->read( output, H5::PredType::STD_U8LE, *m_memspace_ptr, m_dataspace );
- current_offset += static_cast(size);
-
- return Succeeded::yes;
+Succeeded
+GEHDF5Wrapper::read_list_data(char* output, std::streampos& current_offset, const hsize_t size) const {
+ if (!is_list_file())
+ error("The file provided is not list data. Aborting");
+ hsize_t pos = static_cast(current_offset);
+ m_dataspace.selectHyperslab(H5S_SELECT_SET, &size, &pos);
+ m_dataset_sptr->read(output, H5::PredType::STD_U8LE, *m_memspace_ptr, m_dataspace);
+ current_offset += static_cast(size);
+
+ return Succeeded::yes;
}
// Developed for ProjData
-Succeeded GEHDF5Wrapper::read_sinogram(Array<3, unsigned char> &output,
- const std::array& offset,
- const std::array& stride)
-{
- // AB: this is only used for proj data, so for now lets ensure the file is sino. If its reused, we can change this.
- if(!is_sino_file())
- error("File is not sinogram. Aborting");
-
- if(offset[0] != 0 || offset[1] != 0 || offset[2] != 0) //AB there are other C++ ways of doing this, but this is the most readable really.
- error("Only {0,0,0} offset supported. Aborting");
- if(stride[0] != 1 || stride[1] != 1 || stride[2] != 1)
- error("Only {1,1,1} stride supported. Aborting");
-
- // We know the size of the DataSpace
- hsize_t str_dimsf[3] {m_NX_SUB, m_NY_SUB, m_NZ_SUB} ;
-
-
- // get a temporary buffer here,
- std::vector aux_buffer(m_NX_SUB*m_NY_SUB*m_NZ_SUB);
-
- m_dataspace.selectHyperslab(H5S_SELECT_SET, str_dimsf, offset.data());
- m_memspace_ptr= new H5::DataSpace(3, str_dimsf);
- m_dataset_sptr->read(static_cast(aux_buffer.data()), H5::PredType::STD_U8LE, *m_memspace_ptr, m_dataspace);
-
- // the data is not in the correct size if its RDF9, so we will need to transpose the output of the data read.
- if(rdf_ver==9)
- {
- output.resize(IndexRange3D(m_NZ_SUB,m_NY_SUB,m_NX_SUB));
- // now transpose the output.
- // AB: todo
- // todo 1: test
- for(unsigned int i=0;i& output, const std::array& offset,
+ const std::array& stride) {
+ // AB: this is only used for proj data, so for now lets ensure the file is sino. If its reused, we can change this.
+ if (!is_sino_file())
+ error("File is not sinogram. Aborting");
+
+ if (offset[0] != 0 || offset[1] != 0 ||
+ offset[2] != 0) // AB there are other C++ ways of doing this, but this is the most readable really.
+ error("Only {0,0,0} offset supported. Aborting");
+ if (stride[0] != 1 || stride[1] != 1 || stride[2] != 1)
+ error("Only {1,1,1} stride supported. Aborting");
+
+ // We know the size of the DataSpace
+ hsize_t str_dimsf[3]{m_NX_SUB, m_NY_SUB, m_NZ_SUB};
+
+ // get a temporary buffer here,
+ std::vector aux_buffer(m_NX_SUB * m_NY_SUB * m_NZ_SUB);
+
+ m_dataspace.selectHyperslab(H5S_SELECT_SET, str_dimsf, offset.data());
+ m_memspace_ptr = new H5::DataSpace(3, str_dimsf);
+ m_dataset_sptr->read(static_cast(aux_buffer.data()), H5::PredType::STD_U8LE, *m_memspace_ptr, m_dataspace);
+
+ // the data is not in the correct size if its RDF9, so we will need to transpose the output of the data read.
+ if (rdf_ver == 9) {
+ output.resize(IndexRange3D(m_NZ_SUB, m_NY_SUB, m_NX_SUB));
+ // now transpose the output.
+ // AB: todo
+ // todo 1: test
+ for (unsigned int i = 0; i < m_NZ_SUB; ++i) {
+ unsigned int ioffset = i * m_NX_SUB * m_NY_SUB;
+ for (unsigned int j = 0; j < m_NY_SUB; ++j) {
+ unsigned int joffset = j * m_NX_SUB;
+ for (unsigned int k = 0; k < m_NX_SUB; ++k) {
+ output[i][j][k] = aux_buffer[ioffset + joffset + k];
}
- output.release_data_ptr();
+ }
}
-
+ output.release_data_ptr();
+ }
- return Succeeded::yes;
+ return Succeeded::yes;
}
+// PW Developed for Geometric Correction Factors
+Succeeded
+GEHDF5Wrapper::read_geometric_factors(Array<1, unsigned int>& output, const std::array& offset,
+ const std::array& count, const std::array& stride)
-//PW Developed for Geometric Correction Factors
-Succeeded GEHDF5Wrapper::read_geometric_factors(Array<1, unsigned int> &output,
- const std::array& offset,
- const std::array& count,
- const std::array& stride)
-
{
- // AB: this is only used for geo data, so for now lets ensure the file is sino. If its reused, we can change this.
- if(!is_geo_file())
- error("File is Geometry. Aborting");
-
- if(count[0] == 0 || count[1] == 0) //AB there are other C++ ways of doing this, but this is the most readable really.
- error("Requested zero data to read. Aborting");
- if(stride[0] != 1 || stride[1] != 1)
- error("Only {1,1} stride supported. Aborting");
-
- Array<1, unsigned int> aux_reader;
- output.resize(count[0]*count[1]);
- aux_reader.resize(count[0]*count[1]);
-
- m_dataspace.selectHyperslab(H5S_SELECT_SET, count.data(), offset.data());
- m_memspace_ptr= new H5::DataSpace(2, count.data());
- m_dataset_sptr->read(aux_reader.get_data_ptr(), H5::PredType::NATIVE_UINT32, *m_memspace_ptr, m_dataspace);
- aux_reader.release_data_ptr();
-
- // GE/RDF9 stores the tangetial axis reversed to STIR. Flip.
- for(unsigned int ax=0;ax aux_reader;
+ output.resize(count[0] * count[1]);
+ aux_reader.resize(count[0] * count[1]);
+
+ m_dataspace.selectHyperslab(H5S_SELECT_SET, count.data(), offset.data());
+ m_memspace_ptr = new H5::DataSpace(2, count.data());
+ m_dataset_sptr->read(aux_reader.get_data_ptr(), H5::PredType::NATIVE_UINT32, *m_memspace_ptr, m_dataspace);
+ aux_reader.release_data_ptr();
+
+ // GE/RDF9 stores the tangetial axis reversed to STIR. Flip.
+ for (unsigned int ax = 0; ax < count[0]; ++ax)
+ for (unsigned int tan = 0; tan < count[1]; ++tan)
+ output[ax * count[1] + ((count[1] - 1) - tan)] = aux_reader[ax * count[1] + tan];
+ return Succeeded::yes;
}
-//PW Developed for Efficiency Factors
-Succeeded GEHDF5Wrapper::read_efficiency_factors(Array<1, float> &output,
- const std::array& offset,
- const std::array& stride)
-
-{
- if(!is_norm_file())
- error("The file provided is not norm data. Aborting");
-
- if(offset[0] != 0 || offset[1] != 0) //AB there are other C++ ways of doing this, but this is the most readable really.
- error("Only {0,0} offset supported. Aborting");
- if(stride[0] != 1 || stride[1] != 1)
- error("Only {1,1} stride supported. Aborting");
-
- // We know the size of the DataSpace
- hsize_t str_dimsf[2] {m_NX_SUB, m_NY_SUB} ;
- Array<1, float> aux_reader;
- output.resize(m_NX_SUB*m_NY_SUB);
- aux_reader.resize(m_NX_SUB*m_NY_SUB);
-
- m_dataspace.selectHyperslab(H5S_SELECT_SET, str_dimsf, offset.data());
- m_memspace_ptr= new H5::DataSpace(2, str_dimsf);
- m_dataset_sptr->read(aux_reader.get_data_ptr(), H5::PredType::NATIVE_FLOAT, *m_memspace_ptr, m_dataspace);
- aux_reader.release_data_ptr();
-
- // GE/RDF9 stores the tangetial axis reversed to STIR. Flip.
- for(unsigned int ax=0;ax& output, const std::array& offset,
+ const std::array& stride)
- return Succeeded::yes;
+{
+ if (!is_norm_file())
+ error("The file provided is not norm data. Aborting");
+
+ if (offset[0] != 0 || offset[1] != 0) // AB there are other C++ ways of doing this, but this is the most readable really.
+ error("Only {0,0} offset supported. Aborting");
+ if (stride[0] != 1 || stride[1] != 1)
+ error("Only {1,1} stride supported. Aborting");
+
+ // We know the size of the DataSpace
+ hsize_t str_dimsf[2]{m_NX_SUB, m_NY_SUB};
+ Array<1, float> aux_reader;
+ output.resize(m_NX_SUB * m_NY_SUB);
+ aux_reader.resize(m_NX_SUB * m_NY_SUB);
+
+ m_dataspace.selectHyperslab(H5S_SELECT_SET, str_dimsf, offset.data());
+ m_memspace_ptr = new H5::DataSpace(2, str_dimsf);
+ m_dataset_sptr->read(aux_reader.get_data_ptr(), H5::PredType::NATIVE_FLOAT, *m_memspace_ptr, m_dataspace);
+ aux_reader.release_data_ptr();
+
+ // GE/RDF9 stores the tangetial axis reversed to STIR. Flip.
+ for (unsigned int ax = 0; ax < m_NX_SUB; ++ax)
+ for (unsigned int tan = 0; tan < m_NY_SUB; ++tan)
+ output[ax * m_NY_SUB + ((m_NY_SUB - 1) - tan)] = aux_reader[ax * m_NY_SUB + tan];
+
+ return Succeeded::yes;
}
// Developed for Singles
-Succeeded GEHDF5Wrapper::read_singles(Array<1, unsigned int>& output, const unsigned int current_id)
-{
- BOOST_STATIC_ASSERT(sizeof(unsigned int)==4); // Compilation time assert.
- if(!is_list_file()&& !is_sino_file())
- error("The file provided is not listmode or sinogram data. Aborting");
+Succeeded
+GEHDF5Wrapper::read_singles(Array<1, unsigned int>& output, const unsigned int current_id) {
+ BOOST_STATIC_ASSERT(sizeof(unsigned int) == 4); // Compilation time assert.
+ if (!is_list_file() && !is_sino_file())
+ error("The file provided is not listmode or sinogram data. Aborting");
- if(current_id == 0 || current_id > this->m_num_singles_samples)
- error("internal error in GE HDF5 code: singles slice_id "+ std::to_string(current_id) +" is incorrect");
+ if (current_id == 0 || current_id > this->m_num_singles_samples)
+ error("internal error in GE HDF5 code: singles slice_id " + std::to_string(current_id) + " is incorrect");
- Array<1, unsigned int> aux_reader;
- output.resize(m_NX_SUB*m_NY_SUB);
- aux_reader.resize(m_NX_SUB*m_NY_SUB);
+ Array<1, unsigned int> aux_reader;
+ output.resize(m_NX_SUB * m_NY_SUB);
+ aux_reader.resize(m_NX_SUB * m_NY_SUB);
- // AB: todo check if output allocated data size is correct.
- m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address + std::to_string(current_id))));
- m_dataset_sptr->read(aux_reader.get_data_ptr(), H5::PredType::NATIVE_UINT32);
- aux_reader.release_data_ptr();
+ // AB: todo check if output allocated data size is correct.
+ m_dataset_sptr.reset(new H5::DataSet(file.openDataSet(m_address + std::to_string(current_id))));
+ m_dataset_sptr->read(aux_reader.get_data_ptr(), H5::PredType::NATIVE_UINT32);
+ aux_reader.release_data_ptr();
- // GE/RDF9 stores the tangetial axis reversed to STIR. Flip.
- for(unsigned int ax=0;axm_image_type=data_type_case;
- this->MaxLength=num_voxels;
- if(this->m_image_type == 64)
- {
- vData_f = new float[this->MaxLength];
- for (int i = 0; i < this->MaxLength; i++)
- this->vData_f[i] = 0.F;
- vData = NULL;
- }
- else if(this->m_image_type == 15)
- {
- vData = new short[this->MaxLength];
- for (int i = 0; i < this->MaxLength; i++)
- this->vData[i] = 0;
- vData_f = NULL;
- }
- else
- {
- vData = NULL;
- vData_f = NULL;
- }
- vDownsample[0] = 1;
- vDownsample[1] = 1;
- vDownsample[2] = 1;
-
- vCenter[0] = 0;
- vCenter[1] = 0;
- vCenter[2] = 0;
- vCenter[3] = 0;
+Image::Image(const int num_voxels, const short data_type_case) {
+ this->m_image_type = data_type_case;
+ this->MaxLength = num_voxels;
+ if (this->m_image_type == 64) {
+ vData_f = new float[this->MaxLength];
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData_f[i] = 0.F;
+ vData = NULL;
+ } else if (this->m_image_type == 15) {
+ vData = new short[this->MaxLength];
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData[i] = 0;
+ vData_f = NULL;
+ } else {
+ vData = NULL;
+ vData_f = NULL;
+ }
+ vDownsample[0] = 1;
+ vDownsample[1] = 1;
+ vDownsample[2] = 1;
+
+ vCenter[0] = 0;
+ vCenter[1] = 0;
+ vCenter[2] = 0;
+ vCenter[3] = 0;
}
// -------------------------------------------------------------------------
// Destructor
// -------------------------------------------------------------------------
-Image::~Image()
-{
- if (vData)
- delete[] vData;
- if (vData_f)
- delete[] vData_f;
+Image::~Image() {
+ if (vData)
+ delete[] vData;
+ if (vData_f)
+ delete[] vData_f;
}
// -------------------------------------------------------------------------
@@ -129,547 +121,532 @@ Image::~Image()
// -------------------------------------------------------------------------
/**
-* \brief Read data from GIPL filename.
-*
-* \param filename Input filename
-*/
+ * \brief Read data from GIPL filename.
+ *
+ * \param filename Input filename
+ */
// -------------------------------------------------------------------------
-void Image::GiplRead(char* filename)
-{
- printf("Read %s\n",filename);
-
- // Open input binary file
- std::fstream myFile(filename, std::ios_base::in | std::ios_base::binary);
-
- // Initialize image dimensions by zero
- m_dim[0] = 0;
- m_dim[1] = 0;
- m_dim[2] = 0;
-
- // open file for reading
- /*char *buf;
- try {
- buf = new char[512];
- if( buf == 0 )
- throw "Memory allocation failure!";
- }
- catch( char * str ) {
- cout << "Exception raised: " << str << '\n';
- }*/
-
- // Read gipl header
- ReadGiplHeader(&myFile);
-
- // Require big endian format
- ByteSwapHeader();
-
- // Length of the data to be read in
- MaxLength = m_dim[0]*m_dim[1]*m_dim[2];
-
- // File cannot be read, wrong path or filename
- if (MaxLength == 0)
- {
- printf("Error: File %s cannot be found\n",filename);
- exit(1);
- }
-
- // Update image dimension
- ImageDimension = 2;
- if(m_dim[2]>1) ImageDimension = 3;
-
- // Update parameters dimension
- ParametersDimension = ImageDimension*ImageDimension+ImageDimension;
-
- // Set offset vector
- ImageOffset[0] = m_dim[0]; // XLen
- ImageOffset[1] = m_dim[0]*m_dim[1]; // XLen*YLen
-
- // Set center of rotation of the image
- for (int i = 0; i < ImageDimension; i++)
- vCenter[i] = 0;//m_dim[i]/2.0*m_pixdim[i] - m_origin[i];
-
- // Delete possible old data vectors
- if (vData)
- delete[] vData;
- if (vData_f)
- delete[] vData_f;
-
-
-
- // Check data type
- switch(m_image_type)
- {
- case 15: // shorts (default)
-
- // Initialize image vector
- vData = new short[MaxLength];
-
- // Read image data
- myFile.read((char*)vData, sizeof(short)*MaxLength);
-
- // Swap hi lo bytes
- for( int i = 0; i < MaxLength; i++)
- ByteSwap(&vData[i]);
-
- // Get min and max gray value
- GetMinMaxValue();
-
- break;
-
- case 64: // floats
-
- // Initialize image vector
- vData_f = new float[MaxLength];
-
- // Read image data
- myFile.read((char*)vData_f, sizeof(float)*MaxLength);
-
- // Swap hi lo bytes
- for( int i = 0; i < MaxLength; i++)
- ByteSwap(&vData_f[i]);
-
- break;
-
- default:
- break;
- }
-
- //int SourceIndex = ((int)(5 + 10*ImageOffset[0] + 20*ImageOffset[1]));
- //float test = vData_f[SourceIndex];
-
- // Initially no downscaling
- vDownsample[0] = 1;
- vDownsample[1] = 1;
- vDownsample[2] = 1;
-
- // Close file
- myFile.close();
+void
+Image::GiplRead(char* filename) {
+ printf("Read %s\n", filename);
+
+ // Open input binary file
+ std::fstream myFile(filename, std::ios_base::in | std::ios_base::binary);
+
+ // Initialize image dimensions by zero
+ m_dim[0] = 0;
+ m_dim[1] = 0;
+ m_dim[2] = 0;
+
+ // open file for reading
+ /*char *buf;
+try {
+buf = new char[512];
+if( buf == 0 )
+ throw "Memory allocation failure!";
+}
+catch( char * str ) {
+cout << "Exception raised: " << str << '\n';
+}*/
+
+ // Read gipl header
+ ReadGiplHeader(&myFile);
+
+ // Require big endian format
+ ByteSwapHeader();
+
+ // Length of the data to be read in
+ MaxLength = m_dim[0] * m_dim[1] * m_dim[2];
+
+ // File cannot be read, wrong path or filename
+ if (MaxLength == 0) {
+ printf("Error: File %s cannot be found\n", filename);
+ exit(1);
+ }
+
+ // Update image dimension
+ ImageDimension = 2;
+ if (m_dim[2] > 1)
+ ImageDimension = 3;
+
+ // Update parameters dimension
+ ParametersDimension = ImageDimension * ImageDimension + ImageDimension;
+
+ // Set offset vector
+ ImageOffset[0] = m_dim[0]; // XLen
+ ImageOffset[1] = m_dim[0] * m_dim[1]; // XLen*YLen
+
+ // Set center of rotation of the image
+ for (int i = 0; i < ImageDimension; i++)
+ vCenter[i] = 0; // m_dim[i]/2.0*m_pixdim[i] - m_origin[i];
+
+ // Delete possible old data vectors
+ if (vData)
+ delete[] vData;
+ if (vData_f)
+ delete[] vData_f;
+
+ // Check data type
+ switch (m_image_type) {
+ case 15: // shorts (default)
+
+ // Initialize image vector
+ vData = new short[MaxLength];
+
+ // Read image data
+ myFile.read((char*)vData, sizeof(short) * MaxLength);
+
+ // Swap hi lo bytes
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData[i]);
+
+ // Get min and max gray value
+ GetMinMaxValue();
+
+ break;
+
+ case 64: // floats
+
+ // Initialize image vector
+ vData_f = new float[MaxLength];
+
+ // Read image data
+ myFile.read((char*)vData_f, sizeof(float) * MaxLength);
+
+ // Swap hi lo bytes
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData_f[i]);
+
+ break;
+
+ default:
+ break;
+ }
+
+ // int SourceIndex = ((int)(5 + 10*ImageOffset[0] + 20*ImageOffset[1]));
+ // float test = vData_f[SourceIndex];
+
+ // Initially no downscaling
+ vDownsample[0] = 1;
+ vDownsample[1] = 1;
+ vDownsample[2] = 1;
+
+ // Close file
+ myFile.close();
}
// -------------------------------------------------------------------------
/**
-* \brief Get minimum and maximum gray values in image.
-*/
+ * \brief Get minimum and maximum gray values in image.
+ */
// -------------------------------------------------------------------------
-void Image::GetMinMaxValue()
-{
- iMax = -16959;
- iMin = +16959;
-
- // Check data type
- if(m_image_type == 15)
- {
- for( int i = 0; i < MaxLength; i++)
- {
- if (vData[i] > iMax)
- iMax = vData[i];
- if (vData[i] < iMin)
- iMin = vData[i];
- }
- }
- if(m_image_type == 64)
- {
- for( int i = 0; i < MaxLength; i++)
- {
- if (vData_f[i] > iMax)
- iMax = vData_f[i];
- if (vData_f[i] < iMin)
- iMin = vData_f[i];
- }
- }
+void
+Image::GetMinMaxValue() {
+ iMax = -16959;
+ iMin = +16959;
+
+ // Check data type
+ if (m_image_type == 15) {
+ for (int i = 0; i < MaxLength; i++) {
+ if (vData[i] > iMax)
+ iMax = vData[i];
+ if (vData[i] < iMin)
+ iMin = vData[i];
+ }
+ }
+ if (m_image_type == 64) {
+ for (int i = 0; i < MaxLength; i++) {
+ if (vData_f[i] > iMax)
+ iMax = vData_f[i];
+ if (vData_f[i] < iMin)
+ iMin = vData_f[i];
+ }
+ }
}
// -------------------------------------------------------------------------
/**
-* \brief Read GIPL header.
-*
-* \param myfile Input file
-*/
+ * \brief Read GIPL header.
+ *
+ * \param myfile Input file
+ */
// -------------------------------------------------------------------------
-void Image::ReadGiplHeader(std::fstream* myFile)
-{
- int i;
- for(i=0;i<4;i++)
- myFile->read(reinterpret_cast < char * > (&m_dim[i]), sizeof(m_dim[i]));
- myFile->read(reinterpret_cast < char * > (&m_image_type), sizeof(m_image_type));
- for(i=0;i<4;i++)
- myFile->read(reinterpret_cast < char * > (&m_pixdim[i]), sizeof(m_pixdim[i]));
- for(i=0;i<80;i++)
- myFile->read(reinterpret_cast < char * > (&m_patDesc[i]), sizeof(m_patDesc[i]));
- for(i=0;i<12;i++)
- myFile->read(reinterpret_cast < char * > (&m_matrixElements[i]), sizeof(m_matrixElements[i]));
- myFile->read(reinterpret_cast < char * > (&m_identifier), sizeof(m_identifier));
- for(i=0;i<28;i++)
- myFile->read(reinterpret_cast < char * > (&m_spare[i]), sizeof(m_spare[i]));
- myFile->read(reinterpret_cast < char * > (&m_orientationFlag), sizeof(m_orientationFlag));
- myFile->read(reinterpret_cast < char * > (&m_flag1), sizeof(m_flag1));
- myFile->read(reinterpret_cast < char * > (&m_min), sizeof(m_min));
- myFile->read(reinterpret_cast < char * > (&m_max), sizeof(m_max));
- for(i=0;i<4;i++)
- myFile->read(reinterpret_cast < char * > (&m_origin[i]), sizeof(m_origin[i]));
- myFile->read(reinterpret_cast < char * > (&m_pixval_offset), sizeof(m_pixval_offset));
- myFile->read(reinterpret_cast < char * > (&m_pixval_cal), sizeof(m_pixval_cal));
- myFile->read(reinterpret_cast < char * > (&m_user_def1), sizeof(m_user_def1));
- myFile->read(reinterpret_cast < char * > (&m_user_def2), sizeof(m_user_def2));
- myFile->read(reinterpret_cast < char * > (&m_magic_number), sizeof(m_magic_number));
-
+void
+Image::ReadGiplHeader(std::fstream* myFile) {
+ int i;
+ for (i = 0; i < 4; i++)
+ myFile->read(reinterpret_cast(&m_dim[i]), sizeof(m_dim[i]));
+ myFile->read(reinterpret_cast(&m_image_type), sizeof(m_image_type));
+ for (i = 0; i < 4; i++)
+ myFile->read(reinterpret_cast(&m_pixdim[i]), sizeof(m_pixdim[i]));
+ for (i = 0; i < 80; i++)
+ myFile->read(reinterpret_cast(&m_patDesc[i]), sizeof(m_patDesc[i]));
+ for (i = 0; i < 12; i++)
+ myFile->read(reinterpret_cast(&m_matrixElements[i]), sizeof(m_matrixElements[i]));
+ myFile->read(reinterpret_cast(&m_identifier), sizeof(m_identifier));
+ for (i = 0; i < 28; i++)
+ myFile->read(reinterpret_cast(&m_spare[i]), sizeof(m_spare[i]));
+ myFile->read(reinterpret_cast(&m_orientationFlag), sizeof(m_orientationFlag));
+ myFile->read(reinterpret_cast(&m_flag1), sizeof(m_flag1));
+ myFile->read(reinterpret_cast(&m_min), sizeof(m_min));
+ myFile->read(reinterpret_cast(&m_max), sizeof(m_max));
+ for (i = 0; i < 4; i++)
+ myFile->read(reinterpret_cast(&m_origin[i]), sizeof(m_origin[i]));
+ myFile->read(reinterpret_cast(&m_pixval_offset), sizeof(m_pixval_offset));
+ myFile->read(reinterpret_cast(&m_pixval_cal), sizeof(m_pixval_cal));
+ myFile->read(reinterpret_cast(&m_user_def1), sizeof(m_user_def1));
+ myFile->read(reinterpret_cast(&m_user_def2), sizeof(m_user_def2));
+ myFile->read(reinterpret_cast(&m_magic_number), sizeof(m_magic_number));
}
// -------------------------------------------------------------------------
/**
-* \brief Write image data to GIPL output file.
-*
-* \param filename Output filename
-*/
+ * \brief Write image data to GIPL output file.
+ *
+ * \param filename Output filename
+ */
// -------------------------------------------------------------------------
-void Image::GiplWrite(const char* filename)
-{
- // Open file for writing
- std::fstream myFile(filename, std::ios_base::out | std::ios_base::binary);
-
- // Require big endian format
- ByteSwapHeader();
-
- // Write gipl header
- WriteGiplHeader(&myFile);
-
- // Go back to correct format
- ByteSwapHeader();
-
- // Check data type
- switch(m_image_type)
- {
- case 15: // shorts (default)
-
- // Swap bytes of data vector before writing to file
- for( int i = 0; i < MaxLength; i++)
- ByteSwap(&vData[i]);
-
- // Read image data
- myFile.write((char*)vData, sizeof(short)*MaxLength);
-
- // Swap hi lo bytes
- for( int i = 0; i < MaxLength; i++)
- ByteSwap(&vData[i]);
- break;
-
- // Swap bytes back
- for(int i = 0; i < MaxLength; i++)
- ByteSwap(&vData[i]);
-
- case 64: // floats
-
- // Swap bytes of data vector before writing to file
- for( int i = 0; i < MaxLength; i++)
- ByteSwap(&vData_f[i]);
-
- // Read image data
- myFile.write((char*)vData_f, sizeof(float)*MaxLength);
-
- // Swap hi lo bytes
- for( int i = 0; i < MaxLength; i++)
- ByteSwap(&vData_f[i]);
- break;
-
- // Swap bytes back
- for(int i = 0; i < MaxLength; i++)
- ByteSwap(&vData_f[i]);
-
- default:
- break;
- }
-
- // Close file
- myFile.close();
+void
+Image::GiplWrite(const char* filename) {
+ // Open file for writing
+ std::fstream myFile(filename, std::ios_base::out | std::ios_base::binary);
+
+ // Require big endian format
+ ByteSwapHeader();
+
+ // Write gipl header
+ WriteGiplHeader(&myFile);
+
+ // Go back to correct format
+ ByteSwapHeader();
+
+ // Check data type
+ switch (m_image_type) {
+ case 15: // shorts (default)
+
+ // Swap bytes of data vector before writing to file
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData[i]);
+
+ // Read image data
+ myFile.write((char*)vData, sizeof(short) * MaxLength);
+
+ // Swap hi lo bytes
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData[i]);
+ break;
+
+ // Swap bytes back
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData[i]);
+
+ case 64: // floats
+
+ // Swap bytes of data vector before writing to file
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData_f[i]);
+
+ // Read image data
+ myFile.write((char*)vData_f, sizeof(float) * MaxLength);
+
+ // Swap hi lo bytes
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData_f[i]);
+ break;
+
+ // Swap bytes back
+ for (int i = 0; i < MaxLength; i++)
+ ByteSwap(&vData_f[i]);
+
+ default:
+ break;
+ }
+
+ // Close file
+ myFile.close();
}
// -------------------------------------------------------------------------
/**
-* \brief Write GIPL header to output file.
-*
-* \param myfile Output file
-*/
+ * \brief Write GIPL header to output file.
+ *
+ * \param myfile Output file
+ */
// -------------------------------------------------------------------------
-void Image::WriteGiplHeader(fstream* myFile)
-{
- int i;
- for(i=0;i<4;i++)
- myFile->write(reinterpret_cast < char * > (&m_dim[i]), sizeof(m_dim[i]));
- myFile->write(reinterpret_cast < char * > (&m_image_type), sizeof(m_image_type));
- for(i=0;i<4;i++)
- myFile->write(reinterpret_cast < char * > (&m_pixdim[i]), sizeof(m_pixdim[i]));
- for(i=0;i<80;i++)
- myFile->write(reinterpret_cast < char * > (&m_patDesc[i]), sizeof(m_patDesc[i]));
- for(i=0;i<12;i++)
- myFile->write(reinterpret_cast < char * > (&m_matrixElements[i]), sizeof(m_matrixElements[i]));
- myFile->write(reinterpret_cast < char * > (&m_identifier), sizeof(m_identifier));
- for(i=0;i<28;i++)
- myFile->write(reinterpret_cast < char * > (&m_spare[i]), sizeof(m_spare[i]));
- myFile->write(reinterpret_cast < char * > (&m_orientationFlag), sizeof(m_orientationFlag));
- myFile->write(reinterpret_cast < char * > (&m_flag1), sizeof(m_flag1));
- myFile->write(reinterpret_cast < char * > (&m_min), sizeof(m_min));
- myFile->write(reinterpret_cast < char * > (&m_max), sizeof(m_max));
- for(i=0;i<4;i++)
- myFile->write(reinterpret_cast < char * > (&m_origin[i]), sizeof(m_origin[i]));
- myFile->write(reinterpret_cast < char * > (&m_pixval_offset), sizeof(m_pixval_offset));
- myFile->write(reinterpret_cast < char * > (&m_pixval_cal), sizeof(m_pixval_cal));
- myFile->write(reinterpret_cast < char * > (&m_user_def1), sizeof(m_user_def1));
- myFile->write(reinterpret_cast < char * > (&m_user_def2), sizeof(m_user_def2));
- myFile->write(reinterpret_cast < char * > (&m_magic_number), sizeof(m_magic_number));
+void
+Image::WriteGiplHeader(fstream* myFile) {
+ int i;
+ for (i = 0; i < 4; i++)
+ myFile->write(reinterpret_cast(&m_dim[i]), sizeof(m_dim[i]));
+ myFile->write(reinterpret_cast(&m_image_type), sizeof(m_image_type));
+ for (i = 0; i < 4; i++)
+ myFile->write(reinterpret_cast(&m_pixdim[i]), sizeof(m_pixdim[i]));
+ for (i = 0; i < 80; i++)
+ myFile->write(reinterpret_cast(&m_patDesc[i]), sizeof(m_patDesc[i]));
+ for (i = 0; i < 12; i++)
+ myFile->write(reinterpret_cast(&m_matrixElements[i]), sizeof(m_matrixElements[i]));
+ myFile->write(reinterpret_cast(&m_identifier), sizeof(m_identifier));
+ for (i = 0; i < 28; i++)
+ myFile->write(reinterpret_cast(&m_spare[i]), sizeof(m_spare[i]));
+ myFile->write(reinterpret_cast(&m_orientationFlag), sizeof(m_orientationFlag));
+ myFile->write(reinterpret_cast(&m_flag1), sizeof(m_flag1));
+ myFile->write(reinterpret_cast(&m_min), sizeof(m_min));
+ myFile->write(reinterpret_cast(&m_max), sizeof(m_max));
+ for (i = 0; i < 4; i++)
+ myFile->write(reinterpret_cast(&m_origin[i]), sizeof(m_origin[i]));
+ myFile->write(reinterpret_cast(&m_pixval_offset), sizeof(m_pixval_offset));
+ myFile->write(reinterpret_cast(&m_pixval_cal), sizeof(m_pixval_cal));
+ myFile->write(reinterpret_cast(&m_user_def1), sizeof(m_user_def1));
+ myFile->write(reinterpret_cast(&m_user_def2), sizeof(m_user_def2));
+ myFile->write(reinterpret_cast(&m_magic_number), sizeof(m_magic_number));
}
// -------------------------------------------------------------------------
/**
-* \brief Swap bytes (little/big endian conversion).
-*/
+ * \brief Swap bytes (little/big endian conversion).
+ */
// -------------------------------------------------------------------------
-void Image::ByteSwapHeader() // for PC little endian
-{
- int i;
- for(i=0;i<4;i++) ByteSwap(&(m_dim[i]));
+void
+Image::ByteSwapHeader() // for PC little endian
+{
+ int i;
+ for (i = 0; i < 4; i++)
+ ByteSwap(&(m_dim[i]));
- ByteSwap(&(m_image_type));
+ ByteSwap(&(m_image_type));
- for(i=0;i<4;i++) ByteSwap(&(m_pixdim[i]));
+ for (i = 0; i < 4; i++)
+ ByteSwap(&(m_pixdim[i]));
- for(i=0;i<12;i++) ByteSwap(&(m_matrixElements[i]));
+ for (i = 0; i < 12; i++)
+ ByteSwap(&(m_matrixElements[i]));
- ByteSwap(&(m_min));
- ByteSwap(&(m_max));
+ ByteSwap(&(m_min));
+ ByteSwap(&(m_max));
- for(i=0;i<4;i++) ByteSwap(&(m_origin[i]));
-
- ByteSwap(&(m_pixval_offset));
- ByteSwap(&(m_pixval_cal));
- ByteSwap(&(m_user_def1));
- ByteSwap(&(m_user_def2));
- ByteSwap((int*)&(m_magic_number));
+ for (i = 0; i < 4; i++)
+ ByteSwap(&(m_origin[i]));
- return;
+ ByteSwap(&(m_pixval_offset));
+ ByteSwap(&(m_pixval_cal));
+ ByteSwap(&(m_user_def1));
+ ByteSwap(&(m_user_def2));
+ ByteSwap((int*)&(m_magic_number));
+
+ return;
}
// -------------------------------------------------------------------------
/**
-* \brief Initialize zero image
-*
-* \param Input Input image
-*/
+ * \brief Initialize zero image
+ *
+ * \param Input Input image
+ */
// -------------------------------------------------------------------------
-void Image::Zeros(Image* Input, short iType)
-{
- // Initialize image with dimensions
- this->Initialize(Input, iType);
-
- if (iType == _SHORT)
- {
- // Initialize with zeros
- for (int i = 0; i < this->MaxLength; i++)
- this->vData[i] = 0;
-
- // Update min max values
- //this->GetMinMaxValue();
- }
-
- if (iType == _FLOAT)
- {
- // Initialize with zeros
- for (int i = 0; i < this->MaxLength; i++)
- this->vData_f[i] = 0;
- }
-
- iMin = 0;
- iMax = 0;
+void
+Image::Zeros(Image* Input, short iType) {
+ // Initialize image with dimensions
+ this->Initialize(Input, iType);
+
+ if (iType == _SHORT) {
+ // Initialize with zeros
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData[i] = 0;
+
+ // Update min max values
+ // this->GetMinMaxValue();
+ }
+
+ if (iType == _FLOAT) {
+ // Initialize with zeros
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData_f[i] = 0;
+ }
+
+ iMin = 0;
+ iMax = 0;
}
// -------------------------------------------------------------------------
/**
-* \brief Initialize zero image
-*
-* \param Input Input image
-*/
+ * \brief Initialize zero image
+ *
+ * \param Input Input image
+ */
// -------------------------------------------------------------------------
-void Image::Zeros()
-{
- // Set image to 0
- if (this->m_image_type == 15)
- {
- // Initialize with zeros
- for (int i = 0; i < this->MaxLength; i++)
- this->vData[i] = 0;
-
- // Update min max values
- //this->GetMinMaxValue();
- }
-
- if (this->m_image_type == 64)
- {
- // Initialize with zeros
- for (int i = 0; i < this->MaxLength; i++)
- this->vData_f[i] = 0;
- }
-
- iMin = 0;
- iMax = 0;
+void
+Image::Zeros() {
+ // Set image to 0
+ if (this->m_image_type == 15) {
+ // Initialize with zeros
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData[i] = 0;
+
+ // Update min max values
+ // this->GetMinMaxValue();
+ }
+
+ if (this->m_image_type == 64) {
+ // Initialize with zeros
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData_f[i] = 0;
+ }
+
+ iMin = 0;
+ iMax = 0;
}
// -------------------------------------------------------------------------
/**
-* \brief Initialize one image
-*
-* \param Input Input image
-*/
+ * \brief Initialize one image
+ *
+ * \param Input Input image
+ */
// -------------------------------------------------------------------------
-void Image::Ones(Image* Input, short iType)
-{
- // Initialize image with dimensions
- this->Initialize(Input, iType);
-
- if (iType == _SHORT)
- {
- // Initialize with zeros
- for (int i = 0; i < this->MaxLength; i++)
- this->vData[i] = 1;
- }
-
- if (iType == _FLOAT)
- {
- // Initialize with zeros
- for (int i = 0; i < this->MaxLength; i++)
- this->vData_f[i] = 1;
- }
-
- iMax = 1;
- iMin = 1;
+void
+Image::Ones(Image* Input, short iType) {
+ // Initialize image with dimensions
+ this->Initialize(Input, iType);
+
+ if (iType == _SHORT) {
+ // Initialize with zeros
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData[i] = 1;
+ }
+
+ if (iType == _FLOAT) {
+ // Initialize with zeros
+ for (int i = 0; i < this->MaxLength; i++)
+ this->vData_f[i] = 1;
+ }
+
+ iMax = 1;
+ iMin = 1;
}
// -------------------------------------------------------------------------
/**
-* \brief Initialize image data by with the dimension of the input image
-*
-* \param Input Input image
-*/
+ * \brief Initialize image data by with the dimension of the input image
+ *
+ * \param Input Input image
+ */
// -------------------------------------------------------------------------
-void Image::Initialize(Image* Input, short iType)
-{
- // Set new data properties
- for (int i = 0; i < 4; i++)
- {
- this->m_dim[i] = Input->m_dim[i];
- this->m_pixdim[i] = Input->m_pixdim[i];
- this->vCenter[i] = Input->vCenter[i];
- this->m_origin[i] = Input->m_origin[i];
- }
-
- this->m_orientationFlag = Input->m_orientationFlag;
- this->m_flag1 = Input->m_flag1;
- this->m_min = Input->m_min;
- this->m_max = Input->m_max;
- this->m_pixval_offset = Input->m_pixval_offset;
- this->m_pixval_cal = Input->m_pixval_cal;
- this->m_user_def1 = Input->m_user_def1;
- this->m_user_def2 = Input->m_user_def2;
- this->m_magic_number = Input->m_magic_number;
- for (int i = 0; i < 2; i++)
- this->ImageOffset[i] = Input->ImageOffset[i]; // XLen and XLen*YLen
- this->MaxLength = Input->MaxLength;
-
- // Initialize data vactor
- if (iType == _SHORT)
- {
- // Delete old vector and initialize data vector
- if (this->vData)
- delete[] this->vData;
-
- this->m_image_type = 15;
- this->vData = new short[Input->MaxLength];
- }
-
- if (iType == _FLOAT)
- {
- // Delete old vector and initialize data vector
- if (this->vData_f)
- delete[] this->vData_f;
-
- this->m_image_type = 64;
- this->vData_f = new float[Input->MaxLength];
- }
+void
+Image::Initialize(Image* Input, short iType) {
+ // Set new data properties
+ for (int i = 0; i < 4; i++) {
+ this->m_dim[i] = Input->m_dim[i];
+ this->m_pixdim[i] = Input->m_pixdim[i];
+ this->vCenter[i] = Input->vCenter[i];
+ this->m_origin[i] = Input->m_origin[i];
+ }
+
+ this->m_orientationFlag = Input->m_orientationFlag;
+ this->m_flag1 = Input->m_flag1;
+ this->m_min = Input->m_min;
+ this->m_max = Input->m_max;
+ this->m_pixval_offset = Input->m_pixval_offset;
+ this->m_pixval_cal = Input->m_pixval_cal;
+ this->m_user_def1 = Input->m_user_def1;
+ this->m_user_def2 = Input->m_user_def2;
+ this->m_magic_number = Input->m_magic_number;
+ for (int i = 0; i < 2; i++)
+ this->ImageOffset[i] = Input->ImageOffset[i]; // XLen and XLen*YLen
+ this->MaxLength = Input->MaxLength;
+
+ // Initialize data vactor
+ if (iType == _SHORT) {
+ // Delete old vector and initialize data vector
+ if (this->vData)
+ delete[] this->vData;
+
+ this->m_image_type = 15;
+ this->vData = new short[Input->MaxLength];
+ }
+
+ if (iType == _FLOAT) {
+ // Delete old vector and initialize data vector
+ if (this->vData_f)
+ delete[] this->vData_f;
+
+ this->m_image_type = 64;
+ this->vData_f = new float[Input->MaxLength];
+ }
}
// -------------------------------------------------------------------------
/**
-* \brief Initialize image data by with the dimension of the input image
-*
-* \param Input Input image
-*/
+ * \brief Initialize image data by with the dimension of the input image
+ *
+ * \param Input Input image
+ */
// -------------------------------------------------------------------------
-void Image::Initialize(Image* Input)
-{
- // Set new data properties
- for (int i = 0; i < 4; i++)
- {
- this->m_dim[i] = Input->m_dim[i];
- this->m_pixdim[i] = Input->m_pixdim[i];
- this->vCenter[i] = Input->vCenter[i];
- this->m_origin[i] = Input->m_origin[i];
- }
-
- this->m_orientationFlag = Input->m_orientationFlag;
- this->m_flag1 = Input->m_flag1;
- this->m_min = Input->m_min;
- this->m_max = Input->m_max;
- this->m_pixval_offset = Input->m_pixval_offset;
- this->m_pixval_cal = Input->m_pixval_cal;
- this->m_user_def1 = Input->m_user_def1;
- this->m_user_def2 = Input->m_user_def2;
- this->m_magic_number = Input->m_magic_number;
- for (int i = 0; i < 2; i++)
- this->ImageOffset[i] = Input->ImageOffset[i]; // XLen and XLen*YLen
- this->MaxLength = Input->MaxLength;
-
- // Initialize data vactor
- if (this->vData)
- delete[] this->vData;
-
- if (this->vData_f)
- delete[] this->vData_f;
+void
+Image::Initialize(Image* Input) {
+ // Set new data properties
+ for (int i = 0; i < 4; i++) {
+ this->m_dim[i] = Input->m_dim[i];
+ this->m_pixdim[i] = Input->m_pixdim[i];
+ this->vCenter[i] = Input->vCenter[i];
+ this->m_origin[i] = Input->m_origin[i];
+ }
+
+ this->m_orientationFlag = Input->m_orientationFlag;
+ this->m_flag1 = Input->m_flag1;
+ this->m_min = Input->m_min;
+ this->m_max = Input->m_max;
+ this->m_pixval_offset = Input->m_pixval_offset;
+ this->m_pixval_cal = Input->m_pixval_cal;
+ this->m_user_def1 = Input->m_user_def1;
+ this->m_user_def2 = Input->m_user_def2;
+ this->m_magic_number = Input->m_magic_number;
+ for (int i = 0; i < 2; i++)
+ this->ImageOffset[i] = Input->ImageOffset[i]; // XLen and XLen*YLen
+ this->MaxLength = Input->MaxLength;
+
+ // Initialize data vactor
+ if (this->vData)
+ delete[] this->vData;
+
+ if (this->vData_f)
+ delete[] this->vData_f;
}
// -------------------------------------------------------------------------
/**
-* \brief Copy image
-*
-* \param Input Input image
-*/
+ * \brief Copy image
+ *
+ * \param Input Input image
+ */
// -------------------------------------------------------------------------
-void Image::Copy(Image* Input, short iType)
-{
- // Initialize image with dimensions
- this->Initialize(Input, iType);
-
- if (iType == _SHORT)
- {
- // Initialize with zeros
- for (int i = 0; i < Input->MaxLength; i++)
- this->vData[i] = Input->vData[i];
-
- // Update min max values
- this->GetMinMaxValue();
- }
-
- if (iType == _FLOAT)
- {
- // Initialize with zeros
- for (int i = 0; i < Input->MaxLength; i++)
- this->vData_f[i] = Input->vData_f[i];
- }
+void
+Image::Copy(Image* Input, short iType) {
+ // Initialize image with dimensions
+ this->Initialize(Input, iType);
+
+ if (iType == _SHORT) {
+ // Initialize with zeros
+ for (int i = 0; i < Input->MaxLength; i++)
+ this->vData[i] = Input->vData[i];
+
+ // Update min max values
+ this->GetMinMaxValue();
+ }
+
+ if (iType == _FLOAT) {
+ // Initialize with zeros
+ for (int i = 0; i < Input->MaxLength; i++)
+ this->vData_f[i] = Input->vData_f[i];
+ }
}
// -------------------------------------------------------------------------
// Byte swap functions
// -------------------------------------------------------------------------
-void Image::ByteSwap(int *i) // for PC little endian
-{
+void
+Image::ByteSwap(int* i) // for PC little endian
+{
typedef struct {
unsigned char byte1;
unsigned char byte2;
@@ -689,13 +666,14 @@ void Image::ByteSwap(int *i) // for PC little endian
intUS.bytes.byte2 = intU.bytes.byte3;
intUS.bytes.byte3 = intU.bytes.byte2;
intUS.bytes.byte4 = intU.bytes.byte1;
-
+
*i = intUS.integer;
return;
}
-void Image::ByteSwap(short *s) // for PC little endian
-{
+void
+Image::ByteSwap(short* s) // for PC little endian
+{
typedef struct {
unsigned char byte1;
unsigned char byte2;
@@ -716,8 +694,9 @@ void Image::ByteSwap(short *s) // for PC little endian
return;
}
-void Image::ByteSwap(float *f) // for PC little endian
-{
+void
+Image::ByteSwap(float* f) // for PC little endian
+{
typedef struct {
unsigned char byte1;
unsigned char byte2;
@@ -742,8 +721,9 @@ void Image::ByteSwap(float *f) // for PC little endian
return;
}
-void Image::ByteSwap(double *d) // for PC little endian
-{
+void
+Image::ByteSwap(double* d) // for PC little endian
+{
typedef struct {
unsigned char byte1;
unsigned char byte2;
diff --git a/src/IO/IO_registries.cxx b/src/IO/IO_registries.cxx
index c91ff0fe84..4111e8afb9 100644
--- a/src/IO/IO_registries.cxx
+++ b/src/IO/IO_registries.cxx
@@ -3,7 +3,7 @@
Copyright (C) 2012, Kris Thielemans
Copyright (C) 2013, Institute for Bioengineering of Catalonia
Copyright (C) 2013, University College London
-
+
This file is part of STIR.
This file is free software; you can redistribute it and/or modify
@@ -41,43 +41,41 @@
#include "stir/IO/MultiParametricDiscretisedDensityInputFileFormat.h"
#include "stir/IO/MultiParametricDiscretisedDensityOutputFileFormat.h"
#ifdef HAVE_LLN_MATRIX
-#include "stir/IO/ECAT6OutputFileFormat.h"
-#include "stir/IO/ECAT7OutputFileFormat.h"
-#include "stir/IO/ECAT7DynamicDiscretisedDensityOutputFileFormat.h"
-#include "stir/IO/ECAT7ParametricDensityOutputFileFormat.h"
-#include "stir/IO/ECAT7DynamicDiscretisedDensityInputFileFormat.h"
+# include "stir/IO/ECAT6OutputFileFormat.h"
+# include "stir/IO/ECAT7OutputFileFormat.h"
+# include "stir/IO/ECAT7DynamicDiscretisedDensityOutputFileFormat.h"
+# include "stir/IO/ECAT7ParametricDensityOutputFileFormat.h"
+# include "stir/IO/ECAT7DynamicDiscretisedDensityInputFileFormat.h"
#endif
-
#if 1
-#include "stir/IO/InputFileFormatRegistry.h"
-#include "stir/IO/InterfileImageInputFileFormat.h"
-#ifdef HAVE_LLN_MATRIX
-#include "stir/IO/ECAT6ImageInputFileFormat.h"
-#include "stir/IO/ECAT7ImageInputFileFormat.h"
-#include "stir/IO/ECAT966ListmodeInputFileFormat.h"
-#include "stir/IO/ECAT962ListmodeInputFileFormat.h"
-#endif
+# include "stir/IO/InputFileFormatRegistry.h"
+# include "stir/IO/InterfileImageInputFileFormat.h"
+# ifdef HAVE_LLN_MATRIX
+# include "stir/IO/ECAT6ImageInputFileFormat.h"
+# include "stir/IO/ECAT7ImageInputFileFormat.h"
+# include "stir/IO/ECAT966ListmodeInputFileFormat.h"
+# include "stir/IO/ECAT962ListmodeInputFileFormat.h"
+# endif
#endif
#include "stir/IO/ECAT8_32bitListmodeInputFileFormat.h"
#ifdef HAVE_HDF5
-#include "stir/IO/GEHDF5ListmodeInputFileFormat.h"
+# include "stir/IO/GEHDF5ListmodeInputFileFormat.h"
#endif
-
//! Addition for SAFIR listmode input file format
#include "stir/IO/SAFIRCListmodeInputFileFormat.h"
//! Addition for ROOT support - Nikos Efthimiou
#ifdef HAVE_CERN_ROOT
-#include "stir/IO/ROOTListmodeInputFileFormat.h"
-#include "stir/IO/InputStreamFromROOTFileForCylindricalPET.h"
-#include "stir/IO/InputStreamFromROOTFileForECATPET.h"
+# include "stir/IO/ROOTListmodeInputFileFormat.h"
+# include "stir/IO/InputStreamFromROOTFileForCylindricalPET.h"
+# include "stir/IO/InputStreamFromROOTFileForECATPET.h"
#endif
#ifdef HAVE_ITK
-#include "stir/IO/ITKOutputFileFormat.h"
-#include "stir/IO/ITKImageInputFileFormat.h"
+# include "stir/IO/ITKOutputFileFormat.h"
+# include "stir/IO/ITKImageInputFileFormat.h"
#endif
START_NAMESPACE_STIR
@@ -94,7 +92,6 @@ static MultiParametricDiscretisedDensityOutputFileFormat LMdummySAFIR(4);
-
//!
//! \brief LMdummyROOT
//! \author Nikos Efthimiou
@@ -118,12 +115,11 @@ END_NAMESPACE_ECAT7
END_NAMESPACE_ECAT
#endif
-
static RegisterInputFileFormat idummy0(0);
#ifdef HAVE_LLN_MATRIX
static RegisterInputFileFormat idummy2(4);
-// ECAT6 very low priority it doesn't have a signature
+// ECAT6 very low priority it doesn't have a signature
static RegisterInputFileFormat idummy4(100000);
static RegisterInputFileFormat dynidummy(0);
@@ -131,15 +127,14 @@ static RegisterInputFileFormat > > idummy6(10000);
-static RegisterInputFileFormat > > > idummy7(10000);
+static RegisterInputFileFormat>> idummy6(10000);
+static RegisterInputFileFormat>>> idummy7(10000);
#endif
static RegisterInputFileFormat dyndummy_intf(1);
static RegisterInputFileFormat paradummy_intf(1);
static RegisterInputFileFormat dynim_dummy_multi(1);
static RegisterInputFileFormat parim_dummy_multi(1);
-
/*************************** listmode data **********************/
#ifdef HAVE_LLN_MATRIX
static RegisterInputFileFormat LMdummyECAT966(4);
diff --git a/src/IO/ITKImageInputFileFormat.cxx b/src/IO/ITKImageInputFileFormat.cxx
index 6cf84ffb52..ba7bf5c29f 100644
--- a/src/IO/ITKImageInputFileFormat.cxx
+++ b/src/IO/ITKImageInputFileFormat.cxx
@@ -53,73 +53,55 @@ START_NAMESPACE_STIR
*/
-typedef itk::Image ITKImageSingle;
-typedef itk::VectorImage ITKImageMulti;
-typedef DiscretisedDensity<3, float> STIRImageSingle;
-typedef VoxelsOnCartesianGrid STIRImageSingleConcrete;
-typedef DiscretisedDensity<3, CartesianCoordinate3D > STIRImageMulti;
-typedef VoxelsOnCartesianGrid > STIRImageMultiConcrete;
-typedef itk::MetaDataObject< std::string > MetaDataStringType;
-
-template
-static
-STIRImageType *
-read_file_itk(const std::string &filename);
+typedef itk::Image ITKImageSingle;
+typedef itk::VectorImage ITKImageMulti;
+typedef DiscretisedDensity<3, float> STIRImageSingle;
+typedef VoxelsOnCartesianGrid STIRImageSingleConcrete;
+typedef DiscretisedDensity<3, CartesianCoordinate3D> STIRImageMulti;
+typedef VoxelsOnCartesianGrid> STIRImageMultiConcrete;
+typedef itk::MetaDataObject MetaDataStringType;
template
-bool
-ITKImageInputFileFormat::actual_can_read(const FileSignature& signature,
- std::istream& input) const
-{
+static STIRImageType* read_file_itk(const std::string& filename);
+
+template
+bool
+ITKImageInputFileFormat::actual_can_read(const FileSignature& signature, std::istream& input) const {
return false;
}
template
bool
-ITKImageInputFileFormat::can_read(const FileSignature& signature,
- std::istream& input) const
-{
+ITKImageInputFileFormat::can_read(const FileSignature& signature, std::istream& input) const {
return this->actual_can_read(signature, input);
}
template
-bool
-ITKImageInputFileFormat::can_read(const FileSignature& /*signature*/,
- const std::string& filename) const
-{
+bool
+ITKImageInputFileFormat::can_read(const FileSignature& /*signature*/, const std::string& filename) const {
typedef itk::ImageFileReader ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(filename);
- try
- {
- reader->Update();
- return true;
- }
- catch( itk::ExceptionObject & /*err*/ )
- {
-
- return false;
- }
+ try {
+ reader->Update();
+ return true;
+ } catch (itk::ExceptionObject& /*err*/) {
+
+ return false;
+ }
}
template
unique_ptr
-ITKImageInputFileFormat::read_from_file(std::istream& input) const
-{
- error("read_from_file for ITK with istream not implemented %s:%d. Sorry",
- __FILE__, __LINE__);
- return
- unique_ptr();
+ITKImageInputFileFormat::read_from_file(std::istream& input) const {
+ error("read_from_file for ITK with istream not implemented %s:%d. Sorry", __FILE__, __LINE__);
+ return unique_ptr();
}
-template
+template
unique_ptr
-ITKImageInputFileFormat::
-read_from_file(const std::string& filename) const
-{
- return
- unique_ptr
- (read_file_itk< STIRImageType >(filename));
+ITKImageInputFileFormat::read_from_file(const std::string& filename) const {
+ return unique_ptr(read_file_itk(filename));
}
/* Convert ITK (LPS) coordinates into STIR physical coordinates and
@@ -129,32 +111,25 @@ read_from_file(const std::string& filename) const
interpreted as being displacement vectors and hence the change of
origin is ignored.
*/
-template
-static inline
-CartesianCoordinate3D
-ITK_coordinates_to_STIR_physical_coordinates
-(const ITKPointType &itk_coord,
- const STIRImageType &stir_image, bool is_relative_coordinate=false)
-{
+template
+static inline CartesianCoordinate3D
+ITK_coordinates_to_STIR_physical_coordinates(const ITKPointType& itk_coord, const STIRImageType& stir_image,
+ bool is_relative_coordinate = false) {
// find STIR origin
// Note: need to use - for z-coordinate because of different axis conventions
- CartesianCoordinate3D stir_coord
- = stir_image.get_physical_coordinates_for_LPS_coordinates
- (CartesianCoordinate3D(static_cast(itk_coord[2]),
- static_cast(itk_coord[1]),
- static_cast(itk_coord[0])));
+ CartesianCoordinate3D stir_coord = stir_image.get_physical_coordinates_for_LPS_coordinates(CartesianCoordinate3D(
+ static_cast(itk_coord[2]), static_cast(itk_coord[1]), static_cast(itk_coord[0])));
// The following is not required for displacement vectors, such as a displacement field, as
// the coordinates are relative.
- if (!is_relative_coordinate)
- {
+ if (!is_relative_coordinate) {
CartesianCoordinate3D stir_origin_index(0, 0, 0);
// assuming we previously oriented the ITK image, min_indices is the
// index where ITK origin points to in physical space
- const CartesianCoordinate3D stir_origin_wrt_itk_origin
- = stir_image.get_physical_coordinates_for_indices(stir_origin_index)
- - stir_image.get_physical_coordinates_for_indices(stir_image.get_min_indices());
+ const CartesianCoordinate3D stir_origin_wrt_itk_origin =
+ stir_image.get_physical_coordinates_for_indices(stir_origin_index) -
+ stir_image.get_physical_coordinates_for_indices(stir_image.get_min_indices());
stir_coord += stir_origin_wrt_itk_origin;
}
@@ -163,70 +138,52 @@ ITK_coordinates_to_STIR_physical_coordinates
}
/* Convert an ITK Pixel (i.e., float) to a STIR Pixel. */
-template
-static inline
-STIRPixelType
-ITK_pixel_to_STIR_pixel(ITKPixelType itk_pixel,
- const STIRImageType &stir_image,
- bool)
-{
+template
+static inline STIRPixelType
+ITK_pixel_to_STIR_pixel(ITKPixelType itk_pixel, const STIRImageType& stir_image, bool) {
return static_cast(itk_pixel);
}
/* Specialisation if the pixel is a vector and we want a multi-image */
-template<>
-inline
-typename STIRImageMultiConcrete::full_value_type
-ITK_pixel_to_STIR_pixel(typename ITKImageMulti::PixelType itk_pixel,
- const STIRImageMultiConcrete &stir_image,
- bool is_displacement_field)
-{
+template <>
+inline typename STIRImageMultiConcrete::full_value_type
+ITK_pixel_to_STIR_pixel(typename ITKImageMulti::PixelType itk_pixel, const STIRImageMultiConcrete& stir_image,
+ bool is_displacement_field) {
// ITK VariableLengthVector to ITK FixedArray
// We know it is length 3
assert(itk_pixel.GetSize() == 3);
// TODO: currently this is only for deformation/displacement images
// However, dynamic images may be other lengths.
typename ITKImageMulti::PointType itk_coord;
- for (unsigned int i=0; i<3; ++i)
+ for (unsigned int i = 0; i < 3; ++i)
itk_coord[i] = itk_pixel[i];
- return ITK_coordinates_to_STIR_physical_coordinates
- (itk_coord, stir_image, is_displacement_field);
+ return ITK_coordinates_to_STIR_physical_coordinates(itk_coord, stir_image, is_displacement_field);
}
/* Calculate the STIR index range from an ITK image. */
-template