Example #1
0
def show_cpp(sg, f):
    asu = reference_table.get_asu(sg)
    func = "asu_%03d" % sg
    print >> f, "facet_collection::pointer ", func, "()   //  Hall: ", asu.hall_symbol
    print >> f, "{\n  return facet_collection_asu("
    out_cpp(asu, f)
    print >> f, "  );\n}\n"
    return func
Example #2
0
 def direct_space_asu(self):
     from cctbx.sgtbx.direct_space_asu import reference_table
     cache = self._space_group_info_cache
     if (not hasattr(cache, "_direct_space_asu")):
         reference_asu = reference_table.get_asu(self.type().number())
         cache._direct_space_asu = reference_asu.change_basis(
             self.change_of_basis_op_to_reference_setting().inverse())
     return cache._direct_space_asu
Example #3
0
 def direct_space_asu(self):
   from cctbx.sgtbx.direct_space_asu import reference_table
   cache = self._space_group_info_cache
   if (not hasattr(cache, "_direct_space_asu")):
     reference_asu = reference_table.get_asu(self.type().number())
     cache._direct_space_asu = reference_asu.change_basis(
       self.change_of_basis_op_to_reference_setting().inverse())
   return cache._direct_space_asu
def show_cpp(sg, f):
    asu = reference_table.get_asu(sg)
    func = "asu_%03d" % sg
    print >> f, "facet_collection::pointer ", func, "()   //  Hall: ", asu.hall_symbol
    print >> f, "{\n  return facet_collection_asu("
    out_cpp(asu, f)
    print >> f, "  );\n}\n"
    return func
Example #5
0
def exercise_reference_table():
    for space_group_number in xrange(1, 230 + 1):
        space_group_info = sgtbx.space_group_info(number=space_group_number)
        asu = reference_table.get_asu(space_group_number)
        assert sgtbx.space_group(asu.hall_symbol) == space_group_info.group()
    #
    for space_group_number in xrange(1, 230 + 1):
        asu = reference_table.get_asu(space_group_number)
        n_long_cuts = 0
        for cut in asu.cuts:
            s = str(cut)
            have_long_cut = (s.find("cut") >= 0)
            if (space_group_number != 213):
                assert not have_long_cut
            elif (have_long_cut):
                n_long_cuts += 1
        if (space_group_number == 213):
            assert n_long_cuts == 4  # done with change_basis
def exercise_reference_table():
  for space_group_number in xrange(1,230+1):
    space_group_info = sgtbx.space_group_info(number=space_group_number)
    asu = reference_table.get_asu(space_group_number)
    assert sgtbx.space_group(asu.hall_symbol) == space_group_info.group()
  #
  for space_group_number in xrange(1,230+1):
    asu = reference_table.get_asu(space_group_number)
    n_long_cuts = 0
    for cut in asu.cuts:
      s = str(cut)
      have_long_cut = (s.find("cut") >= 0)
      if (space_group_number != 213):
        assert not have_long_cut
      elif (have_long_cut):
        n_long_cuts += 1
    if (space_group_number == 213):
      assert n_long_cuts == 4 # done with change_basis
Example #7
0
def run():
  exercise_reference_table()
  for space_group_number in range(1,230+1):
    asu = reference_table.get_asu(space_group_number)
    exercise_shape_vertices(asu=asu, unit_cell=None)
  debug_utils.parse_options_loop_space_groups(
    sys.argv[1:], run_call_back, show_cpu_times=False)
  exercise_is_simple_interaction()
  exercise_non_crystallographic_asu_mappings()
  print(format_cpu_times())
def run():
  exercise_reference_table()
  for space_group_number in xrange(1,230+1):
    asu = reference_table.get_asu(space_group_number)
    exercise_shape_vertices(asu=asu, unit_cell=None)
  debug_utils.parse_options_loop_space_groups(
    sys.argv[1:], run_call_back, show_cpu_times=False)
  exercise_is_simple_interaction()
  exercise_non_crystallographic_asu_mappings()
  print format_cpu_times()
Example #9
0
def exercise_float_asu(space_group_info, n_grid=6):
    unit_cell = space_group_info.any_compatible_unit_cell(volume=1000)
    ref_asu = reference_table.get_asu(space_group_info.type().number())
    exercise_cut_planes(ref_asu.cuts)
    inp_asu = space_group_info.direct_space_asu()
    assert sgtbx.space_group(inp_asu.hall_symbol) == space_group_info.group()
    exercise_cut_planes(inp_asu.cuts)
    exercise_shape_vertices(inp_asu, unit_cell)
    float_asu = inp_asu.add_buffer(unit_cell=unit_cell, thickness=0.001)
    cb_mx_ref_inp = space_group_info.type().cb_op().c_inv().as_rational()
    n = n_grid
    for ref_n in flex.nested_loop((-n // 2, -n // 2, -n // 2), (n, n, n),
                                  False):
        # check correctness of space_group_info.direct_space_asu()
        ref_r = matrix.col([rational.int(g, n) for g in ref_n])
        inp_r = cb_mx_ref_inp * ref_r
        assert ref_asu.is_inside(ref_r.elems) == inp_asu.is_inside(inp_r.elems)
        # check correctness of cut_plane.add_buffer()
        inp_r = inp_r.elems
        inp_f = [float(r) for r in inp_r]
        for cut in inp_asu.cuts:
            r_cut = cut.strip()
            r_inside = r_cut.is_inside(inp_r)
            for buffer_thickness in [0.001, 1, -1][:1]:
                f_cut = cut.as_float_cut_plane().add_buffer(
                    unit_cell=unit_cell, thickness=buffer_thickness)
                f_inside = f_cut.is_inside(inp_f)
                if (buffer_thickness < 0):
                    if (r_inside != f_inside):
                        assert r_inside
                elif (buffer_thickness < 0.01):
                    assert r_inside == f_inside
                elif (r_inside != f_inside):
                    assert f_inside
        # check correctness of float_asu.add_buffer()
        assert float_asu.is_inside(inp_f) == inp_asu.shape_only().is_inside(
            inp_r)
    asu_with_metric = inp_asu.define_metric(unit_cell)
    assert asu_with_metric.hall_symbol is inp_asu.hall_symbol
    assert len(asu_with_metric.cuts) == len(inp_asu.cuts)
    assert asu_with_metric.unit_cell is unit_cell
    asu_tight = asu_with_metric.as_float_asu()
    asu_buffer = asu_with_metric.add_buffer(thickness=2)
    asu_shrunk = asu_with_metric.add_buffer(relative_thickness=-1.e-5)
    vertices = facet_analysis.shape_vertices(inp_asu)
    for vertex in vertices:
        assert inp_asu.shape_only().is_inside(vertex)
    for vertex in vertices:
        assert asu_tight.is_inside(matrix.col(vertex).as_float().elems)
    for vertex in vertices:
        assert asu_buffer.is_inside(matrix.col(vertex).as_float().elems)
    for vertex in vertices:
        assert not asu_shrunk.is_inside(matrix.col(vertex).as_float().elems)
def exercise_float_asu(space_group_info, n_grid=6):
  unit_cell = space_group_info.any_compatible_unit_cell(volume=1000)
  ref_asu = reference_table.get_asu(space_group_info.type().number())
  exercise_cut_planes(ref_asu.cuts)
  inp_asu = space_group_info.direct_space_asu()
  assert sgtbx.space_group(inp_asu.hall_symbol) == space_group_info.group()
  exercise_cut_planes(inp_asu.cuts)
  exercise_shape_vertices(inp_asu, unit_cell)
  float_asu = inp_asu.add_buffer(unit_cell=unit_cell, thickness=0.001)
  cb_mx_ref_inp = space_group_info.type().cb_op().c_inv().as_rational()
  n = n_grid
  for ref_n in flex.nested_loop((-n//2,-n//2,-n//2),(n,n,n),False):
    # check correctness of space_group_info.direct_space_asu()
    ref_r = matrix.col([rational.int(g,n) for g in ref_n])
    inp_r = cb_mx_ref_inp * ref_r
    assert ref_asu.is_inside(ref_r.elems) == inp_asu.is_inside(inp_r.elems)
    # check correctness of cut_plane.add_buffer()
    inp_r = inp_r.elems
    inp_f = [float(r) for r in inp_r]
    for cut in inp_asu.cuts:
      r_cut = cut.strip()
      r_inside = r_cut.is_inside(inp_r)
      for buffer_thickness in [0.001, 1, -1][:1]:
        f_cut = cut.as_float_cut_plane().add_buffer(
          unit_cell=unit_cell,
          thickness=buffer_thickness)
        f_inside = f_cut.is_inside(inp_f)
        if (buffer_thickness < 0):
          if (r_inside != f_inside):
            assert r_inside
        elif (buffer_thickness < 0.01):
          assert r_inside == f_inside
        elif (r_inside != f_inside):
          assert f_inside
    # check correctness of float_asu.add_buffer()
    assert float_asu.is_inside(inp_f) == inp_asu.shape_only().is_inside(inp_r)
  asu_with_metric = inp_asu.define_metric(unit_cell)
  assert asu_with_metric.hall_symbol is inp_asu.hall_symbol
  assert len(asu_with_metric.cuts) == len(inp_asu.cuts)
  assert asu_with_metric.unit_cell is unit_cell
  asu_tight = asu_with_metric.as_float_asu()
  asu_buffer = asu_with_metric.add_buffer(thickness=2)
  asu_shrunk = asu_with_metric.add_buffer(relative_thickness=-1.e-5)
  vertices = facet_analysis.shape_vertices(inp_asu)
  for vertex in vertices:
    assert inp_asu.shape_only().is_inside(vertex)
  for vertex in vertices:
    assert asu_tight.is_inside(matrix.col(vertex).as_float().elems)
  for vertex in vertices:
    assert asu_buffer.is_inside(matrix.col(vertex).as_float().elems)
  for vertex in vertices:
    assert not asu_shrunk.is_inside(matrix.col(vertex).as_float().elems)
Example #11
0
def run(http_server_name=None, html_subdir="asu_gallery"):
    parser = OptionParser(
        usage="usage: python jv_asu.py [options] [numbers...]")
    parser.add_option("-s",
                      "--server",
                      action="store",
                      type="string",
                      help="network name of http server",
                      metavar="NAME")
    parser.add_option("-p", "--plane_group", action="store_true")
    options, args = parser.parse_args()
    if (options.server is not None):
        http_server_name = options.server
    if (not os.path.isdir(html_subdir)):
        os.makedirs(html_subdir)
    jv_index.write_html(open("%s/index.html" % html_subdir, "w"))
    guide_to_notation.write_html(
        open("%s/guide_to_notation.html" % html_subdir, "w"))
    if (len(args) == 0):
        if (options.plane_group):
            args = ["1-17"]
        else:
            args = ["1-230"]
    for arg in args:
        numbers = [int(n) for n in arg.split('-')]
        assert len(numbers) in (1, 2)
        if (len(numbers) == 1): numbers *= 2
        for group_type_number in xrange(numbers[0], numbers[1] + 1):
            if (options.plane_group):
                print "Plane group number:", group_type_number
                from cctbx.sgtbx.direct_space_asu import plane_group_reference_table
                asu = plane_group_reference_table.get_asu(group_type_number)
                group_type_number *= -1
            else:
                print "Space group number:", group_type_number
                asu = reference_table.get_asu(group_type_number)
            for colored_grid_points in [None, []]:
                asu_as_jvx(group_type_number=group_type_number,
                           asu=asu,
                           colored_grid_points=colored_grid_points,
                           http_server_name=http_server_name,
                           html_subdir=html_subdir)
Example #12
0
def run(http_server_name=None, html_subdir="asu_gallery"):
    parser = OptionParser(usage="usage: python jv_asu.py [options] [numbers...]")
    parser.add_option(
        "-s", "--server", action="store", type="string", help="network name of http server", metavar="NAME"
    )
    parser.add_option("-p", "--plane_group", action="store_true")
    options, args = parser.parse_args()
    if options.server is not None:
        http_server_name = options.server
    if not os.path.isdir(html_subdir):
        os.makedirs(html_subdir)
    jv_index.write_html(open("%s/index.html" % html_subdir, "w"))
    guide_to_notation.write_html(open("%s/guide_to_notation.html" % html_subdir, "w"))
    if len(args) == 0:
        if options.plane_group:
            args = ["1-17"]
        else:
            args = ["1-230"]
    for arg in args:
        numbers = [int(n) for n in arg.split("-")]
        assert len(numbers) in (1, 2)
        if len(numbers) == 1:
            numbers *= 2
        for group_type_number in xrange(numbers[0], numbers[1] + 1):
            if options.plane_group:
                print "Plane group number:", group_type_number
                from cctbx.sgtbx.direct_space_asu import plane_group_reference_table

                asu = plane_group_reference_table.get_asu(group_type_number)
                group_type_number *= -1
            else:
                print "Space group number:", group_type_number
                asu = reference_table.get_asu(group_type_number)
            for colored_grid_points in [None, []]:
                asu_as_jvx(
                    group_type_number=group_type_number,
                    asu=asu,
                    colored_grid_points=colored_grid_points,
                    http_server_name=http_server_name,
                    html_subdir=html_subdir,
                )
Example #13
0
     if (not flags.enantiomorphic):
         test_all(gridding)
     else:
         flags.regular_args.extend([
             str(i)
             for i in (76, 78, 91, 95, 92, 96, 144, 145, 151, 153, 152, 154,
                       169, 170, 171, 172, 178, 179, 180, 181, 212, 213)
         ])
 if (len(flags.regular_args) > 1):
     for arg in flags.regular_args[1:]:
         numbers = [int(n) for n in arg.split('-')]
         assert len(numbers) in (1, 2)
         if (len(numbers) == 1): numbers *= 2
         for group_type_number in range(numbers[0], numbers[1] + 1):
             if (not flags.plane_group):
                 asu_original = reference_table.get_asu(group_type_number)
                 assert sgtbx.space_group(asu_original.hall_symbol) \
                     == sgtbx.space_group_info(number=group_type_number).group()
             else:
                 from cctbx.sgtbx.direct_space_asu import plane_group_reference_table
                 asu_original = plane_group_reference_table.get_asu(
                     point_group_number=group_type_number)
                 print("Plane group number:", group_type_number)
                 group_type_number *= -1
             asu = asu_original
             if (flags.strip or flags.strip_polygons):
                 asu = asu_original.shape_only()
             print("Writing asu_gallery files")
             jv_asu.asu_as_jvx(group_type_number, asu)
             if (flags.strip_grid):
                 asu = asu_original.shape_only()