Skip to content

Add iLIS interface score (sqrt(LIS × cLIS), AFM-LIS)#16

Merged
DimaMolod merged 1 commit into
mainfrom
add-ilis-score
Jun 10, 2026
Merged

Add iLIS interface score (sqrt(LIS × cLIS), AFM-LIS)#16
DimaMolod merged 1 commit into
mainfrom
add-ilis-score

Conversation

@DimaMolod

Copy link
Copy Markdown
Collaborator

Summary

Adds the iLIS interface score (integrated Local Interaction Score; Kim et al., AFM-LIS — github.com/flyark/AFM-LIS) to AlphaJudge.

iLIS = √(LIS × cLIS), where:

  • LIS (already in AlphaJudge) = the (12 − PAE)/12 confidence transform averaged over inter-chain residue pairs with PAE < 12 Å.
  • cLIS (new) = the same transform averaged only over residue pairs that are also in direct physical contact (representative atom CB-else-CA, within contact_thresh; default 8 Å, matching AFM-LIS's Cβ–Cβ ≤ 8 Å).
  • The geometric mean forces the score to 0 unless an interface has both broad PAE confidence and confident direct contacts.

cLIS reuses the existing Interface contact set (_pairs), so no new geometry/IO is introduced. Both chain directions are averaged, mirroring the existing lis().

Changes

  • src/alphajudge/interface.py: new Interface.clis() and Interface.ilis().
  • src/alphajudge/runner.py: emit interface_cLIS and interface_iLIS in the per-run CSV (next to interface_LIS).
  • test/test_parsers_and_runner.py: add both columns to the expected output schema + a deterministic test_clis_ilis_math_is_deterministic.

Validation

Cross-checked against the official AFM-LIS lis.py on benchmark dimers — LIS, cLIS and iLIS agree to 4 decimal places:

Dimer (E. coli, AF2 best model) LIS cLIS iLIS
P0ACD8+P69741 0.7467 0.8980 0.8189
P18775+P18776 0.6444 0.8921 0.7582

(official vs AlphaJudge identical at 4 dp; cLIS differs only ~2e-5, from the strict <8 Å vs inclusive ≤8 Å contact boundary.)

Not added to the frozen interface metascore — kept as a standalone score.

🤖 Generated with Claude Code

iLIS (Kim et al., AFM-LIS; github.com/flyark/AFM-LIS) is the geometric
mean of LIS and its contact-restricted variant cLIS:

  cLIS = the LIS PAE transform (12-PAE)/12 averaged only over residue
         pairs that are also in direct contact (representative atom
         CB-else-CA within contact_thresh; default 8 A == AFM-LIS Cb-Cb 8 A)
  iLIS = sqrt(LIS * cLIS)

The geometric mean zeroes the score unless an interface has both broad
PAE confidence (LIS) and confident direct contacts (cLIS). cLIS reuses the
existing Interface contact set, so no new geometry is introduced; both
chain directions are averaged, mirroring lis().

Adds Interface.clis()/ilis(), emits interface_cLIS / interface_iLIS in the
per-run CSV next to interface_LIS, and adds a deterministic unit test.
Validated against the official AFM-LIS lis.py on benchmark dimers
(LIS/cLIS/iLIS agree to 4 decimal places).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@DimaMolod DimaMolod merged commit 3f5ec10 into main Jun 10, 2026
8 checks passed
@DimaMolod DimaMolod deleted the add-ilis-score branch June 10, 2026 08:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant