Opened 7 years ago

Closed 7 years ago

Last modified 7 years ago

#1606 closed defect (fixed)

Singular matrix reading DICOM time series

Reported by: Elaine Meng Owned by: Tom Goddard
Priority: normal Milestone:
Component: Volume Data Version:
Keywords: Cc:
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Darwin-17.7.0-x86_64-i386-64bit
ChimeraX Version: 0.9 (2019-01-14)
Description
For opening DICOM I haven't been able to specify a whole directory successfully.  In this case the attached folder (after unzipping) contains 6 subdirectories, each with a dicom stack.  It is  subset of the mouse brain data from TCIA.  Opening this folder gives a traceback, as shown in the log.

Log:
UCSF ChimeraX version: 0.9 (2019-01-14)  
How to cite UCSF ChimeraX  

> open /Users/meng/Desktop/10-01-2010-339068828-GBMintracranial-631.2 format
dicom

Traceback (most recent call last):  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/cmd_line/tool.py", line 252, in execute  
cmd.run(cmd_text)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/commands/cli.py", line 2612, in run  
result = ci.function(session, **kw_args)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/commands/open.py", line 41, in open  
from_database=from_database, ignore_cache=ignore_cache, **kw))  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/commands/open.py", line 117, in open  
models = handle_unknown_kw(session.models.open, paths, format=format,
name=name, **kw)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/commands/open.py", line 62, in handle_unknown_kw  
return f(*args, **kw)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/models.py", line 598, in open  
session, filenames, format=format, name=name, **kw)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/io.py", line 457, in open_multiple_data  
models, status = open_func(session, paths, mname, **kw)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/volume.py", line 3405, in open_map_format  
return open_map(session, stream, name=name, format=format, **kw)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/volume.py", line 3041, in open_map  
grids = data.open_file(map_path, file_type = format, verbose =
kw.get('verbose'))  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/data/fileformats.py", line 139, in open_file  
data = module.open(apath, **kw)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/data/dicom/__init__.py", line 20, in open  
return dicom_grids(paths, verbose = verbose)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/data/dicom/dicom_grid.py", line 34, in dicom_grids  
grids.append(DicomGrid(d))  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/data/dicom/dicom_grid.py", line 48, in __init__  
file_type = 'dicom', channel = channel)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/data/griddata.py", line 100, in __init__  
self.update_transform()  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/data/griddata.py", line 186, in update_transform  
tf, tf_inv = transformation_and_inverse(self.origin, self.step, rsaxes)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/map/data/griddata.py", line 428, in
transformation_and_inverse  
tf_inv = tf.inverse()  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/geometry/place.py", line 187, in inverse  
self._inverse = Place(m34.invert_matrix(self._matrix))  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/chimerax/core/geometry/matrix.py", line 130, in invert_matrix  
rinv[:, :] = matrix_inverse(r)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/numpy/linalg/linalg.py", line 532, in inv  
ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/numpy/linalg/linalg.py", line 89, in _raise_linalgerror_singular  
raise LinAlgError("Singular matrix")  
numpy.linalg.linalg.LinAlgError: Singular matrix  
  
numpy.linalg.linalg.LinAlgError: Singular matrix  
  
File
"/Users/chimera/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/numpy/linalg/linalg.py", line 89, in _raise_linalgerror_singular  
raise LinAlgError("Singular matrix")  
  
See log for complete Python traceback.  
  




OpenGL version: 4.1 NVIDIA-10.32.0 355.11.10.10.40.102
OpenGL renderer: NVIDIA GeForce GTX 675MX OpenGL Engine
OpenGL vendor: NVIDIA Corporation
File attachment: 10-01-2010-339068828-GBMintracranial-631.2.zip

10-01-2010-339068828-GBMintracranial-631.2.zip

Attachments (1)

10-01-2010-339068828-GBMintracranial-631.2.zip (11.9 MB ) - added by Elaine Meng 7 years ago.
Added by email2trac

Change History (5)

by Elaine Meng, 7 years ago

Added by email2trac

comment:1 by Elaine Meng, 7 years ago

Component: UnassignedVolume Data
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissiontraceback trying to specify whole directory for DICOM input

comment:2 by Tom Goddard, 7 years ago

Resolution: fixed
Status: assignedclosed
Summary: traceback trying to specify whole directory for DICOM inputSingular matrix reading DICOM time series

Error was caused by reading a DICOM time series which is not yet supported. The reader did not know it was a time series and the first two slices were at exactly the same position (but different times) and so it decided the z slice spacing was 0 leading to a singular matrix error.

I added code to detect DICOM time series and warn that they are not yet handled instead of giving a traceback.

In the future it will not be too hard to add time series support.

comment:3 by Tom Goddard, 7 years ago

I added support for reading DICOM time series.

in reply to:  5 comment:4 by Elaine Meng, 7 years ago

Great!  When I opened this directory with 6 subdirectories/datasets in Horos, I couldn’t even tell which one was the time series, except by guessing because it had “Dyn” in its name.  Horos has a “play” button and slider, but it has that for all the datasets, and for the single-time-point sets at least, it animates through the slices, i.e. spatial dimension rather than time.  Not sure what it is doing for the 4D dataset… it might play through the times for each slice before going to the next slice.  It did something crazy when I tried to use the 3D viewer on that dataset, maybe stacking all the images spatially?  I am pretty sure Horos knows how to deal with 4D correctly, so I probably failed to use the correct options.

Now in ChimeraX it is obvious which is the time series because the time  slider shows the dataset name.  It does look somewhat holey or pixelated (viewed either as plane or volume), but that might just be the way it is.


Note: See TracTickets for help on using tickets.