Skip to content

Commit 6848569

Browse files
committed
DaskImageDataStack allows images to be added and removed dynamically
1 parent e4510bd commit 6848569

File tree

2 files changed

+5
-40
lines changed

2 files changed

+5
-40
lines changed

mantidimaging/gui/windows/live_viewer/model.py

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import dask_image.imread
1515
from astropy.io import fits
1616

17-
from mantidimaging.core.utility import ExecutionProfiler
18-
1917
if TYPE_CHECKING:
2018
from os import stat_result
2119
from mantidimaging.gui.windows.live_viewer.view import LiveViewerWindowPresenter
@@ -75,14 +73,9 @@ def get_computed_image(self, index: int):
7573
return None
7674
try:
7775
self.get_delayed_image(index).compute()
78-
print(f"+++++++++++++++++++++++++++++++++++ get_computed_image {index=} ++++++++++++++++++++++++++++++")
79-
print(f"+++++++++++++++++++++++++++++++++++ get_computed_image {self.get_delayed_image(index)=} ++++++++++++++++++++++++++++++")
80-
print(
81-
f"+++++++++++++++++++++++++++++++++++ get_computed_image {self.get_image_data(index).image_path=} ++++++++++++++++++++++++++++++")
8276
except dask_image.imread.pims.api.UnknownFormatError:
83-
print(f"+++++++++++++++++++++++++++++++++++ get_computed_image FAILED {self.get_image_data(index).image_path=}++++++++++++++++++++++++++++++")
8477
self.remove_image_data_by_index(index)
85-
self.get_computed_image(index-1)
78+
self.get_computed_image(index - 1)
8679
except AttributeError:
8780
return None
8881
return self.get_delayed_image(index).compute()
@@ -101,9 +94,7 @@ def remove_image_data_by_path(self, image_path: Path) -> None:
10194

10295
def remove_image_data_by_index(self, index_to_remove: int) -> None:
10396
self.image_list.pop(index_to_remove)
104-
print(f"KKKKKKKKKKKKK {self.delayed_stack=} KKKKKKKKKKKKKKKKKKKK")
10597
self.delayed_stack = dask.array.delete(self.delayed_stack, index_to_remove, 0)
106-
print(f"VVVVVVVVVVVVVVVVVVVVV {self.delayed_stack=} VVVVVVVVVVVVVVVVVVVVVV")
10798
if index_to_remove == self.selected_index and self.selected_index > 0:
10899
self.selected_index = self.selected_index - 1
109100
if not self.image_list:
@@ -129,15 +120,13 @@ def add_images_to_delayed_stack(self, new_image_list: list[Image_Data]) -> None:
129120
return
130121
image_paths = [image.image_path for image in self.image_list]
131122
images_to_add = [image for image in new_image_list if image.image_path not in image_paths]
132-
print(f"============== {images_to_add=} ======================")
133123
if self.delayed_stack is None or dask.array.isnan(self.delayed_stack.shape).any():
134124
self.delayed_stack = self.create_delayed_stack_from_image_data(new_image_list)
135125
else:
136126
if images_to_add:
137-
self.delayed_stack = dask.array.concatenate([self.delayed_stack, self.get_delayed_arrays(images_to_add)])
127+
self.delayed_stack = dask.array.concatenate(
128+
[self.delayed_stack, self.get_delayed_arrays(images_to_add)])
138129
self.image_list.extend(images_to_add)
139-
# self.delayed_stack = dask.array.stack([self.delayed_stack, self.create_delayed_stack_from_image_data(image_list)])
140-
# self.delayed_stack = dask.array.unique(self.delayed_stack)
141130

142131
def delete_all_data(self):
143132
self.image_list = []
@@ -265,10 +254,6 @@ def _handle_image_changed_in_list(self, image_files: list[Image_Data],
265254
266255
:param image_files: list of image files
267256
"""
268-
print(f"++++++++++++++++ _handle_image_changed_in_list +++++++++++++++++++++")
269-
print(f"\n{[image.image_path for image in self.image_stack.image_list]=}\n")
270-
print(f"\n{[image.image_path for image in dask_image_stack.image_list]=}\n")
271-
print(f"\n{[image.image_path for image in image_files]=}\n")
272257
self.images = image_files
273258
self.image_stack = dask_image_stack
274259
# if dask_image_stack.image_list:
@@ -277,12 +262,7 @@ def _handle_image_changed_in_list(self, image_files: list[Image_Data],
277262
self.presenter.update_image_stack(self.image_stack)
278263

279264
def handle_image_modified(self, image_path: Path):
280-
print(f"++++++++++++++++ handle_image_modified +++++++++++++++++++++")
281-
print(f"\n{[image.image_path for image in self.image_stack.image_list]=}\n")
282-
print(f"\n{image_path=}\n")
283265
self.image_stack.remove_image_data_by_path(image_path)
284-
print(f"\n{[image.image_path for image in self.image_stack.image_list]=}\n")
285-
#print(f"\n{[self.image_stack.delayed_stack.shape]=}\n")
286266
self.presenter.update_image_modified(image_path)
287267
self.presenter.update_image_stack(self.image_stack)
288268

@@ -428,17 +408,6 @@ def _handle_directory_change(self) -> None:
428408
if len(images) == 0:
429409
self.image_stack.delete_all_data()
430410
self.image_stack.add_images_to_delayed_stack(images)
431-
print(f"\n ================== {len(self.image_stack.image_list)=} =========================\n")
432-
#print(f"\n ================== {self.image_stack.delayed_stack.shape=} =========================\n")
433-
if len(images) % 50 == 0:
434-
with ExecutionProfiler(msg=f"create delayed array and compute mean for {len(images)} images"):
435-
436-
print(f"\n ================== {self.image_stack.delayed_stack=} =========================\n")
437-
print(f"\n ================== {self.image_stack.image_list=} =========================\n")
438-
print(f"\n ================== {len(self.image_stack.image_list)=} =========================\n")
439-
if self.image_stack.image_list:
440-
arrmean = dask.array.mean(self.image_stack.delayed_stack, axis=(1, 2))
441-
print(arrmean.compute())
442411

443412
self.update_recent_watcher(images[-1:])
444413
self.image_changed.emit(images, self.image_stack)

mantidimaging/gui/windows/live_viewer/presenter.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ def update_image_list(self, images_list: list[Image_Data]) -> None:
8181
self.view.set_image_index(len(images_list) - 1)
8282

8383
def select_image(self, index: int) -> None:
84-
print(f"OOOOOOOOOOOOO select_image: {index=}, {self.model.images=} 0000000000000000")
8584
if not self.model.images:
8685
self.update_image_list([])
8786
return
@@ -99,11 +98,9 @@ def display_image(self, image_data_obj: Image_Data, delayed_image_stack: DaskIma
9998
"""
10099
Display image in the view after validating contents
101100
"""
102-
print(f"\n+++++++++++++++ display_image {delayed_image_stack=} ++++++++++++++++\n")
103-
print(f"\n+++++++++++++++ display_image {delayed_image_stack.delayed_stack=} ++++++++++++++++\n")
104-
#print(f"\n+++++++++++++++ display_image {delayed_image_stack.delayed_stack.shape=} ++++++++++++++++\n")
105101
try:
106-
if delayed_image_stack is None or delayed_image_stack.delayed_stack is None or not delayed_image_stack.create_delayed_array:
102+
if (delayed_image_stack is None or delayed_image_stack.delayed_stack is None
103+
or not delayed_image_stack.create_delayed_array):
107104
image_data = self.load_image_from_path(image_data_obj.image_path)
108105
else:
109106
try:
@@ -131,7 +128,6 @@ def load_image_from_delayed_stack(delayed_image_stack: DaskImageDataStack | None
131128
"""
132129
Load a delayed stack from a DaskImageDataStack and compute
133130
"""
134-
delayed_image = None
135131
if delayed_image_stack is not None:
136132
image_data = delayed_image_stack.get_selected_computed_image()
137133
else:

0 commit comments

Comments
 (0)