Example #1
0
 def test_add_remove(self):
     st = gemmi.read_pdb_string(SSBOND_FRAGMENT)
     st.add_model(st[0])
     st.renumber_models()
     res = st[0].sole_residue('A', gemmi.SeqId('310'))
     self.assertEqual(len(res), 1)
     res.remove_atom('SG', ' ')
     self.assertEqual(len(res), 0)
     res = st[1].sole_residue('A', gemmi.SeqId('310'))
     self.assertEqual(len(res), 1)
     self.assertEqual(len(st[0]['A']), 7)
     del st[0]['A'][3]
     self.assertEqual(len(st[0]['A']), 6)
     self.assertEqual(len(st), 2)
     self.assertEqual(st[0].name, '1')
     del st['1']
     self.assertEqual(len(st), 1)
     self.assertEqual(st[0].name, '2')
     st.renumber_models()
     self.assertEqual(st[0].name, '1')
     st.add_model(st[0])
     st.add_model(st[0])
     st.renumber_models()
     self.assertEqual(st[0].name, '1')
     self.assertEqual(st[-1].name, '3')
     del st[:-1]
     self.assertEqual(len(st), 1)
     self.assertEqual(st[0].name, '3')
     del st[0]
     self.assertEqual(len(st), 0)
Example #2
0
 def test_ncs(self):
     st = gemmi.read_structure(full_path('5cvz_final.pdb'))
     self.assertEqual(st.resolution, 3.29)
     first_atom = st[0].sole_residue('A', gemmi.SeqId(17, ' '))[0]
     ne2 = st[0].sole_residue('A', gemmi.SeqId('63')).sole_atom('NE2')
     direct_dist = first_atom.pos.dist(ne2.pos)
     self.assertAlmostEqual(direct_dist, 34.89, delta=1e-2)
     nearest_image = st.cell.find_nearest_image(first_atom.pos, ne2.pos)
     nearest_dist = nearest_image.dist()
     self.assertAlmostEqual(nearest_dist, 8.02, delta=1e-2)
Example #3
0
 def test_first_conformer(self):
     model = gemmi.read_structure(full_path('1pfe.cif.gz'))[0]
     b = model['B']
     self.assertEqual([res.name for res in b if not res.is_water()], [
         'DSN', 'ALA', 'N2C', 'NCY', 'MVA', 'DSN', 'ALA', 'NCY', 'N2C',
         'MVA', 'QUI', 'QUI'
     ])
     self.assertEqual(
         [res.name for res in b.first_conformer() if not res.is_water()], [
             'DSN', 'ALA', 'N2C', 'MVA', 'DSN', 'ALA', 'NCY', 'MVA', 'QUI',
             'QUI'
         ])
     polymer = b.get_polymer()
     self.assertEqual([res.name for res in polymer], [
         'DSN', 'ALA', 'N2C', 'NCY', 'MVA', 'DSN', 'ALA', 'NCY', 'N2C',
         'MVA'
     ])
     self.assertEqual(
         [res.name for res in polymer.first_conformer()],
         ['DSN', 'ALA', 'N2C', 'MVA', 'DSN', 'ALA', 'NCY', 'MVA'])
     self.assertEqual(len(polymer), 10)
     self.assertEqual(polymer.length(), 8)
     # The bond between 4 MVA(v) and 5 DSN(s) is betwenn C and OG
     # (so it's not a peptide bond as expected). Depending on the heuristic
     # used to determine gaps, this sequence could have a gap in the middle.
     self.assertEqual(polymer.make_one_letter_sequence(), 'sAXvsAXv')
     self.assertEqual([res.name for res in b.get_ligands()], ['QUI', 'QUI'])
     res1 = model.sole_residue('A', gemmi.SeqId('1'))
     self.assertEqual([atom.name for atom in res1.first_conformer()],
                      [atom.name for atom in res1 if atom.altloc != 'B'])
Example #4
0
 def test_pdb_misaligned_element(self):
     pdb_line = "ATOM      7 S    SUB A   7      34.489 -14.293  34.343" \
                "  0.29 43.77          S"
     for line in [pdb_line, pdb_line + '\n', pdb_line + '\r\n']:
         st = gemmi.read_pdb_string(line)
         atom = st[0].sole_residue('A', gemmi.SeqId('7')).sole_atom('S')
         self.assertEqual(atom.element.name, 'S')
Example #5
0
    def test_ncs(self):
        st = gemmi.read_structure(full_path('5cvz_final.pdb'))
        self.assertEqual(st.resolution, 3.29)
        first_atom = st[0].sole_residue('A', gemmi.SeqId(17, ' '))[0]
        ne2 = st[0].sole_residue('A', gemmi.SeqId('63')).sole_atom('NE2')
        direct_dist = first_atom.pos.dist(ne2.pos)
        self.assertAlmostEqual(direct_dist, 34.89, delta=1e-2)
        nearest_image = st.cell.find_nearest_image(first_atom.pos, ne2.pos)
        nearest_dist = nearest_image.dist()
        self.assertAlmostEqual(nearest_dist, 8.02, delta=1e-2)

        # test __getitem__(splice) - unrelated to NCS (sometimes we put
        # unrelated tests together to avoid the same file again)
        chain = st[0]['A']
        res = chain.next_residue(chain[:5][0])
        self.assertTrue(res is chain[1])
Example #6
0
 def test_first_conformer(self):
     model = gemmi.read_structure(full_path('1pfe.cif.gz'))[0]
     b = model['B']
     self.assertEqual([res.name for res in b if not res.is_water()], [
         'DSN', 'ALA', 'N2C', 'NCY', 'MVA', 'DSN', 'ALA', 'NCY', 'N2C',
         'MVA', 'QUI', 'QUI'
     ])
     self.assertEqual(
         [res.name for res in b.first_conformer() if not res.is_water()], [
             'DSN', 'ALA', 'N2C', 'MVA', 'DSN', 'ALA', 'NCY', 'MVA', 'QUI',
             'QUI'
         ])
     polymer = b.get_polymer()
     self.assertEqual([res.name for res in polymer], [
         'DSN', 'ALA', 'N2C', 'NCY', 'MVA', 'DSN', 'ALA', 'NCY', 'N2C',
         'MVA'
     ])
     self.assertEqual(
         [res.name for res in polymer.first_conformer()],
         ['DSN', 'ALA', 'N2C', 'MVA', 'DSN', 'ALA', 'NCY', 'MVA'])
     self.assertEqual(len(polymer), 10)
     self.assertEqual(polymer.length(), 8)
     self.assertEqual(polymer.make_one_letter_sequence(), 'sAXvsAXv')
     self.assertEqual([res.name for res in b.get_ligands()], ['QUI', 'QUI'])
     res1 = model.sole_residue('A', gemmi.SeqId('1'))
     self.assertEqual([atom.name for atom in res1.first_conformer()],
                      [atom.name for atom in res1 if atom.altloc != 'B'])
Example #7
0
 def test_pdb_element_names(self):
     pdb_line = "HETATM 4154 MG    MG A 341       1.384  19.340  11.968" \
                "  1.00 67.64          MG"
     for line in [pdb_line, pdb_line.strip(' MG'), pdb_line[:-2] + '  ']:
         st = gemmi.read_pdb_string(line)
         residue = st[0].sole_residue('A', gemmi.SeqId(341, ' '))
         mg_atom = residue.sole_atom('MG')
         self.assertEqual(mg_atom.element.name, 'Mg')
         self.assertAlmostEqual(mg_atom.b_iso, 67.64, delta=1e-6)
     mg_atom.element = gemmi.Element('Cu')
     self.assertEqual(mg_atom.element.name, 'Cu')
Example #8
0
 def test_1gtv(self):
     st = gemmi.read_pdb_string(FRAGMENT_1GTV)
     a1 = st[0].sole_residue('A', gemmi.SeqId(85, ' '))[0]
     ns = gemmi.NeighborSearch(st[0], st.cell, 5)
     ns.populate()
     marks = ns.find_atoms(a1.pos, a1.altloc, 3)
     self.assertEqual(len(marks), 2)
     for mark in marks:
         d = ns.dist(a1.pos, mark.pos())
         self.assertAlmostEqual(d, 0, delta=5e-6)
     marks2 = ns.find_neighbors(a1, 0.1, 3)
     self.assertEqual(len(marks2), 0)
Example #9
0
 def test_5a11(self, use_populate=True):
     st = gemmi.read_pdb_string(FRAGMENT_5A11)
     a1 = st[0].sole_residue('A', gemmi.SeqId(37, ' '))[0]
     ns = gemmi.NeighborSearch(st[0], st.cell, 5)
     if use_populate:
         ns.populate()
     else:
         for n_ch, chain in enumerate(st[0]):
             for n_res, res in enumerate(chain):
                 for n_atom, atom in enumerate(res):
                     ns.add_atom(atom, n_ch, n_res, n_atom)
     marks = ns.find_atoms(a1.pos, a1.altloc, 3)
     m1, m2 = sorted(marks, key=lambda m: ns.dist(a1.pos, m.pos()))
     self.assertAlmostEqual(ns.dist(a1.pos, m1.pos()), 0, delta=5e-6)
     self.assertAlmostEqual(ns.dist(a1.pos, m2.pos()), 0.13, delta=5e-3)
     cra2 = m2.to_cra(st[0])
     self.assertEqual(cra2.chain.name, 'B')
     self.assertEqual(str(cra2.residue.seqid), '37')
     self.assertEqual(cra2.atom.name, 'SG')
     marks2 = ns.find_neighbors(a1, 0.1, 3)
     self.assertEqual(len(marks2), 1)
     self.assertEqual(marks2[0], m2)