Atom selections and groups¶
A parser is provided for flexible selection of atom groups within the command interpreter. It is applicable to stand-alone running (rsref.py, superpose.py etc.), but not usually accessible when modules are wrapped/embedded in other packages (eg. CNS) which then manage atom selections.
Selections¶
The selection syntax is terse, flexible, and (for better or worse) relies on Python evaluation of expressions. Thus, hopefully, it will be intuitive for many users.
It differs from some other programs in that selections are objects (instances
of class Selection).
Selection objects are an extension of boolean arrays, specific
for a coordinate set (class Atoms).
Selection expressions can be used directly in commands like
parameterize, or user-named Selections can be pre-defined for
repeated use or to simplify/clarify the definition of complicated Selections.
Selections can be combined or assigned to new Selection instances through
use of Python bit-wise logical operators (&,|,==,!=,~,>,>=,(,),...)
.
This should make it convenient to write refinement scripts in which different
subsets of the atomic parameters are refined at different stages, different
sets of atoms are subject to positional, B-factor or occupancy refinement,
and in which some atoms might be refined individually, others rigidly grouped
for simultaneous refinement, etc..
This frees the user of constraints embodied in other programs.
In RSRef, “S” is a synonym of Selection
, the class.
A selection expression is defined as:
<selection>|S(<criterion>) [<operator> <selection>|S(<criterion>)]
where:
- <selection>
is a pre-existing instance of class S.
- <criterion>
is a non-quoted string to select atoms for a new instance of S, where <criterion> can be in simple form or compound:
- Simple
contains a single operator, and is given without parentheses, such as:
chain == A
chai==B
Residue number >= 30 (or Residue number .GE. 30, avoiding cmd2 redirect parsing)
resnu <= 50
- Compound
an expression combining operators, using parentheses to set precedence. Spaces in names must be replaced with underscores, and expressions should use lower case as case sensitive. Examples:
(chain == A) | (chai==B)
((residue_numb >= 30) & (atnam == CA)) | (chain != C)
Warning
the compound parser will silently do unexpected things with syntax or spelling errors. Check that results are consistent with expectations!
Note
the inner operands are enclosed within parentheses, because the combination operators
(&, |)
have higher precendence than the comparison operators(>, >=, <, <=)
.- <operator>
is a bit-wise Python logical operator
(&,|,==,!=,~,>,>=,(,),...)
Further details of the syntax for making Selections are provided inatoms.Selection
.
Selections are named and defined with the select command.
Groups¶
Groups are dictionary-like collections of named Selections, each constrained as a group in group refinement. (In individual atom refinement, a Group is treated as the logical OR between all the named Selections.) The Group class contains methods for checking that selections do not overlap (work-in-progress). In most commands, the name of a Group can be substituted for that of a Selection.
Groups are defined with the selection command, for example:
select --collection=domains --name=N S('chain == A') & S('residue num <= 105')
select -C domains -n C S('chain == A') & S('residue num .gt. 105')
These 2 statements illustrate several varients of the syntax in together
defining a Group called domains
, with two Selections,
named N & C that contain the N- and C-terminal parts of subunit A.