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

Reply via email to