Skip to content

OPAL ML Score

OPAL ML Score

Score how strongly a ligand binds a protein with a fast machine learning energy.

OPAL ML Score works out how favourable a protein and ligand sitting together is, reported as an interaction energy in kcal/mol that is written ΔG. It uses the OPAL machine learning potential, a neural network model that predicts the energy of a molecular system quickly while staying close to quantum level accuracy.

The score is the energy of the protein and ligand together minus the energy of each on its own. A more negative number means the two are happier together, that is, the ligand binds more strongly. The tool computes this directly on the structure you give it, without running a long simulation, so it is a fast way to score and rank poses.

A pose is one position and orientation of the ligand in the pocket. If you give the tool several poses, it scores each one and ranks them.

Use it as the scoring step after docking and optional optimisation. The usual flow is Docking or Covalent Docking to get poses, then OPAL ML Optimize to relax them, then this tool to score them. You can feed it the ZIP of optimised structures from OPAL ML Optimize, or score raw structures directly from a protein file and a ligand. It is much faster than a free energy simulation; when you want the most accurate binding strength on your best hits, follow up with Absolute Binding Free Energy.

You provide the structure either as a ZIP of optimised poses, or as a protein file together with a ligand. All inputs are optional in the schema, but you must give one of those two starting points.

InputRequiredWhat it is
optimized_filenoA ZIP of optimised .traj files from an OPAL ML Optimize run.
protein_filenoA protein structure in PDB or CIF format, for scoring a raw structure directly.
ligand_filenoA ligand structure in SDF format.
ligand_resnamenoThe residue name of the ligand if it is already inside the protein PDB.
chain_idnoWhich protein chain to use.
protein_chargeno, default 0The formal charge of the protein fragment.
ligand_chargeno, default 0The formal charge of the ligand. Worked out from the SDF when left at 0.
keep_cofactorsnoJSON list of cofactor residue names to keep, for example ["ZN", "HEM"].
extra_chainsnoJSON list of extra protein chain IDs to include, for example ["B"].

Submit your structures from Azulene Studio, the Python SDK, or the CLI. New here? The Get started page walks through installing, logging in, and running a ready made example first.

Open OPAL ML Score from the tools list, then on the Inputs and Parameters step provide your input. Either upload the ZIP of optimised poses, or upload a protein file plus a ligand file (or name the ligand already inside the protein with its residue name and chain), then Review and Submit.

from opal import jobs
result = jobs.submit(
job_type="opal_ml_score",
input_data={
"protein_file": "/path/to/your/protein.pdb",
"ligand_resname": "PJE",
"chain_id": "C",
},
)

Pass the inputs as a JSON string.

Terminal window
opal jobs submit --job-type opal_ml_score \
--input-data '{"protein_file": "/path/to/your/protein.pdb", "ligand_resname": "PJE", "chain_id": "C"}'

The headline numbers are the best ΔG in kcal/mol (best_dg_kcal_mol), the score of the strongest binding pose, and the number of poses scored (n_poses_scored). A more negative ΔG means stronger predicted binding.

Below that is a ranked table of every scored pose, sorted strongest first. Each row has a rank (numbered from 1), a pose label (trial_label), and that pose’s ΔG in kcal/mol (dg_kcal_mol). The scores are also drawn as a bar chart of ΔG per pose. You can sort the table, colour it by score, and export it to CSV. (For protein to protein inputs, the table adds extra columns for the per chain charges and atom counts; for the ordinary protein and ligand case those columns are blank.)

This is a fast interaction energy, not a full free energy simulation, so use it to rank poses and pick winners rather than as a final, publication grade binding number. For the most reliable score, score structures that have already been relaxed by OPAL ML Optimize rather than raw docked poses. If your ligand carries a charge and you are not starting from an SDF, set ligand_charge so the energy is computed correctly. When you need an accurate absolute binding free energy on your best hits, follow up with Absolute Binding Free Energy.