示例#1
0
 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()
示例#2
0
 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.")
示例#3
0
    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()
示例#4
0
 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()
示例#5
0
    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.")
示例#6
0
 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."
示例#7
0
 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
示例#8
0
 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()
示例#9
0
 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()
示例#10
0
 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
示例#11
0
    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()
示例#12
0
    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
示例#13
0
 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()
示例#14
0
 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()
示例#15
0
 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