read-structure-step 2026.1.6
A SEAMM plug-in to read common formats in computational chemistry
License: BSD-3-Clause
Keywords: SEAMM, plug-in, flowchart, Open Babel, molecules, atomistic, files

============================
SEAMM Read Structure Plug-in
============================

.. image:: https://img.shields.io/github/issues-pr-raw/molssi-seamm/read_structure_step
   :target: https://github.com/molssi-seamm/read_structure_step/pulls
   :alt: GitHub pull requests

.. image:: https://github.com/molssi-seamm/read_structure_step/workflows/CI/badge.svg
   :target: https://github.com/molssi-seamm/read_structure_step/actions
   :alt: Build Status

.. image:: https://codecov.io/gh/molssi-seamm/read_structure_step/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/molssi-seamm/read_structure_step
   :alt: Code Coverage

.. image:: https://github.com/molssi-seamm/quickmin_step/workflows/CodeQL/badge.svg
   :target: https://github.com/molssi-seamm/quickmin_step/security/code-scanning
   :alt: Code Quality

.. image:: https://github.com/molssi-seamm/read_structure_step/workflows/Release/badge.svg
   :target: https://molssi-seamm.github.io/read_structure_step/index.html
   :alt: Documentation Status

.. image:: https://pyup.io/repos/github/molssi-seamm/read_structure_step/shield.svg
   :target: https://pyup.io/repos/github/molssi-seamm/read_structure_step/
   :alt: Updates for Dependencies

.. image:: https://img.shields.io/pypi/v/read_structure_step.svg
   :target: https://pypi.python.org/pypi/read_structure_step
   :alt: PyPi VERSION

A SEAMM plug-in to read common formats in computational chemistry

The current version uses Open Babel as an engine to parse various
formats such as PDB, Mol2 or XYZ and transform them into the SEAMM
structure format for further use in SEAMM flowcharts.

* Free software: BSD license
* Documentation: https://molssi-seamm.github.io/read_structure_step/index.html
* Code: https://github.com/molssi-seamm/read_structure_step

Features
--------

- Emphasis in ease-of-use and simplicity. The public interface
  consists of a single function.
- Automatic file type recognition.
- OpenBabel as an engine to parse formats, but other engines can be
  easily implemented.
- Easily extensible to new formats.
- Current support for PDB, Mol2 and XYZ files.

Example
+++++++

.. code:: python

 import read_structure_step
 seamm_structure = read_structure_step.read("spc.xyz")

Acknowledgements
----------------

This package was created with Cookiecutter_ and the `molssi-seamm/cookiecutter-seamm-plugin`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`molssi-seamm/cookiecutter-seamm-plugin`: https://github.com/molssi-seamm/cookiecutter-seamm-plugin

Developed by the Molecular Sciences Software Institute (MolSSI_),
which receives funding from the `National Science Foundation`_ under
award ACI-1547580

.. _MolSSI: https://www.molssi.org
.. _`National Science Foundation`: https://www.nsf.gov


=======
History
=======
2026.1.6 -- Bugfix: Fixed error reading multiple structure from .extxyz file
    * Fixes a crash on reading multiple structures from a .extxyz file when using the
      system name from the file ("keep current name" or "title") with a given
      configuration name, like "initial".

2026.1.1 -- Bugfix: Incorrect blockname used when reading CIF files
    * The blockname, which can be used as the name of the system and/or configuration
      was incorrect when only some structures where read from a mult-block CIF file.

2025.11.26 -- Added an option for whether to save properties and forces when reading
    * The new option "Save properties" determines whether to save any properties,
      gradients, or velocities in the file to the configuration. If False, only the
      structure is loaded into the configuration.

2025.11.19 -- Finalized support for ASE style .extxyz files
    * Added handling of the system and configuration names encoded in the header of the
      files, both on writing and reading.
    * Fixed errors in units for velocities
    * Cleaned up and standardized handling of compressed (gzip and bzip2) files across
      the formats that support compression, currently CIF, SDF, and extended XYZ.

2025.11.11 -- Added support for ASE style .extxyz files.

    This release adds support for ASE (Atomic Simulation Environment) style
    extended XYZ files (.extxyz) with appropriate unit handling (eV, Å, and
    time = Å*amu^0.5/eV^0.5). The changes also introduce file appending capabilities
    and support for reading compressed (bz2) SDF files.

    * Added complete .extxyz format reader and writer with ASE compatibility
    * Added append mode option for file writers where applicable
    * Added extra_attributes parameter for .extxyz files to include custom metadata
    * Updated multiple file format handlers to support the new append functionality
    
2025.8.6 -- Bugfix: Corrected handling of paths relative to the home directory
  * The code did not correctly handle reading structures from files relative to home
    directories.

2025.5.14 -- Standardized citations to OpenBabel
  * Internal change which should not affect users.
    
2025.3.4 -- Improved handling of system names in SDF files
  * Switched to new handling of system and configuration names as properties in SDF
    files, rather than encoded in the title. This avoids problems with special
    characters in name, for example when using SMILES as the name.
    
2025.1.15 -- Added ability to write using an arbitrary list of structures.

2025.1.3.1 -- Bugfix: Issue with reading XYZ files
  * If the XYZ file had the charge and spin multiplicity encoded in the comment line,
    and the spin multiplicity came before the charge, the spin multiplicity was not
    correctly set. This fixes that issue.
    
2025.1.3 -- Enhancements to SDF and XYZ files
  * Added more keywords to the header of XYZ files to allow for more flexibility in
    reading them. Specifically 'title', 'model', and 'name', which can be used to name
    the system and/or configuration.
  * When reading SDF files, 'keep current name' will use the encoded system name in SDF
    files written by SEAMM, if it exists.
  * Fixed minor issue writing SDF files where the 'configurations' widget was displayed
    when writing the current configuration. The widget is now correctly hidden.
    
2024.12.29 -- Bugfix: Issue with reusing systems matching SDF files.
  * The logic was faulty, so if the first structure in an SDF file was a configuration
    of an existing system, it was not added to the system correctly.
    
2024.12.7 -- Minor update due to changes in molsystem
  * The molsystem was updated to improve the handling of properties. This required
    changes in this module to match the new molsystem.
    
2024.11.29 -- Added chemical formula as option for system/configuration names

2024.11.13 -- Bugfix: Issues with the names of properties
  * Fixed syntax of the properties pulled out from MOPAC encoded parameterization
    inputs.
    
2024.11.3 -- Bugfix: MOPAC files with references in comments
  * Fixed a bug that caused a crash when reading MOPAC files with references in the
    comments.
  * Updated the MOPAC reader to the new approach for running MOPAC in the cases that
    it is needed: Z-matrices and mixed inputs that OpenBabel can't handle.
      
2024.8.23 -- Enhancements to directory handling
  * Changed the handling of paths to make them relative to the directory that the step
    is running in. In a loop, for instance, files are relative to the iteration
    directory.
  * When reading files, allow the syntax 'job://<job number>/...' to read files from
    another job. If the job number is omitted, so the prefix is 'job:///...', the top
    directory of the current job is used.

2024.7.28 -- Added new names for systems and configurations
  * Made the naming of systems and configurations consistent with the standard
    parameters for them in the GUI.
  * Removed all "from file" options, replacing them with "title", which means the title
    from the file, if it exists, or the filename if it doesn't.
    
2023.11.16 -- Bugfix: titles in SDF files
  * Crashed reading some SDF files write by SEAMM due to the system and configuration
    names encoded in the title having multiple slashes (/).

2023.11.5 -- Added writers for CIF and mmCIF.

2023.11.2 -- Initial changes to structure handling
  * Moving towards the standard structure handling that has developed across SEAMM.
  
2023.8.30 -- Support for spacegroup symmetry

2023.7.28 -- Implemented ranges for reading XYZ and SDF files.

2023.7.27.1 -- Removed debug printing.

2023.7.27 -- Support for .gz and .bz2 files, and multi-structure .xyz files
  * Handle .gz and .bz2 files for .sdf and .xyz extensions.
  * Handle multi-structure XYZ files with a blank line between records.
    
2023.7.6 -- Bugfixes
  * Fixed output of number of structures written to SDF files, which was off by 1.
  * Cleaned up the output for the write-structure step
    
2023.1.30 -- Fixed issue#43, duplicate systems or configuration created

  * Reading a single structure from e.g. a .sdf file created a second system or
    configuration, depending on the stucture control options.

2023.1.24 -- Added handler for XYZ files and added properties

  * Added a custom handler for XYZ files to cope with some of the variant formats.

    * Supports files with no atom count on the first line

    * Supports the variant used in the Minnesota Solubility database, which has 3 header
      lines.

  * Add capability to store properties into the database for formats such as MOPAC and
    SDF that can handle properties. Also can output the properties when writing the
    files.

  * Fixed bugs if the system name or configuration name is not a string, but rather a number.

2022.10.28 -- Fixed bug reading cif and mmcif files

  * There was a bug that caused a crash when reading cif and mmcif files, and potentially
    some other formats. It has been fixed throughout.

  * The standard error for properties were missing a commma in the property name. The
    comma is standard elsewhere in SEAMM so add it here: '<prop>, stderr'

2022.10.26 -- Handling OpenBabel error messages for MOPAC .mop files
  Hiding messages about errors Kekulizing structures, which doesn't seem to be a serious
  issue, and printing any other messages as warnings.

2021.2.12 (12 February 2021)

  * Updated the README file to give a better description.

  * Updated the short description in setup.py to work with the new installer.

  * Added keywords for better searchability.

2021.2.4 (4 February 2021)
  Updated for compatibility with the new system classes in MolSystem
  2021.2.2 release.

2020.12.5 (5 December 2020)
  Internal: switching CI from TravisCI to GitHub Actions, and in the
  process moving documentation from ReadTheDocs to GitHub Pages where
  it is consolidated with the main SEAMM documentation.

2020.8.1 (1 August 2020)
  Removed leftover debug print statements.

0.9 (15 April 2020)

  * General bug fixing and code cleanup.

  * Part of release of all modules.

0.7.1 (23 November 2019)
  First release on PyPI.