mirror of
https://github.com/gcorso/DiffDock.git
synced 2026-06-04 18:04:23 +08:00
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
from spyrmsd import rmsd, molecule
|
|
|
|
def get_symmetry_rmsd(mol, coords1, coords2, mol2=None, return_permutation=False):
|
|
with time_limit(10):
|
|
mol = molecule.Molecule.from_rdkit(mol)
|
|
mol2 = molecule.Molecule.from_rdkit(mol2) if mol2 is not None else mol2
|
|
mol2_atomicnums = mol2.atomicnums if mol2 is not None else mol.atomicnums
|
|
mol2_adjacency_matrix = mol2.adjacency_matrix if mol2 is not None else mol.adjacency_matrix
|
|
RMSD = rmsd.symmrmsd(
|
|
coords1,
|
|
coords2,
|
|
mol.atomicnums,
|
|
mol2_atomicnums,
|
|
mol.adjacency_matrix,
|
|
mol2_adjacency_matrix,
|
|
return_permutation=return_permutation
|
|
)
|
|
return RMSD
|
|
|
|
|
|
import signal
|
|
from contextlib import contextmanager
|
|
|
|
|
|
class TimeoutException(Exception): pass
|
|
|
|
|
|
@contextmanager
|
|
def time_limit(seconds):
|
|
def signal_handler(signum, frame):
|
|
raise TimeoutException("Timed out!")
|
|
|
|
signal.signal(signal.SIGALRM, signal_handler)
|
|
signal.alarm(seconds)
|
|
try:
|
|
yield
|
|
finally:
|
|
signal.alarm(0)
|
|
|