Day 13: Macromolecular 3D Structure Exploration: PDB, Mol* & PyMOL Visualization
1. Macromolecular Structure Determination & PDB Coordinate Geometry
The 3D spatial conformation of a macromolecule determines its enzymatic activity, binding affinities, and therapeutic druggability. The Protein Data Bank (PDB) archives atomic coordinate files determined primarily through three experimental techniques:
| Biophysical Method | PDB Prevalence | Resolution Metric & Typical Quality | Biological Advantages & Limitations |
|---|---|---|---|
| X-Ray Crystallography | ~84% of PDB | Resolution ($d_{\min}$ in $\text{\AA}$): < 1.5 Å: atomic resolution (individual atoms visible) 1.5–2.5 Å: standard drug design quality > 3.0 Å: backbone tracing only | High precision for rigid proteins; requires crystal growth; crystal packing artifacts may alter flexible surface loops. |
| Cryogenic Electron Microscopy (Cryo-EM) | ~12% (rapidly growing) | Global resolution (typically 2.0–3.5 Å); local resolution varies widely across flexible peripheral domains. | Resolves massive macromolecular complexes (ribosomes, spliceosomes, membrane channels) in near-native vitrified solution without crystallization. |
| Nuclear Magnetic Resonance (NMR) | ~4% | Ensemble of conformers (typically 20 structural models satisfying NOE distance constraints). | Captures dynamic conformational fluctuations in solution; limited to small proteins (< 35 kDa). |
2. Anatomy of the Legacy PDB and Modern mmCIF File Formats
Historically, structures were stored in the 80-column fixed-width PDB format. Because legacy PDB files cannot accommodate structures with > 62 chains or > 99,999 atoms (such as the 70S ribosome), the wwPDB transitioned to the mmCIF (macromolecular Crystallographic Information Framework) format:
# Legacy PDB ATOM record format:
# Columns: 1-6: Record name ("ATOM ")
# 7-11: Atom serial number
# 13-16: Atom name (e.g. "CA", "N", "CB")
# 18-20: Residue name (e.g. "MET", "GLY")
# 22: Chain identifier (e.g. "A")
# 23-26: Residue sequence number
# 31-38: Orthogonal X coordinate in Angstroms
# 39-46: Orthogonal Y coordinate in Angstroms
# 47-54: Orthogonal Z coordinate in Angstroms
# 55-60: Occupancy (0.00 to 1.00)
# 61-66: Temperature factor / B-factor (isotropic thermal displacement)
ATOM 145 CA ARG A 24 -10.421 24.512 14.288 1.00 18.45 C3. Validation: Ramachandran Plots & Backbone Dihedral Angles
In 1963, G. N. Ramachandran demonstrated that steric clashes between non-bonded atoms restrict the polypeptide backbone to specific combinations of two dihedral (torsion) angles:
- $\phi$ (Phi): Rotation around the $N - C_\alpha$ bond.
- $\psi$ (Psi): Rotation around the $C_\alpha - C'$ bond.
A Ramachandran Plot graphs $\phi$ versus $\psi$ across all non-glycine residues in a structure. High-quality crystallographic structures exhibit $\ge 98\%$ of residues in the core "favored" regions ($lpha$-helices at $\phi \approx -60^\circ, \psi \approx -45^\circ$; $\beta$-sheets at $\phi \approx -120^\circ, \psi \approx +120^\circ$), with zero non-glycine outliers.
4. Production PyMOL Automation Script: Binding Pocket & Contact Surface Inspection
#!/usr/bin/env python3
"""
Day 13 Practical: PyMOL Automated Structural Analysis Script
Loads PDB structure, highlights binding pocket residues within 4.0 Angstroms,
and renders ray-traced publication figures.
"""
# To run in PyMOL: pymol -c script.py
try:
from pymol import cmd
except ImportError:
print("Run inside PyMOL environment (e.g., via PyMOL GUI or python with pymol module).")
def render_binding_site_figure(pdb_id="1tup"):
"""Automate structural rendering of p53-DNA complex."""
cmd.reinitialize()
cmd.fetch(pdb_id, type="cif")
cmd.bg_color("white")
# Protein cartoon representation
cmd.hide("everything")
cmd.show("cartoon", "polymer.protein")
cmd.color("slate", "polymer.protein")
# DNA stick representation
cmd.show("sticks", "polymer.nucleic")
cmd.color("orange", "polymer.nucleic and name C*")
# Select critical zinc ion and coordinating cysteines/histidines
cmd.show("spheres", "name ZN")
cmd.color("gray70", "name ZN")
cmd.set("sphere_scale", 0.6, "name ZN")
# Active site contact selection (residues within 3.8 Angstroms of DNA)
cmd.select("dna_contacts", "polymer.protein within 3.8 of polymer.nucleic")
cmd.show("sticks", "dna_contacts")
cmd.color("firebrick", "dna_contacts and name C*")
# High-resolution ray-traced output
cmd.zoom("dna_contacts", 6)
cmd.set("ray_shadows", 1)
cmd.png("p53_dna_binding_pocket.png", width=1600, height=1200, dpi=300, ray=1)
print("Saved high-resolution render: p53_dna_binding_pocket.png")
if __name__ == "__main__":
print("PyMOL script ready for command-line or GUI execution.")
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.