def test_run_residues(self, fp_class): fp_class.run(u.trajectory[0:1], ligand_ag, protein_ag, residues="all", progress=False) lig_id = ResidueId.from_string("LIG1.G") assert hasattr(fp_class, "ifp") assert len(fp_class.ifp) == 1 res = ResidueId.from_string("LYS387.B") assert (lig_id, res) in fp_class.ifp[0].keys() fp_class.run(u.trajectory[1:2], ligand_ag, protein_ag, residues=["ASP129.A"], progress=False) assert hasattr(fp_class, "ifp") assert len(fp_class.ifp) == 1 res = ResidueId.from_string("ASP129.A") assert (lig_id, res) in fp_class.ifp[0].keys() fp_class.run(u.trajectory[:3], ligand_ag, protein_ag, residues=None, progress=False) assert hasattr(fp_class, "ifp") assert len(fp_class.ifp) == 3 assert len(fp_class.ifp[0]) > 1 res = ResidueId.from_string("VAL201.A") assert (lig_id, res) in fp_class.ifp[0].keys() u.trajectory[0]
def test_from_rdkit(self): rdkit_mol = Molecule(ligand_rdkit) newmol = Molecule.from_rdkit(ligand_rdkit) assert rdkit_mol[0].resid == newmol[0].resid mol = Chem.MolFromSmiles("CCO") newmol = Molecule.from_rdkit(mol) assert newmol[0].resid == ResidueId("UNL", 1) newmol = Molecule.from_rdkit(mol, "FOO", 42, "A") assert newmol[0].resid == ResidueId("FOO", 42, "A")
def test_from_atom_empty(self, name, number, chain): atom = Chem.Atom(1) mi = Chem.AtomPDBResidueInfo() if name is not None: mi.SetResidueName(name) if number is not None: mi.SetResidueNumber(number) if chain is not None: mi.SetChainId(chain) atom.SetMonomerInfo(mi) resid = ResidueId.from_atom(atom) assert resid == ResidueId()
class TestMolecule(TestBaseRDKitMol): @pytest.fixture(scope="class") def mol(self): return Molecule(rdkit_mol) def test_mapindex(self, mol): for atom in mol.GetAtoms(): assert atom.GetUnsignedProp("mapindex") == atom.GetIdx() def test_from_mda(self): rdkit_mol = Molecule(ligand_rdkit) mda_mol = Molecule.from_mda(u, "resname LIG") assert rdkit_mol[0].resid == mda_mol[0].resid assert (rdkit_mol.HasSubstructMatch(mda_mol) and mda_mol.HasSubstructMatch(rdkit_mol)) @pytest.mark.parametrize("key", [ 0, 42, -1, "LYS49.A", ResidueId("LYS", 49, "A") ]) def test_getitem(self, mol, key): assert mol[key].resid is mol.residues[key].resid def test_iter(self, mol): for i, r in enumerate(mol): assert r.resid == mol[i].resid def test_n_residues(self, mol): assert mol.n_residues == mol.residues.n_residues
def test_init(self, name, number, chain): resid = ResidueId(name, number, chain) name = name or "UNK" number = number or 0 chain = chain or None assert resid.name == name assert resid.number == number assert resid.chain == chain
def test_from_atom(self, name, number, chain): atom = Chem.Atom(1) mi = Chem.AtomPDBResidueInfo() if name: mi.SetResidueName(name) if number: mi.SetResidueNumber(number) if chain: mi.SetChainId(chain) atom.SetMonomerInfo(mi) resid = ResidueId.from_atom(atom) assert resid.name == name assert resid.number == number assert resid.chain == chain
def test_pocket_residues(): resids = get_residues_near_ligand(ligand_mol, protein_mol) residues = [ "TYR38.A", "TYR40.A", "GLN41.A", "VAL102.A", "SER106.A", "TYR109.A", "THR110.A", "TRP115.A", "TRP125.A", "LEU126.A", "ASP129.A", "ILE130.A", "THR131.A", "CYS133.A", "THR134.A", "ILE137.A", "ILE180.A", "GLU198.A", "CYS199.A", "VAL200.A", "VAL201.A", "ASN202.A", "THR203.A", "TYR208.A", "THR209.A", "VAL210.A", "TYR211.A", "SER212.A", "THR213.A", "VAL214.A", "GLY215.A", "ALA216.A", "PHE217.A", "TRP327.B", "PHE330.B", "PHE331.B", "ILE333.B", "SER334.B", "LEU335.B", "MET337.B", "PRO338.B", "LEU348.B", "ALA349.B", "ILE350.B", "PHE351.B", "ASP352.B", "PHE353.B", "PHE354.B", "THR355.B", "TRP356.B", "GLY358.B", "TYR359.B" ] for res in residues: r = ResidueId.from_string(res) assert r in resids
def test_from_atom(self, name, number, chain): atom = Chem.Atom(1) mi = Chem.AtomPDBResidueInfo() if name is not None: mi.SetResidueName(name) if number is not None: mi.SetResidueNumber(number) if chain is not None: mi.SetChainId(chain) atom.SetMonomerInfo(mi) resid = ResidueId.from_atom(atom) name = name or "UNK" number = number or 0 chain = chain or None assert resid.name == name assert resid.number == number assert resid.chain == chain
def test_string_methods(self, resid_str, expected): resid = ResidueId.from_string(resid_str) assert resid == ResidueId(*expected) assert str(resid) == resid_str
def test_init_empty(self, name, number, chain): resid = ResidueId(name, number, chain) assert resid == ResidueId()
def test_getitem(self, residues, ix, resid, resid_str): rg = ResidueGroup(residues) resid = ResidueId(*resid) assert rg[ix] == rg[resid] assert rg[ix] == rg[resid_str]
def test_init(self, name, number, chain): resid = ResidueId(name, number, chain) assert resid.name == name assert resid.number == number assert resid.chain == chain
def test_init(self, mol): resid = ResidueId.from_atom(mol.GetAtomWithIdx(0)) assert mol.resid == resid
def test_repr(self, resid_str): resid = ResidueId.from_string(resid_str) expected = f"ResidueId({resid.name}, {resid.number}, {resid.chain})" assert repr(resid) == expected
def test_lt(self, res1, res2): res1 = ResidueId.from_string(res1) res2 = ResidueId.from_string(res2) assert res1 < res2
def test_from_string(self, resid_str, expected): resid = ResidueId.from_string(resid_str) assert resid == ResidueId(*expected)
def test_generate(self, fp_class): ifp = fp_class.generate(ligand_mol, protein_mol) key = (ResidueId("LIG", 1, "G"), ResidueId("THR", 355, "B")) bv = ifp[key] assert isinstance(bv, np.ndarray) assert bv[0] is np.True_
def test_from_atom_no_mi(self): atom = Chem.Atom(1) resid = ResidueId.from_atom(atom) assert resid.name is None assert resid.number is None assert resid.chain is None
def test_eq(self): name, number, chain = "ALA", 1, "A" res1 = ResidueId(name, number, chain) res2 = ResidueId(name, number, chain) assert res1 == res2