Add conformer RMSD alignment modes - #281
Conversation
|
| Filename | Overview |
|---|---|
| nvmolkit/conformerRmsd.py | Adds validated alignment-mode selection and forwards it consistently through single and batch public APIs. |
| nvmolkit/conformerRmsd.cpp | Extends both native bindings with the first-conformer alignment flag and forwards argument order consistently from the public wrapper. |
| src/conformer_rmsd.cu | Implements shared rigid-alignment moments, quaternion rotation, and single/batch first-conformer alignment kernels without an established correctness defect. |
| src/conformer_rmsd_mol.cpp | Allocates temporary aligned-coordinate buffers and safely orders alignment, RMSD calculation, and asynchronous deallocation on the supplied stream. |
| nvmolkit/tests/test_conformer_rmsd.py | Adds broad regression coverage for alignment semantics, batching, validation, immutability, and explicit streams. |
Reviews (1): Last reviewed commit: "Add conformer RMSD alignment modes" | Re-trigger Greptile
|
Fixes #277 @evasnow1992 I think starting at the python layer for review makes the most sense, our docstrings now spell out the modes explicitly and what they do. |
evasnow1992
left a comment
There was a problem hiding this comment.
Changes look good for me. Thank you for clearly distinguish the two modes.
Distinguishes between two different common RDKit RMSD paths - the conformer RMSD matrix we were allegedly replacing in the first place aligns on a single conformer, whereas a true pairwise RMSD aligns individually.
Since the previous RMSD implementation worked by computing RMSD without actually aligning mols, we needed significant code to match. We could have done this via the original kabsch mechanism, but would give up an O(n) for O(n^2) path for the align on 0 mechanism.