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
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 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
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()
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)
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)
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, )
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()