omics.co.in logo omics.co.in

Day 13: Macromolecular 3D Structure Exploration: PDB, Mol* & PyMOL Visualization

Tested Stacks: GATK 4.6.1 Samtools 1.21 Nextflow 24.10 Seurat v5.1 Python 3.12
Prerequisites: Basic Linux CLI & Sequencing Formats
📚 Chapter 13 of 15 0% Course Completed

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 MethodPDB PrevalenceResolution Metric & Typical QualityBiological Advantages & Limitations
X-Ray Crystallography~84% of PDBResolution ($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           C

3. 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 chr1 or 1; divergent naming causes silent alignment drops.
Was this guide helpful to your research?
Help us maintain 100% accurate, peer-reviewed bioinformatics standards.
📝 Propose Edit on GitHub ↗