Count molecules in selection

From PyMOLWiki
Jump to: navigation, search

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)
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox