.. _mrc-format: MRC format ---------- The ``.mrc`` format is widely used for tomographic data. The implementation of this plugin is based on `this specification `_ and has partial support for FEI's custom header. .. Note:: When reading 4D-STEM data saved by the Velox software, the data are read as a stack of diffraction patterns, but the ``navigation_shape`` argument can be used to specify the shape of the navigation space. .. Note:: For ``.mrc`` files, the :func:`~rsciio.mrc.file_reader` takes the ``mmap_mode`` keyword argument to load the file using a different mode (default is copy-on-write). However, note that lazy loading does not support in-place writing (i.e lazy loading and the ``r+`` mode are incompatible). See also the `format documentation `_ by the Collaborative Computational Project for Electron cryo-Microscopy (CCP-EM). This plugin does not support writing ``.mrc`` files, which can however be done using the :ref:`mrcz ` plugin. No additional feature of the `mrcz format `_ should be used in order to write a ``.mrc`` compliant file. In particular, the ``compressor`` argument should not be passed (Default is ``None``): .. code-block:: python >>> import numpy as np >>> from rsciio import mrcz >>> data = np.random.randint(100, size=(10, 100, 100)).astype('int16') >>> s = hs.signals.Signal2D(data) >>> s_dict = s.as_dictionary() >>> mrcz.file_writer('test.mrc', s_dict) Alternatively, use :meth:`hyperspy.api.signals.BaseSignal.save`, which will pick the ``mrcz`` plugin automatically: .. code-block:: python >>> import hyperspy.api as hs >>> import numpy as np >>> data = np.random.randint(100, size=(10, 100, 100)).astype('int16') >>> s = hs.signals.Signal2D(data) >>> s.save("data.mrc") MRC Format (Direct Electron) ---------------------------- Loading from Direct Electron's ``.mrc`` as well as reading the metadata from the .txt file saved by the software is supported by passing the ``metadata_file`` argument to the ``file_reader`` function. The ``metadata_file`` argument can be a string or a file-like object. Additionally, the ``metadata_file`` argument can be automatically inferred. This requires that the file name is of the form ``uniqueid_suffix_movie.mrc`` and that the metadata file is named ``uniqueid_suffix_info.txt``. This will automatically set the navigation shape based on the ``Scan - Size X`` and = 256 ``Scan - Size Y`` parameters in the metadata file. The navigation shape can be overridden by passing the ``navigation_shape`` argument to the :func:`~rsciio.mrc.file_reader` function. Additionally virtual_images/ external detectors can be loaded by passing a list of file names to the ``external_images`` or the ``virtual_images`` parameter. This will also automatically be inferred if the file names are of the form ``uniqueid_suffix_ext1_extName.mrc`` and ``uniqueid_suffix_1_virtualName.mrc``. The first virtual image will be used as the navigation image for fast plotting. .. code-block:: python >>> import hyperspy.api as hs # Automatically load metadata_file="20220101_0001_info.txt" and # any external/virtual images with the same naming convention >>> hs.load("20220101_0001_movie.mrc") # Load metadata from data_info.txt >>> hs.load("data.mrc", metadata_file="data_info.txt") # Load external image 1 >>> s = hs.load( ... "20220101_0001_movie.mrc", ... external_images=["20220101_0001_ext1_Ext #1.mrc"] ... ) >>> s.metadata["General"]["external_detectors"][0] # Will load virtual image 1 >>> s = hs.load( ... "20220101_0001_movie.mrc", ... virtual_images=["20220101_0001_1_Virtual #1.mrc"] ... ) >>> s.metadata["General"]["virtual_images"][0] API functions ^^^^^^^^^^^^^ .. automodule:: rsciio.mrc :members: