Chapter 4: Target & Chemical Libraries: RCSB PDB, AlphaFold DB, PubChem, ChEMBL & ZINC20
Chapter 4: Target & Chemical Libraries: RCSB PDB, AlphaFold DB, PubChem, ChEMBL & ZINC20
Macromolecular repositories: RCSB PDB, UniProtKB, AlphaFold DB; chemical small-molecule libraries: PubChem, ChEMBL, and ZINC20 clean lead-like collections; programmatic downloading via REST APIs; library standardization and 3D generation.
1. Macromolecular Structural Repositories
Selecting the ideal structural model for your drug target is the single most critical determinant of docking accuracy.
- RCSB Protein Data Bank (PDB): The global open repository of experimental 3D structures determined by X-ray crystallography, cryo-EM, and NMR. When selecting a PDB code, prioritize:
- High crystallographic resolution ($\le 2.2\text{ \AA}$ for X-ray; $\le 3.0\text{ \AA}$ for cryo-EM).
- Low $R_{\text{free}}$ and $R_{\text{work}}$ metrics ($\le 0.25$).
- Structures co-crystallized with a relevant pharmacophore ligand (holo-state) to guarantee an open, induced binding cavity.
- AlphaFold Protein Structure Database (EMBL-EBI): Contains $>200$ million AI-predicted protein structures covering almost all known organisms. Best utilized when experimental crystals are unavailable.
- UniProtKB: Primary resource for protein sequence annotation, domain boundaries, catalytic residue numbers, and disease-associated missense variants.
2. Chemical Databases for Virtual Screening
ZINC20
Free database of $>1.4$ billion commercially available compounds for virtual screening. Organized into pre-filtered tranches based on molecular weight and $\log P$ (e.g., Lead-like, Drug-like, Fragment-like).
PubChem
NCBI repository containing $>115$ million unique chemical substances with bioassay results, patent linkages, and 3D conformers. Accessible via PUG-REST API.
ChEMBL
Manually curated bioactivity database tracking $>2.4$ million compounds with quantitative bioassay data ($\text{IC}_{50}$, $K_i$, $\text{EC}_{50}$) against verified therapeutic targets.
import urllib.request
import json
# 1. Download PDB structure directly from RCSB
pdb_id = "6LU7" # SARS-CoV-2 Main Protease
rcsb_url = f"https://files.rcsb.org/download/{pdb_id}.pdb"
urllib.request.urlretrieve(rcsb_url, f"{pdb_id}.pdb")
print(f"Downloaded {pdb_id}.pdb from RCSB PDB")
# 2. Query PubChem PUG-REST API for a known antiviral inhibitor
compound_name = "nirmatrelvir"
pug_url = f"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/{compound_name}/SDF?record_type=3d"
urllib.request.urlretrieve(pug_url, f"{compound_name}_3d.sdf")
print(f"Downloaded 3D SDF for {compound_name} from PubChem")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.