Ncs rotamer differences.py

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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  ")

And you would use it something like this:

imol = read_pdb("test.pdb")
compare_ncs_rotamer(imol, "A", "B")