예제 #1
0
    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)
예제 #2
0
    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)))
예제 #3
0
    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))
예제 #4
0
    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)
예제 #5
0
    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'))
예제 #6
0
    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)))