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
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."
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."
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
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
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)