Opened 5 days ago
Last modified 5 days ago
#19713 assigned defect
MRC header field settings
| Reported by: | 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: macOS-14.8.1-arm64-arm-64bit
ChimeraX Version: 1.11 (2025-12-17 06:45:39 UTC)
Description
ChimeraX saves all MRC files with bytes (one-indexed to match spec) 89--92 set to 0. This is incorrect for cryo-EM volumes (should be set to 1, see https://www.ccpem.ac.uk/mrc-format/mrc2014/#:~:text=ISPG-,space%20group%20number,-6 ).
Most software packages seem to ignore this header field, but some do not. Notably, this breaks MDAnalysis's MRC loading functionality.
I discovered this bug working on an issue for a visualization package downstream of MDAnalysis. That issue was opened in Oct 2025, so this has existed at least that long.
To reproduce:
1. Download any MRC file from EMDB (which reliably sets this byte correctly)
2. Open in ChimeraX
3. Save a new MRC file
4. Compare byte (one-indexed) 89 between the two
OpenGL version: 4.1 Metal - 88.1
OpenGL renderer: Apple M2 Max
OpenGL vendor: Apple
Python: 3.11.9
Locale: UTF-8
Qt version: PyQt6 6.9.1, Qt 6.9.0
Qt runtime version: 6.9.2
Qt platform: cocoa
Hardware:
Hardware Overview:
Model Name: MacBook Pro
Model Identifier: Mac14,6
Model Number: Z17500103LL/A
Chip: Apple M2 Max
Total Number of Cores: 12 (8 performance and 4 efficiency)
Memory: 64 GB
System Firmware Version: 13822.1.2
OS Loader Version: 10151.140.19.700.2
Software:
System Software Overview:
System Version: macOS 14.8.1 (23J30)
Kernel Version: Darwin 23.6.0
Time since boot: 66 days, 23 hours, 50 minutes
Graphics/Displays:
Apple M2 Max:
Chipset Model: Apple M2 Max
Type: GPU
Bus: Built-In
Total Number of Cores: 30
Vendor: Apple (0x106b)
Metal Support: Metal 3
Displays:
DELL U2723QE:
Resolution: 3840 x 2160 (2160p/4K UHD 1 - Ultra High Definition)
UI Looks like: 3840 x 2160 @ 60.00Hz
Main Display: Yes
Mirror: Off
Online: Yes
Rotation: Supported
Color LCD:
Display Type: Built-in Liquid Retina XDR Display
Resolution: 3456 x 2234 Retina
Mirror: Off
Online: Yes
Automatically Adjust Brightness: Yes
Connection Type: Internal
Installed Packages:
aiohappyeyeballs: 2.6.1
aiohttp: 3.13.1
aiosignal: 1.4.0
alabaster: 1.0.0
annotated-types: 0.7.0
anyio: 4.12.0
appdirs: 1.4.4
appnope: 0.1.4
asttokens: 3.0.1
attrs: 25.4.0
babel: 2.17.0
beautifulsoup4: 4.13.5
blockdiag: 3.0.0
blosc2: 3.12.2
build: 1.3.0
certifi: 2025.7.14
cftime: 1.6.5
charset-normalizer: 3.4.4
ChimeraX-AddCharge: 1.5.20
ChimeraX-AddH: 2.2.8
ChimeraX-AlignmentAlgorithms: 2.0.2
ChimeraX-AlignmentHdrs: 3.6.1
ChimeraX-AlignmentMatrices: 2.1
ChimeraX-Alignments: 3.1.1
ChimeraX-AlphaFold: 1.0.1
ChimeraX-AltlocExplorer: 1.2
ChimeraX-AmberInfo: 1.0
ChimeraX-Animations: 1.0
ChimeraX-Aniso: 1.3.2
ChimeraX-Arrays: 1.1
ChimeraX-Atomic: 1.61.4
ChimeraX-AtomicLibrary: 14.2.1
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.1
ChimeraX-BondRot: 2.0.4
ChimeraX-BugReporter: 1.0.2
ChimeraX-BuildStructure: 2.13.1
ChimeraX-Bumps: 1.0
ChimeraX-BundleBuilder: 1.6.0
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-ColorActions: 1.0.5
ChimeraX-ColorGlobe: 1.0
ChimeraX-ColorKey: 1.5.8
ChimeraX-CommandLine: 1.3.0
ChimeraX-ConnectStructure: 2.0.1
ChimeraX-Contacts: 1.0.1
ChimeraX-Core: 1.11
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.3
ChimeraX-Help: 1.3
ChimeraX-HKCage: 1.3
ChimeraX-IHM: 1.1
ChimeraX-ImageFormats: 1.2
ChimeraX-IMOD: 1.0
ChimeraX-IO: 1.0.4
ChimeraX-ItemsInspection: 1.0.1
ChimeraX-IUPAC: 1.0
ChimeraX-KVFinder: 1.7.3
ChimeraX-Label: 1.2
ChimeraX-ListInfo: 1.2.2
ChimeraX-Log: 1.2.2
ChimeraX-LookingGlass: 1.1
ChimeraX-Maestro: 1.9.2
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-MCPServer: 0.1.0
ChimeraX-MDcrds: 2.17.2
ChimeraX-MedicalToolbar: 1.1
ChimeraX-Meeting: 1.0.1
ChimeraX-Minimize: 1.3.2
ChimeraX-MLP: 1.1.1
ChimeraX-mmCIF: 2.16
ChimeraX-MMTF: 2.2
ChimeraX-ModelArchive: 1.0
ChimeraX-Modeller: 1.5.22
ChimeraX-ModelPanel: 1.6
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.1
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.15.2
ChimeraX-OrthoPick: 1.0.1
ChimeraX-PDB: 2.7.11
ChimeraX-PDBBio: 1.0.1
ChimeraX-PDBLibrary: 1.0.5
ChimeraX-PDBMatrices: 1.0
ChimeraX-PickBlobs: 1.0.1
ChimeraX-Positions: 1.0
ChimeraX-PresetMgr: 1.1.4
ChimeraX-ProfileGrids: 1.4.2
ChimeraX-PubChem: 2.2
ChimeraX-ReadPbonds: 1.0.1
ChimeraX-Registration: 1.1.2
ChimeraX-RemoteControl: 1.0
ChimeraX-RenderByAttr: 1.6.5
ChimeraX-RenumberResidues: 1.1
ChimeraX-ResidueFit: 1.0.1
ChimeraX-RestServer: 1.3.3
ChimeraX-RNALayout: 1.0
ChimeraX-RotamerLibMgr: 4.0
ChimeraX-RotamerLibsDunbrack: 2.0
ChimeraX-RotamerLibsDynameomics: 2.0
ChimeraX-RotamerLibsRichardson: 2.0
ChimeraX-SaveCommand: 1.5.2
ChimeraX-Scenes: 0.3.1
ChimeraX-SchemeMgr: 1.0
ChimeraX-SDF: 2.0.3
ChimeraX-Segger: 1.0
ChimeraX-Segment: 1.0.1
ChimeraX-Segmentations: 3.5.10
ChimeraX-SelInspector: 1.0
ChimeraX-SeqView: 2.17.3
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.49.1
ChimeraX-Umap: 1.0
ChimeraX-uniprot: 2.3.2
ChimeraX-UnitCell: 1.0.1
ChimeraX-ViewDock: 1.5.2
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
click: 8.3.1
colorama: 0.4.6
comm: 0.2.3
contourpy: 1.3.3
coverage: 7.13.0
cxservices: 1.2.3
cycler: 0.12.1
Cython: 3.1.4
debugpy: 1.8.19
decorator: 5.2.1
docutils: 0.21.2
executing: 2.2.1
filelock: 3.19.1
fonttools: 4.61.1
frozenlist: 1.8.0
funcparserlib: 2.0.0a0
glfw: 2.10.0
grako: 3.16.5
h11: 0.16.0
h5py: 3.15.1
html2text: 2025.4.15
httpcore: 1.0.9
httpx: 0.28.1
httpx-sse: 0.4.3
idna: 3.11
ihm: 2.2
imagecodecs: 2024.6.1
imagesize: 1.4.1
iniconfig: 2.3.0
ipykernel: 6.30.1
ipython: 9.5.0
ipython_pygments_lexers: 1.1.1
ipywidgets: 8.1.8
jedi: 0.19.2
Jinja2: 3.1.6
jsonschema: 4.25.1
jsonschema-specifications: 2025.9.1
jupyter_client: 8.6.3
jupyter_core: 5.9.1
jupyterlab_widgets: 3.0.16
kiwisolver: 1.4.9
line_profiler: 5.0.0
lxml: 6.0.2
lz4: 4.3.2
Markdown: 3.8.2
MarkupSafe: 3.0.3
matplotlib: 3.10.7
matplotlib-inline: 0.2.1
mcp: 1.18.0
msgpack: 1.1.1
multidict: 6.7.0
ndindex: 1.10.1
nest-asyncio: 1.6.0
netCDF4: 1.6.5
networkx: 3.3
nibabel: 5.2.0
nptyping: 2.5.0
numexpr: 2.14.1
numpy: 1.26.4
OpenMM: 8.2.0
openvr: 1.26.701
packaging: 25.0
ParmEd: 4.2.2
parso: 0.8.5
pep517: 0.13.1
pexpect: 4.9.0
pickleshare: 0.7.5
pillow: 11.3.0
pip: 25.2
pkginfo: 1.12.1.2
platformdirs: 4.5.1
pluggy: 1.6.0
prompt_toolkit: 3.0.52
propcache: 0.4.1
psutil: 7.0.0
ptyprocess: 0.7.0
pure_eval: 0.2.3
py-cpuinfo: 9.0.0
pybind11: 3.0.1
pycollada: 0.8
pydantic: 2.12.5
pydantic-settings: 2.12.0
pydantic_core: 2.41.5
pydicom: 2.4.4
Pygments: 2.18.0
pynmrstar: 3.3.6
pynrrd: 1.0.0
PyOpenGL: 3.1.10
PyOpenGL-accelerate: 3.1.10
pyopenxr: 1.1.4501
pyparsing: 3.2.5
pyproject_hooks: 1.2.0
PyQt6-commercial: 6.9.1
PyQt6-Qt6: 6.9.2
PyQt6-WebEngine-commercial: 6.9.0
PyQt6-WebEngine-Qt6: 6.9.2
PyQt6_sip: 13.10.2
pytest: 9.0.2
pytest-cov: 7.0.0
python-dateutil: 2.9.0.post0
python-dotenv: 1.2.1
python-multipart: 0.0.21
pytz: 2025.2
pyzmq: 27.1.0
qtconsole: 5.7.0
QtPy: 2.4.3
qtshim: 1.2
RandomWords: 0.4.0
referencing: 0.37.0
requests: 2.32.5
roman-numerals: 4.0.0
roman-numerals-py: 4.0.0
rpds-py: 0.30.0
scipy: 1.14.0
setuptools: 80.9.0
sfftk-rw: 0.8.1
six: 1.17.0
snowballstemmer: 3.0.1
sortedcontainers: 2.4.0
soupsieve: 2.8
Sphinx: 8.2.3
sphinx-autodoc-typehints: 3.2.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
sse-starlette: 3.0.4
stack-data: 0.6.3
starlette: 0.50.0
superqt: 0.7.6
tables: 3.10.2
tcia_utils: 1.5.1
tifffile: 2025.3.13
tinyarray: 1.2.5
tornado: 6.5.4
traitlets: 5.14.3
typing-inspection: 0.4.2
typing_extensions: 4.15.0
tzdata: 2025.3
urllib3: 2.6.2
uvicorn: 0.38.0
wcwidth: 0.2.14
webcolors: 24.11.1
wheel: 0.45.1
wheel-filename: 1.4.2
widgetsnbextension: 4.0.15
yarl: 1.22.0
Change History (5)
comment:1 by , 5 days ago
| Component: | Unassigned → Volume Data |
|---|---|
| Owner: | set to |
| Platform: | → all |
| Project: | → ChimeraX |
| Status: | new → assigned |
| Summary: | ChimeraX bug report submission → MRC header field settings |
comment:2 by , 5 days ago
You are right. The trouble is ChimeraX handles many kinds of volume data besides cryoEM, X-ray, computed electrostatic maps, Gaussian quantum wavefunctions, ..., and the space group is not part of the ChimeraX data structures, nor does ChimeraX know the kind of experimental data, it just opened a file. That is why it sets space group to 0 in the written MRC -- it has no idea what kind of data it is looking at.
That is not strictly true. ChimeraX can look for what kind of file the data came from (CCP4 in the case of EMDB) and special code knowing that format can extract the space group and could try to write it into the MRC. Copying the space group from a CCP4 file to an MRC file is problematic because the CCP4 file may be a subset of the unit cell and CCP4 has meta data to indicate that but MRC does not. So setting the space group in MRC can insert incorrect information because that symmetry cannot be applied to the subset MRC.
The ChimeraX intention in setting the value to 0 is to mean "space group is not known". But as the MRC 2014 spec says 0 means 2d image or image stack, and there is no value that means unknown.
I'll consider putting in some special case ChimeraX code that says if it saving a copy of a CCP4 map that has spacegroup 1 then put 1 in the MRC file. It certainly won't be able to handle if you are saving a derived map in ChimeraX like a Gaussian smoothed EMDB map because there is no tracking of spacegroup in ChimeraX volume data structures. ChimeraX has never focused on X-ray maps.
comment:3 by , 5 days ago
Thank you for explaining -- definitely a tricky problem! And as I said, I have not run into a software package aside from MDAnalysis that refuses to interpret an MRC with the space group set to 0 as a volume, so it may be more trouble than it's worth. Would you consider adding an option to the MRC save command to set the space group, defaulted to 0? On Fri, Jan 9, 2026 at 1:48 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > > > > >
comment:4 by , 5 days ago
That's another idea to add the special spacegroup option. It is possible.
ChimeraX and Chimera have been writing these files for 25 years and this is the first time the problem has been noted. So it might make more sense for MDAnalysis to get fixed to tolerate whatever spacegroup is provided. Does it even use the spacegroup if it lists a real spacegroup for say X-ray data?
comment:5 by , 5 days ago
Good point, I'll submit an issue to their GitHub too On Fri, Jan 9, 2026 at 2:29 PM ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu> wrote: > > >
Reported by Rich Waldo