Example #1
0
    def test_RMSD(self):
        ref = Geometry(TestGeometry.benz_NO2_Cl)

        # RMSD of copied object should be 0
        test = ref.copy()
        self.assertTrue(validate(test, ref))

        # RMSD of shifted copy should be 0
        test = ref.copy()
        test.coord_shift([1, 2, 3])
        self.assertTrue(validate(test, ref))

        # RMSD of rotated copy should be 0
        test = ref.copy()
        test.rotate([1, 2, 3], 2.8)
        self.assertTrue(validate(test, ref))

        # RMSD of two different structures should not be 0
        test = Geometry(TestGeometry.pentane)
        self.assertFalse(validate(test, ref))

        # RMSD of similar molecule
        test = Geometry(TestGeometry.benzene)
        res = ref.RMSD(test, targets="C", ref_targets="C")
        self.assertTrue(res < rmsd_tol(ref))
Example #2
0
    def test_geometry(self):
        try:
            import rdkit

            geom = Geometry.from_string(
                "(1R,2R)-1-Chloro-2-methylcyclohexane", form="iupac"
            )
            ref = TestFromString.chiral_geom
            # really loose threshhold b/c rdkit can give a boat cyclohexane...
            self.assertTrue(validate(geom, ref, thresh=0.35, heavy_only=True))

        except (ImportError, ModuleNotFoundError):
            if any(
                user == os.getenv("USER", os.getenv("USERNAME", False))
                for user in ["ajs99778", "normn"]
            ):
                geom = Geometry.from_string(
                    "(1R,2R)-1-Chloro-2-methylcyclohexane", form="iupac"
                )
                ref = TestFromString.chiral_geom
                # really loose threshhold b/c rdkit can give a boat cyclohexane...
                self.assertTrue(
                    validate(geom, ref, thresh=0.35, heavy_only=True)
                )
            else:
                self.skipTest("RDKit not installed, CACTVS is not tested")
Example #3
0
    def test_ring(self):
        try:
            import rdkit

            ring = Ring.from_string(
                "benzene", end_length=1, end_atom="C", form="iupac"
            )
            ref = self.benzene
            self.assertTrue(validate(ring, ref, thresh="loose"))

        except ImportError:
            if any(
                user == os.getenv("USER", os.getenv("USERNAME", False))
                for user in ["ajs99778", "normn"]
            ):
                ring = Ring.from_string(
                    "benzene", end_length=1, end_atom="C", form="iupac"
                )
                print(ring.comment)
                ref = self.benzene
                self.assertTrue(
                    validate(ring, ref, thresh="loose", debug=True)
                )

            else:
                self.skipTest("RDKit not installed, CACTVS is not tested")
Example #4
0
 def test_fuseRing_copy(self):
     ref1 = ResidueCollection(self.naphthalene)
     ref2 = ResidueCollection(self.tetrahydronaphthalene)
     
     run(self.session, "open %s" % self.benzene)
     run(self.session, "fuseRing #1/a:1@H1 #1/a:1@H2 ring benzene modify false")
     run(self.session, "fuseRing #1/a:1@H1 #1/a:1@H2 ring cyclohexane modify false")
     mdl1 = self.session.models.list()[1]
     rescol1 = ResidueCollection(mdl1)
     mdl2 = self.session.models.list()[2]
     rescol2 = ResidueCollection(mdl2)
     
     self.assertTrue(validate(ref1, rescol1, thresh="loose"))
     self.assertTrue(validate(ref2, rescol2, thresh="loose"))
Example #5
0
    def test_update_geometry(self):
        test = Geometry(TestGeometry.benz_NO2_Cl)

        # using coordinate matrix to update
        ref = test.copy()
        ref.coord_shift([-10, 0, 0])
        tmp = test._stack_coords()
        for t in tmp:
            tmp = tmp - np.array([-10, 0, 0])
        test.update_geometry(tmp)
        self.assertTrue(validate(test, ref))

        # using file
        ref.coord_shift([10, 0, 0])
        test.update_geometry(TestGeometry.benz_NO2_Cl)
        self.assertTrue(validate(test, ref))
Example #6
0
    def test_substitute_copy(self):
        ref1 = ResidueCollection(self.chlorobenzene)
        ref2 = ResidueCollection(self.chlorobiphenyl)

        run(self.session, "open %s" % self.benzene)
        run(self.session,
            "substitute #1/a:1@H5 substituent Cl minimize false modify false")
        run(self.session,
            "substitute #2/a:1@H6 substituent Ph minimize false modify false")
        mdl1 = self.session.models.list()[1]
        rescol1 = ResidueCollection(mdl1)
        mdl2 = self.session.models.list()[2]
        rescol2 = ResidueCollection(mdl2)

        self.assertTrue(validate(ref1, rescol1))
        self.assertTrue(validate(ref2, rescol2))
Example #7
0
 def test_sub_rotate(self):
     geom = TestComponent.RQ_tBu.copy()
     geom.sub_rotate("4", angle=60)
     geom.sub_rotate("6", angle=60)
     geom.sub_rotate("5", angle=60)
     ref = Component(os.path.join(prefix, "ref_files", "sub_rotate.xyz"))
     self.assertTrue(validate(geom, ref, heavy_only=True))
Example #8
0
    def test_substitute(self):
        ref = Geometry(TestGeometry.benz_NO2_Cl)
        mol = Geometry(TestGeometry.benzene)

        mol.substitute(Substituent("NO2"), "12")
        mol.substitute(Substituent("Cl"), "11")

        self.assertTrue(validate(mol, ref))
Example #9
0
 def is_COCH3(self, sub):
     ref = TestSubstituent.COCH3
     self.assertEqual(sub.name, "COCH3")
     self.assertEqual(sub.comment, "CF:2,180")
     self.assertEqual(sub.conf_num, 2)
     self.assertEqual(sub.conf_angle, np.deg2rad(180))
     self.assertTrue(validate(sub, ref))
     return
Example #10
0
 def is_NO2(self, sub):
     ref = TestSubstituent.NO2
     self.assertEqual(sub.name, "NO2")
     self.assertEqual(sub.comment, "CF:2,120")
     self.assertEqual(sub.conf_num, 2)
     self.assertEqual(sub.conf_angle, np.deg2rad(120))
     self.assertTrue(validate(sub, ref, thresh=1e-5))
     return
Example #11
0
 def test_fuseRing_modify(self):
     ref = ResidueCollection(self.naphthalene)
     
     run(self.session, "open %s" % self.benzene)
     run(self.session, "fuseRing #1/a:1@H1 #1/a:1@H2 ring benzene")
     mdl = self.session.models.list()[0]
     rescol = ResidueCollection(mdl)
     
     self.assertTrue(validate(ref, rescol, thresh="loose"))
Example #12
0
    def test_substitute_modify(self):
        ref = ResidueCollection(self.chlorobiphenyl)

        run(self.session, "open %s" % self.benzene)
        run(self.session, "substitute #1/a:1@H5 substituent Cl minimize false")
        run(self.session, "substitute #1/a:1@H6 substituent Ph minimize false")
        mdl = self.session.models.list()[0]
        rescol = ResidueCollection(mdl)

        self.assertTrue(validate(ref, rescol))
Example #13
0
    def test_minimize_torsion(self):
        ref = Component(
            os.path.join(prefix, "ref_files", "minimize_torsion.xyz")
        )

        geom = TestComponent.benz.copy()
        geom.substitute(Substituent("tBu"), "12")
        geom.substitute(Substituent("Ph"), "10")
        geom.substitute(Substituent("OH"), "7")
        geom.minimize_sub_torsion()
        self.assertTrue(validate(geom, ref, heavy_only=True))
Example #14
0
 def test_substitution(self):
     self.maxDiff = None
     # substitute atom and fuse ring
     config = Config(os.path.join(prefix, "test_files", "substitution.ini"),
                     quiet=True)
     geom = Geometry.from_string(config["Geometry"]["structure"])
     job = Job(geom, config, testing=True)
     test = job.structure
     ref = Geometry(
         os.path.join(prefix, "ref_files", "substitution_with_rings.xyz"))
     self.assertTrue(validate(test, ref, sort=True))
Example #15
0
 def test_add_sub_iter_len(self):
     ref = Geometry(TestGeometry.benz_OH_Cl)
     mol = Geometry(TestGeometry.benzene)
     mol.debug = True
     OH = ref.find(["12", "13"])
     Cl = ref.find(["11"])
     mol -= mol.find(["11", "12"])
     mol += Cl
     mol += OH
     mol.refresh_connected()
     mol.refresh_ranks()
     self.assertTrue(validate(mol, ref, thresh="loose"))
Example #16
0
    def test_substitute(self):
        mol = TestComponent.benz.copy()
        benz_Cl = TestComponent.benz_Cl.copy()
        benz_NO2_Cl = TestComponent.benz_NO2_Cl.copy()
        benz_OH_Cl = TestComponent.benz_OH_Cl.copy()
        benz_Ph_Cl = TestComponent.benz_Ph_Cl.copy()

        mol.substitute(Substituent("Cl"), "11")
        res = validate(mol, benz_Cl)
        self.assertTrue(res)

        mol.substitute(Substituent("NO2"), "12", "1")
        res = validate(mol, benz_NO2_Cl, sort=True)
        self.assertTrue(res)

        mol.substitute(Substituent("OH"), "NO2")
        res = validate(mol, benz_OH_Cl, sort=True)
        self.assertTrue(res)

        mol.substitute(Substituent("Ph"), ["12", "12.*"])
        res = validate(mol, benz_Ph_Cl, sort=True, thresh="loose")
        self.assertTrue(res)
Example #17
0
 def is_COCH3(self, sub, thresh=0.03):
     ref = TestFromString.COCH3
     ref.refresh_connected()
     sub.refresh_connected()
     ref.refresh_ranks()
     ref.refresh_ranks()
     ref.atoms = ref.reorder(start=ref.atoms[0])[0]
     sub.atoms = sub.reorder(start=sub.atoms[0])[0]
     self.assertTrue(
         validate(
             sub,
             ref,
             thresh=thresh,
             heavy_only=True,
             sort=False,
             debug=False,
         )
     )
Example #18
0
    def test_substitute(self):
        """test substitute.py"""
        ref = Geometry(TestCLS.benz_NO2_Cl)

        args = [
            sys.executable,
            os.path.join(self.aarontools_bin, "substitute.py"),
            TestCLS.benzene,
            "-s",
            "12=NO2",
            "-s",
            "11=Cl",
        ]
        proc = Popen(args, stdout=PIPE, stderr=PIPE)
        out, err = proc.communicate()
        # print(out.decode("utf-8"))
        # print(err.decode("utf-8"))
        fr = FileReader(("out", "xyz", out.decode("utf-8")))
        mol = Geometry(fr)
        self.assertTrue(validate(mol, ref))
Example #19
0
    def test_mapLigand(self):
        """test mapLigand.py"""
        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_3.xyz"))

        args = [
            sys.executable,
            os.path.join(self.aarontools_bin, "mapLigand.py"),
            TestCLS.tm_simple,
            "-l",
            "35,36=S-tBu-BOX",
        ]

        proc = Popen(args, stdout=PIPE, stderr=PIPE)
        out, err = proc.communicate()

        if len(err) != 0:
            raise RuntimeError(err)

        fr = FileReader(("out", "xyz", out.decode("utf-8")))
        mol = Geometry(fr)
        self.assertTrue(validate(mol, ref, thresh="loose", debug=False))
Example #20
0
    def test_close_ring(self):
        mol = Geometry(TestGeometry.benzene)

        ref1 = Geometry(TestGeometry.naphthalene)
        mol1 = mol.copy()
        mol1.ring_substitute(["7", "8"], Ring("benzene"))
        self.assertTrue(validate(mol1, ref1, thresh="loose"))

        ref2 = Geometry(TestGeometry.tetrahydronaphthalene)
        mol2 = mol.copy()
        mol2.ring_substitute(["7", "8"], Ring("cyclohexane"))
        rmsd = mol2.RMSD(ref2, align=True, sort=True)
        self.assertTrue(rmsd < rmsd_tol(ref2, superLoose=True))

        mol3 = Geometry(TestGeometry.naphthalene)
        ref3 = Geometry(TestGeometry.pyrene)
        targets1 = mol3.find(["9", "15"])
        targets2 = mol3.find(["10", "16"])
        mol3.ring_substitute(targets1, Ring("benzene"))
        mol3.ring_substitute(targets2, Ring("benzene"))
        rmsd = mol3.RMSD(ref3, align=True, sort=True)
        self.assertTrue(rmsd < rmsd_tol(ref3, superLoose=True))
Example #21
0
    def test_changeElement(self):
        """test changeElement.py"""
        ref = Geometry(TestCLS.pyridine)

        args = [
            sys.executable,
            os.path.join(self.aarontools_bin, "changeElement.py"),
            TestCLS.benzene,
            "-e",
            "1=N",
            "-c",
        ]

        proc = Popen(args, stdout=PIPE, stderr=PIPE)
        out, err = proc.communicate()

        if len(err) != 0:
            print(out.decode("utf-8"))
            print(err.decode("utf-8"))
            raise RuntimeError(err.decode("utf-8"))

        fr = FileReader(("out", "xyz", out.decode("utf-8")))
        mol = Geometry(fr)
        self.assertTrue(validate(ref, mol, thresh="loose"))
Example #22
0
 def is_NO2(self, sub):
     ref = TestFromString.NO2
     self.assertTrue(validate(sub, ref, thresh=2e-1))
Example #23
0
    def test_change_element(self):
        mol = Geometry(TestGeometry.benzene)

        ref = Geometry(TestGeometry.pyridine)
        mol.change_element("1", "N", adjust_hydrogens=True)
        self.assertTrue(validate(mol, ref, thresh="loose"))
Example #24
0
    def test_map_ligand(self):
        monodentate = Component(TestGeometry.monodentate)
        tridentate = Component(TestGeometry.tridentate)
        debug = False

        # import cProfile
        #
        # profile = cProfile.Profile()
        # profile.enable()
        """
        #TODO: get a reference file for this
        # two monodentate -> bidentate
        ptco4 = TestGeometry.ptco4.copy()
        ptco4.map_ligand('EDA', ["3", "5"])
        """

        # bidentate -> monodentate, none
        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_1.xyz"))
        tm_simple = Geometry(TestGeometry.tm_simple)
        tm_simple.map_ligand(monodentate.copy(), ["35"])
        self.assertTrue(
            validate(tm_simple,
                     ref,
                     heavy_only=True,
                     thresh="loose",
                     debug=debug))

        # bidentate -> two monodentate
        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_2.xyz"))
        tm_simple = Geometry(TestGeometry.tm_simple)
        tm_simple.map_ligand([monodentate.copy(), "ACN"], ["35", "36"])
        self.assertTrue(
            validate(tm_simple,
                     ref,
                     thresh="loose",
                     heavy_only=True,
                     debug=debug))

        # bidentate -> bidentate
        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_3.xyz"))
        tm_simple = Geometry(TestGeometry.tm_simple)
        tm_simple.map_ligand("S-tBu-BOX", ["35", "36"])
        self.assertTrue(
            validate(tm_simple,
                     ref,
                     thresh="loose",
                     heavy_only=True,
                     debug=debug))

        # tridentate -> tridentate
        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_4.xyz"))
        org_tri = Geometry(TestGeometry.org_tri)
        org_tri.map_ligand(tridentate, ["30", "28", "58"])
        self.assertTrue(
            validate(org_tri,
                     ref,
                     thresh="loose",
                     heavy_only=True,
                     debug=debug))

        # tridentate -> monodentate + bidentate -> tridentate
        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_6.xyz"))
        org_tri = Geometry(TestGeometry.org_tri)
        org_tri.map_ligand(["EDA", "ACN"], ["30", "28", "58"])
        self.assertTrue(
            validate(org_tri,
                     ref,
                     thresh="loose",
                     heavy_only=True,
                     debug=debug))

        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_7.xyz"))
        org_tri = Geometry(os.path.join(prefix, "ref_files", "lig_map_6.xyz"))
        org_tri.map_ligand(tridentate, ["10", "11", "2"])
        self.assertTrue(
            validate(org_tri,
                     ref,
                     thresh="loose",
                     heavy_only=True,
                     debug=debug))

        # bidentate -> two bulky monodentate
        ref = Geometry(os.path.join(prefix, "ref_files", "lig_map_5.xyz"))
        tm_simple = Geometry(TestGeometry.tm_simple)
        tm_simple.map_ligand(["iPr-NC3C"] * 2, ["35", "36"])
        self.assertTrue(
            validate(tm_simple,
                     ref,
                     thresh="loose",
                     heavy_only=True,
                     debug=debug))