Split object

From PyMOLWiki
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.

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