| """ |
| Symmetry-corrected RMSD calculations in Python |
| """ |
|
|
| if __name__ == "__main__": |
| import argparse as ap |
| import importlib.util |
| import sys |
|
|
| from spyrmsd import io |
| from spyrmsd.rmsd import rmsdwrapper |
|
|
| parser = ap.ArgumentParser( |
| prog="python -m spyrmsd", |
| description="Symmetry-corrected RMSD calculations in Python.", |
| ) |
|
|
| parser.add_argument("reference", type=str, help="Reference file") |
| parser.add_argument("molecules", type=str, nargs="+", help="Input file(s)") |
| parser.add_argument("-m", "--minimize", action="store_true", help="Minimize (fit)") |
| parser.add_argument( |
| "-c", "--center", action="store_true", help="Center molecules at origin" |
| ) |
| parser.add_argument("--hydrogens", action="store_true", help="Keep hydrogen atoms") |
| parser.add_argument( |
| "-n", "--nosymm", action="store_false", help="No graph isomorphism" |
| ) |
|
|
| args = parser.parse_args() |
|
|
| if ( |
| importlib.util.find_spec("openbabel") is None |
| and importlib.util.find_spec("rdkit") is None |
| ): |
| raise ImportError( |
| "OpenBabel or RDKit not found. Please install OpenBabel or RDKit to use sPyRMSD as a standalone tool." |
| ) |
|
|
| try: |
| ref = io.loadmol(args.reference) |
| except OSError: |
| print("ERROR: Reference file not found.", file=sys.stderr) |
| exit(-1) |
|
|
| |
| try: |
| mols = [mol for molfile in args.molecules for mol in io.loadallmols(molfile)] |
| except OSError: |
| print("ERROR: Molecule file(s) not found.", file=sys.stderr) |
| exit(-1) |
|
|
| |
| RMSDlist = rmsdwrapper( |
| ref, |
| mols, |
| symmetry=args.nosymm, |
| center=args.center, |
| minimize=args.minimize, |
| strip=not args.hydrogens, |
| ) |
|
|
| for RMSD in RMSDlist: |
| print(f"{RMSD:.5f}") |
|
|