From 8ab2935151a7136deefe3e54a6bc3d6e5def1cea Mon Sep 17 00:00:00 2001 From: Gerd Duscher <50049264+gduscher@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:33:19 -0400 Subject: [PATCH 1/4] emd_reader removed scan bug --- SciFiReaders/__version__.py | 2 +- SciFiReaders/readers/microscopy/em/tem/emd_reader.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/SciFiReaders/__version__.py b/SciFiReaders/__version__.py index 38fa445..ca6b734 100644 --- a/SciFiReaders/__version__.py +++ b/SciFiReaders/__version__.py @@ -1,2 +1,2 @@ -version = '0.11.5' +version = '0.11.6' time = '2024-02-26 17:00:00' diff --git a/SciFiReaders/readers/microscopy/em/tem/emd_reader.py b/SciFiReaders/readers/microscopy/em/tem/emd_reader.py index 09b5c79..a53eb9a 100644 --- a/SciFiReaders/readers/microscopy/em/tem/emd_reader.py +++ b/SciFiReaders/readers/microscopy/em/tem/emd_reader.py @@ -53,7 +53,7 @@ class EMDReader(sidpy.Reader): dictionary of sidpy.Datasets """ def __init__(self, file_path, sum_frames=False, no_eds=False): - super(EMDReader, self).__init__(file_path) + super(self).__init__(file_path) # Let h5py raise an OS error if a non-HDF5 file was provided self._h5_file = h5py.File(file_path, mode='r+') @@ -231,14 +231,15 @@ def get_eds_spectrum(self): size_x = int(float(scan['ScanSize']['width']) * float(scan['ScanArea']['right'])-float(scan['ScanSize']['width']) * float(scan['ScanArea']['left'])) size_y = int(float(scan['ScanSize']['height']) * float(scan['ScanArea']['bottom'])-float(scan['ScanSize']['height']) * float(scan['ScanArea']['top'])) - if 'RasterScanDefinition' in acquisition: + elif 'RasterScanDefinition' in acquisition: size_x = int(acquisition['RasterScanDefinition']['Width']) size_y = int(acquisition['RasterScanDefinition']['Height']) spectrum_size = int(acquisition['bincount']) self.number_of_frames = int(np.ceil((self.data_array[:, 0] == 65535).sum() / (size_x * size_y))) # print(size_x,size_y,number_of_frames) - data_array = np.zeros((size_x * size_y, spectrum_size),dtype=np.ushort) + + data_array = da.zeros((size_x * size_y, spectrum_size),dtype=np.ushort) # progress = tqdm(total=number_of_frames) data, frame = get_stream(data_array, size_x*size_y, self.data_array[:, 0]) @@ -357,8 +358,6 @@ def get_stream(data, size, data_stream): if pixel_number >= size: pixel_number = 0 frame += 1 - # print(frame) - # progress.update(1) else: data[pixel_number, value] += 1 return data, frame \ No newline at end of file From 9a1997a6d6a6f400fbd8d45898c04b7c27b2df58 Mon Sep 17 00:00:00 2001 From: Gerd Duscher <50049264+gduscher@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:35:09 -0400 Subject: [PATCH 2/4] Update setup.py --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index eddee2d..ab825d7 100644 --- a/setup.py +++ b/setup.py @@ -21,6 +21,7 @@ 'numba>=0.59.0rc1; python_version >= "3.10"', 'ipython>=7.1.0', 'pyUSID', + 'mrcfile' # generic: # Reader specific ones go to extras ] From c9fa827e3e8178e5dcefd5015b3985155058cc81 Mon Sep 17 00:00:00 2001 From: Gerd Duscher <50049264+gduscher@users.noreply.github.com> Date: Fri, 20 Sep 2024 17:10:04 -0400 Subject: [PATCH 3/4] EMD reader --- .../readers/microscopy/em/tem/emd_reader.py | 15 +++++---------- setup.py | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/SciFiReaders/readers/microscopy/em/tem/emd_reader.py b/SciFiReaders/readers/microscopy/em/tem/emd_reader.py index ce8ac01..52737cb 100644 --- a/SciFiReaders/readers/microscopy/em/tem/emd_reader.py +++ b/SciFiReaders/readers/microscopy/em/tem/emd_reader.py @@ -53,7 +53,6 @@ class EMDReader(sidpy.Reader): dictionary of sidpy.Datasets """ def __init__(self, file_path, sum_frames=False, no_eds=False): - super(self).__init__(file_path) # Let h5py raise an OS error if a non-HDF5 file was provided self._h5_file = h5py.File(file_path, mode='r+') @@ -85,7 +84,6 @@ def can_read(self): else: return False - def read(self, eds_stream=False): """ Reads all available datasets in FEI Velox style hdf5 files with .edm @@ -104,6 +102,7 @@ def read(self, eds_stream=False): raise TypeError('Velox EMD File is empty') number_of_datasets = 0 + use_tqdm = False for key in self._h5_file['Data']: if key == 'SpectrumStream': @@ -164,7 +163,6 @@ def get_eds(self, eds_stream=False): data_array = np.squeeze(data_array) chunks = 1 else: - chunks= [32, 32, data_array.shape[2]] if data_array.shape[0]> chunks[0]: chunks[0] = data_array.shape[0] if data_array.shape[1]> chunks[1]: @@ -183,9 +181,7 @@ def get_eds(self, eds_stream=False): for detector in detectors.values(): if self.metadata['BinaryResult']['Detector'] in detector['DetectorName']: if 'OffsetEnergy' in detector: - offset = float(detector['OffsetEnergy']) if 'Dispersion' in detector: - dispersion = float(detector['Dispersion']) self.datasets[key].units = 'counts' self.datasets[key].quantity = 'intensity' @@ -239,13 +235,12 @@ def get_eds_spectrum(self): self.number_of_frames = int(np.ceil((self.data_array[:, 0] == 65535).sum() / (size_x * size_y))) # print(size_x,size_y,number_of_frames) - data_array = da.zeros((size_x * size_y, spectrum_size),dtype=np.ushort) # progress = tqdm(total=number_of_frames) - data, frame = get_stream(data_array, size_x*size_y, self.data_array[:, 0]) + data, frame = get_stream(data_array, size_x*size_y, self.data_array[:, 0], self.bin) self.number_of_frames = frame - return np.reshape(data, (size_x, size_y, spectrum_size)) + return np.reshape(data, (size_x, size_y, int(spectrum_size/self.bin))) def get_image(self): key = f"Channel_{int(self.channel_number):03d}" @@ -349,7 +344,7 @@ def close(self): self._h5_file.close() @njit(cache=True) -def get_stream(data, size, data_stream): +def get_stream(data, size, data_stream, bin): #for value in self.data_array[:, 0]: #from tqdm.auto import trange, tqdm pixel_number = 0 @@ -361,5 +356,5 @@ def get_stream(data, size, data_stream): pixel_number = 0 frame += 1 else: - data[pixel_number, value] += 1 + data[pixel_number, int(value/bin-0.2)] += 1 return data, frame \ No newline at end of file diff --git a/setup.py b/setup.py index e10edbc..5639703 100644 --- a/setup.py +++ b/setup.py @@ -40,10 +40,10 @@ 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: Implementation :: CPython', 'Topic :: Scientific/Engineering :: Information Analysis'], keywords=['imaging', 'spectra', 'multidimensional', 'scientific'], From 373cf1f42d433d79610e3a4cd13de6995be70725 Mon Sep 17 00:00:00 2001 From: Gerd Duscher <50049264+gduscher@users.noreply.github.com> Date: Fri, 20 Sep 2024 17:11:42 -0400 Subject: [PATCH 4/4] Update emd_reader.py --- SciFiReaders/readers/microscopy/em/tem/emd_reader.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/SciFiReaders/readers/microscopy/em/tem/emd_reader.py b/SciFiReaders/readers/microscopy/em/tem/emd_reader.py index 52737cb..5e6b1ef 100644 --- a/SciFiReaders/readers/microscopy/em/tem/emd_reader.py +++ b/SciFiReaders/readers/microscopy/em/tem/emd_reader.py @@ -53,6 +53,7 @@ class EMDReader(sidpy.Reader): dictionary of sidpy.Datasets """ def __init__(self, file_path, sum_frames=False, no_eds=False): + super().__init__(file_path) # Let h5py raise an OS error if a non-HDF5 file was provided self._h5_file = h5py.File(file_path, mode='r+') @@ -84,6 +85,7 @@ def can_read(self): else: return False + def read(self, eds_stream=False, bin=2): """ Reads all available datasets in FEI Velox style hdf5 files with .edm @@ -91,6 +93,8 @@ def can_read(self): ---------- eds_stream: boolean switch to return spectrum image (default - False) or original spectrum stream (True) + bin: int + binning factor for EDS spectrum size reduction Returns ------- @@ -103,6 +107,7 @@ def can_read(self): number_of_datasets = 0 + self.bin = bin use_tqdm = False for key in self._h5_file['Data']: if key == 'SpectrumStream': @@ -163,6 +168,7 @@ def get_eds(self, eds_stream=False): data_array = np.squeeze(data_array) chunks = 1 else: + chunks= [data_array.shape[1], 32, data_array.shape[2]] if data_array.shape[0]> chunks[0]: chunks[0] = data_array.shape[0] if data_array.shape[1]> chunks[1]: @@ -181,7 +187,9 @@ def get_eds(self, eds_stream=False): for detector in detectors.values(): if self.metadata['BinaryResult']['Detector'] in detector['DetectorName']: if 'OffsetEnergy' in detector: + offset = float(detector['OffsetEnergy'])/self.bin if 'Dispersion' in detector: + dispersion = float(detector['Dispersion'])/self.bin self.datasets[key].units = 'counts' self.datasets[key].quantity = 'intensity' @@ -235,6 +243,7 @@ def get_eds_spectrum(self): self.number_of_frames = int(np.ceil((self.data_array[:, 0] == 65535).sum() / (size_x * size_y))) # print(size_x,size_y,number_of_frames) + data_array = np.zeros((size_x * size_y, int(spectrum_size/self.bin)),dtype=np.ushort) # progress = tqdm(total=number_of_frames) data, frame = get_stream(data_array, size_x*size_y, self.data_array[:, 0], self.bin)