| 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) |
|
|
|
|