def unify_residue_names_and_order(r1, r2): r1n = get_one_letter_rna_dna_name(r1.resname) r2n = get_one_letter_rna_dna_name(r2.resname) message_template = "Residue with name '%s' cannot be processed " message_template += "automatically \nfor nucleic acid basepair restraints " message_template += "because of non-standard residue name." if r1n is None: raise Sorry(message_template % r1.resname) if r2n is None: raise Sorry(message_template % r2.resname) # Translate DNA resname to RNA for unification # RNA if r1n > r2n: t = r1 r1 = r2 r2 = t t = r1n r1n = r2n r2n = t r1n = 'U' if r1n == "T" else r1n r2n = 'U' if r2n == "T" else r2n return r1, r2, r1n, r2n
def get_angle_proxies_for_bond(atoms): angle_values = {'O6 N4': [(122.8, 3.00), (117.3, 2.86)], 'N4 O6': [(117.3, 2.86), (122.8, 3.00)], 'N2 O2': [(122.2, 2.88), (120.7, 2.20)], 'O2 N2': [(120.7, 2.20), (122.2, 2.88)], 'N6 O4': [(115.6, 8.34), (121.2, 4.22)], 'O4 N6': [(121.2, 4.22), (115.6, 8.34)]} proxies = [] anames = [atoms[0].name.strip(), atoms[1].name.strip()] rnames = [atoms[0].id_str().split()[1], atoms[1].id_str().split()[1]] if sorted(anames) == ['N1', 'N3']: if get_one_letter_rna_dna_name(rnames[0]) in ['G', 'C']: if anames[0] == 'N1': vals = [(119.1, 2.59), (116.3, 2.66)] else: vals = [(116.3, 2.66), (119.1, 2.59)] else: if anames[0] == 'N1': vals = [(116.2, 3.46), (115.8, 2.88)] else: vals = [(115.8, 2.88), (116.2, 3.46)] else: key = "%s %s" % (anames[0], anames[1]) vals = angle_values.get(key, None) if vals is not None: for i in range(2): atoms_for_angle = [None, None, None] aname = anames[i] if (aname == 'N1' or aname == 'N2' or aname == 'N3' or aname == 'O2'): atoms_for_angle[0] = atoms[i].parent().get_atom('C2') elif (aname == 'N4' or aname == 'O4'): atoms_for_angle[0] = atoms[i].parent().get_atom('C4') elif (aname == 'N6' or aname == 'O6'): atoms_for_angle[0] = atoms[i].parent().get_atom('C6') if atoms_for_angle[0] is not None: atoms_for_angle[1] = atoms[i] atoms_for_angle[2] = atoms[1-i] if atoms_for_angle.count(None) == 0: i_seqs_for_angle = [x.i_seq for x in atoms_for_angle] p = geometry_restraints.angle_proxy( i_seqs=i_seqs_for_angle, angle_ideal=vals[i][0], weight=1./vals[i][1]**2, origin_id=1) proxies.append(p) return proxies
def get_hb_lenght_targets(atoms): restraint_values = { 'N6 O4': (3.00, 0.11), 'O6 N4': (2.93, 0.10), 'N2 O2': (2.78, 0.10) } anames = [atoms[0].name.strip(), atoms[1].name.strip()] rnames = [atoms[0].parent().resname, atoms[1].parent().resname] if sorted(anames) == ['N1', 'N3']: if get_one_letter_rna_dna_name(rnames[0]) in ['G', 'C']: return (2.88, 0.07) # G-C else: return (2.82, 0.08) # A-T else: key1 = "%s %s" % (anames[0], anames[1]) key2 = "%s %s" % (anames[1], anames[0]) vals = restraint_values.get(key1, None) if vals is not None: return vals vals = restraint_values.get(key2, None) if vals is not None: return vals return (2.91, 0.15) # values for all other bonds
def get_hb_lenght_targets(atoms): restraint_values = { 'N6 O4' : (3.00, 0.11), 'O6 N4' : (2.93, 0.10), 'N2 O2' : (2.78, 0.10) } anames = [atoms[0].name.strip(), atoms[1].name.strip()] rnames = [atoms[0].parent().resname, atoms[1].parent().resname] if sorted(anames) == ['N1', 'N3']: if get_one_letter_rna_dna_name(rnames[0]) in ['G', 'C']: return (2.88, 0.07) # G-C else: return (2.82, 0.08) # A-T else: key1 = "%s %s" % (anames[0], anames[1]) key2 = "%s %s" % (anames[1], anames[0]) vals = restraint_values.get(key1, None) if vals is not None: return vals vals = restraint_values.get(key2, None) if vals is not None: return vals return (2.91, 0.15) # values for all other bonds