Пример #1
0
def exercise_hybrid_36():
    hybrid_36.exercise(hy36enc=pdb.hy36encode, hy36dec=pdb.hy36decode)
    for width, s in [(3, "AAA"), (6, "zzzzzz")]:
        try:
            pdb.hy36encode(width=width, value=0)
        except RuntimeError as e:
            assert str(e) == "unsupported width."
        else:
            raise Exception_expected
        try:
            pdb.hy36decode(width=width, s=s)
        except RuntimeError as e:
            assert str(e) == "unsupported width."
        else:
            raise Exception_expected
    ups = user_plus_sys_time()
    n_ok = pdb.hy36recode_width_4_all()
    ups = ups.elapsed()
    print("time hy36recode_width_4_all: %.2f s" \
      " (%.3f micro s per encode-decode cycle)" % (ups, 1.e6*ups/max(1,n_ok)))
    assert n_ok == 999 + 10000 + 2 * 26 * 36**3
    #
    assert pdb.resseq_decode(s=1234) == 1234
    assert pdb.resseq_decode(s="A123") == 11371
    assert pdb.resseq_decode(s="1") == 1
    pdb.resseq_encode(value=1) == "   1"
    pdb.resseq_encode(value=11371) == "A123"
    pdb.resseq_encode(value=1234) == "1234"
    #
    try:
        pdb.resseq_decode(s="18A")
    except ValueError as e:
        assert str(e) == 'invalid residue sequence number: " 18A"'
    else:
        raise Exception_expected
Пример #2
0
def exercise_hybrid_36():
  hybrid_36.exercise(hy36enc=pdb.hy36encode, hy36dec=pdb.hy36decode)
  for width,s in [(3,"AAA"), (6,"zzzzzz")]:
    try: pdb.hy36encode(width=width, value=0)
    except RuntimeError, e:
      assert str(e) == "unsupported width."
    else: raise Exception_expected
    try: pdb.hy36decode(width=width, s=s)
    except RuntimeError, e:
      assert str(e) == "unsupported width."
Пример #3
0
def exercise_hybrid_36():
    hybrid_36.exercise(hy36enc=pdb.hy36encode, hy36dec=pdb.hy36decode)
    for width, s in [(3, "AAA"), (6, "zzzzzz")]:
        try:
            pdb.hy36encode(width=width, value=0)
        except RuntimeError, e:
            assert str(e) == "unsupported width."
        else:
            raise Exception_expected
        try:
            pdb.hy36decode(width=width, s=s)
        except RuntimeError, e:
            assert str(e) == "unsupported width."
Пример #4
0
def exercise_base_256_ordinal():
    o = pdb.utils_base_256_ordinal
    assert o(None) == 48
    assert o("") == 48
    assert o("0") == 48
    assert o(" 0") == 48
    assert o("  0") == 48
    assert o("1") == 49
    assert o("-1") == -49
    assert o("123") == (49 * 256 + 50) * 256 + 51
    assert o("-123") == -o("123")

    #
    def po(s):
        result = 0
        s = s.lstrip()
        neg = False
        if (len(s) == 0):
            s = "0"
        elif (s[0] == "-"):
            neg = True
            s = s[1:]
        for c in s:
            result *= 256
            result += ord(c)
        if (neg):
            result *= -1
        return result

    for s in ["780 ", "999 ", "1223 ", "zzzzz"]:
        assert o(s) == po(s)
        assert o("-" + s) == -o(s)
    #
    from past.builtins import cmp
    from functools import cmp_to_key

    def o_cmp(a, b):
        return cmp(o(a), o(b))

    char4s = ["%4s" % i for i in range(-999, 9999 + 1)]
    assert sorted(char4s, key=cmp_to_key(o_cmp)) == char4s
    m = pdb.hy36decode(width=4, s="zzzz")
    e = pdb.hy36encode
    char4s = [e(width=4, value=i) for i in range(-999, m + 1, 51)]
    assert sorted(char4s, key=cmp_to_key(o_cmp)) == char4s
Пример #5
0
def exercise_base_256_ordinal():
  o = pdb.utils_base_256_ordinal
  assert o(None) == 48
  assert o("") == 48
  assert o("0") == 48
  assert o(" 0") == 48
  assert o("  0") == 48
  assert o("1") == 49
  assert o("-1") == -49
  assert o("123") == (49*256+50)*256+51
  assert o("-123") == -o("123")
  #
  def po(s):
    result = 0
    s = s.lstrip()
    neg = False
    if (len(s) == 0):
      s = "0"
    elif (s[0] == "-"):
      neg = True
      s = s[1:]
    for c in s:
      result *= 256
      result += ord(c)
    if (neg):
      result *= -1
    return result
  for s in ["780 ", "999 ", "1223 ", "zzzzz"]:
    assert o(s) == po(s)
    assert o("-"+s) == -o(s)
  #
  def o_cmp(a, b): return cmp(o(a), o(b))
  char4s = ["%4s" % i for i in xrange(-999,9999+1)]
  assert sorted(char4s, o_cmp) == char4s
  m = pdb.hy36decode(width=4, s="zzzz")
  e = pdb.hy36encode
  char4s = [e(width=4, value=i) for i in xrange(-999,m+1,51)]
  assert sorted(char4s, o_cmp) == char4s
Пример #6
0
  def __init__(self, pdb_hierarchy, crystal_symmetry=None,
               coordinate_precision=5,
               occupancy_precision=3,
               b_iso_precision=5,
               u_aniso_precision=5):
    if crystal_symmetry is None:
      crystal_symmetry = crystal.symmetry()
    iotbx.cif.crystal_symmetry_as_cif_block.__init__(
      self, crystal_symmetry, format="mmcif")

    coord_fmt_str = "%%.%if" %coordinate_precision
    occ_fmt_str = "%%.%if" %occupancy_precision
    b_iso_fmt_str = "%%.%if" %b_iso_precision
    u_aniso_fmt_str = "%%.%if" %u_aniso_precision

    atom_site_loop = iotbx.cif.model.loop(header=(
      '_atom_site.group_PDB',
      '_atom_site.id',
      '_atom_site.label_atom_id',
      '_atom_site.label_alt_id',
      '_atom_site.label_comp_id',
      '_atom_site.auth_asym_id',
      '_atom_site.auth_seq_id',
      '_atom_site.pdbx_PDB_ins_code',
      '_atom_site.Cartn_x',
      '_atom_site.Cartn_y',
      '_atom_site.Cartn_z',
      '_atom_site.occupancy',
      '_atom_site.B_iso_or_equiv',
      '_atom_site.type_symbol',
      '_atom_site.pdbx_formal_charge',
      '_atom_site.phenix_scat_dispersion_real',
      '_atom_site.phenix_scat_dispersion_imag',
      '_atom_site.label_asym_id',
      '_atom_site.label_entity_id',
      '_atom_site.label_seq_id',
      #'_atom_site.auth_comp_id',
      #'_atom_site.auth_atom_id',
      '_atom_site.pdbx_PDB_model_num',
    ))

    aniso_loop = iotbx.cif.model.loop(header=(
      '_atom_site_anisotrop.id',
      '_atom_site_anisotrop.pdbx_auth_atom_id',
      '_atom_site_anisotrop.pdbx_label_alt_id',
      '_atom_site_anisotrop.pdbx_auth_comp_id',
      '_atom_site_anisotrop.pdbx_auth_asym_id',
      '_atom_site_anisotrop.pdbx_auth_seq_id',
      '_atom_site_anisotrop.pdbx_PDB_ins_code',
      '_atom_site_anisotrop.U[1][1]',
      '_atom_site_anisotrop.U[2][2]',
      '_atom_site_anisotrop.U[3][3]',
      '_atom_site_anisotrop.U[1][2]',
      '_atom_site_anisotrop.U[1][3]',
      '_atom_site_anisotrop.U[2][3]'
    ))

    # cache dictionary lookups to save time in inner loop
    atom_site_group_PDB = atom_site_loop['_atom_site.group_PDB']
    atom_site_id = atom_site_loop['_atom_site.id']
    atom_site_label_atom_id = atom_site_loop['_atom_site.label_atom_id']
    atom_site_label_alt_id = atom_site_loop['_atom_site.label_alt_id']
    atom_site_label_comp_id = atom_site_loop['_atom_site.label_comp_id']
    atom_site_auth_asym_id = atom_site_loop['_atom_site.auth_asym_id']
    atom_site_auth_seq_id = atom_site_loop['_atom_site.auth_seq_id']
    atom_site_pdbx_PDB_ins_code = atom_site_loop['_atom_site.pdbx_PDB_ins_code']
    atom_site_Cartn_x = atom_site_loop['_atom_site.Cartn_x']
    atom_site_Cartn_y = atom_site_loop['_atom_site.Cartn_y']
    atom_site_Cartn_z = atom_site_loop['_atom_site.Cartn_z']
    atom_site_occupancy = atom_site_loop['_atom_site.occupancy']
    atom_site_B_iso_or_equiv = atom_site_loop['_atom_site.B_iso_or_equiv']
    atom_site_type_symbol = atom_site_loop['_atom_site.type_symbol']
    atom_site_pdbx_formal_charge = atom_site_loop['_atom_site.pdbx_formal_charge']
    atom_site_phenix_scat_dispersion_real = \
      atom_site_loop['_atom_site.phenix_scat_dispersion_real']
    atom_site_phenix_scat_dispersion_imag = \
      atom_site_loop['_atom_site.phenix_scat_dispersion_imag']
    atom_site_label_asym_id = atom_site_loop['_atom_site.label_asym_id']
    atom_site_label_entity_id = atom_site_loop['_atom_site.label_entity_id']
    atom_site_label_seq_id = atom_site_loop['_atom_site.label_seq_id']
    #atom_site_loop['_atom_site.auth_comp_id'].append(comp_id)
    #atom_site_loop['_atom_site.auth_atom_id'].append(atom.name.strip())
    atom_site_pdbx_PDB_model_num = atom_site_loop['_atom_site.pdbx_PDB_model_num']
    atom_site_anisotrop_id = aniso_loop['_atom_site_anisotrop.id']
    atom_site_anisotrop_pdbx_auth_atom_id = \
      aniso_loop['_atom_site_anisotrop.pdbx_auth_atom_id']
    atom_site_anisotrop_pdbx_label_alt_id = \
      aniso_loop['_atom_site_anisotrop.pdbx_label_alt_id']
    atom_site_anisotrop_pdbx_auth_comp_id = \
      aniso_loop['_atom_site_anisotrop.pdbx_auth_comp_id']
    atom_site_anisotrop_pdbx_auth_asym_id = \
      aniso_loop['_atom_site_anisotrop.pdbx_auth_asym_id']
    atom_site_anisotrop_pdbx_auth_seq_id = \
      aniso_loop['_atom_site_anisotrop.pdbx_auth_seq_id']
    atom_site_anisotrop_pdbx_PDB_ins_code = \
      aniso_loop['_atom_site_anisotrop.pdbx_PDB_ins_code']
    atom_site_anisotrop_U11 = aniso_loop['_atom_site_anisotrop.U[1][1]']
    atom_site_anisotrop_U22 = aniso_loop['_atom_site_anisotrop.U[2][2]']
    atom_site_anisotrop_U33 = aniso_loop['_atom_site_anisotrop.U[3][3]']
    atom_site_anisotrop_U12 = aniso_loop['_atom_site_anisotrop.U[1][2]']
    atom_site_anisotrop_U13 = aniso_loop['_atom_site_anisotrop.U[1][3]']
    atom_site_anisotrop_U23 = aniso_loop['_atom_site_anisotrop.U[2][3]']

    model_ids = flex.std_string()
    unique_chain_ids = set()
    auth_asym_ids = flex.std_string()
    label_asym_ids = flex.std_string()
    label_seq_id = 0
    label_asym_id = ""
    for model in pdb_hierarchy.models():
      model_id = model.id
      if model_id == '': model_id = '1'
      for chain in model.chains():
        auth_asym_id = chain.id
        if auth_asym_id.strip() == '': auth_asym_id = '.'
        label_asym_id = increment_label_asym_id(label_asym_id)
        for residue_group in chain.residue_groups():
          seq_id = residue_group.resseq.strip()
          label_seq_id += 1
          icode = residue_group.icode
          if icode == ' ': icode = '?'
          for atom_group in residue_group.atom_groups():
            alt_id = atom_group.altloc
            if alt_id == '': alt_id = '.'
            comp_id = atom_group.resname.strip()
            entity_id = '?' # XXX how do we determine this?
            for atom in atom_group.atoms():
              group_pdb = "ATOM"
              if atom.hetero: group_pdb = "HETATM"
              x, y, z = [coord_fmt_str %i for i in atom.xyz]
              atom_charge = atom.charge_tidy()
              if atom_charge is None:
                atom_charge = "?"
              else:
                atom_charge = atom_charge.strip()
              if atom_charge == "": atom_charge = "?"
              fp, fdp = atom.fp, atom.fdp
              if fp == 0 and fdp == 0:
                fp = '.'
                fdp = '.'
              else:
                fp = "%.4f" %fp
                fdp = "%.4f" %fdp
              atom_site_group_PDB.append(group_pdb)
              atom_site_id.append(str(hy36decode(width=5, s=atom.serial)))
              atom_site_label_atom_id.append(atom.name.strip())
              atom_site_label_alt_id.append(alt_id)
              atom_site_label_comp_id.append(comp_id)
              atom_site_auth_asym_id.append(auth_asym_id)
              atom_site_auth_seq_id.append(seq_id)
              atom_site_pdbx_PDB_ins_code.append(icode)
              atom_site_Cartn_x.append(x)
              atom_site_Cartn_y.append(y)
              atom_site_Cartn_z.append(z)
              atom_site_occupancy.append(occ_fmt_str % atom.occ)
              atom_site_B_iso_or_equiv.append(b_iso_fmt_str % atom.b)
              atom_site_type_symbol.append(atom.element.strip())
              atom_site_pdbx_formal_charge.append(atom_charge)
              atom_site_phenix_scat_dispersion_real.append(fp)
              atom_site_phenix_scat_dispersion_imag.append(fdp)
              atom_site_label_asym_id.append(label_asym_id)
              atom_site_label_entity_id.append(entity_id)
              atom_site_label_seq_id.append(str(label_seq_id))
              #atom_site_loop['_atom_site.auth_comp_id'].append(comp_id)
              #atom_site_loop['_atom_site.auth_atom_id'].append(atom.name.strip())
              atom_site_pdbx_PDB_model_num.append(model_id.strip())

              if atom.uij_is_defined():
                u11, u22, u33, u12, u13, u23 = [
                  u_aniso_fmt_str %i for i in atom.uij]
                atom_site_anisotrop_id.append(
                  str(hy36decode(width=5, s=atom.serial)))
                atom_site_anisotrop_pdbx_auth_atom_id.append(atom.name.strip())
                atom_site_anisotrop_pdbx_label_alt_id.append(alt_id)
                atom_site_anisotrop_pdbx_auth_comp_id.append(comp_id)
                atom_site_anisotrop_pdbx_auth_asym_id.append(auth_asym_id)
                atom_site_anisotrop_pdbx_auth_seq_id.append(seq_id)
                atom_site_anisotrop_pdbx_PDB_ins_code.append(icode)
                atom_site_anisotrop_U11.append(u11)
                atom_site_anisotrop_U22.append(u22)
                atom_site_anisotrop_U33.append(u33)
                atom_site_anisotrop_U12.append(u12)
                atom_site_anisotrop_U13.append(u13)
                atom_site_anisotrop_U23.append(u23)

    for key in ('_atom_site.phenix_scat_dispersion_real',
                '_atom_site.phenix_scat_dispersion_imag'):
      if atom_site_loop[key].all_eq('.'):
        del atom_site_loop[key]
    self.cif_block.add_loop(atom_site_loop)
    if aniso_loop.size() > 0:
      self.cif_block.add_loop(aniso_loop)