Ncs rotamer differences.py
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")