Ncs rotamer differences.py

From CCP4 wiki
Revision as of 16:14, 23 June 2012 by Bernhardcl (talk | contribs) (Created page with "def compare_ncs_rotamer(imol, chain_A, chain_B): n_residues = chain_n_residues(chain_A, imol) mismatched_rotamers = [] for serial_number in range(n_residues): ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

def compare_ncs_rotamer(imol, chain_A, chain_B):

   n_residues = chain_n_residues(chain_A, imol)
   mismatched_rotamers = []
   for serial_number in range(n_residues):
       res_name_A = resname_from_serial_number(imol, chain_A, serial_number)
       res_no_A   = seqnum_from_serial_number(imol, chain_A, serial_number)
       ins_code_A = insertion_code_from_serial_number(imol, chain_A, serial_number)
       res_name_B = resname_from_serial_number(imol, chain_B, serial_number)
       res_no_B   = seqnum_from_serial_number(imol, chain_B, serial_number)
       ins_code_B = insertion_code_from_serial_number(imol, chain_B, serial_number)
       if not (res_no_A == res_no_B):
           print "sequence number for %i does not match" %res_no_A
       else:
           if not (res_name_A == res_name_B):
               print "residue names for %s do not match" %res_name_A
           else:
               rot_name_A = get_rotamer_name(imol, chain_A, res_no_A, ins_code_A)
               rot_name_B = get_rotamer_name(imol, chain_B, res_no_B, ins_code_B)
               if not (rot_name_A == rot_name_B):
                   mismatched_rotamers.append([imol, chain_A, res_no_A,
                                               ins_code_A, rot_name_A,
                                               "-" if rot_name_A == "" else rot_name_A,
                                               "-" if rot_name_B == "" else rot_name_B])
   dialog_box_of_buttons("Mismatched Rotamers",
                         [300, 300],
                         map(lambda rotamer:
                             [" " + rotamer[1] + " " +             # label
                              str(rotamer[2]) + rotamer[3] + " " +
                              rotamer[4] +                         # res_name
                              ":  " + rotamer[5] +
                              " vs. " + rotamer[6],
                              lambda func:
                              (set_go_to_atom_molecule(imol),
                               set_go_to_atom_chain_residue_atom_name(rotamer[1], rotamer[2], " CA "))
                              ],
                             mismatched_rotamers),
                         "  Close  ")