Exemple #1
0
def exercise_cif_show():
    cif_model = iotbx.cif.reader(input_string=input_1ab1).model()
    builder = pdb_hierarchy_builder(cif_model["1AB1"])
    hierarchy = builder.hierarchy
    h_cif = hierarchy.as_cif_block()
    builder = pdb_hierarchy_builder(h_cif)  # this runs OK, why?
    # output h_cif:
    s = StringIO()
    h_cif.show(out=s, align_columns=False)
    builder = pdb_hierarchy_builder(h_cif)  # Now it fails.
Exemple #2
0
def exercise_fp_fdp():
    input_anom = """\
data_anom
loop_
  _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.pdbx_PDB_model_num
  ATOM    47  CA   .  THR  C   22  ?   -7.12300  19.28700  -2.26800  1.000   8.32783  C   ?         .       .  B  ?  11  1
  ATOM    52  CA   .  ASN  C   25  ?  -11.06500  18.97000  -5.48100  1.000   8.20531  C   ?         .       .  C  ?  12  1
  ATOM    60  CA   .  VAL  C   26  ?  -12.16900  22.54800  -4.78000  1.000   8.45988  C   ?         .       .  C  ?  13  1
  HETATM  77  O    .  HOH  S  204  ?  -17.67100  15.07700  -3.15900  1.000  42.45569  O   ?         .       .  F  ?  25  1
  HETATM  78  CD   .  CD   X    2  ?  -14.09500  16.40900  -0.84100  1.000   5.03844  CD  2+  -0.1491  2.6871  G  ?  26  1
  HETATM  79  CL   .  CL   Y    3  ?  -16.37400  16.89900  -0.28500  1.000   9.96655  CL  1-   0.1114  0.3776  H  ?  27  1
"""
    pdb_in = iotbx.pdb.input(lines=(input_anom).splitlines(), source_info=None)
    pdb_hierarchy = pdb_in.construct_hierarchy()
    pdb_atoms = pdb_hierarchy.atoms()
    assert approx_equal(pdb_atoms.extract_fp(), [0, 0, 0, 0, -0.1491, 0.1114])
    assert approx_equal(pdb_atoms.extract_fdp(), [0, 0, 0, 0, 2.6871, 0.3776])
    pdb_atoms[-1].fp = 0
    pdb_atoms[-1].fdp = 0
    cif_block = pdb_hierarchy.as_cif_block(
        crystal_symmetry=pdb_in.crystal_symmetry())
    assert "_atom_site.phenix_scat_dispersion_real" in cif_block
    assert "_atom_site.phenix_scat_dispersion_imag" in cif_block
    assert list(cif_block["_atom_site.phenix_scat_dispersion_real"]) == \
           ['.', '.', '.', '.', '-0.1491', '.']
    assert list(cif_block["_atom_site.phenix_scat_dispersion_imag"]) == \
           ['.', '.', '.', '.', '2.6871', '.']
    builder = pdb_hierarchy_builder(cif_block)
    pdb_hierarchy_recycled = builder.hierarchy
    pdb_atoms_recycled = pdb_hierarchy_recycled.atoms()
    assert approx_equal(pdb_atoms_recycled.extract_fp(),
                        [0, 0, 0, 0, -0.1491, 0])
    assert approx_equal(pdb_atoms_recycled.extract_fdp(),
                        [0, 0, 0, 0, 2.6871, 0])
def exercise_fp_fdp():
  input_anom = """\
data_anom
loop_
  _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.pdbx_PDB_model_num
  ATOM    47  CA   .  THR  C   22  ?   -7.12300  19.28700  -2.26800  1.000   8.32783  C   ?         .       .  B  ?  11  1
  ATOM    52  CA   .  ASN  C   25  ?  -11.06500  18.97000  -5.48100  1.000   8.20531  C   ?         .       .  C  ?  12  1
  ATOM    60  CA   .  VAL  C   26  ?  -12.16900  22.54800  -4.78000  1.000   8.45988  C   ?         .       .  C  ?  13  1
  HETATM  77  O    .  HOH  S  204  ?  -17.67100  15.07700  -3.15900  1.000  42.45569  O   ?         .       .  F  ?  25  1
  HETATM  78  CD   .  CD   X    2  ?  -14.09500  16.40900  -0.84100  1.000   5.03844  CD  2+  -0.1491  2.6871  G  ?  26  1
  HETATM  79  CL   .  CL   Y    3  ?  -16.37400  16.89900  -0.28500  1.000   9.96655  CL  1-   0.1114  0.3776  H  ?  27  1
"""
  pdb_in = iotbx.pdb.input(lines=(input_anom).splitlines(), source_info=None)
  pdb_hierarchy = pdb_in.construct_hierarchy()
  pdb_atoms = pdb_hierarchy.atoms()
  assert approx_equal(pdb_atoms.extract_fp(), [0, 0, 0, 0, -0.1491, 0.1114])
  assert approx_equal(pdb_atoms.extract_fdp(), [0, 0, 0, 0, 2.6871, 0.3776])
  pdb_atoms[-1].fp = 0
  pdb_atoms[-1].fdp = 0
  cif_block = pdb_hierarchy.as_cif_block(
    crystal_symmetry=pdb_in.crystal_symmetry())
  assert "_atom_site.phenix_scat_dispersion_real" in cif_block
  assert "_atom_site.phenix_scat_dispersion_imag" in cif_block
  assert list(cif_block["_atom_site.phenix_scat_dispersion_real"]) == \
         ['.', '.', '.', '.', '-0.1491', '.']
  assert list(cif_block["_atom_site.phenix_scat_dispersion_imag"]) == \
         ['.', '.', '.', '.', '2.6871', '.']
  builder = pdb_hierarchy_builder(cif_block)
  pdb_hierarchy_recycled = builder.hierarchy
  pdb_atoms_recycled = pdb_hierarchy_recycled.atoms()
  assert approx_equal(
    pdb_atoms_recycled.extract_fp(), [0, 0, 0, 0, -0.1491, 0])
  assert approx_equal(
    pdb_atoms_recycled.extract_fdp(), [0, 0, 0, 0, 2.6871, 0])
Exemple #4
0
def exercise_pdb_hierachy_builder():
    cif_model = iotbx.cif.reader(input_string=input_1ab1).model()
    builder = pdb_hierarchy_builder(cif_model["1AB1"])
    #assert builder.crystal_symmetry is None
    hierarchy = builder.hierarchy
    atoms = hierarchy.atoms()
    assert atoms[0].segid == "    "  # some code relies on this
    s = StringIO()
    hierarchy.show(out=s)
    assert not show_diff(
        s.getvalue(), """\
model id="" #chains=1
  chain id="A" #residue_groups=2
    resid="   2 " #atom_groups=3
      altloc="" resname="THR" #atoms=4
        " C  "
        " O  "
        " H  "
        " HA "
      altloc="A" resname="THR" #atoms=8
        " CA "
        " CB "
        " OG1"
        " CG2"
        " HB "
        "HG21"
        "HG22"
        "HG23"
      altloc="B" resname="THR" #atoms=8
        " CA "
        " CB "
        " OG1"
        " CG2"
        " HB "
        "HG21"
        "HG22"
        "HG23"
    resid="  66 " #atom_groups=2
      altloc="A" resname="EOH" #atoms=3
        " C1 "
        " C2 "
        " O  "
      altloc="B" resname="EOH" #atoms=3
        " C1 "
        " C2 "
        " O  "
""")
    cif_block = hierarchy.as_cif_block()
    builder = pdb_hierarchy_builder(cif_block)
    hierarchy_recycled = builder.hierarchy
    s1 = StringIO()
    hierarchy_recycled.show(out=s1)
    assert not show_diff(s.getvalue(), s1.getvalue())
    #
    input_missing_mandatory_items = """\
data_1AB1
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.occupancy
_atom_site.B_iso_or_equiv
ATOM   17  C A THR A 1 2 0.70 2.98
ATOM   18  C B THR A 1 2 0.30 5.01
ATOM   19  C . THR A 1 2 1.00 2.92
ATOM   20  O . THR A 1 2 1.00 3.70
"""
    cif_model = iotbx.cif.reader(
        input_string=input_missing_mandatory_items).model()
    try:
        pdb_hierarchy_builder(cif_model["1AB1"])
    except AssertionError as e:
        pass
    else:
        # TODO: raise a better error here
        raise Exception_expected

    input_4edr = """\
data_4EDR
_cell.length_a           150.582
_cell.length_b           150.582
_cell.length_c           38.633
_cell.angle_alpha        90.000
_cell.angle_beta         90.000
_cell.angle_gamma        120.000
#
_symmetry.space_group_name_H-M             'P 61'
#
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.Cartn_x
_atom_site.Cartn_y
_atom_site.Cartn_z
_atom_site.occupancy
_atom_site.B_iso_or_equiv
_atom_site.auth_seq_id
_atom_site.auth_comp_id
_atom_site.auth_asym_id
_atom_site.auth_atom_id
_atom_site.pdbx_PDB_model_num
ATOM   1    N  N     . SER A 1 1 21.138  -69.073 17.360  1.00 23.68 108 SER A N     1
ATOM   2    C  CA    . SER A 1 1 22.164  -68.793 18.358  1.00 22.98 108 SER A CA    1
ATOM   3    C  C     . SER A 1 1 23.173  -67.799 17.805  1.00 21.13 108 SER A C     1
ATOM   4    O  O     . SER A 1 1 23.251  -67.594 16.595  1.00 19.34 108 SER A O     1
ATOM   5    C  CB    . SER A 1 1 22.882  -70.080 18.766  1.00 22.68 108 SER A CB    1
ATOM   6    O  OG    . SER A 1 1 23.683  -70.569 17.703  1.00 24.00 108 SER A OG    1
HETATM 2650 MN MN    . MN  F 4 . 9.296   -44.783 -6.320  1.00 44.18 505 MN  A MN    1
#
loop_
_atom_site_anisotrop.id
_atom_site_anisotrop.type_symbol
_atom_site_anisotrop.pdbx_label_atom_id
_atom_site_anisotrop.pdbx_label_alt_id
_atom_site_anisotrop.pdbx_label_comp_id
_atom_site_anisotrop.pdbx_label_asym_id
_atom_site_anisotrop.pdbx_label_seq_id
_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]
1    N N   . SER A 1   0.4097 0.2916 0.1984 0.1130  0.0328  0.0375
2    C CA  . SER A 1   0.4035 0.2848 0.1847 0.1242  0.0297  0.0347
3    C C   . SER A 1   0.3744 0.2637 0.1648 0.1278  0.0215  0.0258
4    O O   . SER A 1   0.3494 0.2393 0.1463 0.1236  0.0185  0.0236
5    C CB  . SER A 1   0.4085 0.2738 0.1795 0.1267  0.0311  0.0373
6    O OG  . SER A 1   0.4276 0.2843 0.1998 0.1252  0.0273  0.0344
"""

    cif_model = iotbx.cif.reader(input_string=input_4edr).model()
    cif_block = cif_model["4EDR"]
    builder = pdb_hierarchy_builder(cif_block)
    assert approx_equal(builder.crystal_symmetry.unit_cell().parameters(),
                        (150.582, 150.582, 38.633, 90, 90, 120))
    assert builder.crystal_symmetry.space_group_info().symbol_and_number() == \
           'P 61 (No. 169)'
    hierarchy = builder.hierarchy
    s = StringIO()
    hierarchy.show(out=s)
    assert not show_diff(
        s.getvalue(), """\
model id="" #chains=1
  chain id="A" #residue_groups=2
    resid=" 108 " #atom_groups=1
      altloc="" resname="SER" #atoms=6
        " N  "
        " CA "
        " C  "
        " O  "
        " CB "
        " OG "
    resid=" 505 " #atom_groups=1
      altloc="" resname="MN" #atoms=1
        "MN  "
""")
    cif_block = hierarchy.as_cif_block(
        crystal_symmetry=builder.crystal_symmetry)
    assert "_space_group_symop.operation_xyz" in cif_block
    assert "_cell.length_a" in cif_block
    builder = pdb_hierarchy_builder(cif_block)
    hierarchy_recycled = builder.hierarchy
    s1 = StringIO()
    hierarchy_recycled.show(out=s1)
    assert not show_diff(s.getvalue(), s1.getvalue())
    for hierarchy in (hierarchy, hierarchy_recycled):
        residue_group = next(hierarchy.residue_groups())
        assert residue_group.resseq == ' 108'
        assert residue_group.resseq_as_int() == 108
        atoms = hierarchy.atoms()
        assert atoms[0].serial == '    1'
        assert atoms[0].name == ' N  '
        assert atoms[0].b == 23.68
        assert atoms[0].uij_is_defined()
        assert approx_equal(atoms[0].uij,
                            (0.4097, 0.2916, 0.1984, 0.113, 0.0328, 0.0375))
        assert atoms[1].serial == '    2'
        assert atoms[1].name == ' CA '
        assert atoms[1].b == 22.98
        assert atoms[1].uij_is_defined()
        assert approx_equal(atoms[1].uij,
                            (0.4035, 0.2848, 0.1847, 0.1242, 0.0297, 0.0347))
        assert not atoms[6].uij_is_defined()
        assert atoms[6].serial == ' 2650'
        assert atoms[6].name == 'MN  '
        assert atoms[6].b == 44.18
        assert approx_equal(atoms[6].uij, (-1, -1, -1, -1, -1, -1))
    #
    input_1ezu = """\
data_1EZU
#
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_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.auth_seq_id
_atom_site.auth_comp_id
_atom_site.auth_asym_id
_atom_site.auth_atom_id
_atom_site.pdbx_PDB_model_num
ATOM   3422 N  N   . GLY C 2 164 ? -25.713 -9.765  41.937  1.00 38.56 584 GLY C N   1
ATOM   3423 C  CA  . GLY C 2 164 ? -27.027 -9.485  41.364  1.00 38.07 584 GLY C CA  1
ATOM   3424 C  C   . GLY C 2 164 ? -27.645 -10.541 40.476  1.00 35.83 584 GLY C C   1
ATOM   3425 O  O   . GLY C 2 164 ? -27.554 -11.745 40.752  1.00 35.99 584 GLY C O   1
ATOM   3426 N  N   . PHE C 2 165 A -28.265 -10.093 39.385  1.00 34.13 584 PHE C N   1
ATOM   3427 C  CA  . PHE C 2 165 A -28.937 -11.016 38.471  1.00 36.09 584 PHE C CA  1
ATOM   3428 C  C   . PHE C 2 165 A -28.697 -10.685 37.018  1.00 36.74 584 PHE C C   1
ATOM   3429 O  O   . PHE C 2 165 A -28.853 -9.536  36.627  1.00 39.19 584 PHE C O   1
ATOM   3430 C  CB  . PHE C 2 165 A -30.444 -10.982 38.748  1.00 35.84 584 PHE C CB  1
ATOM   3431 C  CG  . PHE C 2 165 A -30.802 -11.298 40.174  1.00 39.04 584 PHE C CG  1
ATOM   3432 C  CD1 . PHE C 2 165 A -30.914 -10.282 41.119  1.00 39.32 584 PHE C CD1 1
ATOM   3433 C  CD2 . PHE C 2 165 A -30.983 -12.614 40.579  1.00 36.86 584 PHE C CD2 1
ATOM   3434 C  CE1 . PHE C 2 165 A -31.203 -10.572 42.458  1.00 35.08 584 PHE C CE1 1
ATOM   3435 C  CE2 . PHE C 2 165 A -31.271 -12.924 41.904  1.00 32.57 584 PHE C CE2 1
ATOM   3436 C  CZ  . PHE C 2 165 A -31.379 -11.898 42.850  1.00 32.97 584 PHE C CZ  1
"""
    cif_model = iotbx.cif.reader(input_string=input_1ezu).model()
    cif_block = cif_model["1EZU"]
    builder = pdb_hierarchy_builder(cif_block)
    hierarchy = builder.hierarchy
    residue_groups = list(hierarchy.residue_groups())
    assert residue_groups[0].icode == " "
    assert residue_groups[1].icode == "A"
    s = StringIO()
    hierarchy.show(out=s)
    assert not show_diff(
        s.getvalue(), """\
model id="" #chains=1
  chain id="C" #residue_groups=2
    resid=" 584 " #atom_groups=1
      altloc="" resname="GLY" #atoms=4
        " N  "
        " CA "
        " C  "
        " O  "
    resid=" 584A" #atom_groups=1
      altloc="" resname="PHE" #atoms=11
        " N  "
        " CA "
        " C  "
        " O  "
        " CB "
        " CG "
        " CD1"
        " CD2"
        " CE1"
        " CE2"
        " CZ "
""")
    cif_block = hierarchy.as_cif_block()
    builder = pdb_hierarchy_builder(cif_block)
    hierarchy_recycled = builder.hierarchy
    s1 = StringIO()
    hierarchy_recycled.show(out=s1)
    assert not show_diff(s.getvalue(), s1.getvalue())

    input_charges = """\
data_charges
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_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.Cartn_x_esd
_atom_site.Cartn_y_esd
_atom_site.Cartn_z_esd
_atom_site.occupancy_esd
_atom_site.B_iso_or_equiv_esd
_atom_site.pdbx_formal_charge
_atom_site.auth_seq_id
_atom_site.auth_comp_id
_atom_site.auth_asym_id
_atom_site.auth_atom_id
_atom_site.pdbx_PDB_model_num
  HETATM 2932 CA CA  . CA  J 2 .   ? 221.154 27.397 60.094 1.00 49.40  ? ? ? ? ? 2 1123 CA  C CA  1
  HETATM 2996 O  O1S . MES D 4 .   ? 47.470 -6.157  23.319 1.00 13.84 ? ? ? ? ? -1 1653 MES F O1S 1
  HETATM 2997 O  O2S . MES D 4 .   ? 47.327 -5.296  20.939 1.00 15.26 ? ? ? ? ? 1-  1653 MES F O2S 1
"""
    hierarchy = iotbx.pdb.input(lines=input_charges.splitlines(),
                                source_info=None).construct_hierarchy()
    atoms = hierarchy.atoms()
    assert atoms[0].charge == "2+"
    assert atoms[1].charge == "1-"
    assert atoms[2].charge == "1-"
    s = StringIO()
    hierarchy.show(out=s)
    assert not show_diff(
        s.getvalue(), """\
model id="" #chains=2
  chain id="C" #residue_groups=1
    resid="1123 " #atom_groups=1
      altloc="" resname="CA" #atoms=1
        "CA  "
  chain id="F" #residue_groups=1
    resid="1653 " #atom_groups=1
      altloc="" resname="MES" #atoms=2
        " O1S"
        " O2S"
""")
    cif_block = hierarchy.as_cif_block()
    builder = pdb_hierarchy_builder(cif_block)
    hierarchy_recycled = builder.hierarchy
    s1 = StringIO()
    hierarchy_recycled.show(out=s1)
    assert not show_diff(s.getvalue(), s1.getvalue())
    atoms = hierarchy.atoms()
    assert atoms[0].charge == "2+"
    assert atoms[1].charge == "1-"
    assert atoms[2].charge == "1-"
Exemple #5
0
def exercise_pdb_hierachy_builder():
    input_1ab1 = """\
data_1AB1
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.Cartn_x
_atom_site.Cartn_y
_atom_site.Cartn_z
_atom_site.occupancy
_atom_site.B_iso_or_equiv
_atom_site.auth_seq_id
_atom_site.auth_comp_id
_atom_site.auth_asym_id
_atom_site.auth_atom_id
_atom_site.pdbx_PDB_model_num
ATOM   17  C CA   A THR A 1 2 13.800 11.354 5.944  0.70 2.98  2  THR A CA   1
ATOM   18  C CA   B THR A 1 2 13.872 10.918 5.772  0.30 5.01  2  THR A CA   1
ATOM   19  C C    . THR A 1 2 14.118 10.664 7.274  1.00 2.92  2  THR A C    1
ATOM   20  O O    . THR A 1 2 15.013 9.787  7.376  1.00 3.70  2  THR A O    1
ATOM   21  C CB   A THR A 1 2 12.784 10.610 5.099  0.70 4.35  2  THR A CB   1
ATOM   22  C CB   B THR A 1 2 12.938 9.905  5.108  0.30 1.07  2  THR A CB   1
ATOM   23  O OG1  A THR A 1 2 13.364 9.360  4.756  0.70 5.60  2  THR A OG1  1
ATOM   24  O OG1  B THR A 1 2 12.559 10.450 3.917  0.30 5.43  2  THR A OG1  1
ATOM   25  C CG2  A THR A 1 2 12.451 11.323 3.797  0.70 7.65  2  THR A CG2  1
ATOM   26  C CG2  B THR A 1 2 11.642 9.729  5.862  0.30 2.71  2  THR A CG2  1
ATOM   27  H H    . THR A 1 2 15.500 10.728 5.006  1.00 1.74  2  THR A H    1
ATOM   28  H HA   . THR A 1 2 13.437 12.241 6.128  1.00 4.09  2  THR A HA   1
ATOM   29  H HB   A THR A 1 2 11.947 10.457 5.635  0.70 1.11  2  THR A HB   1
ATOM   30  H HB   B THR A 1 2 13.426 9.030  5.019  0.30 4.20  2  THR A HB   1
ATOM   31  H HG21 A THR A 1 2 13.241 11.856 3.510  0.70 1.00  2  THR A HG21 1
ATOM   32  H HG21 B THR A 1 2 11.196 10.615 5.970  0.30 2.01  2  THR A HG21 1
ATOM   33  H HG22 A THR A 1 2 12.211 10.692 3.092  0.70 5.54  2  THR A HG22 1
ATOM   34  H HG22 B THR A 1 2 11.027 9.120  5.405  0.30 10.62 2  THR A HG22 1
ATOM   35  H HG23 A THR A 1 2 11.693 11.979 3.928  0.70 9.26  2  THR A HG23 1
ATOM   36  H HG23 B THR A 1 2 11.801 9.381  6.801  0.30 8.15  2  THR A HG23 1
# ...trunacted...
HETATM 679 C C1   A EOH B 2 . 16.083 0.909  12.713 0.60 15.95 66 EOH A C1   1
HETATM 680 C C1   B EOH B 2 . 15.565 1.042  13.226 0.40 14.21 66 EOH A C1   1
HETATM 681 C C2   A EOH B 2 . 15.130 -0.269 13.016 0.60 14.85 66 EOH A C2   1
HETATM 682 C C2   B EOH B 2 . 14.830 -0.303 13.058 0.40 15.17 66 EOH A C2   1
HETATM 683 O O    A EOH B 2 . 15.378 1.984  12.104 0.60 12.07 66 EOH A O    1
HETATM 684 O O    B EOH B 2 . 14.811 2.078  12.602 0.40 5.53  66 EOH A O    1
"""
    cif_model = iotbx.cif.reader(input_string=input_1ab1).model()
    builder = pdb_hierarchy_builder(cif_model["1AB1"])
    #assert builder.crystal_symmetry is None
    hierarchy = builder.hierarchy
    atoms = hierarchy.atoms()
    assert atoms[0].segid == "    "  # some code relies on this
    s = StringIO()
    hierarchy.show(out=s)
    assert not show_diff(
        s.getvalue(), """\
model id="" #chains=2
  chain id="A" #residue_groups=1  ### WARNING: duplicate chain id ###
    resid="   2 " #atom_groups=3
      altloc="" resname="THR" #atoms=4
        " C  "
        " O  "
        " H  "
        " HA "
      altloc="A" resname="THR" #atoms=8
        " CA "
        " CB "
        " OG1"
        " CG2"
        " HB "
        "HG21"
        "HG22"
        "HG23"
      altloc="B" resname="THR" #atoms=8
        " CA "
        " CB "
        " OG1"
        " CG2"
        " HB "
        "HG21"
        "HG22"
        "HG23"
  chain id="A" #residue_groups=1  ### WARNING: duplicate chain id ###
    resid="  66 " #atom_groups=2
      altloc="A" resname="EOH" #atoms=3
        " C1 "
        " C2 "
        " O  "
      altloc="B" resname="EOH" #atoms=3
        " C1 "
        " C2 "
        " O  "
""")
    cif_block = hierarchy.as_cif_block()
    builder = pdb_hierarchy_builder(cif_block)
    hierarchy_recycled = builder.hierarchy
    s1 = StringIO()
    hierarchy_recycled.show(out=s1)
    assert not show_diff(s.getvalue(), s1.getvalue())
    #
    input_missing_mandatory_items = """\
data_1AB1
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.occupancy
_atom_site.B_iso_or_equiv
ATOM   17  C A THR A 1 2 0.70 2.98
ATOM   18  C B THR A 1 2 0.30 5.01
ATOM   19  C . THR A 1 2 1.00 2.92
ATOM   20  O . THR A 1 2 1.00 3.70
"""
    cif_model = iotbx.cif.reader(
        input_string=input_missing_mandatory_items).model()
    try:
        pdb_hierarchy_builder(cif_model["1AB1"])
    except AssertionError, e:
        pass
Exemple #6
0
_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]
1    N N   . SER A 1   0.4097 0.2916 0.1984 0.1130  0.0328  0.0375
2    C CA  . SER A 1   0.4035 0.2848 0.1847 0.1242  0.0297  0.0347
3    C C   . SER A 1   0.3744 0.2637 0.1648 0.1278  0.0215  0.0258
4    O O   . SER A 1   0.3494 0.2393 0.1463 0.1236  0.0185  0.0236
5    C CB  . SER A 1   0.4085 0.2738 0.1795 0.1267  0.0311  0.0373
6    O OG  . SER A 1   0.4276 0.2843 0.1998 0.1252  0.0273  0.0344
"""

    cif_model = iotbx.cif.reader(input_string=input_4edr).model()
    cif_block = cif_model["4EDR"]
    builder = pdb_hierarchy_builder(cif_block)
    assert approx_equal(builder.crystal_symmetry.unit_cell().parameters(),
                        (150.582, 150.582, 38.633, 90, 90, 120))
    assert builder.crystal_symmetry.space_group_info().symbol_and_number() == \
           'P 61 (No. 169)'
    hierarchy = builder.hierarchy
    s = StringIO()
    hierarchy.show(out=s)
    assert not show_diff(
        s.getvalue(), """\
model id="" #chains=2
  chain id="A" #residue_groups=1  ### WARNING: duplicate chain id ###
    resid=" 108 " #atom_groups=1
      altloc="" resname="SER" #atoms=6
        " N  "
        " CA "
def exercise_pdb_hierachy_builder():
  input_1ab1 = """\
data_1AB1
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.Cartn_x
_atom_site.Cartn_y
_atom_site.Cartn_z
_atom_site.occupancy
_atom_site.B_iso_or_equiv
_atom_site.auth_seq_id
_atom_site.auth_comp_id
_atom_site.auth_asym_id
_atom_site.auth_atom_id
_atom_site.pdbx_PDB_model_num
ATOM   17  C CA   A THR A 1 2 13.800 11.354 5.944  0.70 2.98  2  THR A CA   1
ATOM   18  C CA   B THR A 1 2 13.872 10.918 5.772  0.30 5.01  2  THR A CA   1
ATOM   19  C C    . THR A 1 2 14.118 10.664 7.274  1.00 2.92  2  THR A C    1
ATOM   20  O O    . THR A 1 2 15.013 9.787  7.376  1.00 3.70  2  THR A O    1
ATOM   21  C CB   A THR A 1 2 12.784 10.610 5.099  0.70 4.35  2  THR A CB   1
ATOM   22  C CB   B THR A 1 2 12.938 9.905  5.108  0.30 1.07  2  THR A CB   1
ATOM   23  O OG1  A THR A 1 2 13.364 9.360  4.756  0.70 5.60  2  THR A OG1  1
ATOM   24  O OG1  B THR A 1 2 12.559 10.450 3.917  0.30 5.43  2  THR A OG1  1
ATOM   25  C CG2  A THR A 1 2 12.451 11.323 3.797  0.70 7.65  2  THR A CG2  1
ATOM   26  C CG2  B THR A 1 2 11.642 9.729  5.862  0.30 2.71  2  THR A CG2  1
ATOM   27  H H    . THR A 1 2 15.500 10.728 5.006  1.00 1.74  2  THR A H    1
ATOM   28  H HA   . THR A 1 2 13.437 12.241 6.128  1.00 4.09  2  THR A HA   1
ATOM   29  H HB   A THR A 1 2 11.947 10.457 5.635  0.70 1.11  2  THR A HB   1
ATOM   30  H HB   B THR A 1 2 13.426 9.030  5.019  0.30 4.20  2  THR A HB   1
ATOM   31  H HG21 A THR A 1 2 13.241 11.856 3.510  0.70 1.00  2  THR A HG21 1
ATOM   32  H HG21 B THR A 1 2 11.196 10.615 5.970  0.30 2.01  2  THR A HG21 1
ATOM   33  H HG22 A THR A 1 2 12.211 10.692 3.092  0.70 5.54  2  THR A HG22 1
ATOM   34  H HG22 B THR A 1 2 11.027 9.120  5.405  0.30 10.62 2  THR A HG22 1
ATOM   35  H HG23 A THR A 1 2 11.693 11.979 3.928  0.70 9.26  2  THR A HG23 1
ATOM   36  H HG23 B THR A 1 2 11.801 9.381  6.801  0.30 8.15  2  THR A HG23 1
# ...trunacted...
HETATM 679 C C1   A EOH B 2 . 16.083 0.909  12.713 0.60 15.95 66 EOH A C1   1
HETATM 680 C C1   B EOH B 2 . 15.565 1.042  13.226 0.40 14.21 66 EOH A C1   1
HETATM 681 C C2   A EOH B 2 . 15.130 -0.269 13.016 0.60 14.85 66 EOH A C2   1
HETATM 682 C C2   B EOH B 2 . 14.830 -0.303 13.058 0.40 15.17 66 EOH A C2   1
HETATM 683 O O    A EOH B 2 . 15.378 1.984  12.104 0.60 12.07 66 EOH A O    1
HETATM 684 O O    B EOH B 2 . 14.811 2.078  12.602 0.40 5.53  66 EOH A O    1
"""
  cif_model = iotbx.cif.reader(input_string=input_1ab1).model()
  builder = pdb_hierarchy_builder(cif_model["1AB1"])
  #assert builder.crystal_symmetry is None
  hierarchy = builder.hierarchy
  atoms = hierarchy.atoms()
  assert atoms[0].segid == "    " # some code relies on this
  s = StringIO()
  hierarchy.show(out=s)
  assert not show_diff(s.getvalue(), """\
model id="" #chains=2
  chain id="A" #residue_groups=1  ### WARNING: duplicate chain id ###
    resid="   2 " #atom_groups=3
      altloc="" resname="THR" #atoms=4
        " C  "
        " O  "
        " H  "
        " HA "
      altloc="A" resname="THR" #atoms=8
        " CA "
        " CB "
        " OG1"
        " CG2"
        " HB "
        "HG21"
        "HG22"
        "HG23"
      altloc="B" resname="THR" #atoms=8
        " CA "
        " CB "
        " OG1"
        " CG2"
        " HB "
        "HG21"
        "HG22"
        "HG23"
  chain id="A" #residue_groups=1  ### WARNING: duplicate chain id ###
    resid="  66 " #atom_groups=2
      altloc="A" resname="EOH" #atoms=3
        " C1 "
        " C2 "
        " O  "
      altloc="B" resname="EOH" #atoms=3
        " C1 "
        " C2 "
        " O  "
""")
  cif_block = hierarchy.as_cif_block()
  builder = pdb_hierarchy_builder(cif_block)
  hierarchy_recycled = builder.hierarchy
  s1 = StringIO()
  hierarchy_recycled.show(out=s1)
  assert not show_diff(s.getvalue(), s1.getvalue())
  #
  input_missing_mandatory_items = """\
data_1AB1
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.occupancy
_atom_site.B_iso_or_equiv
ATOM   17  C A THR A 1 2 0.70 2.98
ATOM   18  C B THR A 1 2 0.30 5.01
ATOM   19  C . THR A 1 2 1.00 2.92
ATOM   20  O . THR A 1 2 1.00 3.70
"""
  cif_model = iotbx.cif.reader(input_string=input_missing_mandatory_items).model()
  try: pdb_hierarchy_builder(cif_model["1AB1"])
  except AssertionError, e: pass
  else:
_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]
1    N N   . SER A 1   0.4097 0.2916 0.1984 0.1130  0.0328  0.0375
2    C CA  . SER A 1   0.4035 0.2848 0.1847 0.1242  0.0297  0.0347
3    C C   . SER A 1   0.3744 0.2637 0.1648 0.1278  0.0215  0.0258
4    O O   . SER A 1   0.3494 0.2393 0.1463 0.1236  0.0185  0.0236
5    C CB  . SER A 1   0.4085 0.2738 0.1795 0.1267  0.0311  0.0373
6    O OG  . SER A 1   0.4276 0.2843 0.1998 0.1252  0.0273  0.0344
"""

  cif_model = iotbx.cif.reader(input_string=input_4edr).model()
  cif_block = cif_model["4EDR"]
  builder = pdb_hierarchy_builder(cif_block)
  assert approx_equal(builder.crystal_symmetry.unit_cell().parameters(),
                      (150.582, 150.582, 38.633, 90, 90, 120))
  assert builder.crystal_symmetry.space_group_info().symbol_and_number() == \
         'P 61 (No. 169)'
  hierarchy = builder.hierarchy
  s = StringIO()
  hierarchy.show(out=s)
  assert not show_diff(s.getvalue(), """\
model id="" #chains=2
  chain id="A" #residue_groups=1  ### WARNING: duplicate chain id ###
    resid=" 108 " #atom_groups=1
      altloc="" resname="SER" #atoms=6
        " N  "
        " CA "
        " C  "