224 lines
5.6 KiB
Python
224 lines
5.6 KiB
Python
#A* -------------------------------------------------------------------
|
|
#B* This file contains source code for the PyMOL computer program
|
|
#C* Copyright (c) Schrodinger, LLC.
|
|
#D* -------------------------------------------------------------------
|
|
#E* It is unlawful to modify or remove this copyright notice.
|
|
#F* -------------------------------------------------------------------
|
|
#G* Please see the accompanying LICENSE file for further information.
|
|
#H* -------------------------------------------------------------------
|
|
#I* Additional authors of this source file include:
|
|
#-*
|
|
#-*
|
|
#-*
|
|
#Z* -------------------------------------------------------------------
|
|
|
|
if True:
|
|
|
|
from . import selector
|
|
|
|
cmd = __import__("sys").modules["pymol.cmd"]
|
|
|
|
from .cmd import _cmd,Shortcut, \
|
|
DEFAULT_ERROR, DEFAULT_SUCCESS, _raising, is_ok, is_error
|
|
|
|
import pymol
|
|
|
|
def deselect(_self=cmd):
|
|
'''
|
|
DESCRIPTION
|
|
|
|
"deselect" disables any and all visible selections
|
|
|
|
USAGE
|
|
|
|
deselect
|
|
|
|
PYMOL API
|
|
|
|
cmd.deselect()
|
|
'''
|
|
r = DEFAULT_SUCCESS
|
|
arg = _self.get_names("selections",enabled_only=1)
|
|
for a in arg:
|
|
_self.disable(a)
|
|
if _self._raising(r,_self): raise pymol.CmdException
|
|
return r
|
|
|
|
|
|
def select(name, selection="", enable=-1, quiet=1, merge=0, state=0, domain='',_self=cmd):
|
|
'''
|
|
DESCRIPTION
|
|
|
|
"select" creates a named atom selection from a
|
|
selection-expression.
|
|
|
|
USAGE
|
|
|
|
select name, selection [, enable [, quiet [, merge [, state [, domain ]]]]]
|
|
|
|
ARGUMENTS
|
|
|
|
name = a unique name for the selection
|
|
|
|
selection = a selection-expression
|
|
|
|
NOTES
|
|
|
|
If a selection-expression with explicit surrounding parethenses is
|
|
provided as the first argument, then the default selection name
|
|
is used as the name argument.
|
|
|
|
EXAMPLES
|
|
|
|
select chA, chain A
|
|
select ( resn HIS )
|
|
select near142, resi 142 around 5
|
|
|
|
PYMOL API
|
|
|
|
cmd.select(string name, string selection)
|
|
|
|
SEE ALSO
|
|
|
|
delete
|
|
'''
|
|
with _self.lockcm:
|
|
return _cmd.select(
|
|
_self._COb, #
|
|
"" if name is None else str(name),
|
|
str(selector.process(selection)),
|
|
int(quiet),
|
|
int(state) - 1,
|
|
str(domain),
|
|
int(enable),
|
|
int(merge))
|
|
|
|
|
|
def pop(name, source, enable=-1, quiet=1, _self=cmd):
|
|
'''
|
|
DESCRIPTION
|
|
|
|
"pop" provides a mechanism of iterating through an atom selection
|
|
atom by atom, where each atom is sequentially assigned to the
|
|
named selection.
|
|
|
|
USAGE
|
|
|
|
pop name, source
|
|
|
|
EXAMPLE
|
|
|
|
select src, name CA
|
|
|
|
python
|
|
while cmd.pop("tmp","src"):
|
|
cmd.zoom("tmp",2, animate=1)
|
|
for a in range(30):
|
|
cmd.refresh()
|
|
time.sleep(0.05)
|
|
python end
|
|
|
|
PYMOL API
|
|
|
|
cmd.deselect()
|
|
'''
|
|
r = DEFAULT_ERROR
|
|
try:
|
|
_self.lock(_self)
|
|
r = _cmd.pop(_self._COb,str(name),str(source),int(quiet))
|
|
if is_ok(r):
|
|
enable = int(enable)
|
|
if enable>0:
|
|
r = _cmd.onoff(_self._COb,str(name),1,0);
|
|
elif enable == 0:
|
|
r = _cmd.onoff(_self._COb,str(name),0,0)
|
|
finally:
|
|
_self.unlock(r,_self)
|
|
if _self._raising(r,_self): raise pymol.CmdException
|
|
return r
|
|
|
|
id_type_dict = {
|
|
'index' : 0,
|
|
'id' : 1,
|
|
'rank' : 2,
|
|
}
|
|
|
|
id_type_sc = Shortcut(id_type_dict.keys())
|
|
|
|
def select_list(name,object,id_list,state=0,mode='id',quiet=1,_self=cmd):
|
|
'''
|
|
DESCRIPTION
|
|
|
|
API only. Select by atom indices within a single object.
|
|
|
|
Returns the number of selected atoms.
|
|
|
|
ARGUMENTS
|
|
|
|
name = str: a unique name for the selection
|
|
|
|
object = str: object name
|
|
|
|
id_list = list of integers: ID, index, or rank list.
|
|
|
|
state = int: object state, to limit selection to atoms which have
|
|
coordinates in that state (-1 = current, 0 = ignore) {default: 0}
|
|
|
|
mode = id|index|rank: {default: id}
|
|
'''
|
|
#
|
|
mode = id_type_dict[id_type_sc.auto_err(mode,'identifier type')]
|
|
with _self.lockcm:
|
|
return _cmd.select_list(_self._COb, name, object, id_list,
|
|
int(state) - 1, int(mode), int(quiet))
|
|
|
|
def indicate(selection="(all)",_self=cmd):
|
|
'''
|
|
DESCRIPTION
|
|
|
|
"indicate" shows a visual representation of an atom selection.
|
|
|
|
USAGE
|
|
|
|
indicate (selection)
|
|
|
|
PYMOL API
|
|
|
|
cmd.count(string selection)
|
|
|
|
'''
|
|
r = DEFAULT_ERROR
|
|
# preprocess selection
|
|
selection = selector.process(selection)
|
|
#
|
|
try:
|
|
_self.lock(_self)
|
|
r = _cmd.select(_self._COb,"indicate","("+str(selection)+")",1,-1,'')
|
|
if is_error(r):
|
|
_self.delete("indicate")
|
|
else:
|
|
_self.enable("indicate")
|
|
finally:
|
|
_self.unlock(r,_self)
|
|
if _self._raising(r,_self): raise pymol.CmdException
|
|
return r
|
|
|
|
def objsele_state_iter(selection, state=0, _self=cmd):
|
|
'''
|
|
DESCRIPTION
|
|
|
|
API only. Get (object-specific-selection, object-state) tuples for all
|
|
objects in selection.
|
|
'''
|
|
for oname in _self.get_object_list('(' + selection + ')'):
|
|
osele = '(%s) & ?%s' % (selection, oname)
|
|
if state < 0:
|
|
first = last = _self.get_object_state(oname)
|
|
else:
|
|
first = last = state
|
|
if first == 0:
|
|
first = 1
|
|
last = _self.count_states('%' + oname)
|
|
for ostate in range(first, last + 1):
|
|
yield osele, ostate
|