Skip to content

Commit 50fd5b6

Browse files
committed
added ability to read fits files via delayed dask functions
1 parent 9c41811 commit 50fd5b6

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

mantidimaging/gui/windows/live_viewer/model.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from PyQt5.QtCore import QFileSystemWatcher, QObject, pyqtSignal, QTimer
1212

1313
import dask_image.imread
14+
from astropy.io import fits
1415

1516
if TYPE_CHECKING:
1617
from os import stat_result
@@ -25,10 +26,18 @@ class DaskImageDataStack:
2526
"""
2627
delayed_stack: dask.array.Array | None = None
2728

28-
def __init__(self, image_list: list[Image_Data]):
29+
def __init__(self, image_list: list[Image_Data] | None):
2930
if image_list:
3031
if image_list[0].create_delayed_array:
31-
self.delayed_stack = dask.array.concatenate([image_data.delayed_array for image_data in image_list])
32+
if image_list[0].image_path.suffix.lower() in [".tif", ".tiff"]:
33+
arrays = [image_data.delayed_array for image_data in image_list]
34+
self.delayed_stack = dask.array.stack(dask.array.array(arrays))
35+
elif image_list[0].image_path.suffix.lower() in [".fits"]:
36+
with fits.open(image_list[0].image_path.__str__()) as fit:
37+
sample = fit[0].data
38+
arrays = [image_data.delayed_array for image_data in image_list]
39+
lazy_arrays =[dask.array.from_delayed(x, shape=sample.shape, dtype=sample.dtype) for x in arrays]
40+
self.delayed_stack = dask.array.stack(lazy_arrays)
3241

3342
@property
3443
def shape(self):
@@ -88,7 +97,10 @@ def image_modified_time_stamp(self) -> str:
8897
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.image_modified_time))
8998

9099
def set_delayed_array(self) -> None:
91-
self.delayed_array = dask_image.imread.imread(self.image_path)
100+
if self.image_path.suffix.lower() in [".tif", ".tiff"]:
101+
self.delayed_array = dask_image.imread.imread(self.image_path)[0]
102+
elif self.image_path.suffix.lower() == ".fits":
103+
self.delayed_array = dask.delayed(fits.open)(self.image_path)[0].data
92104

93105

94106
class SubDirectory:

mantidimaging/gui/windows/live_viewer/presenter.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,8 @@ def load_image(image_data_obj: Image_Data) -> np.ndarray:
110110
Load a .Tif, .Tiff or .Fits file only if it exists
111111
and returns as an ndarray
112112
"""
113-
if image_data_obj.image_path.suffix.lower() in [".tif", ".tiff"]:
114-
image_data = image_data_obj.delayed_array.compute()[0]
115-
elif image_data_obj.image_path.suffix.lower() == ".fits":
116-
with fits.open(image_data_obj.image_path.__str__()) as fit:
117-
image_data = fit[0].data
113+
if image_data_obj.image_path.suffix.lower() in [".tif", ".tiff", ".fits"]:
114+
image_data = image_data_obj.delayed_array.compute()
118115
return image_data
119116

120117
def update_image_modified(self, image_path: Path) -> None:

0 commit comments

Comments
 (0)