tk-rt-viewer 2.2.0__tar.gz → 2.2.1__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.
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/CHANGELOG.md +4 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/PKG-INFO +1 -1
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/__init__.py +2 -2
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/io.py +8 -4
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/.gitattributes +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/.github/workflows/ci.yml +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/.gitignore +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/LICENSE +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/README.md +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/pyproject.toml +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/__init__.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/bbox3d_handler.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/bbox_handler.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/brush_handler.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/crosshair_handler.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/rect_drag.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/viewer_events.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/events.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/geometry.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/isodose_levels.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/protocols.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/py.typed +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/reg_io.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/registration/__init__.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/registration/deformable.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/registration/errors.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/registration/params.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/registration/rigid.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/registration/session.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/registration/template.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/__init__.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/blit_compositor.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/contour_overlay.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/drawing_manager.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/dvh.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/image_layer.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/isodose.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/layout.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rendering/render.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/roi_operations.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/rtstruct_io.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/__init__.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/dose_manager.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/phase_manager.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/roi_editor.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/roi_manager.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/secondary_manager.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/structure_set.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/viewer_cache.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/state/viewer_state.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/viewer.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/window_level.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_bbox3d.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_bbox3d_handler.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_brush_handler.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_event_controllers.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_geometry.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_io.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_isodose_levels.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_performance_opt.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_reg_io.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_registration.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_render.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_rendering.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_roi_operations.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_rtstruct_io.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_state_extensions.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_state_managers.py +0 -0
- {tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/tests/test_viewer_state.py +0 -0
|
@@ -30,6 +30,10 @@ Loading a series picked from a scan now reads only that series' files.
|
|
|
30
30
|
directory holding a listed series also holds another image series.
|
|
31
31
|
Non-image objects and the phases of one 4DCT may share a directory. Off by
|
|
32
32
|
default; `MultiplePatientError` is still checked first.
|
|
33
|
+
- **`NON_IMAGE_MODALITIES`** (formerly the private `_NON_IMAGE_MODALITIES`):
|
|
34
|
+
the modalities never treated as an image series, so a host that sorts
|
|
35
|
+
files into per-series folders agrees with the scan on what an image
|
|
36
|
+
series is.
|
|
33
37
|
|
|
34
38
|
### Changed
|
|
35
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tk-rt-viewer
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.1
|
|
4
4
|
Summary: SimpleITK-based DICOM-RT MPR viewer widget for Tkinter (CT, RT-DOSE, RT-STRUCT, DVH)
|
|
5
5
|
Project-URL: Homepage, https://github.com/oki1002/DICOM_RT_Viewer
|
|
6
6
|
Project-URL: Repository, https://github.com/oki1002/DICOM_RT_Viewer
|
|
@@ -40,7 +40,7 @@ Submodule API (import from the submodule)
|
|
|
40
40
|
validate_dicom_files, find_reg_matrices, scan_dicom_series,
|
|
41
41
|
load_scanned_series, load_phase_series, select_phase_series,
|
|
42
42
|
load_all_series, load_dcm_series, normalize_phase_label,
|
|
43
|
-
MultiplePatientError, MixedSeriesDirectoryError
|
|
43
|
+
MultiplePatientError, MixedSeriesDirectoryError, NON_IMAGE_MODALITIES
|
|
44
44
|
|
|
45
45
|
``tk_rt_viewer.rtstruct_io``
|
|
46
46
|
load_rt_struct, mask2rtstruct, save_structure_set,
|
|
@@ -104,7 +104,7 @@ __all__ = [
|
|
|
104
104
|
"StructureSet",
|
|
105
105
|
"to_gy_pairs",
|
|
106
106
|
]
|
|
107
|
-
__version__ = "2.2.
|
|
107
|
+
__version__ = "2.2.1"
|
|
108
108
|
|
|
109
109
|
|
|
110
110
|
def __getattr__(name: str) -> Any:
|
|
@@ -20,6 +20,9 @@ load_phase_series(phases, reg_files=(), max_workers=None)
|
|
|
20
20
|
-> dict[str, SeriesInfo]
|
|
21
21
|
Load the phases of a scanned 4DCT, reading only their own files.
|
|
22
22
|
|
|
23
|
+
NON_IMAGE_MODALITIES
|
|
24
|
+
Modalities never treated as an image series (RT objects, REG, SR, ...).
|
|
25
|
+
|
|
23
26
|
select_phase_series(all_series, phases) -> dict[str, SeriesInfo]
|
|
24
27
|
Pick the 4DCT phases named by a scan result out of a load_all_series map.
|
|
25
28
|
|
|
@@ -70,8 +73,9 @@ _PHASE_LABEL_PATTERN = re.compile(r"\d+%")
|
|
|
70
73
|
#: Modalities never loaded as a displayable image series. Without this,
|
|
71
74
|
#: GDCM enumerates RT objects alongside the images and they are read through
|
|
72
75
|
#: the CT path (RT-DOSE without its DoseGridScaling). RT-DOSE has its own
|
|
73
|
-
#: loader, :func:`load_rt_dose`.
|
|
74
|
-
|
|
76
|
+
#: loader, :func:`load_rt_dose`. Public so hosts that reorganise files agree
|
|
77
|
+
#: with :func:`scan_dicom_series` on what counts as an image series.
|
|
78
|
+
NON_IMAGE_MODALITIES: frozenset[str] = frozenset(
|
|
75
79
|
{"RTSTRUCT", "RTPLAN", "RTRECORD", "RTDOSE", "REG", "SR", "PR", "KO", "SEG"}
|
|
76
80
|
)
|
|
77
81
|
|
|
@@ -492,7 +496,7 @@ def scan_dicom_series(
|
|
|
492
496
|
series_uid = str(ds.get("SeriesInstanceUID", ""))
|
|
493
497
|
if not series_uid:
|
|
494
498
|
continue
|
|
495
|
-
if modality not in
|
|
499
|
+
if modality not in NON_IMAGE_MODALITIES:
|
|
496
500
|
image_series_by_dir.setdefault(file.parent, set()).add(series_uid)
|
|
497
501
|
if modality not in modalities:
|
|
498
502
|
continue
|
|
@@ -937,7 +941,7 @@ def _load_all_series_impl(
|
|
|
937
941
|
for dcm_dir in sorted(scan.dirs_with_dicom):
|
|
938
942
|
for sid in reader.GetGDCMSeriesIDs(str(dcm_dir)):
|
|
939
943
|
modality = scan.modality_by_series.get(sid, "")
|
|
940
|
-
if modality.upper() in
|
|
944
|
+
if modality.upper() in NON_IMAGE_MODALITIES:
|
|
941
945
|
logger.info(f"Skipping {modality} series '{sid}' (not an image).")
|
|
942
946
|
continue
|
|
943
947
|
raw_image, file_names = _read_series(reader, dcm_dir, sid)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/bbox3d_handler.py
RENAMED
|
File without changes
|
{tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/bbox_handler.py
RENAMED
|
File without changes
|
{tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/brush_handler.py
RENAMED
|
File without changes
|
{tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/crosshair_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
{tk_rt_viewer-2.2.0 → tk_rt_viewer-2.2.1}/src/tk_rt_viewer/event_controllers/viewer_events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|