def set_points_and_lines(self, tardy_model, velocity_scaling=False, e_kin_per_dof=1, minimum_covering_sphere_view_scale=1.3, show_loop_edge_bendings=True, long_labels=None): self.tardy_model = tardy_model temperature_dof = len(tardy_model.sites) * 3 if (e_kin_per_dof is None): self.e_kin_target = tardy_model.e_kin() / max(1, temperature_dof) else: self.e_kin_target = e_kin_per_dof * temperature_dof tardy_model.assign_random_velocities( e_kin_target=self.e_kin_target) self.velocity_scaling = velocity_scaling self.long_labels = long_labels self.labels = self.tardy_model.labels self.set_points() for line, color in tardy_model.tardy_tree.viewer_lines_with_colors( include_loop_edge_bendings=show_loop_edge_bendings): self.line_i_seqs.append(line) self.line_colors[line] = color print("\n".join( tardy_model.tardy_tree.viewer_lines_with_colors_legend( include_loop_edge_bendings=show_loop_edge_bendings))) mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius() * minimum_covering_sphere_view_scale) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False self.steps_per_tab = 1 self.show_key_stroke_help()
def set_points_and_lines(self): self.sim_as = simulation() self.sim_ac = simulation() self.points = flex.vec3_double(self.sim_as.sites_cart_moved_F01) self.points.extend(flex.vec3_double(self.sim_ac.sites_cart_moved_F01)) self.points.extend(flex.vec3_double(self.sim_as.sites_cart_wells_F01)) def add_line(i, j, color): line = (i,j) self.line_i_seqs.append(line) self.line_colors[line] = color self.labels = [] n = len(self.sim_as.sites_cart_F1) offs = 0 for prefix,color in [("S",(1,0,0)),("C",(0,0,1)),("W",(0,1,0))]: for i in range(n): add_line(offs+i, offs+(i+1)%n, color) self.labels.append(prefix+str(i)) offs += n mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius()*1.3) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False self.steps_per_tab = 8 print("Press and hold Tab key to run the simulation.") print("Press Shift-Tab to increase speed.") print("Press Ctrl-Tab to decrease speed.")
def set_points_and_lines(self, simulation_factory_index, n_zigzag): if (simulation_factory_index == 0): self.sim = tst_molecules.simulation_zigzag(NB=n_zigzag) else: self.sim = tst_molecules.simulation_factories[ simulation_factory_index]() self.points = flex.vec3_double() self.set_points() def add_line(i, j, color): line = (i, j) self.line_i_seqs.append(line) self.line_colors[line] = color self.labels = [] B_off = [] for B in self.sim.bodies: B_off.append(len(self.labels)) self.labels.extend(B.labels) def add_off(i): if (i < 0): return B_off[B.parent + 1] + i else: return B_off[-1] + i for bond in B.bonds: i, j = [add_off(b) for b in bond] add_line(i, j, (1, 0, 0)) mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d(center=mcs.center(), radius=mcs.radius() * 1.3) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False self.steps_per_tab = 1 self.show_key_stroke_help()
def set_points_and_lines(self, simulation_factory_index, n_zigzag): if (simulation_factory_index == 0): self.sim = tst_molecules.simulation_zigzag(NB=n_zigzag) else: self.sim = tst_molecules.simulation_factories[simulation_factory_index]() self.points = flex.vec3_double() self.set_points() def add_line(i, j, color): line = (i,j) self.line_i_seqs.append(line) self.line_colors[line] = color self.labels = [] B_off = [] for B in self.sim.bodies: B_off.append(len(self.labels)) self.labels.extend(B.labels) def add_off(i): if (i < 0): return B_off[B.parent+1] + i else: return B_off[-1] + i for bond in B.bonds: i,j = [add_off(b) for b in bond] add_line(i, j, (1,0,0)) mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius()*1.3) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False self.steps_per_tab = 1 self.show_key_stroke_help()
def set_points_and_lines(self): NB = 3 self.sim = revolute_simulation(mersenne_twister=None, NB=NB, config="zigzag") self.points = flex.vec3_double() self.set_points() assert self.points.size() == NB * 3 def add_line(i, j, color): line = (i, j) self.line_i_seqs.append(line) self.line_colors[line] = color self.labels = [] p, n, s = 0, 1, 2 for ib in range(NB): self.labels.extend(["p%d" % ib, "n%d" % ib, "s%d" % ib]) add_line(p, n, (1, 0, 0)) add_line(p, s, (0, 1, 0)) add_line(n, s, (0, 0, 1)) p, n, s = p + 3, n + 3, s + 3 mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d(center=mcs.center(), radius=mcs.radius() * 1.3) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False self.steps_per_tab = 8 print("Press and hold Tab key to run the simulation.") print("Press Shift-Tab to increase speed.") print("Press Ctrl-Tab to decrease speed.")
def set_points_and_lines(self): self.sim_as = simulation() self.sim_ac = simulation() self.points = flex.vec3_double(self.sim_as.sites_cart_moved_F01) self.points.extend(flex.vec3_double(self.sim_ac.sites_cart_moved_F01)) self.points.extend(flex.vec3_double(self.sim_as.sites_cart_wells_F01)) def add_line(i, j, color): line = (i,j) self.line_i_seqs.append(line) self.line_colors[line] = color self.labels = [] n = len(self.sim_as.sites_cart_F1) offs = 0 for prefix,color in [("S",(1,0,0)),("C",(0,0,1)),("W",(0,1,0))]: for i in xrange(n): add_line(offs+i, offs+(i+1)%n, color) self.labels.append(prefix+str(i)) offs += n mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius()*1.3) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False self.steps_per_tab = 8 print "Press and hold Tab key to run the simulation." print "Press Shift-Tab to increase speed." print "Press Ctrl-Tab to decrease speed."
def set_points_and_lines(O, app, minimum_covering_sphere_view_scale=1.3): pdb_atoms = app.pdb_atoms pdb_atoms.set_chemical_element_simple_if_necessary() atom_tmp_sentinel = pdb_atoms.reset_tmp(first_value=0, increment=0) for i, rg in enumerate(app.pdb_hierarchy.residue_groups()): for atom in rg.atoms(): atom.tmp = i O.points = pdb_atoms.extract_xyz() if (app.co.serial_labels): m = "" need_m = (app.pdb_hierarchy.models_size() != 1) for mdl in app.pdb_hierarchy.models(): if (need_m): m = mdl.id.strip() + ":" for i in range(mdl.atoms_size()): O.labels.append(m + str(i)) assert len(O.labels) == O.points.size() else: rg_done = set() for atom in pdb_atoms: i = atom.tmp if (i not in rg_done): rg_done.add(i) l = atom.id_str() else: l = atom.name O.labels.append(l) from cctbx.crystal.distance_based_connectivity import \ build_simple_two_way_bond_sets bond_sets = build_simple_two_way_bond_sets( sites_cart=O.points, elements=pdb_atoms.extract_element()) for i, bond_set in enumerate(bond_sets): for j in bond_set: if (i < j): line = (i, j) ai, aj = [pdb_atoms[_] for _ in line] if (ai.is_in_same_conformer_as(aj)): O.line_i_seqs.append(line) if (ai.tmp == aj.tmp): if (ai.tmp % 2 == 0): color = (0, 0, 1) else: color = (0, 1, 0) else: color = (1, 0, 0) O.line_colors[line] = color del atom_tmp_sentinel from scitbx.math import minimum_covering_sphere, sphere_3d mcs = minimum_covering_sphere(O.points, epsilon=1.e-2) O.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius() * minimum_covering_sphere_view_scale) O.flag_show_minimum_covering_sphere = False O.flag_show_rotation_center = False _ = app.co.labels_threshold O.flag_show_labels = (_ == 0 or len(O.points) <= _) O.labels_display_list = None O.lines_display_list = None O.points_display_list = None
def update_mcs(self, points, recenter_and_zoom=True, buffer=0): from scitbx.math import minimum_covering_sphere, sphere_3d mcs = minimum_covering_sphere(points=points, epsilon=0.1) if buffer > 0: self.minimum_covering_sphere = sphere_3d(center=mcs.center(), radius=mcs.radius() + buffer) else: self.minimum_covering_sphere = mcs if (recenter_and_zoom) and (not self.GL_uninitialised): self.move_rotation_center_to_mcs_center() self.fit_into_viewport()
def update_mcs (self, points, recenter_and_zoom=True, buffer=0) : from scitbx.math import minimum_covering_sphere, sphere_3d mcs = minimum_covering_sphere(points=points, epsilon=0.1) if buffer > 0 : self.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius() + buffer) else : self.minimum_covering_sphere = mcs if (recenter_and_zoom) and (not self.GL_uninitialised) : self.move_rotation_center_to_mcs_center() self.fit_into_viewport()
def first_motion_callback(self, points): self.points = flex.vec3_double(points) self.labels = ["A", "B", "C"] def add_line(i, j, color): line = (i,j) self.line_i_seqs.append(line) self.line_colors[line] = color add_line(0, 1, (1,0,0)) add_line(1, 2, (0,1,0)) add_line(2, 0, (0,0,1)) mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d( center=matrix.col(mcs.center())+matrix.col((0.5,0.5,0.5)), radius=mcs.radius()*2.0) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False
def first_action_callback(O, tardy_model, rmsd_calculator): O.tardy_model = tardy_model tpo = tardy_model.potential_obj O.draw_map.set_unit_cell_and_density_map( unit_cell=tpo.geo_manager.crystal_symmetry.unit_cell(), density_map=tpo.density_map) O.points = tardy_model.sites_moved().deep_copy() if (tpo.ideal_sites_cart is not None): O.points.extend(tpo.ideal_sites_cart) if (O.points.size() < 20): if (tpo.ideal_sites_cart is None): O.labels = tardy_model.labels else: O.labels = tardy_model.labels + [""] * len(tardy_model.labels) def draw_ideal_line(): if (tpo.ideal_sites_cart is None): return n = tardy_model.tardy_tree.n_vertices ideal_line = tuple([i + n for i in line]) O.line_i_seqs.append(ideal_line) O.line_colors[ideal_line] = [0.6] * 3 if (tardy_model.potential_obj.reduced_geo_manager is not None): for line, color in tardy_model.tardy_tree.viewer_lines_with_colors( include_loop_edge_bendings=False): draw_ideal_line() O.line_i_seqs.append(line) O.line_colors[line] = color print "\n".join( tardy_model.tardy_tree.viewer_lines_with_colors_legend( include_loop_edge_bendings=False)) else: for line in tardy_model.potential_obj.geo_manager.simple_edge_list( ): draw_ideal_line() O.line_i_seqs.append(line) O.line_colors[line] = (1, 0, 0) mcs = minimum_covering_sphere(O.points, epsilon=1.e-2) O.minimum_covering_sphere = sphere_3d(center=mcs.center(), radius=mcs.radius() * 2.0) O.flag_show_minimum_covering_sphere = False O.flag_show_rotation_center = False O.show_key_stroke_help() if (O.first_first): O.first_first = False else: O.action_callback()
def first_motion_callback(self, points): self.points = flex.vec3_double(points) self.labels = ["A", "B", "C"] def add_line(i, j, color): line = (i, j) self.line_i_seqs.append(line) self.line_colors[line] = color add_line(0, 1, (1, 0, 0)) add_line(1, 2, (0, 1, 0)) add_line(2, 0, (0, 0, 1)) mcs = minimum_covering_sphere(self.points, epsilon=1.e-2) self.minimum_covering_sphere = sphere_3d( center=matrix.col(mcs.center()) + matrix.col((0.5, 0.5, 0.5)), radius=mcs.radius() * 2.0) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False
def first_action_callback(O, tardy_model, rmsd_calculator): O.tardy_model = tardy_model tpo = tardy_model.potential_obj O.draw_map.set_unit_cell_and_density_map( unit_cell=tpo.geo_manager.crystal_symmetry.unit_cell(), density_map=tpo.density_map) O.points = tardy_model.sites_moved().deep_copy() if (tpo.ideal_sites_cart is not None): O.points.extend(tpo.ideal_sites_cart) if (O.points.size() < 20): if (tpo.ideal_sites_cart is None): O.labels = tardy_model.labels else: O.labels = tardy_model.labels + [""] * len(tardy_model.labels) def draw_ideal_line(): if (tpo.ideal_sites_cart is None): return n = tardy_model.tardy_tree.n_vertices ideal_line = tuple([i+n for i in line]) O.line_i_seqs.append(ideal_line) O.line_colors[ideal_line] = [0.6]*3 if (tardy_model.potential_obj.reduced_geo_manager is not None): for line,color in tardy_model.tardy_tree.viewer_lines_with_colors( include_loop_edge_bendings=False): draw_ideal_line() O.line_i_seqs.append(line) O.line_colors[line] = color print "\n".join(tardy_model.tardy_tree.viewer_lines_with_colors_legend( include_loop_edge_bendings=False)) else: for line in tardy_model.potential_obj.geo_manager.simple_edge_list(): draw_ideal_line() O.line_i_seqs.append(line) O.line_colors[line] = (1,0,0) mcs = minimum_covering_sphere(O.points, epsilon=1.e-2) O.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius()*2.0) O.flag_show_minimum_covering_sphere = False O.flag_show_rotation_center = False O.show_key_stroke_help() if (O.first_first): O.first_first = False else: O.action_callback()
def set_points_and_lines( self, tardy_model, velocity_scaling=False, e_kin_per_dof=1, minimum_covering_sphere_view_scale=1.3, show_loop_edge_bendings=True, long_labels=None, ): self.tardy_model = tardy_model temperature_dof = len(tardy_model.sites) * 3 if e_kin_per_dof is None: self.e_kin_target = tardy_model.e_kin() / max(1, temperature_dof) else: self.e_kin_target = e_kin_per_dof * temperature_dof tardy_model.assign_random_velocities(e_kin_target=self.e_kin_target) self.velocity_scaling = velocity_scaling self.long_labels = long_labels self.labels = self.tardy_model.labels self.set_points() for line, color in tardy_model.tardy_tree.viewer_lines_with_colors( include_loop_edge_bendings=show_loop_edge_bendings ): self.line_i_seqs.append(line) self.line_colors[line] = color print "\n".join( tardy_model.tardy_tree.viewer_lines_with_colors_legend(include_loop_edge_bendings=show_loop_edge_bendings) ) mcs = minimum_covering_sphere(self.points, epsilon=1.0e-2) self.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius() * minimum_covering_sphere_view_scale ) self.flag_show_minimum_covering_sphere = False self.flag_show_rotation_center = False self.steps_per_tab = 1 self.show_key_stroke_help()
def set_points_and_lines( O, app, minimum_covering_sphere_view_scale=1.3): pdb_atoms = app.pdb_atoms pdb_atoms.set_chemical_element_simple_if_necessary() atom_tmp_sentinel = pdb_atoms.reset_tmp(first_value=0, increment=0) for i,rg in enumerate(app.pdb_hierarchy.residue_groups()): for atom in rg.atoms(): atom.tmp = i O.points = pdb_atoms.extract_xyz() if (app.co.serial_labels): m = "" need_m = (app.pdb_hierarchy.models_size() != 1) for mdl in app.pdb_hierarchy.models(): if (need_m): m = mdl.id.strip() + ":" for i in xrange(mdl.atoms_size()): O.labels.append(m+str(i)) assert len(O.labels) == O.points.size() else: rg_done = set() for atom in pdb_atoms: i = atom.tmp if (i not in rg_done): rg_done.add(i) l = atom.id_str() else: l = atom.name O.labels.append(l) from cctbx.crystal.distance_based_connectivity import \ build_simple_two_way_bond_sets bond_sets = build_simple_two_way_bond_sets( sites_cart=O.points, elements=pdb_atoms.extract_element()) for i,bond_set in enumerate(bond_sets): for j in bond_set: if (i < j): line = (i,j) ai, aj = [pdb_atoms[_] for _ in line] if (ai.is_in_same_conformer_as(aj)): O.line_i_seqs.append(line) if (ai.tmp == aj.tmp): if (ai.tmp % 2 == 0): color = (0,0,1) else: color = (0,1,0) else: color = (1,0,0) O.line_colors[line] = color del atom_tmp_sentinel from scitbx.math import minimum_covering_sphere, sphere_3d mcs = minimum_covering_sphere(O.points, epsilon=1.e-2) O.minimum_covering_sphere = sphere_3d( center=mcs.center(), radius=mcs.radius()*minimum_covering_sphere_view_scale) O.flag_show_minimum_covering_sphere = False O.flag_show_rotation_center = False _ = app.co.labels_threshold O.flag_show_labels = (_ == 0 or len(O.points) <= _) O.labels_display_list = None O.lines_display_list = None O.points_display_list = None