Count molecules in selection
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Overview
This script will return the number of distinct molecular objects in a given selection. If no selection is given, the script assumes "sele" the named mouse selection.
Example
# run the script
run count_molecules_in_sel.py
# grab a protein from the PDB
fetch 2f56, async=0
# select all the urea molecules
select resn URE
# should count 11 molecules
count_molecules_in_selection
# change the selection and try again
select polymer
# should return 3, as there's 3 chains
count_molecules_in_selection
The Code
import pymol
from pymol import cmd
def count_mols_in_sel(sel="sele"):
"""
Returns the number of distinct molecules in a given selection.
"""
sel_copy = "__selcopy"
cmd.select(sel_copy, sel)
num_objs = 0
atoms_in_sel = cmd.count_atoms(sel_copy)
while atoms_in_sel > 0:
num_objs += 1
cmd.select(sel_copy, "%s and not (bm. first %s)" % (sel_copy, sel_copy))
atoms_in_sel = cmd.count_atoms(sel_copy)
print "There are %d distinct molecules in the selection '%s'." % (num_objs, sel)
return num_objs
cmd.extend("count_molecules_in_selection", count_mols_in_sel)