Opened 6 weeks ago
Closed 5 weeks ago
#18992 closed defect (fixed)
Re-saving flipped map → empty file
| Reported by: | Tristan Croll | Owned by: | Tom Goddard |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | Input/Output | 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.26100
ChimeraX Version: 1.10.1 (2025-07-24 20:15:27 UTC)
Description
Was provided a map from Cryosparc that's in the wrong hand (a perennial problem - during reconstruction it's basically 50:50 which orientation it chooses). Flipped it, and decided to save back to the original filename in the name of efficiency. That fails, leaving an empty file in place of the original.
Log:
> isolde shorthand
Initialising ISOLDE-specific command aliases:
Alias Equivalent full command
-------------------------------------------------
st isolde step {arguments}
aw isolde add water {arguments}
awsf isolde add water {arguments} sim false
al isolde add ligand {arguments}
aa isolde add aa $1 sel {arguments}
ht isolde mod his sel {arguments}
so setattr sel atoms occupancy {arguments}
ab isolde adjust bfactors {arguments}
ss isolde sim start sel
rt isolde release torsions sel {arguments}
rd isolde release distances sel {arguments}
ra rd; rt
pf isolde pepflip sel
cf isolde cisflip sel
cbb color bfactor {arguments}
cbo color byattr occupancy {arguments}
cbc color {arguments} bychain; color {arguments} byhet
cs clipper set contourSensitivity {arguments}
UCSF ChimeraX version: 1.10.1 (2025-07-24)
© 2016-2025 Regents of the University of California. All rights reserved.
How to cite UCSF ChimeraX
> open "C:\\\Users\\\Tristan
> Croll\\\Documents\\\Structures\\\Laguna\\\cryosparc_P1112_J82_maps\\\cryosparc_P1112_J82_004_volume_map.mrc"
Opened cryosparc_P1112_J82_004_volume_map.mrc as #1, grid size 300,300,300,
pixel 0.728, shown at level 0.0171, step 2, values float32
> volume flip #1
Opened cryosparc_P1112_J82_004_volume_map.mrc z flip as #2, grid size
300,300,300, pixel 0.728, shown at step 1, values float32
> close #1
> save cryosparc_P1112_J82_004_volume_map.mrc #2
Traceback (most recent call last):
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\cmd_line\tool.py", line 319, in execute
cmd.run(cmd_text)
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\core\commands\cli.py", line 3221, in run
result = ci.function(session, **kw_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\save_command\cmd.py", line 86, in cmd_save
Command(session, registry=registry).run(provider_cmd_text, log=log)
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\core\commands\cli.py", line 3221, in run
result = ci.function(session, **kw_args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\save_command\cmd.py", line 101, in provider_save
saver_info.save(session, path, **provider_kw)
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map\\__init__.py", line 200, in save
save_map(session, path, _name, **kw)
File "C:\Program Files\ChimeraX\bin\Lib\site-packages\chimerax\map\volume.py",
line 4028, in save_map
save_grid_data(grids, path, session, format_name, options)
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_data\fileformats.py", line 326, in save_grid_data
ff.save_func(garg, tpath, options = options, progress = p)
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_data\mrc\writemrc.py", line 73, in
write_mrc2000_grid_data
matrix = grid_data.matrix((0,0,k), (isz,jsz,1))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_filter\flip.py", line 39, in matrix
m = self.data.matrix(origin, ijk_size, ijk_step, progress=progress,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_data\griddata.py", line 317, in matrix
m = self.read_matrix(ijk_origin, ijk_size, ijk_step, progress)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_data\mrc\mrc_grid.py", line 50, in read_matrix
m = self.mrc_data.read_matrix(ijk_origin, ijk_size, ijk_step, progress)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_data\mrc\mrc_format.py", line 287, in read_matrix
matrix = read_array(self.path, self.data_offset,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_data\readarray.py", line 68, in read_array
matrix[(k-ko)//kstep,(j-jo)//jstep,:] = slice[::istep]
~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not broadcast input array from shape (0,) into shape (300,)
ValueError: could not broadcast input array from shape (0,) into shape (300,)
File "C:\Program Files\ChimeraX\bin\Lib\site-
packages\chimerax\map_data\readarray.py", line 68, in read_array
matrix[(k-ko)//kstep,(j-jo)//jstep,:] = slice[::istep]
~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
See log for complete Python traceback.
OpenGL version: 3.3.0 NVIDIA 581.29
OpenGL renderer: NVIDIA GeForce RTX 3070 Laptop GPU/PCIe/SSE2
OpenGL vendor: NVIDIA Corporation
Python: 3.11.4
Locale: en_GB.cp1252
Qt version: PyQt6 6.8.1, Qt 6.8.2
Qt runtime version: 6.8.2
Qt platform: windows
Manufacturer: HP
Model: HP ZBook Studio 15.6 inch G8 Mobile Workstation PC
OS: Microsoft Windows 11 Pro (Build 26100)
Memory: 34,007,068,672
MaxProcessMemory: 137,438,953,344
CPU: 16 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
OSLanguage: en-GB
Installed Packages:
alabaster: 1.0.0
appdirs: 1.4.4
asteval: 1.0.6
asttokens: 3.0.0
babel: 2.17.0
beautifulsoup4: 4.13.3
blockdiag: 3.0.0
blosc2: 3.6.1
build: 1.2.2.post1
certifi: 2025.7.14
cftime: 1.6.4.post1
charset-normalizer: 3.4.2
ChimeraX-AddCharge: 1.5.19
ChimeraX-AddH: 2.2.7
ChimeraX-AlignmentAlgorithms: 2.0.2
ChimeraX-AlignmentHdrs: 3.6.1
ChimeraX-AlignmentMatrices: 2.1
ChimeraX-Alignments: 2.20.2
ChimeraX-AlphaFold: 1.0.1
ChimeraX-AltlocExplorer: 1.1.2
ChimeraX-AmberInfo: 1.0
ChimeraX-Aniso: 1.1.4
ChimeraX-Arrays: 1.1
ChimeraX-Atomic: 1.60.7
ChimeraX-AtomicLibrary: 14.1.19
ChimeraX-AtomSearch: 2.0.1
ChimeraX-AxesPlanes: 2.4
ChimeraX-BasicActions: 1.1.3
ChimeraX-BILD: 1.0
ChimeraX-BlastProtein: 3.0.0
ChimeraX-Boltz: 1.0
ChimeraX-BondRot: 2.0.4
ChimeraX-BugReporter: 1.0.2
ChimeraX-BuildStructure: 2.13.1
ChimeraX-Bumps: 1.0
ChimeraX-BundleBuilder: 1.5.1
ChimeraX-ButtonPanel: 1.0.1
ChimeraX-CageBuilder: 1.0.1
ChimeraX-CellPack: 1.0
ChimeraX-Centroids: 1.4
ChimeraX-ChangeChains: 1.1
ChimeraX-CheckWaters: 1.5
ChimeraX-ChemGroup: 2.0.2
ChimeraX-Clashes: 2.3
ChimeraX-Clipper: 0.25.2
ChimeraX-ColorActions: 1.0.5
ChimeraX-ColorGlobe: 1.0
ChimeraX-ColorKey: 1.5.8
ChimeraX-CommandLine: 1.3
ChimeraX-ConnectStructure: 2.0.1
ChimeraX-Contacts: 1.0.1
ChimeraX-Core: 1.10.1
ChimeraX-CoreFormats: 1.2
ChimeraX-coulombic: 1.4.5
ChimeraX-Crosslinks: 1.0
ChimeraX-Crystal: 1.0
ChimeraX-CrystalContacts: 1.0.1
ChimeraX-DataFormats: 1.2.4
ChimeraX-Dicom: 1.2.7
ChimeraX-DistMonitor: 1.4.2
ChimeraX-DockPrep: 1.1.4
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.4.1
ChimeraX-Hbonds: 2.5.1
ChimeraX-Help: 1.3
ChimeraX-HKCage: 1.3
ChimeraX-IHM: 1.1
ChimeraX-ImageFormats: 1.2
ChimeraX-IMOD: 1.0
ChimeraX-IO: 1.0.3
ChimeraX-ISOLDE: 1.10.1
ChimeraX-ItemsInspection: 1.0.1
ChimeraX-IUPAC: 1.0
ChimeraX-KVFinder: 1.6.2
ChimeraX-Label: 1.1.14
ChimeraX-ListInfo: 1.2.2
ChimeraX-Log: 1.2
ChimeraX-LookingGlass: 1.1
ChimeraX-Maestro: 1.9.1
ChimeraX-Map: 1.3
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.2.2
ChimeraX-MCopy: 1.0
ChimeraX-MDcrds: 2.10.1
ChimeraX-MedicalToolbar: 1.1
ChimeraX-Meeting: 1.0.1
ChimeraX-MLP: 1.1.1
ChimeraX-mmCIF: 2.16
ChimeraX-MMTF: 2.2
ChimeraX-ModelArchive: 1.0
ChimeraX-Modeller: 1.5.19
ChimeraX-ModelPanel: 1.5.1
ChimeraX-ModelSeries: 1.0.1
ChimeraX-Mol2: 2.0.3
ChimeraX-Mole: 1.0
ChimeraX-Morph: 1.0.2
ChimeraX-MouseModes: 1.2
ChimeraX-Movie: 1.0
ChimeraX-MutationScores: 1.0
ChimeraX-Neuron: 1.0
ChimeraX-Nifti: 1.2
ChimeraX-NMRSTAR: 1.0.2
ChimeraX-NRRD: 1.2
ChimeraX-Nucleotides: 2.0.3
ChimeraX-OpenCommand: 1.14.1
ChimeraX-OrthoPick: 1.0.1
ChimeraX-PDB: 2.7.10
ChimeraX-PDBBio: 1.0.1
ChimeraX-PDBLibrary: 1.0.4
ChimeraX-PDBMatrices: 1.0
ChimeraX-PickBlobs: 1.0.1
ChimeraX-Positions: 1.0
ChimeraX-PresetMgr: 1.1.3
ChimeraX-ProfileGrids: 1.1.3
ChimeraX-PubChem: 2.2
ChimeraX-ReadPbonds: 1.0.1
ChimeraX-Registration: 1.1.2
ChimeraX-RemoteControl: 1.0
ChimeraX-RenderByAttr: 1.6.3
ChimeraX-RenumberResidues: 1.1
ChimeraX-ResidueFit: 1.0.1
ChimeraX-RestServer: 1.3.1
ChimeraX-RNALayout: 1.0
ChimeraX-RotamerLibMgr: 4.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.3
ChimeraX-Segger: 1.0
ChimeraX-Segment: 1.0.1
ChimeraX-Segmentations: 3.5.7
ChimeraX-SelInspector: 1.0
ChimeraX-SeqView: 2.17.1
ChimeraX-Shape: 1.1
ChimeraX-Shell: 1.0.1
ChimeraX-Shortcuts: 1.2.1
ChimeraX-ShowSequences: 1.0.3
ChimeraX-SideView: 1.0.1
ChimeraX-SimilarStructures: 1.0.1
ChimeraX-Smiles: 2.1.2
ChimeraX-SmoothLines: 1.0
ChimeraX-SpaceNavigator: 1.0
ChimeraX-StdCommands: 1.19.1
ChimeraX-STL: 1.0.1
ChimeraX-Storm: 1.0
ChimeraX-StructMeasure: 1.2.1
ChimeraX-Struts: 1.0.1
ChimeraX-Surface: 1.0.1
ChimeraX-SwapAA: 2.0.1
ChimeraX-SwapRes: 2.5.2
ChimeraX-TapeMeasure: 1.0
ChimeraX-TaskManager: 1.0
ChimeraX-Test: 1.0
ChimeraX-Toolbar: 1.2.3
ChimeraX-ToolshedUtils: 1.2.4
ChimeraX-Topography: 1.0
ChimeraX-ToQuest: 1.0
ChimeraX-Tug: 1.0.1
ChimeraX-UI: 1.45.2
ChimeraX-Umap: 1.0
ChimeraX-uniprot: 2.3.1
ChimeraX-UnitCell: 1.0.1
ChimeraX-ViewDockX: 1.4.4
ChimeraX-VIPERdb: 1.0
ChimeraX-Vive: 1.1
ChimeraX-VolumeMenu: 1.0.1
ChimeraX-vrml: 1.0
ChimeraX-VTK: 1.0
ChimeraX-WavefrontOBJ: 1.0
ChimeraX-WebCam: 1.0.2
ChimeraX-WebServices: 1.1.5
ChimeraX-Zone: 1.0.1
colorama: 0.4.6
comm: 0.2.2
comtypes: 1.4.10
contourpy: 1.3.2
coverage: 7.10.0
cxservices: 1.2.3
cycler: 0.12.1
Cython: 3.0.12
debugpy: 1.8.15
decorator: 5.2.1
dill: 0.4.0
docutils: 0.21.2
executing: 2.2.0
filelock: 3.18.0
fonttools: 4.59.0
funcparserlib: 2.0.0a0
glfw: 2.9.0
grako: 3.16.5
h5py: 3.14.0
html2text: 2024.2.26
idna: 3.10
ihm: 2.2
imagecodecs: 2024.6.1
imagesize: 1.4.1
iniconfig: 2.1.0
ipykernel: 6.29.5
ipython: 8.26.0
ipywidgets: 8.1.7
jedi: 0.19.1
Jinja2: 3.1.6
jupyter_client: 8.6.3
jupyter_core: 5.8.1
jupyterlab_widgets: 3.0.15
kiwisolver: 1.4.8
line_profiler: 4.2.0
lmfit: 1.3.4
lxml: 5.3.1
lz4: 4.3.2
MarkupSafe: 3.0.2
matplotlib: 3.10.1
matplotlib-inline: 0.1.7
msgpack: 1.1.0
narwhals: 2.4.0
ndindex: 1.10.0
nest-asyncio: 1.6.0
netCDF4: 1.6.5
networkx: 3.3
nibabel: 5.2.0
nptyping: 2.5.0
numdifftools: 0.9.41
numexpr: 2.11.0
numpy: 2.2.6
numpy: 1.26.4
nvidia-nvjitlink-cu12: 12.9.86
OpenMM: 8.2.0
OpenMM-CUDA-12: 8.2.0
openvr: 1.26.701
packaging: 24.2
pandas: 2.3.1
ParmEd: 4.2.2
parso: 0.8.4
pep517: 0.13.1
pickleshare: 0.7.5
pillow: 10.4.0
pip: 25.0.1
pkginfo: 1.11.1
platformdirs: 4.3.8
plotly: 6.3.0
pluggy: 1.6.0
prompt_toolkit: 3.0.51
psutil: 7.0.0
pure_eval: 0.2.3
py-cpuinfo: 9.0.0
pycollada: 0.8
pydicom: 2.4.4
Pygments: 2.18.0
pyKVFinder: 0.8.2
pynmrstar: 3.3.5
pynrrd: 1.0.0
PyOpenGL: 3.1.9
PyOpenGL-accelerate: 3.1.9
pyopenxr: 1.1.4501
pyparsing: 3.2.3
pyproject_hooks: 1.2.0
PyQt6-commercial: 6.8.1
PyQt6-Qt6: 6.8.2
PyQt6-WebEngine-commercial: 6.8.0
PyQt6-WebEngine-Qt6: 6.8.2
PyQt6_sip: 13.10.0
pytest: 8.4.1
pytest-cov: 6.2.1
python-dateutil: 2.9.0.post0
pytz: 2025.2
pywin32: 310
pyzmq: 27.0.0
qtconsole: 5.5.2
QtPy: 2.4.3
qtshim: 1.1
RandomWords: 0.4.0
requests: 2.32.3
roman-numerals-py: 3.1.0
scipy: 1.14.0
Send2Trash: 1.8.3
SEQCROW: 1.9.2
setuptools: 78.1.0
sfftk-rw: 0.8.1
six: 1.16.0
snowballstemmer: 3.0.1
sortedcontainers: 2.4.0
soupsieve: 2.7
Sphinx: 8.2.3
sphinx-autodoc-typehints: 3.1.0
sphinxcontrib-applehelp: 2.0.0
sphinxcontrib-blockdiag: 3.0.0
sphinxcontrib-devhelp: 2.0.0
sphinxcontrib-htmlhelp: 2.1.0
sphinxcontrib-jsmath: 1.0.1
sphinxcontrib-qthelp: 2.0.0
sphinxcontrib-serializinghtml: 2.0.0
stack-data: 0.6.3
superqt: 0.7.1
tables: 3.10.2
tcia_utils: 1.5.1
tifffile: 2025.3.13
tinyarray: 1.2.4
tomlkit: 0.13.3
tornado: 6.5.1
traitlets: 5.14.3
typing_extensions: 4.14.1
tzdata: 2025.2
uncertainties: 3.2.3
urllib3: 2.5.0
wcwidth: 0.2.13
webcolors: 24.11.1
wheel: 0.45.1
wheel-filename: 1.4.2
widgetsnbextension: 4.0.14
WMI: 1.5.1
Change History (3)
comment:1 by , 5 weeks ago
| Component: | Unassigned → Input/Output |
|---|---|
| Owner: | set to |
| Platform: | → all |
| Project: | → ChimeraX |
| Status: | new → assigned |
| Summary: | ChimeraX bug report submission → Re-saving flipped map → empty file |
comment:2 by , 5 weeks ago
comment:3 by , 5 weeks ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Fixed.
There was already code to avoid overwriting a volume file with the same volume and instead using a temp file. So I extended that so that to avoid overwriting a volume with a flipped version of itself by adding a property to the flipped volume "source_path" which indicates the source of the flipped volume data.
Note:
See TracTickets
for help on using tickets.
Yeah, this is unpleasant. Saw this error reported once before. ChimeraX does not read all the data from the original map you opened since it displayed at step 2. Then you flip it and close the original map. The flipped map also is using data from the original unflipped file and will reread that file when needed. When you try to save over that file it opens in write mode erasing the file, then ChimeraX decides it needs data for the flipped map to save and gives an error.
The reason ChimeraX works this way is to allow you to flip large maps that you can't load entirely in memory (think a 1 TByte FIBSEM stack).
One solution is to write to a temporary file and only replace the destination file when the write completes. I need to think if that is the best approach.