ChameleonIQ 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chameleoniq-1.0.0/PKG-INFO +110 -0
- chameleoniq-1.0.0/README.md +71 -0
- chameleoniq-1.0.0/pyproject.toml +98 -0
- chameleoniq-1.0.0/setup.cfg +49 -0
- chameleoniq-1.0.0/setup.py +4 -0
- chameleoniq-1.0.0/src/ChameleonIQ.egg-info/PKG-INFO +110 -0
- chameleoniq-1.0.0/src/ChameleonIQ.egg-info/SOURCES.txt +53 -0
- chameleoniq-1.0.0/src/ChameleonIQ.egg-info/dependency_links.txt +1 -0
- chameleoniq-1.0.0/src/ChameleonIQ.egg-info/entry_points.txt +9 -0
- chameleoniq-1.0.0/src/ChameleonIQ.egg-info/not-zip-safe +1 -0
- chameleoniq-1.0.0/src/ChameleonIQ.egg-info/requires.txt +22 -0
- chameleoniq-1.0.0/src/ChameleonIQ.egg-info/top_level.txt +4 -0
- chameleoniq-1.0.0/src/config/__init__.py +0 -0
- chameleoniq-1.0.0/src/config/defaults.py +165 -0
- chameleoniq-1.0.0/src/nema_merge/__init__.py +0 -0
- chameleoniq-1.0.0/src/nema_merge/__main__.py +4 -0
- chameleoniq-1.0.0/src/nema_merge/cli.py +574 -0
- chameleoniq-1.0.0/src/nema_merge/reporting.py +1135 -0
- chameleoniq-1.0.0/src/nema_quant/__init__.py +0 -0
- chameleoniq-1.0.0/src/nema_quant/__main__.py +11 -0
- chameleoniq-1.0.0/src/nema_quant/analysis.py +603 -0
- chameleoniq-1.0.0/src/nema_quant/cli.py +460 -0
- chameleoniq-1.0.0/src/nema_quant/io.py +341 -0
- chameleoniq-1.0.0/src/nema_quant/metrics.py +747 -0
- chameleoniq-1.0.0/src/nema_quant/phantom.py +160 -0
- chameleoniq-1.0.0/src/nema_quant/reporting.py +911 -0
- chameleoniq-1.0.0/src/nema_quant/utils.py +465 -0
- chameleoniq-1.0.0/src/nema_quant_iter/__init__.py +3 -0
- chameleoniq-1.0.0/src/nema_quant_iter/__main__.py +4 -0
- chameleoniq-1.0.0/src/nema_quant_iter/cli.py +585 -0
- chameleoniq-1.0.0/src/nema_quant_iter/reporting.py +2140 -0
- chameleoniq-1.0.0/tests/test_analysis.py +379 -0
- chameleoniq-1.0.0/tests/test_analysis_comprehensive.py +311 -0
- chameleoniq-1.0.0/tests/test_analysis_edge_cases.py +172 -0
- chameleoniq-1.0.0/tests/test_analysis_missing_lines.py +273 -0
- chameleoniq-1.0.0/tests/test_analysis_specific_lines.py +472 -0
- chameleoniq-1.0.0/tests/test_analysis_visualizations.py +485 -0
- chameleoniq-1.0.0/tests/test_cli.py +32 -0
- chameleoniq-1.0.0/tests/test_cli_comprehensive.py +226 -0
- chameleoniq-1.0.0/tests/test_cli_key_error_handling.py +313 -0
- chameleoniq-1.0.0/tests/test_cli_missing_lines.py +451 -0
- chameleoniq-1.0.0/tests/test_cli_remaining_coverage.py +487 -0
- chameleoniq-1.0.0/tests/test_direct_coverage.py +425 -0
- chameleoniq-1.0.0/tests/test_final_analysis_push.py +395 -0
- chameleoniq-1.0.0/tests/test_force_real_coverage.py +670 -0
- chameleoniq-1.0.0/tests/test_function_signatures.py +57 -0
- chameleoniq-1.0.0/tests/test_integration.py +24 -0
- chameleoniq-1.0.0/tests/test_io.py +302 -0
- chameleoniq-1.0.0/tests/test_main.py +17 -0
- chameleoniq-1.0.0/tests/test_phantom.py +120 -0
- chameleoniq-1.0.0/tests/test_remaining_analysis_lines.py +390 -0
- chameleoniq-1.0.0/tests/test_reporting_comprehensive.py +485 -0
- chameleoniq-1.0.0/tests/test_reporting_missing_lines.py +79 -0
- chameleoniq-1.0.0/tests/test_utils_comprehensive.py +317 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ChameleonIQ
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: A tool for NEMA NU 2-2018 Image Quality analysis.
|
|
5
|
+
Author: Edwing Ulin-Briseno
|
|
6
|
+
Author-email: EdAlita <eyulibri@i3m.upv.es>
|
|
7
|
+
Platform: unix
|
|
8
|
+
Platform: linux
|
|
9
|
+
Platform: osx
|
|
10
|
+
Platform: cygwin
|
|
11
|
+
Platform: win32
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
|
|
16
|
+
Requires-Python: >=3.8
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
Requires-Dist: numpy==2.2.6
|
|
19
|
+
Requires-Dist: scipy==1.16.0
|
|
20
|
+
Requires-Dist: scipy-stubs==1.16.0.2
|
|
21
|
+
Requires-Dist: nibabel==5.3.2
|
|
22
|
+
Requires-Dist: matplotlib==3.10.3
|
|
23
|
+
Requires-Dist: seaborn==0.13.2
|
|
24
|
+
Requires-Dist: pandas==2.3.1
|
|
25
|
+
Requires-Dist: yacs==0.1.8
|
|
26
|
+
Requires-Dist: opencv-python==4.12.0.88
|
|
27
|
+
Requires-Dist: pillow==11.3.0
|
|
28
|
+
Requires-Dist: reportlab==4.4.2
|
|
29
|
+
Requires-Dist: types-reportlab==4.4.1.20250602
|
|
30
|
+
Requires-Dist: SimpleITK==2.5.2
|
|
31
|
+
Requires-Dist: scikit-image==0.25.2
|
|
32
|
+
Requires-Dist: rich==14.2.0
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest==8.4.1; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-cov==6.2.1; extra == "dev"
|
|
36
|
+
Requires-Dist: mypy==1.16.1; extra == "dev"
|
|
37
|
+
Requires-Dist: mypy_extensions==1.1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: flake8==7.3.0; extra == "dev"
|
|
39
|
+
|
|
40
|
+
<p align="center">
|
|
41
|
+
<img alt="Logo Banner" src="data/banner.png">
|
|
42
|
+
</p>
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
<a href="https://github.com/EdAlita/nema_analysis_tool/actions/workflows/tests.yml">
|
|
46
|
+
<img alt="Tests" src="https://github.com/EdAlita/nema_analysis_tool/actions/workflows/tests.yml/badge.svg?branch=main">
|
|
47
|
+
</a>
|
|
48
|
+
<a href="https://github.com/psf/black">
|
|
49
|
+
<img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg">
|
|
50
|
+
</a>
|
|
51
|
+
<a href="https://github.com/EdAlita/nema_analysis_tool/blob/main/LICENSE">
|
|
52
|
+
<img alt="License: Apache-2.0" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg">
|
|
53
|
+
</a>
|
|
54
|
+
<a>
|
|
55
|
+
<img alt="Python" src="https://img.shields.io/badge/language-Python-blue?logo=python">
|
|
56
|
+
</a>
|
|
57
|
+
<a>
|
|
58
|
+
<img alt="Git Download" src="https://img.shields.io/github/downloads/EdAlita/nema_analysis_tool/total">
|
|
59
|
+
</a>
|
|
60
|
+
<a>
|
|
61
|
+
<img alt="Git Release" src="https://img.shields.io/github/v/release/EdAlita/ChameleonIQ">
|
|
62
|
+
</a>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# ChameleonIQ: Nema-aware Image Quality Tool for Python
|
|
67
|
+
|
|
68
|
+
This project is a Python-based tool for the automated analysis of PET image quality based on the NEMA NU 2-2018 standard, specifically focusing on Section 7.4.1.
|
|
69
|
+
|
|
70
|
+
## Features
|
|
71
|
+
|
|
72
|
+
* Calculates Percent Contrast (Q_H,j), Percent Background Variability (N_j), and Accuracy of Corrections (ΔC_lung,i).
|
|
73
|
+
* Utilizes 3D Regions of Interest (ROIs) based on the NEMA Body Phantom.
|
|
74
|
+
* Loads nii image data with user-defined dimensions and voxel spacing.
|
|
75
|
+
* Automatic postions of ROIs on given centers
|
|
76
|
+
|
|
77
|
+
## Project Structure
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
nema-analysis-tool
|
|
81
|
+
├── data
|
|
82
|
+
├── documentation
|
|
83
|
+
├── src
|
|
84
|
+
│ ├── config
|
|
85
|
+
│ ├── nema_merge
|
|
86
|
+
│ ├── nema_quant
|
|
87
|
+
│ └── nema_quant_iter
|
|
88
|
+
└── tests
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- [**Config**](src/config): configuration files to run the tool
|
|
92
|
+
- [**Data**](src/data): Data for testing and logos used for PDF reports
|
|
93
|
+
- [**Documentation**](src/nema_quant_iter): Documentation, wikis and how to install the tool
|
|
94
|
+
- [**nema_merge**](src/nema_merge): scripts for creating fusing of individuals runs
|
|
95
|
+
- [**nema_quant**](src/nema_quant): scripts for individuals test runs
|
|
96
|
+
- [**nema_quant_iter**](src/nema_quant_iter): scripts for a iteration based analysis
|
|
97
|
+
|
|
98
|
+
## How to get Started?
|
|
99
|
+
Read these:
|
|
100
|
+
- [**Installation instructions**](documentation/INSTALLATION.md)
|
|
101
|
+
- [**Usage instructions**](documentation/USAGE.md)
|
|
102
|
+
- [**How it works?**](documentation/HOW_IT_WORKS.md)
|
|
103
|
+
|
|
104
|
+
Additional information:
|
|
105
|
+
- [**What will change?**](documentation/CHANGELOG.md)
|
|
106
|
+
|
|
107
|
+
## License
|
|
108
|
+
This project is licensed under the Apache Lincese 2.0 - see the [LICENSE.md](LICENSE) file for details.
|
|
109
|
+
|
|
110
|
+
[//]: # (- [Ignore label](documentation/ignore_label.md))
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img alt="Logo Banner" src="data/banner.png">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://github.com/EdAlita/nema_analysis_tool/actions/workflows/tests.yml">
|
|
7
|
+
<img alt="Tests" src="https://github.com/EdAlita/nema_analysis_tool/actions/workflows/tests.yml/badge.svg?branch=main">
|
|
8
|
+
</a>
|
|
9
|
+
<a href="https://github.com/psf/black">
|
|
10
|
+
<img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg">
|
|
11
|
+
</a>
|
|
12
|
+
<a href="https://github.com/EdAlita/nema_analysis_tool/blob/main/LICENSE">
|
|
13
|
+
<img alt="License: Apache-2.0" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg">
|
|
14
|
+
</a>
|
|
15
|
+
<a>
|
|
16
|
+
<img alt="Python" src="https://img.shields.io/badge/language-Python-blue?logo=python">
|
|
17
|
+
</a>
|
|
18
|
+
<a>
|
|
19
|
+
<img alt="Git Download" src="https://img.shields.io/github/downloads/EdAlita/nema_analysis_tool/total">
|
|
20
|
+
</a>
|
|
21
|
+
<a>
|
|
22
|
+
<img alt="Git Release" src="https://img.shields.io/github/v/release/EdAlita/ChameleonIQ">
|
|
23
|
+
</a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# ChameleonIQ: Nema-aware Image Quality Tool for Python
|
|
28
|
+
|
|
29
|
+
This project is a Python-based tool for the automated analysis of PET image quality based on the NEMA NU 2-2018 standard, specifically focusing on Section 7.4.1.
|
|
30
|
+
|
|
31
|
+
## Features
|
|
32
|
+
|
|
33
|
+
* Calculates Percent Contrast (Q_H,j), Percent Background Variability (N_j), and Accuracy of Corrections (ΔC_lung,i).
|
|
34
|
+
* Utilizes 3D Regions of Interest (ROIs) based on the NEMA Body Phantom.
|
|
35
|
+
* Loads nii image data with user-defined dimensions and voxel spacing.
|
|
36
|
+
* Automatic postions of ROIs on given centers
|
|
37
|
+
|
|
38
|
+
## Project Structure
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
nema-analysis-tool
|
|
42
|
+
├── data
|
|
43
|
+
├── documentation
|
|
44
|
+
├── src
|
|
45
|
+
│ ├── config
|
|
46
|
+
│ ├── nema_merge
|
|
47
|
+
│ ├── nema_quant
|
|
48
|
+
│ └── nema_quant_iter
|
|
49
|
+
└── tests
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- [**Config**](src/config): configuration files to run the tool
|
|
53
|
+
- [**Data**](src/data): Data for testing and logos used for PDF reports
|
|
54
|
+
- [**Documentation**](src/nema_quant_iter): Documentation, wikis and how to install the tool
|
|
55
|
+
- [**nema_merge**](src/nema_merge): scripts for creating fusing of individuals runs
|
|
56
|
+
- [**nema_quant**](src/nema_quant): scripts for individuals test runs
|
|
57
|
+
- [**nema_quant_iter**](src/nema_quant_iter): scripts for a iteration based analysis
|
|
58
|
+
|
|
59
|
+
## How to get Started?
|
|
60
|
+
Read these:
|
|
61
|
+
- [**Installation instructions**](documentation/INSTALLATION.md)
|
|
62
|
+
- [**Usage instructions**](documentation/USAGE.md)
|
|
63
|
+
- [**How it works?**](documentation/HOW_IT_WORKS.md)
|
|
64
|
+
|
|
65
|
+
Additional information:
|
|
66
|
+
- [**What will change?**](documentation/CHANGELOG.md)
|
|
67
|
+
|
|
68
|
+
## License
|
|
69
|
+
This project is licensed under the Apache Lincese 2.0 - see the [LICENSE.md](LICENSE) file for details.
|
|
70
|
+
|
|
71
|
+
[//]: # (- [Ignore label](documentation/ignore_label.md))
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "ChameleonIQ"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
authors = [
|
|
9
|
+
{ name="EdAlita", email="eyulibri@i3m.upv.es" },
|
|
10
|
+
]
|
|
11
|
+
description = "A tool for NEMA NU 2-2018 Image Quality analysis."
|
|
12
|
+
readme = "README.md"
|
|
13
|
+
requires-python = ">=3.8"
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
"Topic :: Scientific/Engineering :: Medical Science Apps.",
|
|
19
|
+
]
|
|
20
|
+
dependencies = [
|
|
21
|
+
"numpy==2.2.6",
|
|
22
|
+
"scipy==1.16.0",
|
|
23
|
+
"scipy-stubs==1.16.0.2",
|
|
24
|
+
"nibabel==5.3.2",
|
|
25
|
+
"matplotlib==3.10.3",
|
|
26
|
+
"seaborn==0.13.2",
|
|
27
|
+
"pandas==2.3.1",
|
|
28
|
+
"yacs==0.1.8",
|
|
29
|
+
"opencv-python==4.12.0.88",
|
|
30
|
+
"pillow==11.3.0",
|
|
31
|
+
"reportlab==4.4.2",
|
|
32
|
+
"types-reportlab==4.4.1.20250602",
|
|
33
|
+
"SimpleITK==2.5.2",
|
|
34
|
+
"scikit-image==0.25.2",
|
|
35
|
+
"rich==14.2.0"
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.scripts]
|
|
39
|
+
nema_quant = "nema_quant.__main__:main"
|
|
40
|
+
nema_quant_iter = "nema_quant_iter.__main__:main"
|
|
41
|
+
nema_merge = "nema_merge.__main__:main"
|
|
42
|
+
nema_coord = "nema_quant.utils:main"
|
|
43
|
+
chameleoniq_quant = "nema_quant.__main__:main"
|
|
44
|
+
chameleoniq_quant_iter = "nema_quant_iter.__main__:main"
|
|
45
|
+
chameleoniq_merge = "nema_merge.__main__:main"
|
|
46
|
+
chameleoniq_coord = "nema_quant.utils:main"
|
|
47
|
+
|
|
48
|
+
[tool.setuptools]
|
|
49
|
+
package-dir = {"" = "src"}
|
|
50
|
+
|
|
51
|
+
[tool.setuptools.packages.find]
|
|
52
|
+
where = ["src"]
|
|
53
|
+
|
|
54
|
+
[project.optional-dependencies]
|
|
55
|
+
dev = [
|
|
56
|
+
"pytest==8.4.1",
|
|
57
|
+
"pytest-cov==6.2.1",
|
|
58
|
+
"mypy==1.16.1",
|
|
59
|
+
"mypy_extensions==1.1.0",
|
|
60
|
+
"flake8==7.3.0"
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
[tool.pytest.ini_options]
|
|
64
|
+
addopts = "--cov=src/nema_quant --cov-report=term-missing --cov-report=html"
|
|
65
|
+
testpaths = [
|
|
66
|
+
"tests",
|
|
67
|
+
]
|
|
68
|
+
pythonpath = [
|
|
69
|
+
"src",
|
|
70
|
+
"."
|
|
71
|
+
]
|
|
72
|
+
filterwarnings = [
|
|
73
|
+
"ignore:builtin type SwigPyPacked has no __module__ attribute:DeprecationWarning",
|
|
74
|
+
"ignore:builtin type SwigPyObject has no __module__ attribute:DeprecationWarning",
|
|
75
|
+
"ignore:builtin type swigvarlink has no __module__ attribute:DeprecationWarning"
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
[tool.mypy]
|
|
79
|
+
mypy_path = "nema-analysis-tool"
|
|
80
|
+
explicit_package_bases = true
|
|
81
|
+
check_untyped_defs = true
|
|
82
|
+
disallow_any_generics = true
|
|
83
|
+
ignore_missing_imports = true
|
|
84
|
+
no_implicit_optional = true
|
|
85
|
+
show_error_codes = true
|
|
86
|
+
strict_equality = true
|
|
87
|
+
warn_redundant_casts = true
|
|
88
|
+
warn_return_any = true
|
|
89
|
+
warn_unused_configs = true
|
|
90
|
+
no_implicit_reexport = true
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
[[tool.mypy.overrides]]
|
|
94
|
+
module = "yacs.*"
|
|
95
|
+
ignore_missing_imports = true
|
|
96
|
+
|
|
97
|
+
[tool.isort]
|
|
98
|
+
profile = "black"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
[metadata]
|
|
2
|
+
name = Nema Analysis Tool
|
|
3
|
+
description = A Python tool for automated PET image quality analysis based on NEMA NU 2-2018 standard, focusing on Section 7.4.1 with features for calculating Percent Contrast, Background Variability, and Accuracy of Corrections using 3D ROIs.
|
|
4
|
+
author = Edwing Ulin-Briseno
|
|
5
|
+
license = MIT
|
|
6
|
+
license_file = LICENSE.txt
|
|
7
|
+
platforms = unix, linux, osx, cygwin, win32
|
|
8
|
+
classifiers =
|
|
9
|
+
Programming Language :: Python :: 3
|
|
10
|
+
Programming Language :: Python :: 3 :: Only
|
|
11
|
+
Programming Language :: Python :: 3.9
|
|
12
|
+
Programming Language :: Python :: 3.10
|
|
13
|
+
Programming Language :: Python :: 3.11
|
|
14
|
+
Programming Language :: Python :: 3.12
|
|
15
|
+
|
|
16
|
+
[options]
|
|
17
|
+
packages =
|
|
18
|
+
nema_quant
|
|
19
|
+
install_requires =
|
|
20
|
+
matplotlib>=3.10
|
|
21
|
+
numpy>=2.3
|
|
22
|
+
PyYAML>=6.0
|
|
23
|
+
reportlab>=4.4
|
|
24
|
+
scipy>=1.16
|
|
25
|
+
SimpleITK>=2.0.0
|
|
26
|
+
yacs>0.1
|
|
27
|
+
setuptools>=80.9
|
|
28
|
+
statsmodels>=0.14.5
|
|
29
|
+
rich>=14.2.0
|
|
30
|
+
python_requires = >=3.9
|
|
31
|
+
package_dir =
|
|
32
|
+
= src
|
|
33
|
+
zip_safe = no
|
|
34
|
+
|
|
35
|
+
[options.extras_require]
|
|
36
|
+
testing =
|
|
37
|
+
tox>=4.27
|
|
38
|
+
pytest>=8.4
|
|
39
|
+
pytest-cov>=6.2
|
|
40
|
+
mypy>=1.16
|
|
41
|
+
flake8>=7.3
|
|
42
|
+
|
|
43
|
+
[flake8]
|
|
44
|
+
max-line-length = 160
|
|
45
|
+
|
|
46
|
+
[egg_info]
|
|
47
|
+
tag_build =
|
|
48
|
+
tag_date = 0
|
|
49
|
+
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ChameleonIQ
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: A tool for NEMA NU 2-2018 Image Quality analysis.
|
|
5
|
+
Author: Edwing Ulin-Briseno
|
|
6
|
+
Author-email: EdAlita <eyulibri@i3m.upv.es>
|
|
7
|
+
Platform: unix
|
|
8
|
+
Platform: linux
|
|
9
|
+
Platform: osx
|
|
10
|
+
Platform: cygwin
|
|
11
|
+
Platform: win32
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
|
|
16
|
+
Requires-Python: >=3.8
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
Requires-Dist: numpy==2.2.6
|
|
19
|
+
Requires-Dist: scipy==1.16.0
|
|
20
|
+
Requires-Dist: scipy-stubs==1.16.0.2
|
|
21
|
+
Requires-Dist: nibabel==5.3.2
|
|
22
|
+
Requires-Dist: matplotlib==3.10.3
|
|
23
|
+
Requires-Dist: seaborn==0.13.2
|
|
24
|
+
Requires-Dist: pandas==2.3.1
|
|
25
|
+
Requires-Dist: yacs==0.1.8
|
|
26
|
+
Requires-Dist: opencv-python==4.12.0.88
|
|
27
|
+
Requires-Dist: pillow==11.3.0
|
|
28
|
+
Requires-Dist: reportlab==4.4.2
|
|
29
|
+
Requires-Dist: types-reportlab==4.4.1.20250602
|
|
30
|
+
Requires-Dist: SimpleITK==2.5.2
|
|
31
|
+
Requires-Dist: scikit-image==0.25.2
|
|
32
|
+
Requires-Dist: rich==14.2.0
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest==8.4.1; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-cov==6.2.1; extra == "dev"
|
|
36
|
+
Requires-Dist: mypy==1.16.1; extra == "dev"
|
|
37
|
+
Requires-Dist: mypy_extensions==1.1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: flake8==7.3.0; extra == "dev"
|
|
39
|
+
|
|
40
|
+
<p align="center">
|
|
41
|
+
<img alt="Logo Banner" src="data/banner.png">
|
|
42
|
+
</p>
|
|
43
|
+
|
|
44
|
+
<p align="center">
|
|
45
|
+
<a href="https://github.com/EdAlita/nema_analysis_tool/actions/workflows/tests.yml">
|
|
46
|
+
<img alt="Tests" src="https://github.com/EdAlita/nema_analysis_tool/actions/workflows/tests.yml/badge.svg?branch=main">
|
|
47
|
+
</a>
|
|
48
|
+
<a href="https://github.com/psf/black">
|
|
49
|
+
<img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg">
|
|
50
|
+
</a>
|
|
51
|
+
<a href="https://github.com/EdAlita/nema_analysis_tool/blob/main/LICENSE">
|
|
52
|
+
<img alt="License: Apache-2.0" src="https://img.shields.io/badge/License-Apache_2.0-blue.svg">
|
|
53
|
+
</a>
|
|
54
|
+
<a>
|
|
55
|
+
<img alt="Python" src="https://img.shields.io/badge/language-Python-blue?logo=python">
|
|
56
|
+
</a>
|
|
57
|
+
<a>
|
|
58
|
+
<img alt="Git Download" src="https://img.shields.io/github/downloads/EdAlita/nema_analysis_tool/total">
|
|
59
|
+
</a>
|
|
60
|
+
<a>
|
|
61
|
+
<img alt="Git Release" src="https://img.shields.io/github/v/release/EdAlita/ChameleonIQ">
|
|
62
|
+
</a>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# ChameleonIQ: Nema-aware Image Quality Tool for Python
|
|
67
|
+
|
|
68
|
+
This project is a Python-based tool for the automated analysis of PET image quality based on the NEMA NU 2-2018 standard, specifically focusing on Section 7.4.1.
|
|
69
|
+
|
|
70
|
+
## Features
|
|
71
|
+
|
|
72
|
+
* Calculates Percent Contrast (Q_H,j), Percent Background Variability (N_j), and Accuracy of Corrections (ΔC_lung,i).
|
|
73
|
+
* Utilizes 3D Regions of Interest (ROIs) based on the NEMA Body Phantom.
|
|
74
|
+
* Loads nii image data with user-defined dimensions and voxel spacing.
|
|
75
|
+
* Automatic postions of ROIs on given centers
|
|
76
|
+
|
|
77
|
+
## Project Structure
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
nema-analysis-tool
|
|
81
|
+
├── data
|
|
82
|
+
├── documentation
|
|
83
|
+
├── src
|
|
84
|
+
│ ├── config
|
|
85
|
+
│ ├── nema_merge
|
|
86
|
+
│ ├── nema_quant
|
|
87
|
+
│ └── nema_quant_iter
|
|
88
|
+
└── tests
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- [**Config**](src/config): configuration files to run the tool
|
|
92
|
+
- [**Data**](src/data): Data for testing and logos used for PDF reports
|
|
93
|
+
- [**Documentation**](src/nema_quant_iter): Documentation, wikis and how to install the tool
|
|
94
|
+
- [**nema_merge**](src/nema_merge): scripts for creating fusing of individuals runs
|
|
95
|
+
- [**nema_quant**](src/nema_quant): scripts for individuals test runs
|
|
96
|
+
- [**nema_quant_iter**](src/nema_quant_iter): scripts for a iteration based analysis
|
|
97
|
+
|
|
98
|
+
## How to get Started?
|
|
99
|
+
Read these:
|
|
100
|
+
- [**Installation instructions**](documentation/INSTALLATION.md)
|
|
101
|
+
- [**Usage instructions**](documentation/USAGE.md)
|
|
102
|
+
- [**How it works?**](documentation/HOW_IT_WORKS.md)
|
|
103
|
+
|
|
104
|
+
Additional information:
|
|
105
|
+
- [**What will change?**](documentation/CHANGELOG.md)
|
|
106
|
+
|
|
107
|
+
## License
|
|
108
|
+
This project is licensed under the Apache Lincese 2.0 - see the [LICENSE.md](LICENSE) file for details.
|
|
109
|
+
|
|
110
|
+
[//]: # (- [Ignore label](documentation/ignore_label.md))
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
setup.cfg
|
|
4
|
+
setup.py
|
|
5
|
+
src/ChameleonIQ.egg-info/PKG-INFO
|
|
6
|
+
src/ChameleonIQ.egg-info/SOURCES.txt
|
|
7
|
+
src/ChameleonIQ.egg-info/dependency_links.txt
|
|
8
|
+
src/ChameleonIQ.egg-info/entry_points.txt
|
|
9
|
+
src/ChameleonIQ.egg-info/not-zip-safe
|
|
10
|
+
src/ChameleonIQ.egg-info/requires.txt
|
|
11
|
+
src/ChameleonIQ.egg-info/top_level.txt
|
|
12
|
+
src/config/__init__.py
|
|
13
|
+
src/config/defaults.py
|
|
14
|
+
src/nema_merge/__init__.py
|
|
15
|
+
src/nema_merge/__main__.py
|
|
16
|
+
src/nema_merge/cli.py
|
|
17
|
+
src/nema_merge/reporting.py
|
|
18
|
+
src/nema_quant/__init__.py
|
|
19
|
+
src/nema_quant/__main__.py
|
|
20
|
+
src/nema_quant/analysis.py
|
|
21
|
+
src/nema_quant/cli.py
|
|
22
|
+
src/nema_quant/io.py
|
|
23
|
+
src/nema_quant/metrics.py
|
|
24
|
+
src/nema_quant/phantom.py
|
|
25
|
+
src/nema_quant/reporting.py
|
|
26
|
+
src/nema_quant/utils.py
|
|
27
|
+
src/nema_quant_iter/__init__.py
|
|
28
|
+
src/nema_quant_iter/__main__.py
|
|
29
|
+
src/nema_quant_iter/cli.py
|
|
30
|
+
src/nema_quant_iter/reporting.py
|
|
31
|
+
tests/test_analysis.py
|
|
32
|
+
tests/test_analysis_comprehensive.py
|
|
33
|
+
tests/test_analysis_edge_cases.py
|
|
34
|
+
tests/test_analysis_missing_lines.py
|
|
35
|
+
tests/test_analysis_specific_lines.py
|
|
36
|
+
tests/test_analysis_visualizations.py
|
|
37
|
+
tests/test_cli.py
|
|
38
|
+
tests/test_cli_comprehensive.py
|
|
39
|
+
tests/test_cli_key_error_handling.py
|
|
40
|
+
tests/test_cli_missing_lines.py
|
|
41
|
+
tests/test_cli_remaining_coverage.py
|
|
42
|
+
tests/test_direct_coverage.py
|
|
43
|
+
tests/test_final_analysis_push.py
|
|
44
|
+
tests/test_force_real_coverage.py
|
|
45
|
+
tests/test_function_signatures.py
|
|
46
|
+
tests/test_integration.py
|
|
47
|
+
tests/test_io.py
|
|
48
|
+
tests/test_main.py
|
|
49
|
+
tests/test_phantom.py
|
|
50
|
+
tests/test_remaining_analysis_lines.py
|
|
51
|
+
tests/test_reporting_comprehensive.py
|
|
52
|
+
tests/test_reporting_missing_lines.py
|
|
53
|
+
tests/test_utils_comprehensive.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
chameleoniq_coord = nema_quant.utils:main
|
|
3
|
+
chameleoniq_merge = nema_merge.__main__:main
|
|
4
|
+
chameleoniq_quant = nema_quant.__main__:main
|
|
5
|
+
chameleoniq_quant_iter = nema_quant_iter.__main__:main
|
|
6
|
+
nema_coord = nema_quant.utils:main
|
|
7
|
+
nema_merge = nema_merge.__main__:main
|
|
8
|
+
nema_quant = nema_quant.__main__:main
|
|
9
|
+
nema_quant_iter = nema_quant_iter.__main__:main
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
numpy==2.2.6
|
|
2
|
+
scipy==1.16.0
|
|
3
|
+
scipy-stubs==1.16.0.2
|
|
4
|
+
nibabel==5.3.2
|
|
5
|
+
matplotlib==3.10.3
|
|
6
|
+
seaborn==0.13.2
|
|
7
|
+
pandas==2.3.1
|
|
8
|
+
yacs==0.1.8
|
|
9
|
+
opencv-python==4.12.0.88
|
|
10
|
+
pillow==11.3.0
|
|
11
|
+
reportlab==4.4.2
|
|
12
|
+
types-reportlab==4.4.1.20250602
|
|
13
|
+
SimpleITK==2.5.2
|
|
14
|
+
scikit-image==0.25.2
|
|
15
|
+
rich==14.2.0
|
|
16
|
+
|
|
17
|
+
[dev]
|
|
18
|
+
pytest==8.4.1
|
|
19
|
+
pytest-cov==6.2.1
|
|
20
|
+
mypy==1.16.1
|
|
21
|
+
mypy_extensions==1.1.0
|
|
22
|
+
flake8==7.3.0
|
|
File without changes
|