CollapseSel: Difference between revisions
Jump to navigation
Jump to search
(Created page with '= Overview = CollapseSel is a small utility function to compress strings for selections. So, if you have a selection with residues 1+2+3+4+20+21+22+100-120 this will return…') |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
'''CollapseIDs''' is a small utility function to compress strings for an array of IDs. This does NOT have the logic for detecting duplicates, [[CollapseSel]] does. | '''CollapseIDs''' is a small utility function to compress strings for an array of IDs. This does NOT have the logic for detecting duplicates, [[CollapseSel]] does. | ||
=Example= | |||
<source lang="python"> | |||
run /dir/to/collapseSel.py | |||
fetch 1cll | |||
select EE, resn GLU | |||
print collapseSel("EE") | |||
# | |||
# and PyMOL should output: | |||
# | |||
# 6-7+11+14+31+45+47+54+67+82-84+87+104+114+119-120+123+127+139-140 | |||
# | |||
</source> | |||
=The Code= | =The Code= | ||
Line 43: | Line 56: | ||
return rVal | return rVal | ||
def collapseSel(sel=None,lType="resi"): | |||
""" | |||
collapseSel -- given a valid PyMOL selection and list type, return a collapsed | |||
list of numbers corresponding to the lType. For example, to compactly | |||
print the residue identifiers for all the waters, try: | |||
select theWaters, resn HOH | |||
print collapseSel( "theWaters" ) | |||
This will convert: 1+2+3+4+10+11+12 into 1-4+10-12 | |||
PARAMS | |||
sel | |||
The selection to collapse | |||
lType | |||
The identifier type: 'resi', 'ID', 'id', or any numerical property. | |||
RETURNS | |||
a string of collapsed IDs. | |||
""" | |||
if sel==None: | |||
return "" | |||
stored.s = set() | |||
cmd.iterate( sel, "stored.s.add(int(float(%s)))" % lType) | |||
l = list(stored.s) | |||
l.sort() | |||
return "+".join(collapseIDs(list(l))) | |||
cmd.extend("collapseSel", collapseSel) | cmd.extend("collapseSel", collapseSel) | ||
</source> | </source> | ||
[[Category:ObjSel_Scripts]] | [[Category:ObjSel_Scripts]] | ||
[[Category:Script_Library]] | [[Category:Script_Library]] |
Latest revision as of 14:41, 2 September 2009
Overview
CollapseSel is a small utility function to compress strings for selections. So, if you have a selection with residues 1+2+3+4+20+21+22+100-120 this will return, 1-4+20-22+100-120.
CollapseIDs is a small utility function to compress strings for an array of IDs. This does NOT have the logic for detecting duplicates, CollapseSel does.
Example
run /dir/to/collapseSel.py
fetch 1cll
select EE, resn GLU
print collapseSel("EE")
#
# and PyMOL should output:
#
# 6-7+11+14+31+45+47+54+67+82-84+87+104+114+119-120+123+127+139-140
#
The Code
import pymol
from pymol import stored
def collapseIDs(ids):
"""
Helper function to make a smart list of IDs: eg turns 1+2+3+4+5 into 1-5.
"""
rVal = []
if len(ids)==0:
return ""
scanning=False
anchor = 0
start = 0
# 1-5 7-10 12 21-23
for cur in range(0,len(ids)-1):
if ids[cur]+1 == ids[cur+1]:
if scanning:
scanning=True
continue
else:
scanning=True
start = cur
else:
if scanning:
scanning=False
rVal.append(str(ids[start]) + "-" + str(ids[cur]))
start = cur
else:
scanning=False
rVal.append(str(ids[cur]))
if scanning:
rVal.append( str(ids[start]) + "-" + str(ids[cur+1]))
else:
rVal.append(str(ids[-1]))
return rVal
def collapseSel(sel=None,lType="resi"):
"""
collapseSel -- given a valid PyMOL selection and list type, return a collapsed
list of numbers corresponding to the lType. For example, to compactly
print the residue identifiers for all the waters, try:
select theWaters, resn HOH
print collapseSel( "theWaters" )
This will convert: 1+2+3+4+10+11+12 into 1-4+10-12
PARAMS
sel
The selection to collapse
lType
The identifier type: 'resi', 'ID', 'id', or any numerical property.
RETURNS
a string of collapsed IDs.
"""
if sel==None:
return ""
stored.s = set()
cmd.iterate( sel, "stored.s.add(int(float(%s)))" % lType)
l = list(stored.s)
l.sort()
return "+".join(collapseIDs(list(l)))
cmd.extend("collapseSel", collapseSel)