Opened 2 years ago
Closed 2 years ago
#9539 closed defect (fixed)
DICOM not readable on Windows
Reported by: | Owned by: | Zach Pearson | |
---|---|---|---|
Priority: | high | Milestone: | |
Component: | DICOM | Version: | |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Windows-10-10.0.22621 ChimeraX Version: 1.7.dev202308041947 (2023-08-04 19:47:17 UTC) Description When I try to open a DICOM folder, (sent separatly due to file size), I get these error messages. This folder opens fine on a Mac. We need to be able to open it on WIndows since we are doing an important VR event in the BIoViz lab next week. Log: UCSF ChimeraX version: 1.7.dev202308041947 (2023-08-04) © 2016-2023 Regents of the University of California. All rights reserved. How to cite UCSF ChimeraX > open C:/Users/NIH/Desktop/AFRRI/DICOM format dicom Traceback (most recent call last): File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\open_command\dialog.py", line 104, in <lambda> lambda *args, ses=session: show_open_folder_dialog(ses), tool_tip="Open folder data", ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\open_command\dialog.py", line 177, in show_open_folder_dialog _folder_dlg.display(session) File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\open_command\dialog.py", line 99, in display run(session, cmd) File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\core\commands\run.py", line 38, in run results = command.run(text, log=log, return_json=return_json) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\core\commands\cli.py", line 2897, in run result = ci.function(session, **kw_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\open_command\cmd.py", line 119, in cmd_open models = Command(session, registry=registry).run(provider_cmd_text, log=log)[0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\core\commands\cli.py", line 2897, in run result = ci.function(session, **kw_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\open_command\cmd.py", line 176, in provider_open models, status = collated_open(session, None, paths, data_format, _add_models, log_errors, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\open_command\cmd.py", line 483, in collated_open return remember_data_format() ^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\open_command\cmd.py", line 454, in remember_data_format models, status = func(*func_args, **func_kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\dicom\dicom\dicom_opener.py", line 6, in open dcm = DICOM.from_paths(session, data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\dicom\dicom\dicom.py", line 44, in from_paths return cls(path, session = session) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\dicom\dicom\dicom.py", line 39, in __init__ self.find_dicom_series(self.paths) File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\dicom\dicom\dicom.py", line 83, in find_dicom_series patients = self.dicom_patients(dpaths) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\chimerax\dicom\dicom\dicom.py", line 92, in dicom_patients d = dcmread(path) ^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\pydicom\filereader.py", line 1021, in dcmread dataset = read_partial( ^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\pydicom\filereader.py", line 778, in read_partial preamble = read_preamble(fileobj, force) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\pydicom\filereader.py", line 723, in read_preamble raise InvalidDicomError( pydicom.errors.InvalidDicomError: File is missing DICOM File Meta Information header or the 'DICM' prefix is missing from the header. Use force=True to force reading. pydicom.errors.InvalidDicomError: File is missing DICOM File Meta Information header or the 'DICM' prefix is missing from the header. Use force=True to force reading. File "C:\Program Files\ChimeraX_daily8_4\bin\Lib\site- packages\pydicom\filereader.py", line 723, in read_preamble raise InvalidDicomError( See log for complete Python traceback. OpenGL version: 3.3.0 NVIDIA 535.98 OpenGL renderer: NVIDIA GeForce RTX 3080 Ti/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation Python: 3.11.2 Locale: en_US.cp1252 Qt version: PyQt6 6.3.1, Qt 6.3.1 Qt runtime version: 6.3.2 Qt platform: windows Manufacturer: Micro-Star International Co., Ltd. Model: MS-7D30 OS: Microsoft Windows 11 Pro (Build 22621) Memory: 68,497,039,360 MaxProcessMemory: 137,438,953,344 CPU: 20 12th Gen Intel(R) Core(TM) i7-12700K OSLanguage: en-US Installed Packages: alabaster: 0.7.13 appdirs: 1.4.4 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: 2023.7.22 cftime: 1.6.2 charset-normalizer: 3.2.0 ChimeraX-AddCharge: 1.5.11 ChimeraX-AddH: 2.2.5 ChimeraX-AlignmentAlgorithms: 2.0.1 ChimeraX-AlignmentHdrs: 3.4 ChimeraX-AlignmentMatrices: 2.1 ChimeraX-Alignments: 2.9.3 ChimeraX-AlphaFold: 1.0 ChimeraX-AltlocExplorer: 1.1.1 ChimeraX-AmberInfo: 1.0 ChimeraX-Arrays: 1.1 ChimeraX-Atomic: 1.46.1 ChimeraX-AtomicLibrary: 10.0.8 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.4 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.dev202308041947 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.8 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.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.10 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.2 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.31.2 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.4 comtypes: 1.1.14 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.42.0 funcparserlib: 1.0.1 grako: 3.16.5 h5py: 3.9.0 html2text: 2020.1.16 idna: 3.4 ihm: 0.38 imagecodecs: 2023.7.10 imagesize: 1.4.1 ipykernel: 6.23.2 ipython: 8.14.0 ipython-genutils: 0.2.0 ipywidgets: 8.1.0 jedi: 0.18.2 Jinja2: 3.1.2 jupyter-client: 8.2.0 jupyter-core: 5.3.1 jupyterlab-widgets: 3.0.8 kiwisolver: 1.4.4 line-profiler: 4.0.2 lxml: 4.9.2 lz4: 4.3.2 MarkupSafe: 2.1.3 matplotlib: 3.7.2 matplotlib-inline: 0.1.6 msgpack: 1.0.4 nest-asyncio: 1.5.7 netCDF4: 1.6.2 networkx: 3.1 nibabel: 5.0.1 nptyping: 2.5.0 numexpr: 2.8.5 numpy: 1.25.1 openvr: 1.23.701 packaging: 23.1 ParmEd: 3.4.3 parso: 0.8.3 pep517: 0.13.0 pickleshare: 0.7.5 Pillow: 10.0.0 pip: 23.0 pkginfo: 1.9.6 platformdirs: 3.10.0 prompt-toolkit: 3.0.39 psutil: 5.9.5 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.7 PyOpenGL-accelerate: 3.1.7 pyparsing: 3.0.9 pyproject-hooks: 1.0.0 PyQt6-commercial: 6.3.1 PyQt6-Qt6: 6.3.2 PyQt6-sip: 13.4.0 PyQt6-WebEngine-commercial: 6.3.1 PyQt6-WebEngine-Qt6: 6.3.2 python-dateutil: 2.8.2 pytz: 2023.3 pywin32: 305 pyzmq: 25.1.0 qtconsole: 5.4.3 QtPy: 2.3.1 RandomWords: 0.4.0 requests: 2.31.0 scipy: 1.11.1 setuptools: 67.4.0 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.5.1 tifffile: 2023.7.18 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.4 wcwidth: 0.2.6 webcolors: 1.12 wheel: 0.38.4 wheel-filename: 1.4.1 widgetsnbextension: 4.0.8 WMI: 1.5.1
Attachments (1)
Change History (7)
comment:1 by , 2 years ago
comment:2 by , 2 years ago
Component: | Unassigned → DICOM |
---|---|
Owner: | set to |
Platform: | → all |
Priority: | normal → high |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → DICOM not readable on Windows |
comment:3 by , 2 years ago
This works for me with today's daily build and my developer build (on Windows). Can you try a daily build from today?
comment:4 by , 2 years ago
We were able to load the DICOM, but only with today’s build. A build from Friday and the stable release gave the errors. But we still see a bunch of errors: Pydicom could not read invalid or non-DICOM file . _IM00010.dcm; skipping. 173 messages similar to the above omitted. The volume did look like it was read in okay, though. Any idea why this doesn’t work in the release, or earlier daily build, but has no problems on a MaC? Thanks, Phil From: ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> Date: Tuesday, August 8, 2023 at 2:08 PM To: Cruz, Phil (NIH/NIAID) [C] <phil.cruz@nih.gov>, zjp@cgl.ucsf.edu <zjp@cgl.ucsf.edu> Subject: [EXTERNAL] Re: [ChimeraX] #9539: DICOM not readable on Windows #9539: DICOM not readable on Windows ----------------------------------+-------------------------- Reporter: phil.cruz@… | Owner: Zach Pearson Type: defect | Status: assigned Priority: high | Milestone: Component: DICOM | Version: Resolution: | Keywords: Blocked By: | Blocking: Notify when closed: | Platform: all Project: ChimeraX | ----------------------------------+-------------------------- Comment (by Zach Pearson): This works for me with today's daily build and my developer build (on Windows). Can you try a daily build from today? -- Ticket URL: <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.rbvi.ucsf.edu%2Ftrac%2FChimeraX%2Fticket%2F9539%23comment%3A3&data=05%7C01%7Cphil.cruz%40nih.gov%7C0d18f65afa8846f68b3a08db983a786f%7C14b77578977342d58507251ca2dc2b06%7C0%7C0%7C638271149131613311%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=m9kUY1YkI2H%2F25ryEZytcv5TWZg4aYglQY%2BxKU6WZTc%3D&reserved=0<https://www.rbvi.ucsf.edu/trac/ChimeraX/ticket/9539#comment:3>> ChimeraX <https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.rbvi.ucsf.edu%2Fchimerax%2F&data=05%7C01%7Cphil.cruz%40nih.gov%7C0d18f65afa8846f68b3a08db983a786f%7C14b77578977342d58507251ca2dc2b06%7C0%7C0%7C638271149131613311%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=pfAPQzfA0SMjFckF0sQkYATF4KSMHvp121pvGkDIhq0%3D&reserved=0<https://www.rbvi.ucsf.edu/chimerax/>> ChimeraX Issue Tracker CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and are confident the content is safe.
comment:5 by , 2 years ago
We use the pydicom library to deal with DICOM files, and the function it provides to read them takes an optional parameter to turn off error validation. We've never turned it off, but within the past couple business days I wrapped calls to it in a try block so we could attempt to read as much of a series as possible, so that'd be why it succeeds now when it hasn't before.
Can you double check the Mac version isn't actually newer than the build that originated this ticket? If it's not from today I would be interested in seeing the difference between the code then and now. It's possibly related to a recent change in how DICOM files are detected. It used to be we just looked at the filename and checked whether it ended in '.dcm', but now we walk the directory and subdirectories, and try to open every file with pydicom.dcmread
to account for folders full of extensionless files.
If I look at the directory you sent me with the Mac finder, I only see 178 files, but ChimeraX gets a list of 356 files. About half of them start with ._, which according to this StackOverflow post is a prefix on files "created to store file information that would otherwise go into an extended attribute on HFS+ (Apple native) or Unix/UFS volumes; in earlier Mac OS this would be the resource fork", whatever that means. It's a bookkeeping file, and there's one for every real image in the directory.
I'll add code to ignore files starting with '._' or maybe even all dotfiles. There's a list of exclusions already: '.DS_Store', 'desktop.ini', and 'Thumbs.db'.
comment:6 by , 2 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Added code to ignore files starting with '._'
DICOM.zip