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))
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")
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")
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"))
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))
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))
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))
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))
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
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
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"))
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))
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))
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))
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"))
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)
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, ) )
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))
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))
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))
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"))
def is_NO2(self, sub): ref = TestFromString.NO2 self.assertTrue(validate(sub, ref, thresh=2e-1))
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"))
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))