Change history
0.40 - 2023-09-25
- Basic support for oligosaccharides is now provided. New classes are
provided to describe saccharide chemical components
(
ihm.SaccharideChemComp
and subclasses). Unlike polymers and
non-polymers, oligosaccharides can be branched, and a new
ihm.BranchLink
class allows the linkage between individual
components to be described.
- A summary report of the system can now be produced by calling
ihm.System.report()
. This can help to reveal errors or
inconsistencies, and will warn about missing data that may not be
technically required for a compliant mmCIF file, but is usually
expected to be present.
ihm.metadata.MRCParser
now uses the new EMDB API to extract
version information and details for electron density map datasets.
- RPM packages are now available for recent versions of Fedora and
RedHat Enterprise Linux.
0.39 - 2023-08-04
ihm.location.DatabaseLocation
no longer accepts a db_name
parameter. Derived classes (such as ihm.location.PDBLocation
)
should be used instead; the base class should only be used for “other”
databases that are not described in the IHM dictionary (#116).
- Bugfix: AlphaFold models in PDB format are no longer categorized by
ihm.metadata.PDBParser
as being deposited in the PDB database
with an empty accession code.
0.38 - 2023-05-26
- Convenience classes are added to describe datasets stored in
the Model Archive, iProX, and AlphaFoldDB repositories
(
ihm.location.ModelArchiveLocation
,
ihm.location.IProXLocation
, and
ihm.location.AlphaFoldDBLocation
respectively).
- The new class
ihm.metadata.CIFParser
can be used to extract
metadata from starting models in mmCIF format. It is currently in
development and only supports model metadata from PDB or Model Archive
at this time.
- Line wrapping of output mmCIF files can now be turned if desired using
ihm.dumper.set_line_wrap()
(by default files are wrapped to 80
characters if possible).
- The make-mmcif.py utility script now allows for the name of the output
mmCIF file to be overridden (#115).
0.36 - 2023-01-25
- When reading a file that references external files, preserve any
information on the size of those files (#104).
- When reading a file containing models not in a model group, preserve
any information on the number of models deposited (#105).
- Bugfix:
ihm.dictionary.read()
now correctly handles dictionaries
that define a category after data items in that category (#107).
0.35 - 2022-09-16
- Author names now use PDB style (“Lastname, A.B.”) by default rather
than PubMed style (“Lastname AB”) (#95).
- Asyms containing multiple water molecules should now be correctly
handled (previously every water molecule in the output
atom_site
table was given the same auth_seq_id
). Use the new
ihm.WaterAsymUnit
to create an asym containing waters (#98).
- Masses for all elements are now included, so that
_entity.formula_weight
can be correctly populated for ligands (#99).
- Bugfix:
ihm.analysis.Analysis
objects are now read correctly
from input files when two objects share the same ID but are part
of different protocols (#101).
0.34 - 2022-08-03
- Strings that start with STAR reserved words such as
stop_
are now
quoted to help some readers such as the GEMMI library
(ihmwg/python-modelcif#25).
- If an input file defines a chemical descriptor with an empty name
but also defines
linker_type
, use that to fill in the name (#91).
ihm.ChemComp
now allows for chemical components to be defined
in a chemical component dictionary (CCD) outside of the wwPDB CCD. This
is not used in python-ihm itself but can be used in python-modelcif.
- Bugfix: if a read mmCIF file defines a complete assembly, do not overwrite
its name and description on output (#92).
- Bugfix: only allow clustering methods/features that are supported by
the underlying IHM dictionary for
ihm.model.Ensemble
(#94).
- Bugfix: categories such as
_struct
that are not typically looped
now support multi-line strings (ihmwg/python-modelcif#27).
0.33 - 2022-06-27
- Improve reading of mmCIF files with incomplete data (#86, #87) or with
categories in an unexpected order (#85).
- Bugfix: fix sanity check for multiple atoms with the same atom_id and
seq_id to handle bulk water (where such duplicates are OK) (#88).
0.32 - 2022-05-31
ihm.protocol.Step
now takes an ensemble
flag, to indicate
whether the modeling involved an ensemble, and which defaults to True if
the system contains at least one ihm.model.Ensemble
(#83).
- When reading an incomplete mmCIF file, such as that generated by some
versions of PyMOL, python-ihm will now fill in missing entity-related
information by guessing the sequence from the atom_site table (#67).
- Bugfix:
ihm.flr.RefMeasurementGroup
objects are now read
from mmCIF files correctly.
0.31 - 2022-04-14
- The
ihm.dumper.IgnoreVariant
class can now be used to exclude
selected categories from the mmCIF/BinaryCIF output.
- The _pdbx_nonpoly_scheme CIF table should now fully comply with the
PDBx dictionary.
- Atoms are now checked at file-output time to ensure that a given model
chain does not contain multiple atoms with the same atom_id and
seq_id (#81).
0.30 - 2022-04-05
- Add support for a long description of the system (like an abstract)
using struct.pdbx_model_details (#80).
- Bugfix: correctly read mmCIF files with missing entity.type.
0.29 - 2022-04-01
- Output mmCIF files containing non-polymers should now validate against
the PDBx dictionary (#76).
- Bugfix: non-polymers that are erroneously marked as polymers in
the input mmCIF can now be read in without causing a Python
exception (#78).
- Bugfix: strings starting with an underscore (e.g. chain names) are now
quoted in mmCIF output to conform to the CIF syntax (#75).
0.28 - 2022-03-21
ihm.Citation
now takes a is_primary
argument, which can
be used to denote the most pertinent publication for the modeling.
- Improved support for non-standard residues, and for standard amino acids
used as nonpolymers.
0.27 - 2022-01-27
- Minor documentation improvements.
- Add support for the _struct.pdbx_structure_determination_methodology
mmCIF data item.
0.26 - 2022-01-12
ihm.dumper.write()
and ihm.reader.read()
both now take
a variant
argument which can be used to control the set of tables
that are read/written. This can be used by other libraries (such as
python-ma) to support other mmCIF extensions.
0.24 - 2021-12-01
ihm.AsymUnit
now supports insertion codes in its
auth_seq_id_map
. The target of this mapping can either be an
author-provided residue number (as previously) or a 2-element tuple
containing this number and an insertion code.
ihm.AsymUnit
now allows the PDB or author-provided strand/chain ID
to be different from the regular ID.
- Bugfix: if two
ihm.dictionary.Dictionary
objects both contain
information about a given category, adding the two dictionaries together
now combines the category information, rather than just using that from
one dictionary.
- Bugfix:
ihm.dictionary.Dictionary
should now be able to validate
BinaryCIF files containing integer or float values (#66).
0.23 - 2021-11-01
- Bugfix: _struct_ref.pdbx_seq_one_letter_code is now treated as the subset
of the reference (e.g. UniProt) sequence that overlaps with our Entities,
not the entire sequence (#64).
0.22 - 2021-10-22
- The
ihm.Software
class now allows a citation for the software
to be provided.
- A new
ihm.citations
module contains citations for some packages
that are commonly used in integrative modeling.
0.21 - 2021-07-14
- BinaryCIF files now use UTF8 msgpack strings for all text, rather than
raw bytes. This should make python-ihm’s BinaryCIF files interoperable
with those used by, e.g., CoordinateServer.
- Output mmCIF files now include author-provided numbering (auth_seq_id)
for atoms in the atom_site table. This should help packages that don’t
read the pdbx_poly_seq_scheme table to show the desired residue
numbering (#61).
0.20 - 2021-05-06
- Support for Python 2.6 has been dropped. The library needs Python 2.7
or Python 3.
- Bugfix: correctly read in multiline reference sequence one-letter codes.
- Bugfix: the reader is now more tolerant of omitted or unknown values
(. or ?) in input mmCIF files.
0.18 - 2020-11-06
- Update to match latest FLR dictionary.
- Add a simple utility (util/make-mmcif.py) to make a minimal compliant
IHM mmCIF file, given an mmCIF file (potentially just coordinates) as input.
- Bugfix: the full residue range spanned by a starting model is now reported,
rather than just the subset that is mapped to one or more templates (#55).
- Bugfix: handle TrEMBL UniProt sequences (#57).
0.16 - 2020-05-29
ihm.reader.read()
no longer discards models read from non-IHM mmCIF
files; they are instead placed in their own ihm.model.ModelGroup
.
- Bugfix: both the pure Python and C-accelerated mmCIF readers are now more
robust, able to handle files in binary mode (e.g. from opening a URL)
and in Unicode (mmCIF files are supposed to be ASCII but python-ihm should
handle any encoding Python supports).
0.13 - 2019-11-14
ihm.reader.read()
has a new optional reject_old_file
argument.
If set, it will raise an exception if asked to read a file that conforms
to too old a version of the IHM extension dictionary.
- Definitions for the DHSO and BMSO cross-linkers are now provided in the
ihm.cross_linkers
module.
0.9 - 2019-05-31
- Add support for the latest version of the IHM dictionary.
0.8 - 2019-05-28
ihm.reader.read()
can now be asked to warn if it encounters
categories or keywords in the mmCIF or BinaryCIF file that it doesn’t
know about (and will ignore).
- Predicted contacts (
ihm.restraint.PredictedContactRestraint
)
are now supported.
ihm.reader.read()
will now read starting model coordinates and
sequence difference information into the
ihm.startmodel.StartingModel
class. Applications that don’t require
coordinates can instruct the reader to ignore them with the new
read_starting_model_coord flag.
- The new
ihm.flr
module allows for information from
Fluorescence / FRET experiments to be stored. This follows the definitions
in the FLR dictionary.
0.7 - 2019-04-24
- Authors of the mmCIF file itself (_audit_author category) can now be
set by manipulating
ihm.System.authors
. (If this list is empty on
output, the set of all citation authors is used instead, as before.)
- Any grants that supported the modeling can now be listed in
ihm.System.grants
.
- A copy of SWIG is no longer needed to install
releases of python-ihm via pip as pre-generated SWIG outputs are
included in the PyPI package. SWIG is still needed to build directly
from source code though.
0.3 - 2018-11-21
- The library now includes basic support for nonpolymers and water molecules.
In addition to the previous support for polymers (amino or nucleic acid
chains),
ihm.Entity
objects can now comprise ligands, water
molecules, and user-defined chemical components.
- The library can now read mmCIF dictionaries and validate mmCIF or BinaryCIF
files against them. See
ihm.dictionary
.
- Any
ihm.model.Atom
or ihm.model.Sphere
objects are now
checked against the model’s representation (see ihm.representation
);
for example, an ihm.model.Atom
must correspond to an
ihm.representation.AtomicSegment
. The representation in turn must
be a subset of the model’s ihm.Assembly
.
- More examples are now provided, of creating and using non-standard residue
types (chemical components); representing nonpolymers; and using the C
mmCIF parser in other C programs.
0.2 - 2018-09-06
- This release should fix installation of the package using pip:
pip install ihm should now work correctly.
0.1 - 2018-09-06
- First stable release. This provides largely complete support for the current
version of the wwPDB IHM mmCIF extension dictionary, and will read and
write mmCIF and BinaryCIF files that are compliant with the PDBx and
IHM dictionaries.