Split object

From PyMOLWiki
Jump to: navigation, search

split_object takes a multi-molecular object and converts it into a multi-state object. Similar to split_states but for molecules instead of states and the result of this is a multi-state object.

import pymol
 
def split_object(target_obj=None, source_obj=None, max_iter=500, quiet=1, _self=cmd):
    """
DESCRIPTION
 
    Splits a multi-molecular object into one multi-state object
 
ARGUMENTS
 
    target_obj
 
        (string) name of target object
 
    source_obj
 
        (string) name of source object
 
    max_iter
 
        (int) maximum number of object to process; set to 0 to unlimit
 
    """
    if source_object==None:
        print "Error: Please provide a source object."
        return
 
    # ensure the user gave us one object; save for prefix
 
    obj_list = _self.get_object_list(target_obj)
 
    if len(obj_list)>1:
        print " Error: Please provide only one object at a time."
        return
 
    if target_object==None:
        target_object = _self.get_unused_name(source_obj, alwaysnumber=0)
 
    # grab unused selection name
 
    s = cmd.get_unused_name("_store")
 
    # make original selection which we'll pare down
 
    cmd.select(s, source_obj)
 
    count = 0
 
    while cmd.count_atoms(s) and count<max_iter:
        count+=1
 
        # create the object from the first moļœ©lecular
        # object inside pfx
        cmd.create(pfx, "bm. first " + s, 1, count)
 
        # remove the first molecular object from
        # the source selection and re-iterate
        cmd.select(s, "%s and not bm. first %s" % (s,s))
 
    if not quiet:
        print " Created new object %s." % target_obj
 
cmd.extend("split_object", split_object)

See Also

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox