Wonderful. I'm close to completing what I need, thanks a lot. I have one other question here. Say I have a peptide: N-Ala-Ala-Glu-COO (I'm just pointing out the terminal amide and carbonyl groups). Then I protonate it with h_add H2N-Ala-Ala-Glu-(C=O)H. Now I carry out a mutation on the last position with the mutagenesis wizard to His. After this, the H's on the C=O is missing: H2N-Ala-Ala-His-(C=O).
This is a bit unfortunate, because it would screw up the protonation of the whole system if I reissue h_add on the whole system after a mutation. Is it possible to fix atoms on only a selection, e.g. the site picked to mutate? Thanks for any advise on this. Martin Am 20.09.10 16:59, schrieb Jason Vertrees: > 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 >>>>>>>>>>>> >>> >> > > ------------------------------------------------------------------------------ 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