Files
PlantAI-dev/tools/pymol-env/lib/python3.12/site-packages/pymol/selecting.py
T
2026-08-03 18:42:47 +08:00

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