Split object
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 molecular
# 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)