THE NUMBER

The verifier

One deterministic pipeline, published with its version string medf-verify/1.0.0+vina1.2.7+rdkit2026.09.1. A submission is one SMILES string. Seven steps, in order, and the first failure stops it.

CLQ, the reference ligand of PSAP-4V2O, turning inside the box the verifier uses. Centre 36.082, 60.781, 98.132, size 22 x 22 x 22 A.

1. Parse

RDKit has to parse it: one connected component, no isotopes, elements limited to H, B, C, N, O, F, Si, P, S, Cl, Br and I, neutral or a single formal charge, and no more than one undefined stereocentre. Salts and mixtures are refused here.

2. Novelty

The canonical SMILES has to differ from the reference ligand's and from every molecule already paid on this pocket, both by canonical form and by the first block of the InChIKey, which collapses stereo flips and salts onto one key. A tweaked copy of the reference does not win the bounty.

3. Drug-likeness, printed as a table, not a verdict

FilterThreshold
LipinskiMW ≤ 500, logP ≤ 5, donors ≤ 5, acceptors ≤ 10, at most one violation
Veberrotatable bonds ≤ 10, TPSA ≤ 140
Heavy atoms≤ 35
Rings≤ 5
Rotatable bonds≤ 8, for the reproducibility of the pose

The cap on heavy atoms is the most important line in that table, and it is there for one reason: Vina's score grows with size, so without a heavy-atom cap and a logP cap the winning move is a large greasy molecule that would never be a drug.

4. PAINS

RDKit's FilterCatalog with the PAINS catalogue; a match is a rejection, and the matching filter is named in the result. The Brenk and NIH catalogues run as well and are printed as warnings, not rejections.

5. Dock

A conformer is embedded with AllChem.EmbedMolecule(randomSeed=42) and optimised with MMFF, prepared by Meeko, then docked by AutoDock Vina 1.2.7 with seed 42, exhaustiveness 8, cpu 1 and five poses, into the pocket's published box against the receptor whose sha256 is in the target file.

The seed, the exhaustiveness and the CPU count are all pinned because the score moves with exhaustiveness and nothing else: measured on this host, the same molecule returns the same number across repeats and across CPU counts at exhaustiveness 8, and a different number at exhaustiveness 32. Settlement uses cpu 1 at about 23 seconds a molecule; the free check and the house solver use six threads at about 6 seconds, which returns the same score.

6. Compare

The submission wins if its best score is at or below the reference score minus the published margin of 0.5 kcal/mol. For PSAP-4V2O that is -5.250 against the reference's -4.750.

7. Record

The result hash is sha256(target_hash | canonical_smiles | best_score | verifier_version), and the pose is published as a PDBQT so anyone can look at it.

What Vina runs on

AutoDock Vina 1.2.7 has no CUDA path, so the verifier is a CPU program and says so. The GPU forks are separate codebases with their own scores, which would mean the public number is not Vina's. The GPU on our side runs the house solver's generative pass and its bulk screening, never the settlement.

← How a pocket is chosenThe reference score and the margin →