def test_ProteinAlphabetBuilder_get_resid_monomer_details(self): path = os.path.join(self.dirname, 'alphabet.yml') session = requests.Session() self.assertEqual(protein.ProteinAlphabetBuilder().get_resid_monomer_details('AA0037', session)[0], 'S') self.assertEqual(protein.ProteinAlphabetBuilder().get_resid_monomer_details('AA0037', session)[3], {'AA0016'}) identifiers = protein.ProteinAlphabetBuilder().get_resid_monomer_details('AA0037', session)[2] identifiers_test = set([ Identifier('pdb.ligand', 'SEP'), Identifier('mod', 'MOD:00046'), Identifier('go', 'GO:0018105'), Identifier('cas', '407-41-0'), Identifier('chebi', 'CHEBI:45522'), Identifier('resid', 'AA0037'), ]) self.assertEqual(identifiers, identifiers_test)
def test_test_ProteinAlphabetBuilder_is_terminus(self): builder = protein.ProteinAlphabetBuilder() mol = openbabel.OBMol() conv = openbabel.OBConversion() conv.SetInFormat('smiles') conv.ReadString(mol, 'O=C[C@H](CCCCNC(=O)[C@H](CCCC[NH3+])[NH3+])[NH3+]') self.assertTrue(builder.is_terminus(mol.GetAtom(26), mol.GetAtom(2))) self.assertFalse(builder.is_terminus(mol.GetAtom(26), mol.GetAtom(10)))
def test_ProteinAlphabetBuilder_is_termini(self): builder = protein.ProteinAlphabetBuilder() mol = openbabel.OBMol() conv = openbabel.OBConversion() conv.SetInFormat('smiles') conv.ReadString(mol, 'C[C@H]([NH3+])C=O') for i_atom in range(mol.NumAtoms()): if i_atom + 1 == 4: self.assertTrue(builder.is_n_terminus(mol, mol.GetAtom(i_atom + 1))) else: self.assertFalse(builder.is_n_terminus(mol, mol.GetAtom(i_atom + 1))) if i_atom + 1 == 8: self.assertTrue(builder.is_c_terminus(mol, mol.GetAtom(i_atom + 1))) else: self.assertFalse(builder.is_c_terminus(mol, mol.GetAtom(i_atom + 1))) self.assertFalse(builder.is_n_terminus(mol, None)) conv.ReadString(mol, 'N') atom = mol.GetAtom(1) self.assertFalse(builder.is_n_terminus(mol, atom)) conv.ReadString(mol, '[NH3+]O') atom = mol.GetAtom(1) self.assertFalse(builder.is_n_terminus(mol, atom)) conv.ReadString(mol, '[NH4+]') atom = mol.GetAtom(1) self.assertFalse(builder.is_n_terminus(mol, atom)) conv.ReadString(mol, 'C[NH+](C)C') atom = mol.GetAtom(2) self.assertFalse(builder.is_n_terminus(mol, atom)) self.assertFalse(builder.is_c_terminus(mol, None)) conv.ReadString(mol, 'C[C@H]([NH3+])C=O') atom = mol.GetAtom(8) atom.SetFormalCharge(1) self.assertFalse(builder.is_c_terminus(mol, atom)) conv.ReadString(mol, 'CC(C)O') atom = mol.GetAtom(2) self.assertFalse(builder.is_c_terminus(mol, atom)) conv.ReadString(mol, 'CCO') atom = mol.GetAtom(2) self.assertFalse(builder.is_c_terminus(mol, atom)) conv.ReadString(mol, 'C=C=O') atom = mol.GetAtom(2) self.assertFalse(builder.is_c_terminus(mol, atom))
def test_ProteinAlphabetBuilder_get_resid_monomer_structure(self): path = os.path.join(self.dirname, 'alphabet.yml') structure, index_n, index_c = protein.ProteinAlphabetBuilder().get_resid_monomer_structure( 'AA0005', self.tmp_pdbfile, ph=7.4, major_tautomer=True) # just in case check that original structure has not been modified self.assertEqual(OpenBabelUtils.export(structure, 'smiles'), 'OC(=O)[C@@H]([NH3+])CS') # check if correct index for N and C atoms self.assertEqual(index_n, 6) self.assertEqual(index_c, 2)
def test_ProteinAlphabetBuilder(self): pdb_dir = pkg_resources.resource_filename('bpforms', os.path.join('alphabet', 'protein.pdb')) if os.path.isdir(pdb_dir): shutil.rmtree(pdb_dir) path = os.path.join(self.dirname, 'alphabet.yml') alphabet = protein.ProteinAlphabetBuilder(_max_monomers=10).run(ph=7.4, path=path) self.assertEqual(alphabet.monomers.F.get_formula(), EmpiricalFormula('C9H12NO') + EmpiricalFormula('O')) self.assertTrue(os.path.isfile(path)) alphabet = Alphabet().from_yaml(path) self.assertEqual(alphabet.monomers.F.get_formula(), EmpiricalFormula('C9H12NO') + EmpiricalFormula('O'))
def validate_alphabet(self, alphabet): errors = [] builder = protein.ProteinAlphabetBuilder() for monomer in alphabet.monomers.values(): if monomer.l_bond_atoms: atom_n = monomer.structure.GetAtom(monomer.l_bond_atoms[0].position) if not builder.is_n_terminus(monomer.structure, atom_n): errors.append('Monomer {} does not have a N-terminus'.format(monomer.id)) if monomer.r_bond_atoms: atom_c = monomer.structure.GetAtom(monomer.r_bond_atoms[0].position) if not builder.is_c_terminus(monomer.structure, atom_c, residue=False): errors.append('Monomer {} does not have a C-terminus'.format(monomer.id)) # if monomer.l_bond_atoms and monomer.r_bond_atoms: # if not builder.is_terminus(atom_n, atom_c): # errors.append('Monomer {} does not have termini'.format(monomer.id)) if errors: raise ValueError('Alphabet has invalid monomer(s):\n {}'.format('\n '.join( errors)))