Opened 2 years ago

Closed 2 years ago

Last modified 2 years ago

#9302 closed defect (fixed)

clicking Add on the Segmentations dialog for medical images gave traceback

Reported by: Elaine Meng Owned by: Zach Pearson
Priority: high Milestone:
Component: DICOM Version:
Keywords: Cc: Tom Goddard
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        macOS-12.6.7-arm64-arm-64bit
ChimeraX Version: 1.7.dev202304272200 (2023-04-27 22:00:29 UTC)
Description
clicking Add on the Segmentations dialog for medical images gave traceback

Before that I tried sweeping out an area with the cursor, got error no active segmentation.  Maybe it should create the segmentation automatically if none exists?

Log:
> open /Users/meng/Desktop/startup.cxc

> alias reset view orient; view initial

> alias start tool show $1

> alias whereprefs info path user unversioned config

> alias captut open help:user/tutorials/binding-sites.html#cap-example

> alias previewts toolshed url https://cxtoolshed-
> preview.rbvi.ucsf.edu;toolshed reload available

> alias normalts toolshed url https://cxtoolshed.rbvi.ucsf.edu;toolshed reload
> available

> alias btut open
> https://www.cgl.ucsf.edu/home/meng/chimerax/vdocs/user/tutorials/binding-
> sites.html; ui dockable false "Help Viewer"

> alias stut open https://www.rbvi.ucsf.edu/chimerax/data/conservation-
> coloring/conservation-coloring.html; ui dockable false "Help Viewer"

> alias ltut open https://www.rbvi.ucsf.edu/chimerax/data/loop-modeling/loop-
> modeling.html; ui dockable false "Help Viewer"

> alias mtut open https://www.rbvi.ucsf.edu/chimerax/data/mole-channel/mole-
> channel.html; ui dockable false "Help Viewer"; windowsize 600 800

executed startup.cxc  
UCSF ChimeraX version: 1.7.dev202304272200 (2023-04-27)  
© 2016-2023 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open 1.3.6.1.4.1.14519.5.2.1.3023.4024.306470659673930296837445794244 format
> dicom fromDatabase tcia

Summary of feedback from opening
1.3.6.1.4.1.14519.5.2.1.3023.4024.306470659673930296837445794244 fetched from
tcia  
---  
note | Opened 4 MR (AXIAL T1 THRU MASS) as #1.1.1, grid size 256,256,46, pixel
0.859,0.859,8.8, shown at step 1, values int16  
  
Images from TCIA may be rotated so that flat planes appear invisible. If the
screen looks black but no error message has been issued, try rotating the
model into view with your mouse.  

> ui tool show Segmentations

> dicom view orthoplanes

> dicom view orthoplanes guidelines true

No active segmentation!  
[Repeated 1
time(s)]/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-
packages/chimerax/map_data/arrays.py:155: RuntimeWarning: invalid value
encountered in multiply  
v = fbc + b * bsize # Center of bin where rank crossed.  
Opened segmentation 1 as #5, grid size 256,256,46, pixel 0.859,0.859,8.8,
shown at level nan, step 1, values int16  
Traceback (most recent call last):  
File
"/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-
packages/chimerax/map/volume_viewer.py", line 2729, in update_cb  
s.update_histogram(rm, m, rz, delay = 0)  
File
"/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-
packages/chimerax/map/volume_viewer.py", line 2751, in update_histogram  
counts = s.bin_counts(bins)  
^^^^^^^^^^^^^^^^^^  
File
"/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-
packages/chimerax/map_data/arrays.py", line 121, in bin_counts  
b0 = int(ceil(fb0))  
^^^^^^^^^  
ValueError: cannot convert float NaN to integer  
  
ValueError: cannot convert float NaN to integer  
  
File
"/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-
packages/chimerax/map_data/arrays.py", line 121, in bin_counts  
b0 = int(ceil(fb0))  
^^^^^^^^^  
  
See log for complete Python traceback.  
  




OpenGL version: 4.1 Metal - 76.3
OpenGL renderer: Apple M1 Pro
OpenGL vendor: Apple

Python: 3.11.2
Locale: UTF-8
Qt version: PyQt6 6.4.2, Qt 6.4.2
Qt runtime version: 6.4.3
Qt platform: cocoa
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro18,1
      Chip: Apple M1 Pro
      Total Number of Cores: 10 (8 performance and 2 efficiency)
      Memory: 16 GB
      System Firmware Version: 8422.121.1
      OS Loader Version: 7459.141.1

Software:

    System Software Overview:

      System Version: macOS 12.6.7 (21G651)
      Kernel Version: Darwin 21.6.0
      Time since boot: 1:36

Graphics/Displays:

    Apple M1 Pro:

      Chipset Model: Apple M1 Pro
      Type: GPU
      Bus: Built-In
      Total Number of Cores: 16
      Vendor: Apple (0x106b)
      Metal Family: Supported, Metal GPUFamily Apple 7
      Displays:
        Color LCD:
          Display Type: Built-in Liquid Retina XDR Display
          Resolution: 3456 x 2234 Retina
          Main Display: Yes
          Mirror: Off
          Online: Yes
          Automatically Adjust Brightness: Yes
          Connection Type: Internal


Installed Packages:
    alabaster: 0.7.13
    appdirs: 1.4.4
    appnope: 0.1.3
    asttokens: 2.2.1
    Babel: 2.12.1
    backcall: 0.2.0
    beautifulsoup4: 4.11.2
    blockdiag: 3.0.0
    blosc2: 2.0.0
    build: 0.10.0
    certifi: 2022.12.7
    cftime: 1.6.2
    charset-normalizer: 3.1.0
    ChimeraX-AddCharge: 1.5.11
    ChimeraX-AddH: 2.2.5
    ChimeraX-AlignmentAlgorithms: 2.0.1
    ChimeraX-AlignmentHdrs: 3.3.1
    ChimeraX-AlignmentMatrices: 2.1
    ChimeraX-Alignments: 2.9.3
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.0.3
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.1
    ChimeraX-Atomic: 1.46
    ChimeraX-AtomicLibrary: 10.0.7
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.3.2
    ChimeraX-BasicActions: 1.1.2
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.1.2
    ChimeraX-BondRot: 2.0.4
    ChimeraX-BugReporter: 1.0.1
    ChimeraX-BuildStructure: 2.10.3
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.2.2
    ChimeraX-ButtonPanel: 1.0.1
    ChimeraX-CageBuilder: 1.0.1
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.3.2
    ChimeraX-ChangeChains: 1.0.2
    ChimeraX-CheckWaters: 1.3.1
    ChimeraX-ChemGroup: 2.0.1
    ChimeraX-Clashes: 2.2.4
    ChimeraX-ColorActions: 1.0.3
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.3
    ChimeraX-CommandLine: 1.2.5
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0.1
    ChimeraX-Core: 1.7.dev202304272200
    ChimeraX-CoreFormats: 1.1
    ChimeraX-coulombic: 1.4.2
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0.1
    ChimeraX-DataFormats: 1.2.3
    ChimeraX-Dicom: 1.2
    ChimeraX-DistMonitor: 1.4
    ChimeraX-DockPrep: 1.1.2
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ESMFold: 1.0
    ChimeraX-FileHistory: 1.0.1
    ChimeraX-FunctionKey: 1.0.1
    ChimeraX-Geometry: 1.3
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.1.1
    ChimeraX-Hbonds: 2.4
    ChimeraX-Help: 1.2.1
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.1
    ChimeraX-ItemsInspection: 1.0.1
    ChimeraX-IUPAC: 1.0
    ChimeraX-Label: 1.1.7
    ChimeraX-ListInfo: 1.2
    ChimeraX-Log: 1.1.5
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.8.2
    ChimeraX-Map: 1.1.4
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0.1
    ChimeraX-MapFilter: 2.0.1
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.1.1
    ChimeraX-Markers: 1.0.1
    ChimeraX-Mask: 1.0.2
    ChimeraX-MatchMaker: 2.1
    ChimeraX-MCopy: 1.0
    ChimeraX-MDcrds: 2.6
    ChimeraX-MedicalToolbar: 1.0.2
    ChimeraX-Meeting: 1.0.1
    ChimeraX-MLP: 1.1.1
    ChimeraX-mmCIF: 2.12
    ChimeraX-MMTF: 2.2
    ChimeraX-Modeller: 1.5.9
    ChimeraX-ModelPanel: 1.4
    ChimeraX-ModelSeries: 1.0.1
    ChimeraX-Mol2: 2.0
    ChimeraX-Mole: 1.0
    ChimeraX-Morph: 1.0.2
    ChimeraX-MouseModes: 1.2
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nifti: 1.1
    ChimeraX-NRRD: 1.1
    ChimeraX-Nucleotides: 2.0.3
    ChimeraX-OpenCommand: 1.10.2
    ChimeraX-PDB: 2.7.2
    ChimeraX-PDBBio: 1.0.1
    ChimeraX-PDBLibrary: 1.0.2
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0.1
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1
    ChimeraX-PubChem: 2.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1.1
    ChimeraX-RemoteControl: 1.0
    ChimeraX-RenderByAttr: 1.1
    ChimeraX-RenumberResidues: 1.1
    ChimeraX-ResidueFit: 1.0.1
    ChimeraX-RestServer: 1.2
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 3.0
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.5.1
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0.1
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0.1
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.9
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0.1
    ChimeraX-Shortcuts: 1.1.1
    ChimeraX-ShowSequences: 1.0.1
    ChimeraX-SideView: 1.0.1
    ChimeraX-Smiles: 2.1.2
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.12.1
    ChimeraX-STL: 1.0.1
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.1.2
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0.1
    ChimeraX-SwapAA: 2.0.1
    ChimeraX-SwapRes: 2.2.1
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.1.2
    ChimeraX-ToolshedUtils: 1.2.4
    ChimeraX-Topography: 1.0
    ChimeraX-ToQuest: 1.0
    ChimeraX-Tug: 1.0.1
    ChimeraX-UI: 1.30.1
    ChimeraX-uniprot: 2.3
    ChimeraX-UnitCell: 1.0.1
    ChimeraX-ViewDockX: 1.2.2
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0.1
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0.2
    ChimeraX-WebServices: 1.1.1
    ChimeraX-Zone: 1.0.1
    colorama: 0.4.6
    comm: 0.1.3
    contourpy: 1.1.0
    cxservices: 1.2.2
    cycler: 0.11.0
    Cython: 0.29.33
    debugpy: 1.6.7
    decorator: 5.1.1
    docutils: 0.19
    executing: 1.2.0
    filelock: 3.9.0
    fonttools: 4.40.0
    funcparserlib: 1.0.1
    grako: 3.16.5
    h5py: 3.9.0
    html2text: 2020.1.16
    idna: 3.4
    ihm: 0.35
    imagecodecs: 2023.3.16
    imagesize: 1.4.1
    ipykernel: 6.23.2
    ipython: 8.14.0
    ipython-genutils: 0.2.0
    ipywidgets: 8.0.6
    jedi: 0.18.2
    Jinja2: 3.1.2
    jupyter-client: 8.2.0
    jupyter-core: 5.3.1
    jupyterlab-widgets: 3.0.7
    kiwisolver: 1.4.4
    line-profiler: 4.0.2
    lxml: 4.9.2
    lz4: 4.3.2
    MarkupSafe: 2.1.3
    matplotlib: 3.6.3
    matplotlib-inline: 0.1.6
    msgpack: 1.0.4
    nest-asyncio: 1.5.6
    netCDF4: 1.6.2
    networkx: 2.8.8
    nibabel: 5.0.1
    nptyping: 2.5.0
    numexpr: 2.8.4
    numpy: 1.23.5
    openvr: 1.23.701
    packaging: 21.3
    ParmEd: 3.4.3
    parso: 0.8.3
    pep517: 0.13.0
    pexpect: 4.8.0
    pickleshare: 0.7.5
    Pillow: 9.3.0
    pip: 23.0
    pkginfo: 1.9.6
    platformdirs: 3.8.0
    prompt-toolkit: 3.0.38
    psutil: 5.9.4
    ptyprocess: 0.7.0
    pure-eval: 0.2.2
    py-cpuinfo: 9.0.0
    pycollada: 0.7.2
    pydicom: 2.3.0
    Pygments: 2.14.0
    pynrrd: 1.0.0
    PyOpenGL: 3.1.6
    PyOpenGL-accelerate: 3.1.6
    pyparsing: 3.1.0
    pyproject-hooks: 1.0.0
    PyQt6-commercial: 6.4.2
    PyQt6-Qt6: 6.4.3
    PyQt6-sip: 13.4.1
    PyQt6-WebEngine-commercial: 6.4.0
    PyQt6-WebEngine-Qt6: 6.4.3
    python-dateutil: 2.8.2
    pytz: 2023.3
    pyzmq: 25.1.0
    qtconsole: 5.4.3
    QtPy: 2.3.1
    RandomWords: 0.4.0
    requests: 2.31.0
    scipy: 1.9.3
    setuptools: 67.4.0
    setuptools-scm: 7.0.5
    sfftk-rw: 0.7.3
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    soupsieve: 2.4.1
    sphinx: 6.1.3
    sphinx-autodoc-typehints: 1.22
    sphinxcontrib-applehelp: 1.0.4
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 1.0.2
    sphinxcontrib-htmlhelp: 2.0.1
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.3
    sphinxcontrib-serializinghtml: 1.1.5
    stack-data: 0.6.2
    tables: 3.8.0
    tcia-utils: 1.2.0
    tifffile: 2022.10.10
    tinyarray: 1.2.4
    tomli: 2.0.1
    tornado: 6.3.2
    traitlets: 5.9.0
    typing-extensions: 4.7.1
    tzdata: 2023.3
    urllib3: 2.0.3
    wcwidth: 0.2.6
    webcolors: 1.12
    wheel: 0.38.4
    wheel-filename: 1.4.1
    widgetsnbextension: 4.0.7

Change History (12)

comment:1 by Elaine Meng, 2 years ago

Component: UnassignedDICOM
Owner: set to Zach Pearson
Platform: all
Priority: normalhigh
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionclicking Add on the Segmentations dialog for medical images gave traceback

I saw that it did add a segmentations model, or at least there was a listing in the dialog. However, then entering command "close" gave another traceback:

closeTraceback (most recent call last):

File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/core/triggerset.py", line 138, in invoke

return self._func(self._name, data)


File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/dicom/cmd/view.py", line 62, in _check_rapid_access

session.ui.main_window.restore_default_main_view()

File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/ui/gui.py", line 559, in restore_default_main_view

self.main_view.clean_up()

File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/dicom/ui/view.py", line 172, in clean_up

self.segmentation_tool().delete()

File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/dicom/ui/segmentations.py", line 153, in delete

self.session.models.remove(self.segmentation_cursors.values())

File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/core/models.py", line 911, in remove

mlist.sort(key=lambda m: len(m.id), reverse=True)

File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/core/models.py", line 911, in <lambda>

mlist.sort(key=lambda m: len(m.id), reverse=True)


TypeError: object of type 'NoneType' has no len()

Error processing trigger "remove models":
TypeError: object of type 'NoneType' has no len()

File "/Users/meng/Desktop/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/chimerax/core/models.py", line 911, in
mlist.sort(key=lambda m: len(m.id), reverse=True)

comment:2 by Zach Pearson, 2 years ago

Looking into it, I just want to note that while working on this ticket I discovered "dicom view fourup guidelines true" doesn't enable the guidelines the first time around and fixed that.

comment:3 by Zach Pearson, 2 years ago

The second traceback during after the close command is because the segmentation tool tries to delete its cursors when it closes, but it looks like models are closed before tools when closing a session. I'll add a try-except around that attempt to close, it's harmless if it fails.

comment:4 by Zach Pearson, 2 years ago

Cc: Tom Goddard added

As for the first traceback, it's in the volume viewer's histogram code. Other data like the RIDER lung CT don't cause a complaint when we ask for a histogram with 0 bins, so I'm not sure where that NaN is coming from, but maybe it makes sense there for there to be some "if this critical number is NaN it should be 0" clause around there. CCing Tom.

comment:5 by Zach Pearson, 2 years ago

Well, in map_data/arrays called by the volume viewer anyway

comment:6 by Tom Goddard, 2 years ago

I am puzzled and curious, how can you open a map and get 0 bins in the histogram? Even if all the values of the map are the same it still has one bin containing that one value. I have seen this error reported by users before but have never figured out what causes it. Can you provide a simple test case (e.g. a single map) that produces this error when opened?

The error should not be suppressed (changing NaN to 0) just because we don't understand it.

comment:7 by Elaine Meng, 2 years ago

If I recall correctly this error may have occurred after other errors (i.e. clicking Add does not always cause this problem).  So maybe it was already in a weird state with data structures partially created or destroyed.  Just thought I should report all tracebacks in case it was evident how the code could be improved, when possible.

comment:8 by Zach Pearson, 2 years ago

I tried saving the empty segmentation and then opening it, but it correctly got one bin. You can reproduce with the following commands:

open 1.3.6.1.4.1.14519.5.2.1.3023.4024.306470659673930296837445794244 format dicom fromDatabase tcia

dicom segmentations add

comment:9 by Tom Goddard, 2 years ago

Yes I get the error opening that data.  The problem is making a GridData instance with attribute pad_value = 0 and all the values in the volume are 0.  This "pad_value" attribute means to ignore those grid points for purposes of computing the data histogram.  So all grid points are ignored.  The volume code doesn't detect that.  I'll make it raise an error.  But the real problem is that the dicom segmentation code should not be setting "pad_value = 0" in a volume of all 0 values.  I apparently added this pad_value business specifically because DICOM data is sometimes padded.  The DICOM code appears to be the only ChimeraX code that uses it.

comment:10 by Zach Pearson, 2 years ago

I'll fix that -- thanks!

comment:11 by Zach Pearson, 2 years ago

Resolution: fixed
Status: assignedclosed

That seems to have solved it.

comment:12 by Tom Goddard, 2 years ago

I made the volume histogram code raise a ValueError if a volume consists only of padding values.

Note: See TracTickets for help on using tickets.