Hi Martin, > atoms within less than VdW distance. Is there an easy, very low-level, PyMOL > way of fixing this? Can the sculpting wizard be used for this?
Yes, after you place the sidechain and have the new structure (via the "apply" function) you can then apply sculpting. It would look something like this: # pause the UI cmd.set("suspend_updates",1) # reset the sphere scale cmd.set("sphere_scale","1.0") # go back to frame 1 (if you changed it) cmd.frame(1) # enable sculpting cmd.set("sculpting",1) # sculpt for 100 cycles cmd.sculpt_activate("myProtein") cmd.set("sculpting_cycles",100) # resume the UI cmd.set("suspend_updates",0) # write coords cmd.sculpt_iterate("myProtein") #quit sculpting cmd.unset("sculpting") Load a small protein and call it "myProtein". Then, copy/paste the above code into PyMOL to see what happens. Cheers, -- Jason On Mon, Sep 20, 2010 at 5:35 AM, Martin Hediger <ma....@bluewin.ch> wrote: > Dear All > Just one little thing, say I obtain a couple of rotamers by mutating a > sidechain. It happens that some of them are sterically not favourable, i.e. > atoms within less than VdW distance. Is there an easy, very low-level, PyMOL > way of fixing this? Can the sculpting wizard be used for this? > > Thanks a lot for any suggestions. > > Martin > > > > > > > > Am 19.09.10 19:00, schrieb Jason Vertrees: >> >> Martin, >> >>> I am wondering, are there any scripts/ plugins for PyMOL out there that >>> facilitate the generation of a large amount of rotamers for different >>> mutants? I might take the effort and start building this into a plugin. >> >> I'm not aware of any. Some of our other seasoned PyMOLers might, >> though. If you need help w/the plugin there's a simple tutorial on >> the PyMOLWiki (http://www.pymolwiki.org/index.php/Plugins_Tutorial) >> and TKinter/PMW are very easy to develop with. Good luck! >> >> Cheers, >> >> -- Jason >> >> On Sat, Sep 18, 2010 at 6:48 PM, Martin Hediger<ma....@bluewin.ch> wrote: >>> >>> This is great. Thanks a lot. >>> I am wondering, are there any scripts/ plugins for PyMOL out there that >>> facilitate the generation of a large amount of rotamers for different >>> mutants? I might take the effort and start building this into a plugin. >>> >>> Martin >>> >>> >>> >>> >>> >>> >>> Am 16.09.10 19:51, schrieb Jason Vertrees: >>>> >>>> Hi Martin, >>>> >>>> This took a bit of work to figure out, but the following code solves >>>> your problem (above). It will download a PDB (I coded "1RSY") and >>>> select a residue (I coded 236). I will then mutate that residue to >>>> all possible residues given what the rotamer library knows about, and >>>> write that out to N-files called "stateXYZ.pdb", where XYZ is the >>>> mutation number. Instead of rewriting the code, it turns out you can >>>> hack the wizard through the API to do what you want: >>>> >>>> # begin a python block of code; >>>> python >>>> org = "1rsy" >>>> cpy = "1rsy_cpy" >>>> >>>> # fetch a PDB >>>> cmd.fetch(org, async=0) >>>> >>>> # make a copy on which to operate >>>> cmd.create(cpy,org) >>>> res = cpy + " and i. 236" >>>> >>>> # focus no the residue, if you want >>>> cmd.zoom(res, 3) >>>> >>>> # start the wizard to count the number of rotamers for this residue >>>> cmd.wizard("mutagenesis") >>>> >>>> # this was the painful part: if you just write "res" instead of "(res)" >>>> # pymol will delete your residue. "(res)" make it an anonymous >>>> selection >>>> cmd.get_wizard().do_select("("+res+")") >>>> nStates = cmd.count_states("mutation") >>>> >>>> # foreach state, make the change and write to disk >>>> for i in range(1,nStates+1): >>>> print "State ", i, "/", nStates >>>> cmd.get_wizard().do_select("("+res+")") >>>> cmd.frame(i) >>>> cmd.get_wizard().apply() >>>> cmd.save("state" + str(i) + ".pdb", cpy) >>>> cmd.delete(cpy) >>>> cmd.create(cpy,org) >>>> >>>> # end the python block >>>> python end >>>> >>>> # quit the wizard >>>> cmd.set_wizard() >>>> >>>> Cheers, >>>> >>>> -- Jason >>>> >>>> On Tue, Sep 14, 2010 at 6:33 PM, Martin Hediger<ma....@bluewin.ch> >>>> wrote: >>>>> >>>>> I'm beginning to see things. >>>>> When I issue: >>>>> >>>>> for value in rot_lib[('ASP', 40, -100)]: >>>>> rl.write(str(value) + '\n') >>>>> >>>>> rot_lib is being initiated by >>>>> >>>>> rot_lib = >>>>> >>>>> >>>>> pickle.load(open("/Applications/PyMOLX11Hybrid.app/pymol/data/chempy/sidechains/sc_bb_dep.pkl",'r')) >>>>> >>>>> >>>>> I get the following output: >>>>> {('N', 'CA', 'CB', 'CG'): -169.69999999999999, 'FREQ': >>>>> 0.47735699999999998, >>>>> ('CA', 'CB', 'CG', 'OD1'): 3.6000000000000001} >>>>> {('N', 'CA', 'CB', 'CG'): -173.5, 'FREQ': 0.19134399999999999, ('CA', >>>>> 'CB', >>>>> 'CG', 'OD1'): 56.799999999999997} >>>>> {('N', 'CA', 'CB', 'CG'): -72.099999999999994, 'FREQ': >>>>> 0.11949799999999999, >>>>> ('CA', 'CB', 'CG', 'OD1'): -12.9} >>>>> {('N', 'CA', 'CB', 'CG'): -167.80000000000001, 'FREQ': 0.108205, ('CA', >>>>> 'CB', 'CG', 'OD1'): -55.5} >>>>> {('N', 'CA', 'CB', 'CG'): -64.599999999999994, 'FREQ': >>>>> 0.075302999999999995, >>>>> ('CA', 'CB', 'CG', 'OD1'): -50.0} >>>>> {('N', 'CA', 'CB', 'CG'): 62.399999999999999, 'FREQ': 0.013899, ('CA', >>>>> 'CB', >>>>> 'CG', 'OD1'): 1.3} >>>>> >>>>> I understand these are dictionaries containing the phi, psi values for >>>>> a >>>>> rotamer. Now this would mean in this case there are six rotamers for >>>>> this >>>>> situation. Starting to get closer to what i want. >>>>> Still, if there is a easy way to get PDB files of every rotamer, that >>>>> would >>>>> solve my problem. >>>>> So the thing left to figure out is how to find the right key for the >>>>> rot_lib >>>>> to give me the rotamers of the residue i am actually interested in. >>>>> >>>>> Thanks again for the support. >>>>> >>>>> Martin >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Am 14.09.10 01:01, schrieb Jason Vertrees: >>>>>> >>>>>> Hi Martin, >>>>>> >>>>>> Try replacing >>>>>> >>>>>>> (phi, psi) = cmd.phi_psi("br. first my_res") >>>>>> >>>>>> with >>>>>> >>>>>> (phi, psi) = cmd.phi_psi("br. first my_res").values()[0] >>>>>> >>>>>> >>>>>> Here's what I have now, for the script (I fixed one more bug): >>>>>> import pickle >>>>>> rot_lib = >>>>>> >>>>>> >>>>>> pickle.load(open("/Applications/PyMOLX11Hybrid.app/pymol/data/chempy/sidechains/sc_bb_dep.pkl",'r')) >>>>>> from pymol import stored >>>>>> from pymol import cmd >>>>>> stored.r = '' >>>>>> >>>>>> # What are we doing here? What is 'first'? >>>>>> >>>>>> cmd.iterate("first my_res", "stored.r = resn") >>>>>> >>>>>> (phi, psi) = cmd.phi_psi("br. first my_res").values()[0] >>>>>> key = (stored.r, int(10*round(phi/10)), int(10*round(psi/10))) >>>>>> >>>>>> if key in rot_lib.keys(): >>>>>> print "This rot has %s possible positions" % len(rot_lib[key]) >>>>>> >>>>>> >>>>>> >>>>>> Cheers, >>>>>> >>>>>> -- Jason >>>>>> >>>>>> On Mon, Sep 13, 2010 at 5:04 PM, Martin Hediger<ma....@bluewin.ch> >>>>>> wrote: >>>>>>> >>>>>>> Hi Jason and PyMOL users >>>>>>> I tried to run the script to get the number of rotamers, but I seem >>>>>>> to >>>>>>> have >>>>>>> something missing. >>>>>>> The script looks as follows: >>>>>>> >>>>>>> import pickle >>>>>>> rot_lib = >>>>>>> >>>>>>> >>>>>>> >>>>>>> pickle.load(open("/Applications/PyMOLX11Hybrid.app/pymol/data/chempy/sidechains/sc_bb_dep.pkl",'r')) >>>>>>> from pymol import stored >>>>>>> from pymol import cmd >>>>>>> stored.r = '' >>>>>>> >>>>>>> # What are we doing here? What is 'first'? >>>>>>> cmd.iterate("first my_res", "stored.r = resn") >>>>>>> >>>>>>> (phi, psi) = cmd.phi_psi("br. first my_res") >>>>>>> key = (stored.r, int(10*round(ph/10)), int(10*round(psi/10))) >>>>>>> if key in rot_lib.keys(): >>>>>>> print "This rot has %s possible positions" % len(rot_lib[key]) >>>>>>> >>>>>>> Now, I save this into rotlib.py, 'cd' PyMOL into the directory where >>>>>>> this >>>>>>> script lies, select a residue from the GUI, rename the selection to >>>>>>> 'my_res' >>>>>>> and then 'run rotlib.py' the script. This returns the following ERROR >>>>>>> message in PyMOL: >>>>>>> >>>>>>> Traceback ... >>>>>>> (phi, psi) = cmd.phi_psi("br. first my_res") >>>>>>> ValueError: need more than 0 values to unpack >>>>>>> >>>>>>> Unfortunately, I dont understand what this is trying to tell me right >>>>>>> now, >>>>>>> ok, some Argument seems to be missing, but I cant tell what exactly. >>>>>>> Also, >>>>>>> could you possibly extend your explanation on what the 'iterate' >>>>>>> method >>>>>>> is >>>>>>> used for. I think this would help me a lot. >>>>>>> >>>>>>> As I said, all I want is a PDB file for every rotamer itself. If >>>>>>> there >>>>>>> is >>>>>>> a >>>>>>> simpler way to achieve this, that is fine with me. The number of >>>>>>> rotamers >>>>>>> is >>>>>>> only important to me, since I need to know how many times i should >>>>>>> issue >>>>>>> 'cmd.forward()' and save. >>>>>>> >>>>>>> Thanks for the help. >>>>>>> Martin >>>>>>> >>>>>>> >>>>>>> >>>>>>> Am 13.09.10 00:30, schrieb Jason Vertrees: >>>>>>>> >>>>>>>> Hi Martin, >>>>>>>> >>>>>>>>> iterate first my_res, stored.r = resn >>>>>>>> >>>>>>>> is syntactically correct, but could also be written, >>>>>>>> >>>>>>>> cmd.iterate("first my_res", "stored.r = resn"); >>>>>>>> >>>>>>>> The command could be read as, "iterate over just first atom from the >>>>>>>> selection called 'my_res' and place the residue name in which that >>>>>>>> atom resides into 'stored.r'." So, "first" is a new-ish selection >>>>>>>> modifier that takes just the first atom from a selection. It's >>>>>>>> _very_ >>>>>>>> handy: why iterate through all atoms in a residue to get a residue >>>>>>>> name, when just the first will do? "resn" indeed returns the >>>>>>>> 3-letter >>>>>>>> residue code. >>>>>>>> >>>>>>>> A more efficient way might be: >>>>>>>> >>>>>>>> # select a residue, here #50 (or use the mouse) >>>>>>>> select mySelection, i. 50 >>>>>>>> >>>>>>>> # get it's one-letter residue id >>>>>>>> print string.split(cmd.get_fastastr("mySelection"),'\n')[1] >>>>>>>> # get it's three-letter residue id >>>>>>>> print >>>>>>>> three_letter[string.split(cmd.get_fastastr("mySelection"),'\n')[1]] >>>>>>>> >>>>>>>> I just posted this on http://www.pymolwiki.org/index.php/Aa_codes. >>>>>>>> (You will need the two dictionaries found there.) >>>>>>>> >>>>>>>> There really should be a much easier way to do that... Maybe someone >>>>>>>> has a far easier command? >>>>>>>> >>>>>>>> Cheers, >>>>>>>> >>>>>>>> -- Jason >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Sun, Sep 12, 2010 at 4:25 PM, Martin Hediger<ma....@bluewin.ch> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> Hi Jason, thanks for the comprehensive answer. >>>>>>>>> One question though, is the line >>>>>>>>> >>>>>>>>> iterate first my_res, stored.r = resn >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> correct this way? Are there no braces or quotation marks needed? >>>>>>>>> Its >>>>>>>>> not >>>>>>>>> perfectly clear to me if 'first' and 'my_res' are selections >>>>>>>>> (indicated >>>>>>>>> by >>>>>>>>> braces) or objects (name without braces in the main window). >>>>>>>>> I understand 'resn' is something like 'GLU', if I want to know how >>>>>>>>> many >>>>>>>>> GLU >>>>>>>>> rotamers are in the library. >>>>>>>>> >>>>>>>>> Thanks again >>>>>>>>> Martin >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> Am 12.09.10 22:00, schrieb Jason Vertrees: >>>>>>>>>> >>>>>>>>>> Hi Martin, >>>>>>>>>> >>>>>>>>>> PyMOL first searches the Dunbrack rotamer library for hits based >>>>>>>>>> upon >>>>>>>>>> the amino acid type and it's original phi/psi angles. If it >>>>>>>>>> cannot >>>>>>>>>> find a hit, it will then look for backbone independent positions. >>>>>>>>>> To >>>>>>>>>> get the number of available rotamers given a residue, you need to >>>>>>>>>> unpickle the library, create the lookup key into the library and >>>>>>>>>> then >>>>>>>>>> count the results. It might look something like this: >>>>>>>>>> >>>>>>>>>> # unpickle the library >>>>>>>>>> import pickle >>>>>>>>>> rot_lib = >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> pickle.load(open("$PYMOL_HOME/data/chempy/sidechains/sc_bb_dep.pkl",'r')) >>>>>>>>>> >>>>>>>>>> # get residue name, you need to select the residue >>>>>>>>>> # into "my_res" >>>>>>>>>> from pymol import stored >>>>>>>>>> stored.r = '' >>>>>>>>>> iterate first my_res, stored.r = resn >>>>>>>>>> >>>>>>>>>> # get residue info; prepare dictionary key >>>>>>>>>> (phi,psi) = cmd.phi_psi("br. first my_res") >>>>>>>>>> >>>>>>>>>> # warren also does 20 and 60 in place of 10--three possible >>>>>>>>>> lookups >>>>>>>>>> key = ( stored.r, int(10*round(phi/10)), int(10*round(psi/10))) >>>>>>>>>> >>>>>>>>>> if key in rot_lib.keys(): >>>>>>>>>> print "This rotamer has %s possible positions" % >>>>>>>>>> len(rot_lib[key]) >>>>>>>>>> >>>>>>>>>> Lookups in the independent library are easier--just provide a >>>>>>>>>> residue >>>>>>>>>> name. >>>>>>>>>> >>>>>>>>>> Cheers, >>>>>>>>>> >>>>>>>>>> -- Jason >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Sun, Sep 12, 2010 at 11:04 AM, Martin >>>>>>>>>> Hediger<ma....@bluewin.ch> >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> Dear all, let me rephrase my question in a less confusing way. >>>>>>>>>>> For a given mutant, I need a PDB file for every available >>>>>>>>>>> rotamer. >>>>>>>>>>> I >>>>>>>>>>> guess thats the simplest way of putting it. How can I achieve >>>>>>>>>>> that? >>>>>>>>>>> >>>>>>>>>>> Thanks for hints. >>>>>>>>>>> Martin >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Am 12.09.10 00:08, schrieb Martin Hediger: >>>>>>>>>>>> >>>>>>>>>>>> Hi all >>>>>>>>>>>> I want to do some scripted mutations on a range of residues. Say >>>>>>>>>>>> I >>>>>>>>>>>> want >>>>>>>>>>>> to mutate residue 189 to every rotamer of [Asp, His, Glu, Thr, >>>>>>>>>>>> Lys] >>>>>>>>>>>> available in the PyMOL internal rotamer library. I'm seeing that >>>>>>>>>>>> PyMOL >>>>>>>>>>>> issues cmd.get_wizard().do_state(i) to select rotamer 'i' for a >>>>>>>>>>>> mutation. Now, if I want to iterate over all available rotamers, >>>>>>>>>>>> I >>>>>>>>>>>> need >>>>>>>>>>>> the limit rotamer number. How can I obtain the maximum number of >>>>>>>>>>>> rotamers available for every amino acid? >>>>>>>>>>>> >>>>>>>>>>>> Thanks for hints on this >>>>>>>>>>>> >>>>>>>>>>>> Martin >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>>> Start uncovering the many advantages of virtual appliances >>>>>>>>>>>> and start using them to simplify application deployment and >>>>>>>>>>>> accelerate your shift to cloud computing >>>>>>>>>>>> http://p.sf.net/sfu/novell-sfdev2dev >>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>> PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net) >>>>>>>>>>>> Info Page: >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/pymol-users >>>>>>>>>>>> Archives: >>>>>>>>>>>> http://www.mail-archive.com/pymol-users@lists.sourceforge.net >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> ------------------------------------------------------------------------------ >>>>>>>>>>> Start uncovering the many advantages of virtual appliances >>>>>>>>>>> and start using them to simplify application deployment and >>>>>>>>>>> accelerate your shift to cloud computing >>>>>>>>>>> http://p.sf.net/sfu/novell-sfdev2dev >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net) >>>>>>>>>>> Info Page: >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/pymol-users >>>>>>>>>>> Archives: >>>>>>>>>>> http://www.mail-archive.com/pymol-users@lists.sourceforge.net >>>>>>>>>>> >>>> >>> >> >> > > -- Jason Vertrees, PhD PyMOL Product Manager Schrodinger, LLC (e) jason.vertr...@schrodinger.com (o) +1 (603) 374-7120 ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net) Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net