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 Eric Pettersen, 5 weeks ago

Component: UnassignedInput/Output
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionRe-saving flipped map → empty file

comment:2 by Tom Goddard, 5 weeks ago

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.

comment:3 by Tom Goddard, 5 weeks ago

Resolution: fixed
Status: assignedclosed

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.