Skip to content

Instantly share code, notes, and snippets.

@jni
Created June 28, 2019 08:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jni/a8c7205fc947c0afcc73004a8232f461 to your computer and use it in GitHub Desktop.
Save jni/a8c7205fc947c0afcc73004a8232f461 to your computer and use it in GitHub Desktop.
showing pims_nd2/nd2reader failures
$ python test_nd2.py ~/data/jens-eggs/20180427\ JenlinkerCompounds002.nd2 --mode nd2reader
/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/nd2reader/common_raw_metadata.py:94: RuntimeWarning: Reported average frame interval (600274.8 ms) doesn't match the set interval (600000.0 ms). Using the average now.
warnings.warn(message % (avg_interval, interval), RuntimeWarning)
(10192, 1200, 1600)
0
Traceback (most recent call last):
File "test_nd2.py", line 57, in <module>
print(nd2dask(args.filename, mode=args.mode).min().compute())
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/base.py", line 156, in compute
(result,) = compute(self, traverse=False, **kwargs)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/base.py", line 398, in compute
results = schedule(dsk, keys, **kwargs)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/threaded.py", line 76, in get
pack_exception=pack_exception, **kwargs)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/local.py", line 459, in get_async
raise_exception(exc, tb)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/compatibility.py", line 112, in reraise
raise exc
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/local.py", line 230, in execute_task
result = _execute_task(task, data)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in _execute_task
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in <listcomp>
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in _execute_task
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in <listcomp>
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 119, in _execute_task
return func(*args2)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/slicerator.py", line 187, in __getitem__
return self._get(indices)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/pims/base_frames.py", line 148, in __getitem__
return self.get_frame(key)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/pims/base_frames.py", line 642, in get_frame
result = self._get_frame_wrapped(**coords)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/nd2reader/reader.py", line 77, in get_frame_2D
return self._parser.get_image_by_attributes(t, v, c_name, z, y, x)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/nd2reader/parser.py", line 98, in get_image_by_attributes
height, width)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/nd2reader/parser.py", line 256, in _get_raw_image_data
data = read_chunk(self._fh, chunk)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/nd2reader/common.py", line 65, in read_chunk
raise ValueError("The ND2 file seems to be corrupted.")
ValueError: The ND2 file seems to be corrupted.
$ python test_nd2.py ~/data/jens-eggs/20180427\ JenlinkerCompounds002.nd2
(10192, 1200, 1600)
0
Traceback (most recent call last):
File "test_nd2.py", line 57, in <module>
print(nd2dask(args.filename, mode=args.mode).min().compute())
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/base.py", line 156, in compute
(result,) = compute(self, traverse=False, **kwargs)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/base.py", line 398, in compute
results = schedule(dsk, keys, **kwargs)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/threaded.py", line 76, in get
pack_exception=pack_exception, **kwargs)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/local.py", line 459, in get_async
raise_exception(exc, tb)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/compatibility.py", line 112, in reraise
raise exc
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/local.py", line 230, in execute_task
result = _execute_task(task, data)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in _execute_task
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in <listcomp>
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in _execute_task
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 118, in <listcomp>
args2 = [_execute_task(a, cache) for a in args]
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/dask/core.py", line 119, in _execute_task
return func(*args2)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/slicerator.py", line 187, in __getitem__
return self._get(indices)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/pims/base_frames.py", line 148, in __getitem__
return self.get_frame(key)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/pims/base_frames.py", line 642, in get_frame
result = self._get_frame_wrapped(**coords)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/pims_nd2/nd2reader.py", line 189, in get_frame_2D
h.Lim_FileGetImageData(self._handle, i, self._buf_p, self._buf_md)
File "/home/jni/miniconda3/envs/cf/lib/python3.6/site-packages/pims_nd2/ND2SDK.py", line 90, in LIMRESULT
raise Exception(error)
Exception: LIM_ERR_FAIL
import sys
import argparse
import numpy as np
from dask import array as da, delayed
import matplotlib.pyplot as plt
from pims import ND2_Reader as pnd2
from nd2reader import ND2Reader as nd2r
def nd2dask(filename, mode='pims'):
if mode == 'pims':
# for some reason, the expt/replicates/stage position axis has
# different name in pims_nd2 and nd2reader
frames = pnd2(filename)
expt = 'm'
elif mode == 'nd2reader':
frames = nd2r(filename)
expt = 'v'
num_channels = frames.sizes['c']
num_expts = frames.sizes[expt]
num_timepoints = frames.sizes['t']
frames.bundle_axes = 'yx'
frames.iter_axes = f'c{expt}t'
nframes = len(frames)
arr_list = [da.from_delayed(delayed(frames.__getitem__)(i),
shape=frames.frame_shape,
dtype=frames.pixel_type)
for i in range(nframes)]
array = da.stack(arr_list, axis=0)
return array
parser = argparse.ArgumentParser()
parser.add_argument('filename', help='the file to compute on')
parser.add_argument('-m', '--mode', help='either pims or nd2reader',
default='pims')
parser.add_argument('-i', '--index', help='the index for random access',
type=int, default=11)
parser.add_argument('-s', '--show', help='show the opened frame',
action='store_true', default=False)
if __name__ == '__main__':
args = parser.parse_args()
arr = nd2dask(args.filename, mode=args.mode)
print(arr.shape)
# can put any spot in the array here, it'll work
arr_idx = np.asarray(arr[args.index])
print(arr_idx.min())
if args.show:
plt.imshow(arr_idx)
plt.show()
# now iterating through the whole array crashes
print(nd2dask(args.filename, mode=args.mode).min().compute())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment