Skip to content

mmcif-tools: tool reference

Version 0.1.1, 53 tools. Generated from the tools' --help texts by python tools/make_docs.py; do not edit by hand.

Group Tools
Fetch / convert mmcif_fetch, mmcif_topdb, mmcif_frompdb
Select / delete mmcif_selchain, mmcif_delchain, mmcif_selres, mmcif_delres, mmcif_selresname, mmcif_delresname, mmcif_selatom, mmcif_selelem, mmcif_delelem, mmcif_selhetatm, mmcif_delhetatm, mmcif_selentity, mmcif_delentity, mmcif_selaltloc, mmcif_selmodel, mmcif_head, mmcif_delmeta, mmcif_keepcoord, mmcif_intersect
Edit mmcif_chain, mmcif_rplchain, mmcif_reres, mmcif_shiftres, mmcif_fixinsert, mmcif_delinsertion, mmcif_reatom, mmcif_rplresname, mmcif_uniqname, mmcif_element, mmcif_b, mmcif_occ
Identifiers mmcif_label2auth, mmcif_auth2label
Models, files and assemblies mmcif_splitchain, mmcif_splitmodel, mmcif_mkensemble, mmcif_chkensemble, mmcif_merge, mmcif_assembly
Categories and data blocks mmcif_cat, mmcif_delcat, mmcif_keepcat, mmcif_blocks
Inspect / format mmcif_info, mmcif_wc, mmcif_tofasta, mmcif_gap, mmcif_sort, mmcif_tidy, mmcif_validate

Fetch / convert

mmcif_fetch

Downloads a structure in mmCIF format and writes it to standard output.

Downloads a structure in mmCIF format and writes it to standard output.

PDB entries (4-character codes, or extended ids such as pdb_00001abc) come
from the RCSB; -biounit downloads the first biological assembly instead of
the deposited coordinates. AlphaFold DB models (AF-<UniProt accession>, e.g.
AF-P69905-F1) are looked up through the AlphaFold DB API, so the latest
model version is used.

Usage:
    mmcif_fetch [-biounit] <pdb code | AlphaFold DB id>

Example:
    mmcif_fetch 1brs > 1brs.cif            # deposited coordinates, all 6 chains
    mmcif_fetch -biounit 1brs > 1brs.cif   # first biological assembly, 2 chains
    mmcif_fetch AF-P69905-F1 > hba.cif     # AlphaFold DB model

This program is part of the mmcif-tools suite.

mmcif_topdb

Converts the coordinates of an mmCIF file to the PDB format.

Converts the coordinates of an mmCIF file to the PDB format.

As pdb_fromcif, writes the ATOM/HETATM records of _atom_site (with MODEL /
ENDMDL records when there are several models) and END; other categories,
and data blocks after the first, are not converted. Chains, residue numbers and names are auth identifiers,
falling back to label ones when a file lacks them (with --label, label ones
are used). Atom serials restart at 1 in each model. Unlike pdb_fromcif, a
TER record follows the last residue of each polymer (atoms with a
label_seq_id, or ATOM records in files without one) and takes a serial
number, as the PDB format specifies.

Will not convert a structure that does not fit the PDB format: chains of
more than one character, more than 99,999 atoms in a model, residue numbers
outside -999..9999, residue names longer than 3 characters or atom names
longer than 4; nothing is written then. Unlike pdb_fromcif, residue names
and elements are right-justified and MODEL numbers placed as the PDB
format specifies, formal charges are written as 1-, 2+, ..., and missing
occupancies / B-factors are written as 1.00 / 0.00.

Usage:
    mmcif_topdb <cif file>

Example:
    mmcif_topdb 1abc.cif > 1abc.pdb

This program is part of the mmcif-tools suite.

mmcif_frompdb

Converts a PDB file to mmCIF format.

Converts a PDB file to mmCIF format.

Converts the coordinates (ATOM/HETATM records, models) into _atom_site,
plus _entry and, from CRYST1, _cell and _symmetry. Author identifiers
(auth_*) are those of the PDB file. Unlike pdb_tocif, which copies them into
the label_* columns, label identifiers are assigned as in PDB entries:

    label_asym_id    one per polymer chain, one per ligand, and one for the
                     waters of each chain (A, B, ..., Z, AA, BA, ...)
    label_entity_id  polymer chains with the same sequence share an entity;
                     each ligand type and water are entities of their own
    label_seq_id     1, 2, ... along each polymer chain; '.' elsewhere

A TER record ends a polymer: the residues of a chain up to a TER record
are one polymer, and the next TER record of the same chain ends another.
So a file whose chains are blank or repeated, such as MD output with one
TER record per molecule, gets one label_asym_id per molecule. In chains
without TER records, the polymer runs from the first to the last ATOM
record (so modified residues inside a chain belong to it).

Atoms with a blank chain get their label_asym_id as their author chain, or
the next free name when another chain of the file already has it (this
replaces pdb_chainbows | pdb_tocif).

For chains without missing residues this gives the label identifiers of the
PDB entry; but label_seq_id only counts the residues present in the file
(SEQRES is not used), so it differs from the entry after missing residues,
and PDB entries order ligand instances and group glycans (branched
entities) by their own conventions. Missing elements are assigned as by
mmcif_element. Atom ids run from 1 over the whole file; models keep their
MODEL numbers. ANISOU, CONECT and the other PDB records are not converted.

Usage:
    mmcif_frompdb <pdb file>

Example:
    mmcif_frompdb 1abc.pdb > 1abc.cif

This program is part of the mmcif-tools suite.

Select / delete

mmcif_selchain

Extracts one or more chains from an mmCIF file.

Extracts one or more chains from an mmCIF file.

Chains are matched on auth_asym_id (the chain shown by viewers), or on
label_asym_id with --label. Chain identifiers are case-sensitive and may be
longer than one character. Rows of _atom_site_anisotrop and _struct_conn
that refer to removed atoms are removed too.

Usage:
    mmcif_selchain -<chain id>[,<chain id>...] [--label] <cif file>

Example:
    mmcif_selchain -C 1abc.cif     # selects chain C
    mmcif_selchain -A,C 1abc.cif   # selects chains A and C

This program is part of the mmcif-tools suite.

mmcif_delchain

Deletes all atoms of one or more chains from an mmCIF file.

Deletes all atoms of one or more chains from an mmCIF file.

Chains are matched on auth_asym_id (the chain shown by viewers), or on
label_asym_id with --label. Chain identifiers are case-sensitive (unlike
pdb_delchain, which upper-cases them) and may be longer than one character.
Rows of _atom_site_anisotrop and _struct_conn that refer to removed atoms
are removed too.

Usage:
    mmcif_delchain -<chain id>[,<chain id>...] [--label] <cif file>

Example:
    mmcif_delchain -A 1abc.cif     # removes chain A
    mmcif_delchain -A,B 1abc.cif   # removes chains A and B

This program is part of the mmcif-tools suite.

mmcif_selres

Selects residues by their number, piecewise or in a range.

Selects residues by their number, piecewise or in a range.

The range option has three components: start, end, and step. Start and end
are optional and if omitted the range will start at the first residue or
end at the last, respectively. As in pdb_selres, residues are matched by
number only (in every chain and model, with or without insertion code), and
the step counts residue occurrences in file order.

Residue numbers are auth_seq_id, or label_seq_id with --label. Rows of
_atom_site_anisotrop and _struct_conn that refer to removed atoms are
removed too.

Usage:
    mmcif_selres -[resid]:[resid]:[step] [--label] <cif file>

Example:
    mmcif_selres -1,2,4,6 1abc.cif     # extracts residues 1, 2, 4 and 6
    mmcif_selres -1:10 1abc.cif        # extracts residues 1 to 10
    mmcif_selres -1:10,20:30 1abc.cif  # extracts residues 1 to 10 and 20 to 30
    mmcif_selres -1: 1abc.cif          # extracts residues 1 to END
    mmcif_selres -:5 1abc.cif          # extracts residues from START to 5
    mmcif_selres -::5 1abc.cif         # extracts every 5th residue
    mmcif_selres -1:10:5 1abc.cif      # extracts every 5th residue from 1 to 10
    mmcif_selres --5:5 1abc.cif        # extracts residues -5 to 5

This program is part of the mmcif-tools suite.

mmcif_delres

Deletes a range of residues from an mmCIF file.

Deletes a range of residues from an mmCIF file.

The range option has three components: start, end, and step. Start and end
are optional and if omitted the range will start at the first residue or
end at the last, respectively. As in pdb_delres, the start and end values
are residue numbers (matched in every chain and model), while the step
counts residue occurrences in file order, regardless of their number.
Unlike pdb_delres, a range may start and end at the same residue (-5:5).

Residue numbers are auth_seq_id, or label_seq_id with --label. Rows of
_atom_site_anisotrop and _struct_conn that refer to removed atoms are
removed too.

Usage:
    mmcif_delres -[resid]:[resid]:[step] [--label] <cif file>

Example:
    mmcif_delres -1:10 1abc.cif     # deletes residues 1 to 10
    mmcif_delres -1: 1abc.cif       # deletes residues 1 to END
    mmcif_delres -:5 1abc.cif       # deletes residues from START to 5
    mmcif_delres -::5 1abc.cif      # deletes every 5th residue
    mmcif_delres -1:10:5 1abc.cif   # deletes every 5th residue from 1 to 10

This program is part of the mmcif-tools suite.

mmcif_selresname

Selects all residues matching the given name(s) in an mmCIF file.

Selects all residues matching the given name(s) in an mmCIF file.

Residue names are matched on auth_comp_id (label_comp_id with --label);
the names given are upper-cased, as in pdb_selresname. Rows of
_atom_site_anisotrop and _struct_conn that refer to removed atoms are
removed too.

Usage:
    mmcif_selresname -<name>[,<name>...] <cif file>

Example:
    mmcif_selresname -ALA 1abc.cif      # keeps only alanines
    mmcif_selresname -ASP,GLU 1abc.cif  # keeps (-) charged residues

This program is part of the mmcif-tools suite.

mmcif_delresname

Removes all residues matching the given name(s) in an mmCIF file.

Removes all residues matching the given name(s) in an mmCIF file.

Residue names are matched on auth_comp_id (label_comp_id with --label);
the names given are upper-cased, as in pdb_delresname. Rows of
_atom_site_anisotrop and _struct_conn that refer to removed atoms are
removed too.

Usage:
    mmcif_delresname -<name>[,<name>...] <cif file>

Example:
    mmcif_delresname -ALA 1abc.cif      # removes only alanines
    mmcif_delresname -HOH 1abc.cif      # removes waters
    mmcif_delresname -ASP,GLU 1abc.cif  # removes (-) charged residues

This program is part of the mmcif-tools suite.

mmcif_selatom

Selects all atoms matching the given name(s) in an mmCIF file.

Selects all atoms matching the given name(s) in an mmCIF file.

Atom names are matched on auth_atom_id (label_atom_id with --label); the
names given are upper-cased, as in pdb_selatom. mmCIF atom names carry no
padding, so -CA keeps alpha carbons and calcium ions alike, as pdb_selatom
does. Rows of _atom_site_anisotrop and _struct_conn that refer to removed
atoms are removed too.

Usage:
    mmcif_selatom -<name>[,<name>...] <cif file>

Example:
    mmcif_selatom -CA 1abc.cif        # keeps only alpha-carbon atoms
    mmcif_selatom -CA,C,N,O 1abc.cif  # keeps only backbone atoms

This program is part of the mmcif-tools suite.

mmcif_selelem

Selects all atoms of the given element(s) in an mmCIF file.

Selects all atoms of the given element(s) in an mmCIF file.

Elements are read from _atom_site.type_symbol and compared ignoring case
(pdb_selelem only matches upper-case elements). Rows of
_atom_site_anisotrop and _struct_conn that refer to removed atoms are
removed too.

Usage:
    mmcif_selelem -<element>[,<element>...] <cif file>

Example:
    mmcif_selelem -H 1abc.cif     # selects all hydrogens
    mmcif_selelem -N 1abc.cif     # selects all nitrogens
    mmcif_selelem -H,N 1abc.cif   # selects all hydrogens and nitrogens

This program is part of the mmcif-tools suite.

mmcif_delelem

Deletes all atoms of the given element(s) from an mmCIF file.

Deletes all atoms of the given element(s) from an mmCIF file.

Elements are read from _atom_site.type_symbol and compared ignoring case
(pdb_delelem only matches upper-case elements). Rows of
_atom_site_anisotrop and _struct_conn that refer to removed atoms are
removed too.

Usage:
    mmcif_delelem -<element>[,<element>...] <cif file>

Example:
    mmcif_delelem -H 1abc.cif     # deletes all hydrogens
    mmcif_delelem -H,D 1abc.cif   # deletes hydrogens and deuteriums

This program is part of the mmcif-tools suite.

mmcif_selhetatm

Selects all HETATM records (ligands, ions, waters, ...) in an mmCIF file.

Selects all HETATM records (ligands, ions, waters, ...) in an mmCIF file.

Atoms are selected on _atom_site.group_PDB. Unlike pdb_selhetatm, which
drops every other record, the rest of the file (metadata categories) is
kept; rows of _atom_site_anisotrop and _struct_conn that refer to removed
atoms are removed.

Usage:
    mmcif_selhetatm <cif file>

Example:
    mmcif_selhetatm 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_delhetatm

Removes all HETATM records (ligands, ions, waters, ...) from an mmCIF file.

Removes all HETATM records (ligands, ions, waters, ...) from an mmCIF file.

Atoms are selected on _atom_site.group_PDB. Rows of _atom_site_anisotrop
and _struct_conn that refer to removed atoms are removed too.

Usage:
    mmcif_delhetatm <cif file>

Example:
    mmcif_delhetatm 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_selentity

Selects atoms by entity: by entity number (label_entity_id) or by type.

Selects atoms by entity: by entity number (label_entity_id) or by type.

In mmCIF every molecule belongs to an entity (_entity), whose type is one
of:

    polymer       protein and nucleic-acid chains
    non-polymer   ligands and ions
    branched      oligosaccharides (glycans)
    macrolide     macrolides
    water         water

Unlike mmcif_selhetatm, this keeps modified residues with their chain: they
are HETATM records inside a polymer (MSE in proteins, PSU and 2MG in tRNA,
...). Numbers and types can be mixed (-polymer,5); types are
case-insensitive. Files without an _entity category (some non-PDB files) are
classified from their atoms: atoms with a label_seq_id are polymer, HOH,
WAT and DOD are water, and the rest non-polymer. Rows of
_atom_site_anisotrop and _struct_conn of removed atoms are removed too.

Usage:
    mmcif_selentity -<entity id or type>[,...] <cif file>

Example:
    mmcif_selentity -polymer 1abc.cif           # chains only, with modified residues
    mmcif_selentity -polymer,branched 1abc.cif  # chains and glycans
    mmcif_selentity -1,3 1abc.cif               # entities 1 and 3

This program is part of the mmcif-tools suite.

mmcif_delentity

Deletes atoms by entity: by entity number (label_entity_id) or by type.

Deletes atoms by entity: by entity number (label_entity_id) or by type.

Entity types are polymer, non-polymer (ligands and ions), branched
(glycans), macrolide and water; see mmcif_selentity. Unlike
mmcif_delhetatm, this never cuts modified residues (HETATM records inside
a polymer) out of their chain: -non-polymer,water removes the ligands, ions
and waters and nothing else. Rows of _atom_site_anisotrop and _struct_conn
of removed atoms are removed too.

Usage:
    mmcif_delentity -<entity id or type>[,...] <cif file>

Example:
    mmcif_delentity -water 1abc.cif
    mmcif_delentity -non-polymer,water 1abc.cif   # keeps chains and glycans
    mmcif_delentity -2 1abc.cif                   # removes entity 2

This program is part of the mmcif-tools suite.

mmcif_selaltloc

Selects alternate locations (_atom_site.label_alt_id) for the entire file.

Selects alternate locations (_atom_site.label_alt_id) for the entire file.

By default, for each residue the alternate location with the highest
occupancy is kept and the others are removed. With an option (e.g. -A),
location A is kept wherever a residue has it; atoms that have other
locations but no A (e.g. only B and C) are kept as they are. Kept atoms
lose their altloc label ('.'); occupancies are not changed.

The choice is made per residue, so a residue modelled as two different
residue types (e.g. SER/THR) is never mixed. Atoms keep their order, and
rows of _atom_site_anisotrop of removed atoms are removed too. Links
(_struct_conn) to a removed conformer are removed, and links to a kept one
lose their altloc label, as the atom does. A file without a label_alt_id
column has no alternate locations and is written unchanged.

Usage:
    mmcif_selaltloc [-<altloc>] <cif file>

Example:
    mmcif_selaltloc 1abc.cif      # picks locations with highest occupancy
    mmcif_selaltloc -A 1abc.cif   # picks alternate locations labelled 'A'

This program is part of the mmcif-tools suite.

mmcif_selmodel

Extracts one or more models from an mmCIF file.

Extracts one or more models from an mmCIF file.

Models are read from _atom_site.pdbx_PDB_model_num. As in pdb_selmodel, a
file with a single model (or without model numbers) is returned whole,
whatever model is asked for. Rows of _atom_site_anisotrop and _struct_conn
that refer to removed atoms are removed too.

Usage:
    mmcif_selmodel -<model id>[,<model id>...] <cif file>

Example:
    mmcif_selmodel -1 1abc.cif     # selects model 1
    mmcif_selmodel -1,3 1abc.cif   # selects models 1 and 3

This program is part of the mmcif-tools suite.

mmcif_head

Keeps the first N atoms (_atom_site rows) of an mmCIF file.

Keeps the first N atoms (_atom_site rows) of an mmCIF file.

Atoms are counted over the whole file, across models and data blocks.
Unlike pdb_head, which outputs nothing but the first N ATOM/HETATM lines,
the rest of the file (metadata categories) is kept, so the output is still
a complete mmCIF file;
rows of _atom_site_anisotrop and _struct_conn that refer to removed atoms
are removed.

Usage:
    mmcif_head -<num> <cif file>

Example:
    mmcif_head -100 1abc.cif   # first 100 atoms of the file

This program is part of the mmcif-tools suite.

mmcif_delmeta

Deletes the metadata that edits make stale, keeping the coordinates and the metadata that stays true.

Deletes the metadata that edits make stale, keeping the coordinates and the
metadata that stays true.

PDB entries carry dozens of categories that refer to residues by chain and
number: validation reports, secondary structure, sequence schemes, sites,
assemblies, ... The other tools do not update them, so after an edit they no
longer match the atoms. This tool keeps:

    _atom_site                 the atoms
    _atom_site_anisotrop       their anisotropic B-factors
    _struct_conn               the links (disulfides, metal sites, ...)
    _entry                     the entry id
    _cell, _symmetry           the unit cell and space group
    _exptl, _refine, _reflns,  the method and resolution
    _em_3d_reconstruction
    _pdbx_audit_revision_history  the release and revision dates
    _entity, _entity_poly,     the molecules, their sequences, and the
    _entity_poly_seq,          ligands
    _pdbx_entity_nonpoly
    _struct_asym               the chains (label_asym_id) of each molecule
    _pdbx_poly_seq_scheme      the residues of each chain along its sequence
    _pdbx_struct_mod_residue   the modified residues
    _chem_comp, _chem_comp_atom,  the chemical components, their atoms and
    _chem_comp_bond, _atom_type   bonds, and the elements

and deletes every other category. These are what structure prediction
programs (AlphaFold, ColabFold, OpenFold3, Boltz, Chai-1, Protenix, BioEmu)
and MD preparation programs (OpenMM, PDBFixer) read from a file.

The kept tables are brought in step with the atoms: rows of chains and
entities with no atoms left are removed, and so are the atom and bond lists
of components whose atoms were renamed. Modified residues are looked up in
the atoms by their label identifiers and get the current author numbers
(rows of residues no longer there are removed).
_entity.pdbx_number_of_molecules and _entity_poly.pdbx_strand_id are
recomputed, and _pdbx_poly_seq_scheme is rebuilt from the sequences and the
atoms (it is added when missing; residues without atoms get no author
number). So run it last in a pipeline, after the edits. Tables that cannot
be checked (no atoms, no label identifiers) are kept as they are.

With -all, only the atoms, anisotropic B-factors and links are kept
(mmcif_keepcoord also drops the anisotropic B-factors, as pdb_keepcoord
drops ANISOU records).

Usage:
    mmcif_delmeta [-all] <cif file>

Example:
    mmcif_delmeta 1abc.cif > 1abc_clean.cif
    mmcif_selchain -A 1abc.cif | mmcif_delentity -water | mmcif_delmeta > 1abc_A.cif
    mmcif_delmeta -all 1abc.cif > atoms_only.cif

This program is part of the mmcif-tools suite.

mmcif_keepcoord

Removes all non-coordinate categories from an mmCIF file.

Removes all non-coordinate categories from an mmCIF file.

Keeps the data_ line, _atom_site and _struct_conn (the mmCIF counterparts of
the ATOM/HETATM and CONECT records that pdb_keepcoord keeps); every other
category is removed, _atom_site_anisotrop included (pdb_keepcoord drops
ANISOU records too). To keep the metadata that edits do not make stale
(entry, method, unit cell, entities, chains, sequences, chemical
components), use mmcif_delmeta instead.

Usage:
    mmcif_keepcoord <cif file>

Example:
    mmcif_keepcoord 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_intersect

Keeps only the atoms of the first mmCIF file that are present in all the others.

Keeps only the atoms of the first mmCIF file that are present in all the
others.

As in pdb_intersect, atoms are judged equal if their name, altloc, residue
name, residue number, insertion code and chain are the same (auth
identifiers, or label ones with --label; models are not compared), and
coordinates are taken from the first file. Unlike pdb_intersect, the output
is the first file with the other atoms removed (metadata kept; rows of
_atom_site_anisotrop and _struct_conn of removed atoms removed).

Usage:
    mmcif_intersect <cif file> <cif file> [...]

Example:
    mmcif_intersect 1xyz.cif 1abc.cif

This program is part of the mmcif-tools suite.

Edit

mmcif_chain

Sets the chain identifier of all atoms in an mmCIF file.

Sets the chain identifier of all atoms in an mmCIF file.

Changes auth_asym_id (label_asym_id with --label), in _atom_site and in the
matching columns of _atom_site_anisotrop and _struct_conn. mmCIF has no
blank chain, so unlike pdb_chain an identifier must be given; it may be
longer than one character.

Usage:
    mmcif_chain -<chain id> [--label] <cif file>

Example:
    mmcif_chain -C 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_rplchain

Replaces one chain identifier by another in an mmCIF file.

Replaces one chain identifier by another in an mmCIF file.

Changes auth_asym_id (label_asym_id with --label), in _atom_site and in the
matching columns of _atom_site_anisotrop and _struct_conn. Identifiers are
case-sensitive and may be longer than one character; mmCIF has no blank
chain, so both must be given.

Usage:
    mmcif_rplchain -<from>:<to> [--label] <cif file>

Example:
    mmcif_rplchain -A:B 1abc.cif   # replaces chain A by chain B

This program is part of the mmcif-tools suite.

mmcif_reres

Renumbers the residues of an mmCIF file starting from a given number (default 1).

Renumbers the residues of an mmCIF file starting from a given number
(default 1).

As in pdb_reres, numbering continues across chains and restarts in each
model; a new residue starts whenever the residue name, chain, number or
insertion code changes from one atom to the next (so 52 and 52A become two
numbers), and insertion codes are kept. There is no upper limit.

Changes auth_seq_id by default, in _atom_site and in the matching columns of
_atom_site_anisotrop and _struct_conn. With --label it changes label_seq_id
of polymer residues instead; that number links atoms to the sequence in
_entity_poly_seq, so a warning is printed.

Usage:
    mmcif_reres -<number> [--label] <cif file>

Example:
    mmcif_reres -10 1abc.cif   # renumbers from 10
    mmcif_reres --1 1abc.cif   # renumbers from -1

This program is part of the mmcif-tools suite.

mmcif_shiftres

Shifts the residue numbers of an mmCIF file by a constant value.

Shifts the residue numbers of an mmCIF file by a constant value.

Changes auth_seq_id by default, in _atom_site and in the matching columns of
_atom_site_anisotrop and _struct_conn; insertion codes are kept. With
--label it shifts label_seq_id of polymer residues instead; that number
links atoms to the sequence in _entity_poly_seq, so a warning is printed.
There is no upper or lower limit.

Usage:
    mmcif_shiftres -<number> [--label] <cif file>

Example:
    mmcif_shiftres -10 1abc.cif   # adds 10 to the original numbering
    mmcif_shiftres --5 1abc.cif   # subtracts 5 from the original numbering

This program is part of the mmcif-tools suite.

mmcif_fixinsert

Deletes insertion codes (_atom_site.pdbx_PDB_ins_code) and shifts the residue numbering (auth_seq_id) to make room.

Deletes insertion codes (_atom_site.pdbx_PDB_ins_code) and shifts the
residue numbering (auth_seq_id) to make room.

As in pdb_fixinsert, the first residue carrying an insertion code just
loses it, and every later residue whose number was already seen moves the
numbering of the rest of the chain up by one: 51, 52A, 52B, 53 becomes
51, 52, 53, 54. With an option, only the listed residues lose their codes
(the numbering still shifts for the rest of the chain).

The shift restarts at each new chain instance (a change of chain or of
label_asym_id, e.g. between a protein and its ligands or waters: where
pdb_fixinsert meets a TER record) and in each model (pdb_fixinsert never
restarts between models). Chains may have several
characters and numbers may be negative: -A9,B12,AB-3. Insertion codes only
exist with author identifiers, so --label is not accepted. The matching
columns of _atom_site_anisotrop and _struct_conn are updated too. A file
without a pdbx_PDB_ins_code column (e.g. an integrative model) has no
insertion codes and is written unchanged.

Usage:
    mmcif_fixinsert [-<option>] <cif file>

Example:
    mmcif_fixinsert 1abc.cif            # deletes ALL insertion codes
    mmcif_fixinsert -A9,B12 1abc.cif    # deletes insertion codes of residue 9
                                        # of chain A and 12 of chain B

This program is part of the mmcif-tools suite.

mmcif_delinsertion

Deletes insertion codes and shifts the residue numbering to make room.

Deletes insertion codes and shifts the residue numbering to make room.

The same tool as mmcif_fixinsert, under the name of pdb_delinsertion (which
pdb-tools keeps as a deprecated alias of pdb_fixinsert). See mmcif_fixinsert
for the details.

Usage:
    mmcif_delinsertion [-<option>] <cif file>

Example:
    mmcif_delinsertion 1abc.cif            # deletes ALL insertion codes
    mmcif_delinsertion -A9,B12 1abc.cif    # deletes insertion codes of residue 9
                                           # of chain A and 12 of chain B

This program is part of the mmcif-tools suite.

mmcif_reatom

Renumbers the atom ids (_atom_site.id) of an mmCIF file starting from a given number (default 1).

Renumbers the atom ids (_atom_site.id) of an mmCIF file starting from a
given number (default 1).

The ids of _atom_site_anisotrop are changed to match. In mmCIF the atom id
must be unique in the whole file, so numbering continues across models
(pdb_reatom restarts at every MODEL), and there is no upper limit.

Usage:
    mmcif_reatom -<number> <cif file>

Example:
    mmcif_reatom -10 1abc.cif   # renumbers from 10
    mmcif_reatom --1 1abc.cif   # renumbers from -1

This program is part of the mmcif-tools suite.

mmcif_rplresname

Replaces one residue name by another in an mmCIF file.

Replaces one residue name by another in an mmCIF file.

Residue names are the same chemical identity in both identifier schemes,
and programs differ in which one they read, so both auth_comp_id and
label_comp_id are changed (whatever --auth/--label says), together with the
residue names in _atom_site_anisotrop and _struct_conn. Names are matched
exactly (case-sensitive) and may be longer than three characters. Other
categories that list residue names (_entity_poly_seq, _pdbx_poly_seq_scheme,
_chem_comp, ...) are not changed.

Usage:
    mmcif_rplresname -<from>:<to> <cif file>

Example:
    mmcif_rplresname -HIP:HIS 1abc.cif   # changes all HIP residues to HIS

This program is part of the mmcif-tools suite.

mmcif_uniqname

Renames atoms sequentially (C1, C2, O1, ...) for each HETATM residue.

Renames atoms sequentially (C1, C2, O1, ...) for each HETATM residue.

As in pdb_uniqname, only HETATM atoms are renamed (waters included), the
name is the element (_atom_site.type_symbol, see mmcif_element) followed by a
counter per element that restarts at each residue, and a missing element is
an error.

Atom names are the same chemical identity in both identifier schemes, so
both auth_atom_id and label_atom_id are changed, together with the atom
names of _atom_site_anisotrop and _struct_conn (pdb_uniqname leaves ANISOU
records alone). Residues are told apart by model, name, chain, number and
insertion code (auth identifiers, or label ones with --label).

Usage:
    mmcif_uniqname <cif file>

Example:
    mmcif_uniqname 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_element

Assigns the elements (_atom_site.type_symbol) of an mmCIF file from the atom names.

Assigns the elements (_atom_site.type_symbol) of an mmCIF file from the
atom names.

By default only missing elements ('?', '.', or no type_symbol column) are
assigned, because deposited elements are authoritative; -all re-assigns
every atom (pdb_element always overwrites).

mmCIF atom names carry no column alignment (pdb_element tells ' CA ', an
alpha carbon, from 'CA  ', calcium, by it), so the rules are:
    1. an atom named like its residue is that element (ZN in ZN, CA in CA)
    2. SE in MSE / SEC is selenium
    3. in ligands (HETATM, not a standard residue) a name starting with a
       common two-letter element is that element (CL1, BR2, FE, ZN1, MG ...;
       not CA, NA, HG, CD, which in ligands are mostly carbon, nitrogen or
       hydrogen names, e.g. the heme nitrogens NA-ND)
    4. otherwise the first letter of the name, after leading digits
Atom names are auth_atom_id (label_atom_id with --label). Atoms for which no
element can be found get '?', and a warning is printed.

Usage:
    mmcif_element [-all] <cif file>

Example:
    mmcif_element 1abc.cif        # fills in missing elements
    mmcif_element -all 1abc.cif   # re-assigns every element

This program is part of the mmcif-tools suite.

mmcif_b

Sets the temperature factor (_atom_site.B_iso_or_equiv) of all atoms (default 10.0).

Sets the temperature factor (_atom_site.B_iso_or_equiv) of all atoms
(default 10.0).

Values are written with two decimals; a file without the column gets it.
Anisotropic factors (_atom_site_anisotrop) are not changed, as in pdb_b.

Usage:
    mmcif_b -<bfactor> <cif file>

Example:
    mmcif_b -10.0 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_occ

Sets the occupancy (_atom_site.occupancy) of all atoms (default 1.0).

Sets the occupancy (_atom_site.occupancy) of all atoms (default 1.0).

Values are written with two decimals; a file without the column gets it.

Usage:
    mmcif_occ -<occupancy> <cif file>

Example:
    mmcif_occ -1.0 1abc.cif

This program is part of the mmcif-tools suite.

Identifiers

mmcif_label2auth

Copies the label identifiers of an mmCIF file onto the author ones.

Copies the label identifiers of an mmCIF file onto the author ones.

By default copies both chains and residue numbers; an option copies only
one of them:

    -chain   auth_asym_id <- label_asym_id. Every molecule gets a chain of
             its own: in PDB entries, ligands and waters share the author
             chain of their protein, but each has its own label_asym_id.
    -res     auth_seq_id <- label_seq_id, for polymer residues. They are
             then numbered 1, 2, ... along the deposited sequence, so
             missing residues keep their place (unlike mmcif_reres), and
             insertion codes are removed. Ligands and waters have no
             label_seq_id and keep their numbers.

This is the mmCIF counterpart of pdb_chainxseg / pdb_segxchain and, with
-chain, of pdb_chainbows. Rows of _atom_site_anisotrop and _struct_conn
follow. Other categories that mention author chains or residue numbers
(_pdbx_poly_seq_scheme, _struct_conf, ...) are not updated. A file without
auth_asym_id or auth_seq_id columns (e.g. an integrative model) gets them;
residues without a label_seq_id are then numbered '?'. Nothing is
written if two residues would end up with the same chain and number, e.g.
with -res when a ligand of the chain already has one of the new numbers.

Usage:
    mmcif_label2auth [-chain | -res] <cif file>

Example:
    mmcif_label2auth 1abc.cif          # chains and residue numbers
    mmcif_label2auth -chain 1abc.cif   # one chain per molecule

This program is part of the mmcif-tools suite.

mmcif_auth2label

Copies author chains onto the label chains of polymers (auth_asym_id -> label_asym_id) in an mmCIF file.

Copies author chains onto the label chains of polymers (auth_asym_id ->
label_asym_id) in an mmCIF file.

For programs that read label_asym_id, e.g. after renaming chains with
mmcif_rplchain. Only chains are copied, and only for polymers (atoms with a
label_seq_id):

  - Ligands and waters keep their label chains. In mmCIF each of them is a
    molecule of its own, while in PDB entries they share the author chain
    of their protein, so copying would merge them.
  - Residue numbers are never copied: label_seq_id counts 1, 2, ... along
    the deposited sequence, which author numbers (with their offsets, gaps
    and insertion codes) do not. mmcif_label2auth -res goes the other way.

Nothing is written if an author chain holds more than one polymer, or if a
new label chain is already the label chain of another molecule. Rows of
_atom_site_anisotrop and _struct_conn follow; other categories that mention
label chains (_struct_asym, _pdbx_poly_seq_scheme, ...) are not updated, as
with mmcif_rplchain --label.

Usage:
    mmcif_auth2label <cif file>

Example:
    mmcif_rplchain -A:H 1abc.cif | mmcif_auth2label

This program is part of the mmcif-tools suite.

Models, files and assemblies

mmcif_splitchain

Splits an mmCIF file into several, each containing one chain.

Splits an mmCIF file into several, each containing one chain.

As pdb_splitchain, writes <name>_<chain>.cif files in the current directory
(<name> is the input file name without its extension, or 'splitchains' when
reading stdin), overwriting existing ones, and prints nothing. Unlike
pdb_splitchain, each file is a complete mmCIF file: the metadata
categories are kept, the data block is renamed <block>_<chain>, and rows of
_atom_site_anisotrop and _struct_conn of other chains are removed.

Chains are auth_asym_id (label_asym_id with --label).

File names are unique ignoring case: on macOS and Windows, 1abc_A.cif and
1abc_a.cif would be the same file, so a chain whose file name differs from
an earlier one only in case gets a number (1abc_a~2.cif), with a note on
stderr. pdb_splitchain overwrites the file instead.

Usage:
    mmcif_splitchain <cif file>

Example:
    mmcif_splitchain 1abc.cif   # writes 1abc_A.cif, 1abc_B.cif, ...

This program is part of the mmcif-tools suite.

mmcif_splitmodel

Splits an mmCIF file into several, each containing one model.

Splits an mmCIF file into several, each containing one model.

As pdb_splitmodel, writes <name>_<model>.cif files in the current directory
(<name> is the input file name without its extension, or 'splitmodels'
when reading stdin), named by the model numbers as written, and prints
nothing. Unlike pdb_splitmodel, which writes nothing for a file without
MODEL records, a single-model file gives one file; and each file is a
complete mmCIF file: the metadata categories are kept, the data block is
renamed <block>_<model>, and rows of _atom_site_anisotrop and _struct_conn
of removed atoms are removed.

Usage:
    mmcif_splitmodel <cif file>

Example:
    mmcif_splitmodel 1abc.cif   # writes 1abc_1.cif, 1abc_2.cif, ...

This program is part of the mmcif-tools suite.

mmcif_mkensemble

Merges several mmCIF files into one multi-model (ensemble) file.

Merges several mmCIF files into one multi-model (ensemble) file.

As pdb_mkensemble, the n-th file becomes model n (all the atoms of its
first data block, whatever their model numbers), the provenance of each
model is written at the top (as comment lines), the other categories are
dropped except the _struct_conn of the first file, and the models are not
checked against each other (see mmcif_chkensemble).

The _atom_site loop has the columns of all files (missing values are
'?'), pdbx_PDB_model_num is added if needed, and atom ids are renumbered
from 1 over the whole ensemble, since mmCIF atom ids must be unique.

Usage:
    mmcif_mkensemble <cif file> <cif file> [...]

Example:
    mmcif_mkensemble 1abc.cif 1xyz.cif > ensemble.cif

This program is part of the mmcif-tools suite.

mmcif_chkensemble

Checks that all models of a multi-model mmCIF file have the same composition.

Checks that all models of a multi-model mmCIF file have the same
composition.

Composition is defined as same atoms/residues/chains: an atom is its chain,
residue name, number, insertion code, atom name and altloc (auth
identifiers, or label ones with --label). Unlike pdb_chkensemble, the atom
id is not part of it (mmCIF atom ids are unique across models, so every
ensemble would differ). Differences are written to stderr as by
pdb_chkensemble, one atom per line; the exit status is 1 if models differ.

Usage:
    mmcif_chkensemble <cif file>

Example:
    mmcif_chkensemble 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_merge

Merges the atoms of several mmCIF files into one.

Merges the atoms of several mmCIF files into one.

pdb_merge concatenates files; concatenated mmCIF files would just be
several data blocks, so instead the output is the first file with the atoms
of all the others added to its _atom_site loop (which gets the columns of
all files; missing values are '?'). The atoms of the first file keep their
ids, those of the next files are renumbered after them. Only _atom_site is
taken from the other files (from their first data block, added to the
first data block of the first file): their metadata, _atom_site_anisotrop and
_struct_conn rows are not merged, and _entity / _struct_asym are not
updated.

Chains are not renamed: a warning is printed when two files use the same
chain (auth_asym_id, or label_asym_id with --label); see mmcif_rplchain.
Pipe the result through mmcif_tidy to align the columns.

Usage:
    mmcif_merge <cif file> <cif file> [...]

Example:
    mmcif_merge 1abc.cif 1xyz.cif > merged.cif

This program is part of the mmcif-tools suite.

mmcif_assembly

Builds a biological assembly from the operations stored in an mmCIF file.

Builds a biological assembly from the operations stored in an mmCIF file.

PDB entries describe their biological assemblies (_pdbx_struct_assembly) as
operations (_pdbx_struct_oper_list: a rotation matrix and a translation)
applied to label chains (_pdbx_struct_assembly_gen). This tool applies them
and writes the assembly's atoms in place of the asymmetric unit, offline and
for any file that carries these categories (mmcif_fetch -biounit downloads
the RCSB's prebuilt files instead). The option is the assembly id (default
1); mmcif_info lists the assemblies of a file.

Operation expressions follow the PDBx dictionary: 1, 1,2,5, (1-60), and
products such as (1-60)(61-88), whose operations are applied right to left.

Naming follows the RCSB's assembly files: the copy made by the identity
operation keeps its chain names, and every other copy gets the operation
added to its label and author chains (A-2; A-1x61 for a product). Atoms are
written chain by chain, each chain followed by its copies, in every model;
atom ids are renumbered from 1. Links (_struct_conn) are repeated in each
copy that holds both partners; links between copies or to symmetry mates
are not written. _atom_site_anisotrop is removed (its tensors would need
rotating). The other categories still describe the asymmetric unit.

Usage:
    mmcif_assembly [-<assembly id>] <cif file>

Example:
    mmcif_assembly 1abc.cif       # assembly 1
    mmcif_assembly -2 1abc.cif    # assembly 2

This program is part of the mmcif-tools suite.

Categories and data blocks

mmcif_cat

Prints one category of an mmCIF file as a table (tab-separated values).

Prints one category of an mmCIF file as a table (tab-separated values).

The first line holds the column names (without the category prefix), then
each row of the category follows on a line of its own, so the output can go
to awk, sort, a spreadsheet or pandas. Columns can be chosen and ordered
after a dot (-_atom_site.id,Cartn_x). A category written as key-value pairs
(_cell.length_a 50.0, ...) is printed as one row.

Values are printed without their CIF quotes; nulls stay '.' and '?'. Tabs,
newlines and backslashes inside a value are written as \t, \n and \\.
In a file with several data blocks, the rows of every block are printed,
and the header is repeated only when the columns change. Category and
column names are case-insensitive, as in CIF.

Usage:
    mmcif_cat -<category>[.<column>,<column>...] <cif file>

Example:
    mmcif_cat -_atom_site 1abc.cif
    mmcif_cat -_atom_site.auth_asym_id,auth_seq_id,Cartn_x 1abc.cif
    mmcif_cat -_chem_comp components.cif

This program is part of the mmcif-tools suite.

mmcif_delcat

Deletes whole categories from an mmCIF file.

Deletes whole categories from an mmCIF file.

Categories are given by name, comma-separated; a name ending in '*' removes
every category that starts with it (quote it, so that the shell does not
expand it). Names are case-insensitive, and the leading '_' is optional.
Everything else is copied unchanged.

Nothing is checked or updated in the categories that remain: e.g. removing
_atom_site leaves _atom_site_anisotrop without its atoms.

Usage:
    mmcif_delcat -<category>[,<category>...] <cif file>

Example:
    mmcif_delcat -_atom_site_anisotrop 1abc.cif
    mmcif_delcat '-_pdbx_validate*' 1abc.cif      # PDB validation reports
    mmcif_delcat -_struct_conf,_struct_sheet_range 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_keepcat

Keeps only some categories of an mmCIF file.

Keeps only some categories of an mmCIF file.

Categories are given by name, comma-separated; a name ending in '*' keeps
every category that starts with it (quote it, so that the shell does not
expand it). Names are case-insensitive, and the leading '_' is optional.
The data_ line of each block is kept; everything else (other categories,
comments) is removed. mmcif_keepcoord is the same as
mmcif_keepcat -_atom_site,_struct_conn.

Nothing is checked or added: e.g. keeping _atom_site_anisotrop without
_atom_site leaves it without its atoms.

Usage:
    mmcif_keepcat -<category>[,<category>...] <cif file>

Example:
    mmcif_keepcat -_atom_site 1abc.cif
    mmcif_keepcat '-_entity*,_struct_asym' 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_blocks

Lists or extracts the data blocks of a CIF file.

Lists or extracts the data blocks of a CIF file.

Without an option, prints the name of each data block (data_<name>), one
per line. With block names, comma-separated, writes those blocks (in file
order) and nothing else. Names are case-insensitive, as in CIF; reading
stops once every requested block has been written, so extracting one
component from the whole Chemical Component Dictionary is quick.

Usage:
    mmcif_blocks [-<name>[,<name>...]] <cif file>

Example:
    mmcif_blocks components.cif              # lists the blocks
    mmcif_blocks -ATP,GTP components.cif     # writes the ATP and GTP blocks

This program is part of the mmcif-tools suite.

Inspect / format

mmcif_info

Summarizes the metadata of an mmCIF file: title, method, resolution, ...

Summarizes the metadata of an mmCIF file: title, method, resolution, ...

Prints one line per item, as 'Item:<tab>value', for the items the file
has (each data block in turn):

    Entry           _entry.id (else the data block name)
    Title           _struct.title
    Keywords        _struct_keywords.pdbx_keywords
    Method          _exptl.method (several for hybrid methods)
    Resolution      _refine.ls_d_res_high, else _em_3d_reconstruction.
                    resolution, else _reflns.d_resolution_high (in A)
    R-work, R-free  _refine.ls_R_factor_R_work / ls_R_factor_R_free
    Deposited       _pdbx_database_status.recvd_initial_deposition_date
    Released        first _pdbx_audit_revision_history.revision_date
    Revised         last revision date, when there are several
    Organisms       scientific names in _entity_src_gen, _entity_src_nat
                    and _pdbx_entity_src_syn
    Model quality   global scores of models (_ma_qa_metric_global, e.g.
                    the pLDDT of AlphaFold models)
    Entity          one line per entity: id, type, copies, chains,
                    residues and name
    Assembly        one line per biological assembly (see mmcif_assembly):
                    id, number of chains and description

Usage:
    mmcif_info <cif file>

Example:
    mmcif_info 1abc.cif
    mmcif_fetch 4hhb | mmcif_info

This program is part of the mmcif-tools suite.

mmcif_wc

Summarizes the contents of an mmCIF file, like the wc command in UNIX.

Summarizes the contents of an mmCIF file, like the wc command in UNIX.

By default, this tool produces a general summary, but you can use several
options to produce focused but more detailed summaries:
    [m] - no. of models.
    [c] - no. of chains (plus per-model if multi-model file).
    [r] - no. of residues (plus per-model if multi-model file).
    [a] - no. of atoms (plus per-model if multi-model file).
    [h] - no. of HETATM (plus per-model if multi-model file).
    [o] - presence of disordered atoms (altloc).
    [i] - presence of insertion codes.

Counts follow pdb_wc: residues and atoms count ATOM records only, HETATM
records are counted separately, and the altloc and insertion-code flags
look at ATOM records. The lists printed with [a] and [h] give atom names
and HETATM residue names (pdb_wc prints padded atom names for both).

Usage:
    mmcif_wc [-<option>] <cif file>

Example:
    mmcif_wc 1abc.cif
    mmcif_wc -mc 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_tofasta

Extracts the residue sequence of an mmCIF file in FASTA format.

Extracts the residue sequence of an mmCIF file in FASTA format.

Canonical amino acids and nucleotides (RNA and DNA) are represented by their
one-letter code while all others are represented by 'X'. As in pdb_tofasta,
the sequence is read from the atoms of the first model, ligands and waters
(HETATM) included, so pipe through mmcif_delhetatm to drop them.

The -multi option splits the different chains into different records in the
FASTA file. The -seqres option reads the full deposited sequence from
_pdbx_poly_seq_scheme instead, including residues without coordinates (from
_entity_poly_seq when a file has no _pdbx_poly_seq_scheme, with the chains
of _entity_poly.pdbx_strand_id, or of _struct_asym with --label). Where two
residue types share a position (microheterogeneity), the first is used. The
two can be combined: -multi,seqres.

Usage:
    mmcif_tofasta [-multi] [-seqres] <cif file>

Example:
    mmcif_tofasta 1abc.cif
    mmcif_tofasta -multi 1abc.cif
    mmcif_tofasta -multi,seqres 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_gap

Finds gaps between consecutive protein residues in an mmCIF file.

Finds gaps between consecutive protein residues in an mmCIF file.

Detects gaps both by a distance criterion (consecutive alpha carbons more
than 4.0 A apart) and by discontinuous residue numbering, within each chain
and model. Only applies to protein residues (ATOM records), as pdb_gap. The
output lines are those of pdb_gap; unlike pdb_gap, 52 followed by 52A is
not a gap, and the second alpha carbon of a residue with alternate
locations is not compared with the first.

Chains and residue numbers are auth identifiers (label ones with --label).

Usage:
    mmcif_gap <cif file>

Example:
    mmcif_gap 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_sort

Sorts the atoms (_atom_site rows) of an mmCIF file.

Sorts the atoms (_atom_site rows) of an mmCIF file.

As in pdb_sort, ATOM records come before HETATM records, and each group is
sorted by:
    chain, residue number, insertion code, altloc, atom id   (default, -CR)
    chain, altloc, atom id                                    (-C)
    chain order of appearance, residue number, insertion
    code, altloc, atom id                                     (-R)
so atoms keep their order within a residue. Chains sort as text. Unlike
pdb_sort, multi-model files are supported (each model is sorted on its
own, models stay in order), and nothing is removed. The rows of
_atom_site_anisotrop are put in the new order of their atoms.

Chains and residue numbers are auth identifiers (label ones with --label).

Usage:
    mmcif_sort [-<option>] <cif file>

Example:
    mmcif_sort 1abc.cif      # sorts by chain and residues
    mmcif_sort -C 1abc.cif   # sorts by chain only
    mmcif_sort -R 1abc.cif   # sorts by residue number/icode only

This program is part of the mmcif-tools suite.

mmcif_tidy

Re-formats an mmCIF file in a uniform layout.

Re-formats an mmCIF file in a uniform layout.

Every category is rewritten: a '#' line between categories, key-value
categories with their values aligned, loops with each column padded to its
widest value, values quoted only when needed (text fields on lines of
their own) and '\n' line endings. Comments between categories are kept
(the '#' separators are rewritten); comments inside a category are
dropped. The data itself is not changed. Use it after a pipeline of other
tools, which keep the original layout and only rewrite what they change.

Unlike pdb_tidy, which fixes PDB-format records (TER, END, line padding),
there is nothing to repair in mmCIF, so this tool only changes the layout.

Usage:
    mmcif_tidy <cif file>

Example:
    mmcif_tidy 1abc.cif

This program is part of the mmcif-tools suite.

mmcif_validate

Validates the structure of an mmCIF file.

Validates the structure of an mmCIF file.

Checks the CIF syntax and the coordinates (_atom_site); it does not check
the file against the PDBx/mmCIF dictionary (item types, allowed values,
mandatory items). Errors:

    - CIF syntax errors (with their line number)
    - no _atom_site category, or required _atom_site columns missing (id,
      type_symbol, Cartn_x/y/z, and an atom name, residue name, chain and
      residue number in at least one identifier scheme)
    - coordinates, occupancies or B-factors that are not numbers
    - group_PDB other than ATOM / HETATM
    - residue numbers (auth_seq_id, label_seq_id) or model numbers that are
      not integers ('.' and '?' are allowed)
    - the same atom id twice in a data block
    - rows of _atom_site_anisotrop or _struct_conn that match no atom

Warnings: only one identifier scheme (auth_* or label_*) present,
occupancies outside 0-1.

Prints one line per problem (the first 20 of each kind) and a summary.
The exit status is 1 if there are errors, 0 otherwise.

Usage:
    mmcif_validate <cif file>

Example:
    mmcif_validate 1abc.cif

This program is part of the mmcif-tools suite.