Chapter 1: Protein 3D Architecture, Coordinate Formats & PDB/mmCIF
Chapter 1: Protein 3D Architecture, Coordinate Formats & PDB/mmCIF
Proteins are linear polymers of amino acids that fold into intricate three-dimensional conformations to execute biological functions. Understanding the stereochemical rules governing protein backbones and the structural file formats used to represent atomic coordinates is the bedrock of structural bioinformatics.
Due to resonance between the carbonyl oxygen and nitrogen, the peptide bond possesses ~40% double-bond character, making it planar and rigid. Conformation is dictated by rotations around two single bonds per residue:
- Phi (\(\phi\)): Rotation around the \(N - C_\alpha\) bond.
- Psi (\(\psi\)): Rotation around the \(C_\alpha - C\) carbonyl bond.
Steric hindrance restricts \(\phi\) and \(\psi\) to favored regions plotted on the Ramachandran diagram: \(\alpha\)-helices (\(\phi \approx -57^\circ, \psi \approx -47^\circ\)) and \(\beta\)-sheets (\(\phi \approx -120^\circ, \psi \approx +120^\circ\)).
1. PDB vs. mmCIF: The Evolution of Coordinate Formats
For decades, the standard was the fixed-column PDB format. However, PDB had strict limitations: maximum 99,999 atoms (columns 7–11) and 62 chain identifiers. Large complexes like the eukaryotic ribosome or human nuclear pore complex exceed these limits.
The Worldwide Protein Data Bank (wwPDB) now mandates the macromolecular Crystallographic Information Framework (mmCIF) format, which uses flexible key-value tag syntax (e.g. _atom_site.*) supporting unlimited atoms, chains, and metadata.
# Inspecting atomic coordinates in mmCIF format:
# _atom_site.group_PDB
# _atom_site.id
# _atom_site.type_symbol
# _atom_site.label_atom_id
# _atom_site.label_comp_id
# _atom_site.label_asym_id
# _atom_site.label_seq_id
# _atom_site.Cartn_x
# _atom_site.Cartn_y
# _atom_site.Cartn_z
# _atom_site.occupancy
# _atom_site.B_iso_or_equiv
ATOM 1 N N MET A 1 -10.450 14.210 3.840 1.00 24.50
ATOM 2 C CA MET A 1 -9.120 13.650 4.210 1.00 22.10
ATOM 3 C C MET A 1 -8.230 14.710 4.880 1.00 19.80
ATOM 4 O O MET A 1 -8.650 15.860 5.120 1.00 21.302. Parsing Coordinates with BioPython PDB / MMCIFParser
from Bio.PDB import MMCIFParser, NeighborSearch
# Parse mmCIF structure
parser = MMCIFParser(QUIET=True)
structure = parser.get_structure("7k3g", "7k3g.cif")
# Navigate the SMCRA hierarchy: Structure -> Model -> Chain -> Residue -> Atom
for model in structure:
for chain in model:
print(f"Chain {chain.id}: {len(chain)} residues")
for residue in chain:
if residue.has_id("CA"):
ca_atom = residue["CA"]
coords = ca_atom.get_coord() # [x, y, z] numpy array
b_factor = ca_atom.get_bfactor()