Screening PTR1: A Real Target for Visceral Leishmaniasis

The library and the pipeline finally meet an actual disease target — the first real screening result of the project.

Everything up to this point — Hello Tools 1 and 2, the drug library, the pipeline smoke test — was proving the tools work. This post is the first time all of it points at a real disease target instead of a demo receptor. That target is pteridine reductase 1 (PTR1), and the disease behind it is visceral leishmaniasis.

Step 1: The target

Visceral leishmaniasis ("kala-azar") is a WHO-classified neglected tropical disease, fatal if untreated, with 200,000–400,000 new cases a year. What makes it a good drug-repurposing candidate is that nothing about the current treatment options is both cheap and safe: liposomal amphotericin B works well but is expensive and hard on the kidneys, meglumine antimoniate is cheaper but more toxic, and miltefosine — the only oral option — is teratogenic. There's no option that's simultaneously cheap, safe, and easy to take.

PTR1 is an NADPH-dependent reductase the parasite uses to salvage pterins/folate — it's a validated resistance-relevant target because it lets the parasite bypass the main folate pathway when that pathway gets blocked. I compared it against a couple of other candidates (Chagas disease's cruzain, mainly) before settling on PTR1, since the repurposing angle here is less picked-over in the published literature.

Step 2: Getting a real receptor

I used PDB 1E92 — pteridine reductase 1 from Leishmania major, crystallized with its NADP+ cofactor and its natural substrate, dihydrobiopterin, at 2.20 Å resolution. That last part matters: an earlier candidate structure (2XOX, from L. donovani) turned out to be an apo structure with just a stray sulfate ion sitting in the cofactor slot — not usable for defining a real binding pocket.

1E92 is a homotetramer (four identical copies of the protein bundled together), but each copy has its own independent binding site, so I only needed one. I used PyMOL to strip it down to chain A, keeping the NADP+ cofactor (the pocket only has the right shape with it in place) and removing the bound dihydrobiopterin — that's the substrate slot I actually want to dock my drug library into — along with waters and a cryoprotectant molecule that don't belong in the docking model.

Step 3: Finding the pocket with fPocket

Running fPocket on the full tetramer turned up 71 candidate pockets — four-fold more than you'd expect for a single active site, because fPocket finds (roughly) the same pocket once per identical chain, and sometimes splits one real pocket into a couple of smaller fragments. Chain A's top-scoring pocket (druggability score 0.886) was the clear pick: it directly touches the crystallized dihydrobiopterin, and its lining residues include Ser111 and Phe113.

Those two residue numbers aren't arbitrary — they turned up in a 2024/2025 published in-silico screen that targeted this exact protein with a different compound library, which named Ser111, Phe113, Met183, Leu188, Leu226, and His241 as the key pocket residues. Finding two of those six sitting right in fPocket's top pick for chain A was a genuinely satisfying sanity check — a sign the pocket-detection step landed on the real binding site instead of a random surface dimple. (The other four showed up in two smaller, lower-ranked fPocket fragments right next door — consistent with fPocket splitting up one continuous pocket rather than missing it.)

Step 4: A smoke test before trusting the real thing

Same rule as always: test small before committing to the whole library. I built a docking box centered on the crystallized ligand position, sized to cover both the main pocket and the residues next door, and ran 25 drugs through it. 24 dockable, no errors, affinities from -8.4 to -11.0 kcal/mol. Top hit: ergotamine.

Step 5: The real screen

With the receptor and box validated, I ran the full library — 1,840 FDA-approved drugs, 1,808 of them small enough for Vina-GPU to handle, against PTR1. It took about four hours on the GPU (power-capped to 75% of its default limit, which turned out not to even matter here — this workload never got close to the cap). 1,795 drugs docked successfully.

Bar chart of the top 10 predicted binding affinities against PTR1

A couple of things jumped out. Dihydroergotamine landed in the top 10 — it's from the same ergot-alkaloid family as ergotamine, which was the top hit in the smoke test on a completely different subset of the library. Seeing a related compound score well in two independent runs is a small but real consistency signal. On the other end, several top hits — alectinib, entrectinib, capmatinib — are kinase inhibitors used in cancer treatment, chemically unrelated to the pterin-mimetic and benzothiazole compounds known from the published PTR1-inhibitor literature. That's not a red flag by itself; it just means these would be novel-scaffold candidates rather than "expected" ones, if they hold up to closer scrutiny.

Step 6: Do the poses actually make sense?

A predicted affinity score by itself doesn't mean much — Vina can hand back a great-looking number for a pose that's actually nonsense (a ligand clipping through the protein, or sitting half outside the pocket). So before trusting this list at all, I rendered the best docked pose for all 10 top hits in PyMOL, using the exact same camera angle and pocket view for every one, so they're directly comparable side by side. Gray is the PTR1 pocket surface and blue is the NADP+ cofactor. Each drug gets two renders of the same pose side by side: a stick view (magenta) and a surface/"blob" view (pink, #E03FD8) in the same solid style as the pocket itself, so you can see both the atom-level detail and the overall shape the drug fills. Click any image to open the full-size render in a new tab.

alectinib-12.1 kcal/mol
risdiplam-11.7 kcal/mol
eltrombopag-11.6 kcal/mol
conivaptan-11.6 kcal/mol
entrectinib-11.5 kcal/mol
dihydroergotamine-11.5 kcal/mol
bexarotene-11.4 kcal/mol
capmatinib-11.4 kcal/mol
tolvaptan-11.3 kcal/mol
olaparib-11.3 kcal/mol

This is exactly the sanity check I wanted to see: every single one of the top 10 lands in the same pocket, right up against the NADP+ cofactor, instead of being scattered randomly across the protein surface. That's a real, physically-grounded reason to trust these scores a bit more than the number alone would justify — Vina consistently found the known biopterin-binding site as the best place to put a completely different set of drug-sized molecules, run after run.

What's next

The remaining open item is a literature check for any existing antiparasitic activity on the top hits — the pose sanity check says these are physically plausible binders, not that they're already known to work. None of this is a therapeutic claim — these are computational predictions worth investigating further, not proof that any of these drugs actually work against leishmaniasis.

A quick note on how this got built

I built this target research and the docking run working with Claude Code, same as the rest of the pipeline, and I'd rather say that outright than leave it quiet. The point of testing how far AI tooling can stretch a high schooler's reach only works if I actually talk about where it helped — the target research, the pocket cross-checking against published literature, and the receptor prep all moved a lot faster with it than they would have solo. The decisions — which target, which structure, what counts as a good enough validation — are still mine.