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()Common Pitfalls & Troubleshooting Checklist
- Java Heap Exhaustion (GATK / Picard): If processes terminate with
java.lang.OutOfMemoryError, set your environment variable explicitly:export _JAVA_OPTIONS="-Xmx16g -Djava.io.tmpdir=/tmp". - Index Timestamp Mismatch: If tools complain that a BAM index is missing or out of date, regenerate with
samtools index -@ 4 sample.bam. - Conda Channel Conflicts: Avoid ABI incompatibilities between bioconda and conda-forge by setting strict priority:
conda config --set channel_priority strict. - Chromosome Naming Contamination: Always verify whether reference FASTA headers use
chr1or1; divergent naming causes silent alignment drops.