def minus(self, objects): assert len(objects) == 2 new_paths, untouched_paths = base.intersect_objects(objects) buffer = [] for i, paths in new_paths: if i == 0: container = objects[1] condition = 0 else: container = objects[0] condition = 1 for cp1, path, cp2 in paths: if base.contained(path, container) == condition: buffer.append((cp1, path, cp2)) paths = base.join(buffer) for i, path in untouched_paths: if i == 0: container = objects[1] condition = 0 else: container = objects[0] condition = 1 if base.contained(path, container) == condition: paths.append(path) object = objects[0].Duplicate() object.SetPaths(paths) return object
def divide(self, object1, object2): buffer = [] new_paths, untouched_paths = base.intersect_objects([object1, object2]) if new_paths: common = [] parts = ([], []) for i, paths in new_paths: if i == 0: container = object2 parts2, parts1 = parts else: container = object1 parts1, parts2 = parts for cp1, path, cp2 in paths: if base.contained(path, container): common.append((cp1, path, cp2)) parts2.append((cp1, path, cp2)) else: parts1.append((cp1, path, cp2)) for path in base.join(parts1): object = object1.Duplicate() object.SetPaths([path]) buffer.append(object) for path in base.join(parts2): object = object2.Duplicate() object.SetPaths([path]) buffer.append(object) for path in base.join(common): object = object2.Duplicate() object.SetPaths([path]) buffer.append(object) for i, path in untouched_paths: if i == 0: object = object1.Duplicate() else: object = object2.Duplicate() object.SetPaths([path]) buffer.append(object) else: buffer.append(object1.Duplicate()) buffer.append(object2.Duplicate()) return buffer
def generate_content(self): if_predicate = fmt('if hash {0} 2> /dev/null; then\n', self.program) else_clause = fmt('else\n echo "missing {0}"\nfi', self.program) clone_github = 'git clone https://github.com' body = ['mkdir -p ' + self.reporoot] for reponame in self.reponames: repopath = os.path.join(self.reporoot, reponame) body += [ fmt('[ -d "{repopath}" ] || {clone_github}/{reponame} {repopath}' ) ] body += [fmt('(cd {repopath} && git pull && git checkout HEAD)')] return if_predicate + join(body, prefix=' ', sepby='\n', tail='\n') + else_clause
def intersect(self, objects): assert len(objects) == 2 buffer = [] new_paths, untouched_paths = base.intersect_objects(objects) if not new_paths: return None for i, paths in new_paths: if i == 0: container = objects[1] else: container = objects[0] for cp1, path, cp2 in paths: if base.contained(path, container): buffer.append((cp1, path, cp2)) object = objects[0].Duplicate() object.SetPaths(base.join(buffer)) return object
def union(self,objects): assert len(objects) == 2 buffer = [] new_paths, untouched_paths = base.intersect_objects(objects) for i, paths in new_paths: if i == 0: container = objects[1] else: container = objects[0] for cp1, path, cp2 in paths: if not base.contained(path, container): buffer.append((cp1, path, cp2)) paths = base.join(buffer) for i, path in untouched_paths: paths.append(path) object = objects[0].Duplicate() object.SetPaths(paths) return object
def union(self, objects): assert len(objects) == 2 buffer = [] new_paths, untouched_paths = base.intersect_objects(objects) for i, paths in new_paths: if i == 0: container = objects[1] else: container = objects[0] for cp1, path, cp2 in paths: if not base.contained(path, container): buffer.append((cp1, path, cp2)) paths = base.join(buffer) for i, path in untouched_paths: paths.append(path) object = objects[0].Duplicate() object.SetPaths(paths) return object
def _translate(self, atoms, **kwargs): # CHARMM index is 1-based def _index(atom): return "BYNUM %d" % (atom.number + 1) return base.join(atoms, ' .or.', _index)
def _translate(self, atoms, **kwargs): # PyMol index is 1-based def _index(atom): return "index %d" % (atom.number + 1) return base.join(atoms, ' |', _index)