Hi Ahmad - Please see below for some suggestions on getting your script to do
what I understand you would like to do.
Cheers,
Jared
> On May 1, 2017, at 4:54 PM, Ahmad Abdelzaher <underoath...@gmail.com> wrote:
>
> OK I finally tried some of Jared suggestions, I'm not sure why
> util.cnc doesn't work I get "NameError: name 'util' is not defined",
You will need to import the `util` namespace. Try changing the pymol submodule
import line to:
from pymol import cmd, stored, util
> Again, I want to color by element, second option from the gui. Also
> the script outputs black screenshots, nothing is there, so there is a
> bug somewhere! I attached the script and pdb below. I would appreciate
> your help.
>
> import __main__
> __main__.pymol_argv = ['pymol','-qc']
> import pymol
> from pymol import cmd, stored
>
> pymol.finish_launching()
>
> residues = {'3s4m.pdb': {'102': 'THR',
> '143': 'TYR',
> '158': 'SER',
> '166': 'TYR',
> '173': 'TRP',
> '181': 'SER',
> '183': 'HIS',
> '206': 'SER',
> '95': 'TYR'}}
>
> for name, data in residues.items():
> for resnumber, resname in data.items():
> cmd.delete('all')
> cmd.load(name, name)
The load command here gives you an object called "3s4m.pdb" but you later try
to use a selection called only "3s4m" (`bare_name`). If you leave the second
argument off from cmd.load(), the .pdb extension will be stripped
automatically. Alternatively, you could assign `bare_name` first and give that
as the 2nd argument:
bare_name = name.split('.')[0]
cmd.load(name, bare_name)
> bare_name = name.split('.')[0]
> cmd.select('%s_%s%s' % (bare_name, resname, resnumber), 'byres
> resn %s around 3' % resnumber)
> #selee = cmd.get_pdbstr('%s' % name.split('.')[0])
Since you've already assigned a variable for this, you can (and should!) use
`bare_name` instead of `name.split('.')[0]` wherever it occurs. Also, you
don't need to do "%"-style string formatting if your variable is a string and
comprises the entire argument string. Simply `cmd.get_pdbstr(bare_name)`, for
example, will work just fine.
> #print(selee)
> cmd.dist('mysele_polar_conts','%s_%s%s' % (bare_name, resname,
> resnumber),'all within 5 of %s_%s%s' % (name.split('.')[0], resname,
> resnumber), quiet=1,mode=2,label=0,reset=1)
> cmd.show_as('sticks', '%s_%s%s' % (bare_name, resname, resnumber))
> #util.cnc('%s' % name.split('.')[0])
> cmd.hide('everything', 'all and not %s_%s%s' % (bare_name,
> resname, resnumber))
> cmd.zoom('%s_%s%s' % (bare_name, resname, resnumber), 5)
> cmd.png('%s_%s%s.png' % (bare_name, resname, resnumber), ray=1)
Also, to get information about residues in your selection as you asked in your
later message, have a look at cmd.iterate().
https://pymolwiki.org/index.php/Iterate
<https://pymolwiki.org/index.php/Iterate>
Hope that helps.
Cheers,
Jared
>
> On Sat, Apr 29, 2017 at 3:34 PM, Ahmad Abdelzaher
> <underoath...@gmail.com> wrote:
>> Thanks Jared. A lot of fantastic tips there. Much appreciated.
>>
>> Regards.
>>
>> On Sat, Apr 29, 2017 at 6:03 AM, Jared Sampson
>> <jared.samp...@columbia.edu> wrote:
>>> Hi Ahmad -
>>>
>>> Here are a few suggestions:
>>>
>>> I'm still a bit new to the API so I'm not sure which commands to use.
>>> At least I know I will start with cmd.select(string name, string
>>> selection).
>>>
>>> How can I tell Pymol to:
>>>
>>> 1) look within a certain radius distance, and return resi's within
>>> that distacne.
>>>
>>>
>>> cmd.select('mysele', 'byres all within 5 of sele')
>>>
>>> See https://pymolwiki.org/index.php/Selection_Algebra for more handy
>>> operators (`beyond`, `around`, `expand`, etc.)
>>>
>>>
>>> 2) find all polar interactions within a distance,
>>>
>>>
>>> You can use cmd.distance (https://pymolwiki.org/index.php/Distance), e.g.
>>> (as done in the GUI by [A] > find > polar contacts...)
>>>
>>> cmd.dist("mysele_polar_conts","mysele","all within 5 of
>>> mysele",quiet=1,mode=2,label=0,reset=1)
>>>
>>> or for a list of atoms, check out https://pymolwiki.org/index.php/Polarpairs
>>>
>>>
>>> use sticks,
>>>
>>>
>>> cmd.show('sticks', 'mysele')
>>>
>>> or to hide all other representations,
>>>
>>> cmd.show_as('sticks', 'mysele')
>>>
>>>
>>> color by atom
>>>
>>>
>>> util.cnc('mysele')
>>>
>>> I use this one all the time ("cnc" == color non-carbon). There is also
>>> `util.cbc` == color by chain.
>>>
>>>
>>> hide everything else
>>>
>>>
>>> cmd.hide('everything', 'all and not mysele')
>>>
>>>
>>> and output an image of the selections and interactions around it.
>>>
>>>
>>> cmd.zoom('mysele', 5)
>>> cmd.png('mysele.png', ray=1)
>>>
>>>
>>> Please feel free to throw in any useful commands that can you might think is
>>> helpful.
>>>
>>>
>>> One useful trick to learn new commands is to open a log file (via `log_open
>>> log.pml` or the File menu) and then perform the desired action in the GUI.
>>> The log file will show the API commands that are called from the GUI. It
>>> doesn't work for everything (e.g. wizards), but for most basic actions, it
>>> should be helpful. At least it will give you the right command to look up
>>> on the PyMOL wiki!
>>>
>>> Hope that helps.
>>>
>>> Cheers,
>>> Jared
>>>
>>>
>>> Your help is greatly appreciated.
>>>
>>> Regards.
>>>
>>> ------------------------------------------------------------------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>> _______________________________________________
>>> 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
>>>
>>>
> <3s4m.pdb><pymol_png_test.py>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
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