Martin, You can run h_add on only a specific selection.
h_add (selectAtoms) like # protonate the solvent/waters h_add solvent # protonate residue 10 h_add resi 10 Cheers, -- Jason On Tue, Sep 21, 2010 at 9:17 AM, Martin Hediger <ma....@bluewin.ch> wrote: > I'm sorry, this is a bit confusing: Say the peptide looks like this: > N-Ala-Ala-Ala-C=O. The problem arises with the hydrogen that finishes of the > carbonyl group (of the potential peptide bond) of the last Ala, so the > hydrogen on C=O. > > > > > > > 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 >>>>>>>>>>>>> >>>> >>> >> >> > > -- 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