def apply(self): cmd = self.cmd pymol = cmd._pymol if self.status == 1: # find the name of the object which contains the selection new_name = None obj_list = cmd.get_names("objects") for a in obj_list: if cmd.get_type(a) == "object:molecule": if cmd.count_atoms("(%s and %s)" % (a, src_sele)): new_name = a break src_frame = cmd.get_state() if new_name == None: print " Mutagenesis: object not found." else: auto_zoom = cmd.get_setting_text("auto_zoom") cmd.set("auto_zoom", "0", quiet=1) if self.lib_mode != "current": # create copy w/o residue cmd.create(tmp_obj1, "(%s and not %s)" % (new_name, src_sele)) # remove existing c-cap in copy (if any) cmd.remove("byres (name N and (%s in (neighbor %s)) and resn nme,nhh)" % (tmp_obj1, src_sele)) # remove existing n-cap in copy (if any) cmd.remove("byres (name C and (%s in (neighbor %s)) and resn ace)" % (tmp_obj1, src_sele)) # save copy for bonded atom reference cmd.create(tmp_obj3, new_name) # transfer the selection to copy cmd.select(src_sele, "(%s in %s)" % (tmp_obj3, src_sele)) # create copy with mutant in correct frame cmd.create(tmp_obj2, obj_name, src_frame, 1) cmd.set_title(tmp_obj2, 1, "") cmd.delete(new_name) # create the merged molecule cmd.create(new_name, "(%s or %s)" % (tmp_obj1, tmp_obj2), 1) # only one state in merged object... # now connect them cmd.select(mut_sele, "(byres (%s like %s))" % (new_name, src_sele)) # bond N+0 to C-1 if (cmd.select(tmp_sele1, "(name C and (%s in (neighbor %s)))" % (new_name, src_sele)) == 1) and ( cmd.select(tmp_sele2, "((%s in %s) and n;N)" % (mut_sele, tmp_obj2)) == 1 ): cmd.bond(tmp_sele1, tmp_sele2) cmd.set_geometry(tmp_sele1, 3, 3) # make amide planer cmd.set_geometry(tmp_sele2, 3, 3) # make amide planer # bond C+0 to N+1 if (cmd.select(tmp_sele1, "(name N and (%s in (neighbor %s)))" % (new_name, src_sele)) == 1) and ( cmd.select(tmp_sele2, "((%s in %s) and n;C)" % (mut_sele, tmp_obj2)) == 1 ): cmd.bond(tmp_sele1, tmp_sele2) cmd.set_geometry(tmp_sele1, 3, 3) # make amide planer cmd.set_geometry(tmp_sele2, 3, 3) # make amide planer cmd.delete(tmp_sele1) cmd.delete(tmp_sele2) # fix N-H hydrogen position (if any exists) cmd.h_fix("(name N and bound_to (%s in %s and n;H))" % (new_name, tmp_obj2)) # now transfer selection back to the modified object cmd.delete(tmp_obj1) cmd.delete(tmp_obj2) cmd.delete(tmp_obj3) self.clear() # and return to frame 1 cmd.frame(1) cmd.refresh_wizard() else: # create copy with conformation in correct state cmd.create(tmp_obj2, obj_name, src_frame, 1) # remove existing c-cap in copy (if any) cmd.remove("byres (name N and (%s in (neighbor %s)) and resn nme,nhh)" % (new_name, src_sele)) cmd.remove("(%s) and name OXT" % src_sele) # remove existing n-cap in copy (if any) cmd.remove("byres (name C and (%s in (neighbor %s)) and resn ace)" % (new_name, src_sele)) # save existing conformation on undo stack # cmd.edit("((%s in %s) and name ca)"%(new_name,src_sele)) cmd.push_undo("(" + src_sele + ")") # modify the conformation cmd.update(new_name, tmp_obj2) # cmd.unpick() cmd.delete(tmp_obj2) self.clear() # and return to frame 1 cmd.frame(1) cmd.refresh_wizard() cmd.set("auto_zoom", auto_zoom, quiet=1)
def attach_amino_acid(selection,amino_acid,phi,psi): if not selection in cmd.get_names("selections"): if amino_acid in cmd.get_names("objects"): print " Error: an object with than name already exists" raise QuietException cmd.fragment(amino_acid) if cmd.get_setting_legacy("auto_remove_hydrogens"): cmd.remove("(hydro and %s)"%amino_acid) if cmd.count_atoms("((%s) and name c)"%amino_acid,quiet=1): cmd.edit("((%s) and name c)"%amino_acid) else: cmd.fragment(amino_acid,tmp_editor) if cmd.count_atoms("((%s) and elem n)"%selection,quiet=1): cmd.select(tmp_ed_save,"(%s)"%selection) cmd.iterate("(%s)"%selection,"stored.resv=resv") stored.resi = str(stored.resv-1) cmd.alter(tmp_editor,"resi=stored.resi") cmd.fuse("(%s and name C)"%(tmp_editor),"(pk1)",2) if cmd.get_setting_legacy("auto_remove_hydrogens"): cmd.remove("(pkmol and hydro)") cmd.set_dihedral("(name ca and neighbor pk2)", "(pk2)","(pk1)","(name ca,ch3 and neighbor pk1)",180.0) cmd.set_geometry("pk2",3,3) # make nitrogen planer cmd.select(tpk1,"pk2") cmd.select(tpk2,"pk1") if amino_acid[0:3]!='pro': cmd.set_dihedral( # PHI "(name c and neighbor (name ca and neighbor "+tpk1+"))", # C "(name ca and neighbor "+tpk1+")", # CA tpk1, # N tpk2, # C phi) cmd.set_dihedral( # PSI (n-1) tpk1, # N tpk2, # C "(name ca and neighbor "+tpk2+")", # CA "(name n and neighbor (name ca and neighbor "+tpk2+"))", # C psi) cmd.delete(tpk1) cmd.delete(tpk2) sele = ("(name N and (byres neighbor %s) and not (byres %s))"% (tmp_ed_save,tmp_ed_save)) if cmd.count_atoms(sele,quiet=1): cmd.edit(sele) cmd.delete(tmp_ed_save) elif cmd.count_atoms("((%s) and elem c)"%selection,quiet=1): cmd.select(tmp_ed_save,"(%s)"%selection) cmd.iterate("(%s)"%selection,"stored.resv=resv") stored.resi = str(stored.resv+1) cmd.alter(tmp_editor,"resi=stored.resi") cmd.fuse("(%s and name N)"%(tmp_editor),"(pk1)",2) if cmd.get_setting_legacy("auto_remove_hydrogens"): cmd.remove("(pkmol and hydro)") cmd.set_dihedral("(name ca and neighbor pk2)", "(pk2)","(pk1)","(name ca,ch3 and neighbor pk1)",180.0) cmd.set_geometry("pk1",3,3) # make nitrogen planar cmd.select(tpk1,"pk1") cmd.select(tpk2,"pk2") if amino_acid[0:3]!='pro': cmd.set_dihedral( # PHI tpk2, # C tpk1, # N "(name ca and neighbor "+tpk1+")", # CA "(name c and neighbor (name ca and neighbor "+tpk1+"))", # C phi) cmd.set_dihedral( # PSI (n-1) "(name n and neighbor (name ca and neighbor "+tpk2+"))", # C "(name ca and neighbor "+tpk2+")", # CA tpk2, # C tpk1, # N psi) cmd.delete(tpk1) cmd.delete(tpk2) sele = ("(name C and (byres neighbor %s) and not (byres %s))"% (tmp_ed_save,tmp_ed_save)) if cmd.count_atoms(sele,quiet=1): cmd.edit(sele) cmd.delete(tmp_ed_save) elif cmd.count_atoms("((%s) and elem h)"%selection,quiet=1): print " Error: please pick a nitrogen or carbonyl carbon to grow from." cmd.delete(tmp_editor) raise QuietException cmd.delete(tmp_editor)
def apply(self): cmd=self.cmd if self.status==1: # find the name of the object which contains the selection src_frame = cmd.get_state() try: new_name = cmd.get_object_list(src_sele)[0] except IndexError: print(" Mutagenesis: object not found.") return if True: auto_zoom = cmd.get_setting_text('auto_zoom') cmd.set('auto_zoom',"0",quiet=1) if self.lib_mode!="current": # create copy with mutant in correct frame state = cmd.get_object_state(new_name) cmd.create(tmp_obj2, obj_name, src_frame, state) cmd.set_title(tmp_obj2, state, '') cmd.color(self.stored.identifiers[4], "?%s & elem C" % tmp_obj2) cmd.alter(tmp_obj2, 'ID = -1') # select backbone connection atoms cmd.select(tmp_sele1, 'neighbor ?%s' % (src_sele), 0) # remove residue and neighboring c-cap/n-cap (if any) cmd.remove("?%s | byres (?%s & " "(name N & resn NME+NHH | name C & resn ACE))" % (src_sele, tmp_sele1)) # create the merged molecule cmd.create(new_name, "?%s | ?%s" % (new_name, tmp_obj2), state, state) # now connect them cmd.select(tmp_sele2, '/%s/%s/%s/%s' % ((new_name,) + self.stored.identifiers[:3])) cmd.bond('?%s & name C' % (tmp_sele1), '?%s & name N' % (tmp_sele2), quiet=1) cmd.bond('?%s & name N' % (tmp_sele1), '?%s & name C' % (tmp_sele2), quiet=1) cmd.set_geometry('(?%s | ?%s) & name C+N' % (tmp_sele1, tmp_sele2), 3, 3) # make amide planer # fix N-H hydrogen position (if any exists) cmd.h_fix('?%s & name N' % (tmp_sele2)) # delete temporary objects/selections cmd.delete(tmp_sele1) cmd.delete(tmp_sele2) cmd.delete(tmp_obj2) self.clear() # and return to frame 1 cmd.frame(1) cmd.refresh_wizard() else: # create copy with conformation in correct state cmd.create(tmp_obj2,obj_name,src_frame,1) # remove existing c-cap in copy (if any) cmd.remove("byres (name N and (%s in (neighbor %s)) and resn NME+NHH)"% (new_name,src_sele)) cmd.remove("(%s) and name OXT"%src_sele) # remove existing n-cap in copy (if any) cmd.remove("byres (name C and (%s in (neighbor %s)) and resn ACE)"% (new_name,src_sele)) # save existing conformation on undo stack # cmd.edit("((%s in %s) and name ca)"%(new_name,src_sele)) cmd.push_undo("("+src_sele+")") # modify the conformation cmd.update(new_name,tmp_obj2) # cmd.unpick() cmd.delete(tmp_obj2) self.clear() # and return to frame 1 cmd.frame(1) cmd.refresh_wizard() cmd.set('auto_zoom',auto_zoom,quiet=1)
def apply(self): cmd=self.cmd pymol=cmd._pymol if self.status==1: # find the name of the object which contains the selection new_name = None obj_list = cmd.get_names('objects') for a in obj_list: if cmd.get_type(a)=="object:molecule": if cmd.count_atoms("(%s and %s)"%(a,src_sele)): new_name = a break src_frame = cmd.get_state() if new_name==None: print " Mutagenesis: object not found." else: auto_zoom = cmd.get_setting_text('auto_zoom') cmd.set('auto_zoom',"0",quiet=1) if self.lib_mode!="current": # create copy w/o residue cmd.create(tmp_obj1,"(%s and not %s)"%(new_name,src_sele)) # remove existing c-cap in copy (if any) cmd.remove("byres (name N and (%s in (neighbor %s)) and resn nme,nhh)"% (tmp_obj1,src_sele)) # remove existing n-cap in copy (if any) cmd.remove("byres (name C and (%s in (neighbor %s)) and resn ace)"% (tmp_obj1,src_sele)) # save copy for bonded atom reference cmd.create(tmp_obj3,new_name) # transfer the selection to copy cmd.select(src_sele,"(%s in %s)"%(tmp_obj3,src_sele)) # create copy with mutant in correct frame cmd.create(tmp_obj2,obj_name,src_frame,1) cmd.set_title(tmp_obj2,1,'') cmd.delete(new_name) # create the merged molecule cmd.create(new_name,"(%s or %s)"%(tmp_obj1,tmp_obj2),1) # only one state in merged object... # now connect them cmd.select(mut_sele,"(byres (%s like %s))"%(new_name,src_sele)) # bond N+0 to C-1 if ((cmd.select(tmp_sele1, "(name C and (%s in (neighbor %s)))"% (new_name,src_sele)) == 1) and (cmd.select(tmp_sele2, "((%s in %s) and n;N)"% (mut_sele,tmp_obj2)) == 1)): cmd.bond(tmp_sele1,tmp_sele2) cmd.set_geometry(tmp_sele1,3,3) # make amide planer cmd.set_geometry(tmp_sele2,3,3) # make amide planer # bond C+0 to N+1 if ((cmd.select(tmp_sele1, "(name N and (%s in (neighbor %s)))"% (new_name,src_sele)) == 1) and (cmd.select(tmp_sele2,"((%s in %s) and n;C)"% (mut_sele,tmp_obj2)) == 1)): cmd.bond(tmp_sele1,tmp_sele2) cmd.set_geometry(tmp_sele1,3,3) # make amide planer cmd.set_geometry(tmp_sele2,3,3) # make amide planer cmd.delete(tmp_sele1) cmd.delete(tmp_sele2) # fix N-H hydrogen position (if any exists) cmd.h_fix("(name N and bound_to (%s in %s and n;H))"%(new_name,tmp_obj2)) # now transfer selection back to the modified object cmd.delete(tmp_obj1) cmd.delete(tmp_obj2) cmd.delete(tmp_obj3) self.clear() # and return to frame 1 cmd.frame(1) cmd.refresh_wizard() else: # create copy with conformation in correct state cmd.create(tmp_obj2,obj_name,src_frame,1) # remove existing c-cap in copy (if any) cmd.remove("byres (name N and (%s in (neighbor %s)) and resn nme,nhh)"% (new_name,src_sele)) cmd.remove("(%s) and name OXT"%src_sele) # remove existing n-cap in copy (if any) cmd.remove("byres (name C and (%s in (neighbor %s)) and resn ace)"% (new_name,src_sele)) # save existing conformation on undo stack # cmd.edit("((%s in %s) and name ca)"%(new_name,src_sele)) cmd.push_undo("("+src_sele+")") # modify the conformation cmd.update(new_name,tmp_obj2) # cmd.unpick() cmd.delete(tmp_obj2) self.clear() # and return to frame 1 cmd.frame(1) cmd.refresh_wizard() cmd.set('auto_zoom',auto_zoom,quiet=1)
def attach_amino_acid(selection,amino_acid,phi,psi): if not selection in cmd.get_names("selections"): if amino_acid in cmd.get_names("objects"): print " Error: an object with than name already exists" raise QuietException cmd.fragment(amino_acid) if cmd.get_setting_legacy("auto_remove_hydrogens"): cmd.remove("(hydro and %s)"%amino_acid) if cmd.count_atoms("((%s) and name c)"%amino_acid,quiet=1): cmd.edit("((%s) and name c)"%amino_acid) else: cmd.fragment(amino_acid,tmp_editor) if cmd.count_atoms("((%s) and elem n)"%selection,quiet=1): cmd.select(tmp_ed_save,"(%s)"%selection) cmd.iterate("(%s)"%selection,"stored.resv=resv") stored.resi = str(stored.resv-1) cmd.alter(tmp_editor,"resi=stored.resi") cmd.fuse("(%s and name C)"%(tmp_editor),"(pk1)",2) if cmd.get_setting_legacy("auto_remove_hydrogens"): cmd.remove("(pkmol and hydro)") cmd.set_dihedral("(name ca and neighbor pk2)", "(pk2)","(pk1)","(name ca,ch3 and neighbor pk1)",180.0) cmd.set_geometry("pk2",3,3) # make nitrogen planer # if ss: cmd.select(tpk1,"pk2") cmd.select(tpk2,"pk1") if amino_acid[0:3]!='pro': cmd.set_dihedral( # PHI "(name c and neighbor (name ca and neighbor "+tpk1+"))", # C "(name ca and neighbor "+tpk1+")", # CA tpk1, # N tpk2, # C phi) cmd.set_dihedral( # PSI (n-1) tpk1, # N tpk2, # C "(name ca and neighbor "+tpk2+")", # CA "(name n and neighbor (name ca and neighbor "+tpk2+"))", # C psi) cmd.delete(tpk1) cmd.delete(tpk2) sele = ("(name N and (byres neighbor %s) and not (byres %s))"% (tmp_ed_save,tmp_ed_save)) if cmd.count_atoms(sele,quiet=1): cmd.edit(sele) cmd.delete(tmp_ed_save) elif cmd.count_atoms("((%s) and elem c)"%selection,quiet=1): cmd.select(tmp_ed_save,"(%s)"%selection) cmd.iterate("(%s)"%selection,"stored.resv=resv") stored.resi = str(stored.resv+1) cmd.alter(tmp_editor,"resi=stored.resi") cmd.fuse("(%s and name N)"%(tmp_editor),"(pk1)",2) if cmd.get_setting_legacy("auto_remove_hydrogens"): cmd.remove("(pkmol and hydro)") cmd.set_dihedral("(name ca and neighbor pk2)", "(pk2)","(pk1)","(name ca,ch3 and neighbor pk1)",180.0) cmd.set_geometry("pk1",3,3) # make nitrogen planer # if ss: cmd.select(tpk1,"pk1") cmd.select(tpk2,"pk2") if amino_acid[0:3]!='pro': cmd.set_dihedral( # PHI tpk2, # C tpk1, # N "(name ca and neighbor "+tpk1+")", # CA "(name c and neighbor (name ca and neighbor "+tpk1+"))", # C phi) cmd.set_dihedral( # PSI (n-1) "(name n and neighbor (name ca and neighbor "+tpk2+"))", # C "(name ca and neighbor "+tpk2+")", # CA tpk2, # C tpk1, # N psi) cmd.delete(tpk1) cmd.delete(tpk2) sele = ("(name C and (byres neighbor %s) and not (byres %s))"% (tmp_ed_save,tmp_ed_save)) if cmd.count_atoms(sele,quiet=1): cmd.edit(sele) cmd.delete(tmp_ed_save) elif cmd.count_atoms("((%s) and elem h)"%selection,quiet=1): print " Error: please pick a nitrogen or carbonyl carbon to grow from." cmd.delete(tmp_editor) raise QuietException cmd.delete(tmp_editor)