def set_relative_movers(self, max_translation, max_rotation): """ Generate the relative models form the transforms. The transforms is a list with triplets [id1, id2, transform_file] @param max_translation Maximum translation distance allowed for the moves @param max_rotation Maximum rotation angle allowed for the moves """ log.info("Setting relative movers") self.movers = [] relative_movers = [] relative_names = [] for d in self.dock_transforms: rb_id = representation.get_rb_name(d[1]) if rb_id not in relative_names: log.debug("Checking for %s", rb_id) rb_lig = representation.get_rigid_body(self.rbs, rb_id) rb_lig.set_coordinates_are_optimized(True) mv = em2d.RelativePositionMover(rb_lig, max_translation, max_rotation) relative_movers.append(mv) relative_names.append(rb_id) log.debug("added a RelativePositionMover for %s", rb_id) i = relative_names.index(rb_id) relative_movers[i].set_random_move_probability( self.non_relative_move_prob) rb_rec = representation.get_rigid_body( self.rbs, representation.get_rb_name(d[0])) rb_rec.set_coordinates_are_optimized(True) log.debug("Reference added for %s: %s. ref. frame %s ", rb_id, rb_rec.get_name(), rb_rec) Tis = io.read_transforms(d[2]) relative_movers[i].add_internal_transformations(rb_rec, Tis) # add regular movers for the rigid bodies that are neither moved # anchored nor moved relative to others regular_movers = [] for is_anchored, rb in zip(self.anchored, self.rbs): if (not is_anchored): name = rb.get_name() if (not name in relative_names): rb.set_coordinates_are_optimized(True) log.debug("adding a RigidBodyMover for %s", name) mv = core.RigidBodyMover(rb, max_translation, max_rotation) regular_movers.append(mv) self.movers = regular_movers self.movers += relative_movers
def set_relative_movers(self, max_translation, max_rotation): """ Generate the relative models form the transforms. The transforms is a list with triplets [id1, id2, transform_file] @param max_translation Maximum translation distance allowed for the moves @param max_rotation Maximum rotation angle allowed for the moves """ log.info("Setting relative movers") self.movers = [] relative_movers = [] relative_names = [] for d in self.dock_transforms: rb_id = representation.get_rb_name(d[1]) if rb_id not in relative_names: log.debug("Checking for %s", rb_id) rb_lig = representation.get_rigid_body(self.rbs, rb_id) rb_lig.set_coordinates_are_optimized(True) mv = em2d.RelativePositionMover(rb_lig, max_translation, max_rotation) relative_movers.append(mv) relative_names.append(rb_id) log.debug("added a RelativePositionMover for %s", rb_id) i = relative_names.index(rb_id) relative_movers[i].set_random_move_probability( self.non_relative_move_prob) rb_rec = representation.get_rigid_body(self.rbs, representation.get_rb_name(d[0])) rb_rec.set_coordinates_are_optimized(True) log.debug("Reference added for %s: %s. ref. frame %s ", rb_id, rb_rec.get_name(), rb_rec) Tis = io.read_transforms(d[2]) relative_movers[i].add_internal_transformations(rb_rec, Tis) # add regular movers for the rigid bodies that are neither moved # anchored nor moved relative to others regular_movers = [] for is_anchored, rb in zip(self.anchored, self.rbs): if(not is_anchored): name = rb.get_name() if(not name in relative_names): rb.set_coordinates_are_optimized(True) log.debug("adding a RigidBodyMover for %s", name) mv = core.RigidBodyMover(rb, max_translation, max_rotation) regular_movers.append(mv) self.movers = regular_movers self.movers += relative_movers
def set_not_optimized(self, name): """ Set a part of the model as not optimized (it does not move during the model optimization) @param name of the component to optimized """ if name not in self.names: raise ValueError("DominoModel: There is not component " "in the assembly with this name") rb_name = representation.get_rb_name(name) self.not_optimized_rbs.append(rb_name)