Prepare the target PDB
Download 5JDS, extract chain A, strip waters and ligands:
mkdir -p ~/pdl1_cyclic && cd ~/pdl1_cyclic
wget -q https://files.rcsb.org/download/5JDS.pdb
# Keep only chain A, ATOM records; renumber from 1
python - <<'PY'
from Bio.PDB import PDBParser, PDBIO, Select
class ChainA(Select):
def accept_chain(self, chain): return chain.id == 'A'
def accept_model(self, model): return model.id == 0
def accept_residue(self, r):
return r.id[0] == ' ' and r.resname in {
'ALA','ARG','ASN','ASP','CYS','GLN','GLU','GLY','HIS','ILE',
'LEU','LYS','MET','PHE','PRO','SER','THR','TRP','TYR','VAL'}
io = PDBIO(); io.set_structure(PDBParser(QUIET=True).get_structure('p','5JDS.pdb'))
io.save('PDL1_clean.pdb', ChainA())
PY
Inspect the cleaned structure in PyMOL or py3dmol. The PD-1-binding epitope on PD-L1 spans the C-C' loop and the C strand. Choose three hotspots that flank the binding site:
- A48 — Tyr at the C-C' loop tip
- A53 — Asp in the C' strand (PD-1 contact)
- A66 — Tyr at the start of the C'' strand
These residues receive extra AF2 attention via ColabDesign's hotspot mask. The binder is not required to contact all three, but most passing designs will.