def exercise_groel_sampling(verbose):
  crystal_symmetry = crystal.symmetry(
    unit_cell="255.260  265.250  184.400  90.00  90.00",
    space_group_symbol="P 21 21 2")
  t00 = time.time()
  n_sites = []
  for use_space_group_symmetry in [True,False]:
    for use_seminvariants in [True,False]:
      for all_twelve_neighbors in [False,True]:
        sampling_generator = close_packing.hexagonal_sampling(
          crystal_symmetry=crystal_symmetry,
          symmetry_flags=sgtbx.search_symmetry_flags(
            use_space_group_symmetry=use_space_group_symmetry,
            use_space_group_ltr=0,
            use_seminvariants=use_seminvariants,
            use_normalizer_k2l=False,
            use_normalizer_l2n=False),
          point_distance=2,
          buffer_thickness=-1,
          all_twelve_neighbors=all_twelve_neighbors)
        t0 = time.time()
        n_sites.append(sampling_generator.count_sites())
        if (verbose):
          print n_sites[-1], "%.2f" % (time.time() - t0)
  assert n_sites == [41712, 45319, 304200, 315809, # depends an float_asu, ...
                     162240, 170797, 1195830, 1232774]
  print "time groel_sampling: %.2f seconds" % (time.time() - t00)
示例#2
0
def exercise_groel_sampling(verbose):
    crystal_symmetry = crystal.symmetry(
        unit_cell="255.260  265.250  184.400  90.00  90.00",
        space_group_symbol="P 21 21 2")
    t00 = time.time()
    n_sites = []
    for use_space_group_symmetry in [True, False]:
        for use_seminvariants in [True, False]:
            for all_twelve_neighbors in [False, True]:
                sampling_generator = close_packing.hexagonal_sampling(
                    crystal_symmetry=crystal_symmetry,
                    symmetry_flags=sgtbx.search_symmetry_flags(
                        use_space_group_symmetry=use_space_group_symmetry,
                        use_space_group_ltr=0,
                        use_seminvariants=use_seminvariants,
                        use_normalizer_k2l=False,
                        use_normalizer_l2n=False),
                    point_distance=2,
                    buffer_thickness=-1,
                    all_twelve_neighbors=all_twelve_neighbors)
                t0 = time.time()
                n_sites.append(sampling_generator.count_sites())
                if (verbose):
                    print(n_sites[-1], "%.2f" % (time.time() - t0))
    assert n_sites == [
        41712,
        45319,
        304200,
        315809,  # depends an float_asu, ...
        162240,
        170797,
        1195830,
        1232774
    ]
    print("time groel_sampling: %.2f seconds" % (time.time() - t00))
示例#3
0
 def __init__(self,
              xray_structure,
              solvent_radius,
              shrink_truncation_radius,
              ignore_hydrogen_atoms=False,
              crystal_gridding=None,
              grid_step=None,
              d_min=None,
              resolution_factor=1 / 4,
              atom_radii_table=None,
              use_space_group_symmetry=False):
     self.xray_structure = xray_structure
     if crystal_gridding is None:
         self.crystal_gridding = maptbx.crystal_gridding(
             unit_cell=xray_structure.unit_cell(),
             space_group_info=xray_structure.space_group_info(),
             step=grid_step,
             d_min=d_min,
             resolution_factor=resolution_factor,
             symmetry_flags=sgtbx.search_symmetry_flags(
                 use_space_group_symmetry=use_space_group_symmetry))
     else:
         self.crystal_gridding = crystal_gridding
     if use_space_group_symmetry:
         atom_radii = cctbx.masks.vdw_radii(
             xray_structure, table=atom_radii_table).atom_radii
         asu_mappings = xray_structure.asu_mappings(
             buffer_thickness=flex.max(atom_radii) + solvent_radius)
         scatterers_asu_plus_buffer = flex.xray_scatterer()
         frac = xray_structure.unit_cell().fractionalize
         for sc, mappings in zip(xray_structure.scatterers(),
                                 asu_mappings.mappings()):
             for mapping in mappings:
                 scatterers_asu_plus_buffer.append(
                     sc.customized_copy(site=frac(mapping.mapped_site())))
         xs = xray.structure(crystal_symmetry=xray_structure,
                             scatterers=scatterers_asu_plus_buffer)
     else:
         xs = xray_structure.expand_to_p1()
     self.vdw_radii = cctbx.masks.vdw_radii(xs, table=atom_radii_table)
     self.mask = cctbx.masks.around_atoms(
         unit_cell=xs.unit_cell(),
         space_group_order_z=xs.space_group().order_z(),
         sites_frac=xs.sites_frac(),
         atom_radii=self.vdw_radii.atom_radii,
         gridding_n_real=self.crystal_gridding.n_real(),
         solvent_radius=solvent_radius,
         shrink_truncation_radius=shrink_truncation_radius)
     if use_space_group_symmetry:
         tags = self.crystal_gridding.tags()
         tags.tags().apply_symmetry_to_mask(self.mask.data)
     self.flood_fill = cctbx.masks.flood_fill(self.mask.data,
                                              xray_structure.unit_cell())
     self.exclude_void_flags = [False] * self.flood_fill.n_voids()
     self.solvent_accessible_volume = self.n_solvent_grid_points() \
         / self.mask.data.size() * xray_structure.unit_cell().volume()
示例#4
0
 def __init__(
     self,
     xray_structure,
     solvent_radius,
     shrink_truncation_radius,
     ignore_hydrogen_atoms=False,
     crystal_gridding=None,
     grid_step=None,
     d_min=None,
     resolution_factor=1 / 4,
     atom_radii_table=None,
     use_space_group_symmetry=False,
 ):
     self.xray_structure = xray_structure
     if crystal_gridding is None:
         self.crystal_gridding = maptbx.crystal_gridding(
             unit_cell=xray_structure.unit_cell(),
             space_group_info=xray_structure.space_group_info(),
             step=grid_step,
             d_min=d_min,
             resolution_factor=resolution_factor,
             symmetry_flags=sgtbx.search_symmetry_flags(use_space_group_symmetry=use_space_group_symmetry),
         )
     else:
         self.crystal_gridding = crystal_gridding
     if use_space_group_symmetry:
         atom_radii = cctbx.masks.vdw_radii(xray_structure, table=atom_radii_table).atom_radii
         asu_mappings = xray_structure.asu_mappings(buffer_thickness=flex.max(atom_radii) + solvent_radius)
         scatterers_asu_plus_buffer = flex.xray_scatterer()
         frac = xray_structure.unit_cell().fractionalize
         for sc, mappings in zip(xray_structure.scatterers(), asu_mappings.mappings()):
             for mapping in mappings:
                 scatterers_asu_plus_buffer.append(sc.customized_copy(site=frac(mapping.mapped_site())))
         xs = xray.structure(crystal_symmetry=xray_structure, scatterers=scatterers_asu_plus_buffer)
     else:
         xs = xray_structure.expand_to_p1()
     self.vdw_radii = cctbx.masks.vdw_radii(xs, table=atom_radii_table)
     self.mask = cctbx.masks.around_atoms(
         unit_cell=xs.unit_cell(),
         space_group_order_z=xs.space_group().order_z(),
         sites_frac=xs.sites_frac(),
         atom_radii=self.vdw_radii.atom_radii,
         gridding_n_real=self.crystal_gridding.n_real(),
         solvent_radius=solvent_radius,
         shrink_truncation_radius=shrink_truncation_radius,
     )
     if use_space_group_symmetry:
         tags = self.crystal_gridding.tags()
         tags.tags().apply_symmetry_to_mask(self.mask.data)
     self.flood_fill = cctbx.masks.flood_fill(self.mask.data, xray_structure.unit_cell())
     self.exclude_void_flags = [False] * self.flood_fill.n_voids()
     self.solvent_accessible_volume = (
         self.n_solvent_grid_points() / self.mask.data.size() * xray_structure.unit_cell().volume()
     )
示例#5
0
def exercise_gridding():
  u = uctbx.unit_cell((4,6,7))
  assert maptbx.ext.determine_gridding(u, 2, 1/3., (1,1,1), 5, True) \
      == (8,9,12)
  f = sgtbx.search_symmetry_flags(
    use_space_group_symmetry=True,
    use_space_group_ltr=0,
    use_seminvariants=False,
    use_normalizer_k2l=True,
    use_normalizer_l2n=False)
  t = sgtbx.space_group_info("F 2 2 2").primitive_setting().type()
  assert maptbx.ext.determine_gridding(u, 2, 1/3., f, t, (1,1,1), 5, True) \
      == (12, 12, 12)
 def __init__(self, space_group_info, use_k2l, use_l2n):
     adopt_init_args(self, locals())
     search_symmetry = sgtbx.search_symmetry(
         flags=sgtbx.search_symmetry_flags(use_space_group_symmetry=False,
                                           use_space_group_ltr=-1,
                                           use_seminvariants=True,
                                           use_normalizer_k2l=use_k2l,
                                           use_normalizer_l2n=use_l2n),
         space_group_type=space_group_info.type(),
         seminvariant=space_group_info.structure_seminvariants())
     self.rt_mx = search_symmetry.subgroup()
     self.continuous_shifts = search_symmetry.continuous_shifts()
     assert search_symmetry.continuous_shifts_are_principal()
     self.continuous_shift_flags = search_symmetry.continuous_shift_flags()
def exercise_all_twelve_neighbors():
  sites_cart = hexagonal_close_packing_sampling(
    crystal_symmetry=crystal.symmetry(
      unit_cell=(14.4225, 14.4225, 14.4225, 90, 90, 90),
      space_group_symbol="F m -3 m"),
    symmetry_flags=sgtbx.search_symmetry_flags(
      use_space_group_symmetry=True,
      use_space_group_ltr=0,
      use_seminvariants=True,
      use_normalizer_k2l=False,
      use_normalizer_l2n=False),
    point_distance=2,
    buffer_thickness=-1,
    all_twelve_neighbors=True)
  assert len(sites_cart) == 36 # depends an float_asu, which depends on cb_op,
 def __init__(self, space_group_info, use_k2l, use_l2n):
   adopt_init_args(self, locals())
   search_symmetry = sgtbx.search_symmetry(
     flags=sgtbx.search_symmetry_flags(
       use_space_group_symmetry=False,
       use_space_group_ltr=-1,
       use_seminvariants=True,
       use_normalizer_k2l=use_k2l,
       use_normalizer_l2n=use_l2n),
     space_group_type=space_group_info.type(),
     seminvariant=space_group_info.structure_seminvariants())
   self.rt_mx = search_symmetry.subgroup()
   self.continuous_shifts = search_symmetry.continuous_shifts()
   assert search_symmetry.continuous_shifts_are_principal()
   self.continuous_shift_flags = search_symmetry.continuous_shift_flags()
示例#9
0
def exercise_all_twelve_neighbors():
    sites_cart = hexagonal_close_packing_sampling(
        crystal_symmetry=crystal.symmetry(unit_cell=(14.4225, 14.4225, 14.4225,
                                                     90, 90, 90),
                                          space_group_symbol="F m -3 m"),
        symmetry_flags=sgtbx.search_symmetry_flags(
            use_space_group_symmetry=True,
            use_space_group_ltr=0,
            use_seminvariants=True,
            use_normalizer_k2l=False,
            use_normalizer_l2n=False),
        point_distance=2,
        buffer_thickness=-1,
        all_twelve_neighbors=True)
    assert len(
        sites_cart) == 36  # depends an float_asu, which depends on cb_op,
def run_call_back(flags, space_group_info):
  crystal_symmetry = crystal.symmetry(
    unit_cell=space_group_info.any_compatible_unit_cell(volume=1000),
    space_group_info=space_group_info)
  if (flags.Verbose):
    print crystal_symmetry.unit_cell()
  symmetry_flags=sgtbx.search_symmetry_flags(
      use_space_group_symmetry=True,
      use_space_group_ltr=0,
      use_seminvariants=True,
      use_normalizer_k2l=False,
      use_normalizer_l2n=False)
  point_distance = 2
  buffer_thickness = -1
  all_twelve_neighbors = False
  if (flags.strictly_inside):
    buffer_thickness = 0
  if (flags.all_twelve_neighbors):
    all_twelve_neighbors = True
  if (flags.Verbose):
    print "buffer_thickness:", buffer_thickness
    print "all_twelve_neighbors:", all_twelve_neighbors
  sites_cart = hexagonal_close_packing_sampling(
    crystal_symmetry=crystal_symmetry,
    symmetry_flags=symmetry_flags,
    point_distance=point_distance,
    buffer_thickness=buffer_thickness,
    all_twelve_neighbors=all_twelve_neighbors)
  if (1):
    check_distances(
      sites_cart=sites_cart,
      point_distance=point_distance,
      verbose=flags.Verbose)
  if (1):
    check_with_grid_tags(
      inp_symmetry=crystal_symmetry,
      symmetry_flags=symmetry_flags,
      sites_cart=sites_cart,
      point_distance=point_distance,
      strictly_inside=flags.strictly_inside,
      flag_write_pdb=flags.write_pdb,
      verbose=flags.Verbose)
  if (flags.write_pdb):
    dump_pdb(
      file_name="hex_sites.pdb",
      crystal_symmetry=crystal_symmetry,
      sites_cart=sites_cart)
示例#11
0
def run_call_back(flags, space_group_info):
    crystal_symmetry = crystal.symmetry(
        unit_cell=space_group_info.any_compatible_unit_cell(volume=1000),
        space_group_info=space_group_info)
    if (flags.Verbose):
        print(crystal_symmetry.unit_cell())
    symmetry_flags = sgtbx.search_symmetry_flags(use_space_group_symmetry=True,
                                                 use_space_group_ltr=0,
                                                 use_seminvariants=True,
                                                 use_normalizer_k2l=False,
                                                 use_normalizer_l2n=False)
    point_distance = 2
    buffer_thickness = -1
    all_twelve_neighbors = False
    if (flags.strictly_inside):
        buffer_thickness = 0
    if (flags.all_twelve_neighbors):
        all_twelve_neighbors = True
    if (flags.Verbose):
        print("buffer_thickness:", buffer_thickness)
        print("all_twelve_neighbors:", all_twelve_neighbors)
    sites_cart = hexagonal_close_packing_sampling(
        crystal_symmetry=crystal_symmetry,
        symmetry_flags=symmetry_flags,
        point_distance=point_distance,
        buffer_thickness=buffer_thickness,
        all_twelve_neighbors=all_twelve_neighbors)
    if (1):
        check_distances(sites_cart=sites_cart,
                        point_distance=point_distance,
                        verbose=flags.Verbose)
    if (1):
        check_with_grid_tags(inp_symmetry=crystal_symmetry,
                             symmetry_flags=symmetry_flags,
                             sites_cart=sites_cart,
                             point_distance=point_distance,
                             strictly_inside=flags.strictly_inside,
                             flag_write_pdb=flags.write_pdb,
                             verbose=flags.Verbose)
    if (flags.write_pdb):
        dump_pdb(file_name="hex_sites.pdb",
                 crystal_symmetry=crystal_symmetry,
                 sites_cart=sites_cart)
示例#12
0
def exercise_grid_tags():
  t = maptbx.grid_tags((8,10,12))
  assert not t.is_valid()
  assert t.tag_array().all() == (8,10,12)
  s = sgtbx.space_group_info("P 21")
  for i_flags in xrange(8):
    f = sgtbx.search_symmetry_flags(
      use_space_group_symmetry=i_flags % 2 != 0,
      use_space_group_ltr=0,
      use_seminvariants=(i_flags//4) % 2 != 0,
      use_normalizer_k2l=(i_flags//2) % 2 != 0,
      use_normalizer_l2n=False)
    t.build(s.type(), f)
    assert t.is_valid()
    assert t.space_group_type().group() == s.group()
    assert t.symmetry_flags() == f
    if (f.use_seminvariants()):
      assert [(vm.v, vm.m) for vm in t.grid_ss_continuous()] \
          == [((0, 1, 0), 10)]
    assert t.n_grid_misses() == 0
    assert t.n_independent() == (960, 480, 484, 242, 24, 14, 14, 14)[i_flags]
    assert t.n_independent() + t.n_dependent() == t.tag_array().size()
    for flex_type in flex_types():
      d = flex_type(t.tag_array().accessor())
      assert t.n_dependent() == 0 \
          or approx_equal(t.dependent_correlation(d, 1.e-10).coefficient(),0)
      assert t.verify(d, 0)
      t.sum_sym_equiv_points(d)
    if (i_flags == 0):
      assert t.n_independent() == t.tag_array().size()
    else:
      assert t.n_independent() < t.tag_array().size()
      for flex_type in flex_types():
        d = flex_type([random.random() for x in xrange(t.tag_array().size())])
        d.resize(t.tag_array().accessor())
        assert not t.verify(d)
        t.sum_sym_equiv_points(d)
        assert t.verify(d)
def exercise(space_group_info, redundancy_counter=0):
  n_real = (12,12,12)
  miller_max = (2,2,2)
  gt = maptbx.grid_tags(n_real)
  uc = space_group_info.any_compatible_unit_cell(volume=1000)
  fl = sgtbx.search_symmetry_flags(use_space_group_symmetry=True)
  gt.build(space_group_info.type(), fl)
  fft = fftpack.real_to_complex_3d(n_real)
  map0 = flex.double(flex.grid(fft.m_real()).set_focus(fft.n_real()), 0)
  weight_map = map0.deep_copy()
  map = map0.deep_copy()
  ta = gt.tag_array()
  order_z = space_group_info.group().order_z()
  problems_expected = (redundancy_counter != 0)
  for ijk in flex.nested_loop(n_real):
    t = ta[ijk]
    if (t < 0):
      xyz = [i/n for i,n in zip(ijk, n_real)]
      ss = sgtbx.site_symmetry(
        unit_cell=uc,
        space_group=space_group_info.group(),
        original_site=xyz,
        min_distance_sym_equiv=1e-5)
      m = space_group_info.group().multiplicity(
        site=boost.rational.vector(ijk, n_real))
      assert m == ss.multiplicity()
      w = m / order_z
      weight_map[ijk] = w
      map[ijk] = w
    elif (redundancy_counter != 0):
      redundancy_counter -= 1
      ijk_asu = n_dim_index_from_one_dim(i1d=t, sizes=n_real)
      assert ta.accessor()(ijk_asu) == t
      map[ijk] = map[ijk_asu]
  sf_map = fft.forward(map)
  del map
  mi = miller.index_generator(
    space_group_info.type(), False, miller_max).to_array()
  assert mi.size() != 0
  from_map = maptbx.structure_factors.from_map(
    space_group=space_group_info.group(),
    anomalous_flag=False,
    miller_indices=mi,
    complex_map=sf_map,
    conjugate_flag=True)
  sf = [iround(abs(f)) for f in from_map.data()]
  if (sf != [0]*len(sf)):
    assert problems_expected
    return
  else:
    not problems_expected
  #
  map_p1 = map0.deep_copy()
  map_sw = map0.deep_copy()
  for ijk in flex.nested_loop(n_real):
    t = ta[ijk]
    if (t < 0):
      v = random.random()*2-1
      map_p1[ijk] = v
      map_sw[ijk] = v * weight_map[ijk]
    else:
      ijk_asu = n_dim_index_from_one_dim(i1d=t, sizes=n_real)
      assert ta.accessor()(ijk_asu) == t
      assert map_p1[ijk_asu] != 0
      map_p1[ijk] = map_p1[ijk_asu]
  #
  # fft followed by symmetry summation in reciprocal space
  sf_map_sw = fft.forward(map_sw)
  del map_sw
  sf_sw = maptbx.structure_factors.from_map(
    space_group=space_group_info.group(),
    anomalous_flag=False,
    miller_indices=mi,
    complex_map=sf_map_sw,
    conjugate_flag=True).data()
  del sf_map_sw
  #
  # symmetry expansion in real space (done above already) followed fft
  sf_map_p1 = fft.forward(map_p1)
  del map_p1
  sf_p1 = maptbx.structure_factors.from_map(
    space_group=sgtbx.space_group(),
    anomalous_flag=False,
    miller_indices=mi,
    complex_map=sf_map_p1,
    conjugate_flag=True).data()
  del sf_map_p1
  #
  corr = flex.linear_correlation(x=flex.abs(sf_sw), y=flex.abs(sf_p1))
  assert corr.is_well_defined
  assert approx_equal(corr.coefficient(), 1)
示例#14
0
class statistics(ext.statistics):
    def __init__(self, map):
        ext.statistics.__init__(self, map)


class _(boost.python.injector, ext.statistics):
    def show_summary(self, f=None, prefix=""):
        if (f is None): f = sys.stdout
        print >> f, prefix + "max %.6g" % (self.max())
        print >> f, prefix + "min %.6g" % (self.min())
        print >> f, prefix + "mean %.6g" % (self.mean())
        print >> f, prefix + "sigma %.6g" % (self.sigma())


use_space_group_symmetry = sgtbx.search_symmetry_flags(
    use_space_group_symmetry=True)


class _(boost.python.injector, ext.histogram):
    """
  Injector for extending cctbx.maptbx.histogram
  """

    # XXX make a method of scitbx
    def get_percentile_cutoffs(self, map, vol_cutoff_plus_percent,
                               vol_cutoff_minus_percent):
        """
    For the double-step filtration in cctbx.miller (used as part of the
    procedure for replacing missing F-obs in maps), we need to calculate upper
    and lower cutoffs for the data based on percentile values.  This can be
    done in just a few lines of code by using flex.sort_permutation over the
def exercise(space_group_info, redundancy_counter=0):
    n_real = (12, 12, 12)
    miller_max = (2, 2, 2)
    gt = maptbx.grid_tags(n_real)
    uc = space_group_info.any_compatible_unit_cell(volume=1000)
    fl = sgtbx.search_symmetry_flags(use_space_group_symmetry=True)
    gt.build(space_group_info.type(), fl)
    fft = fftpack.real_to_complex_3d(n_real)
    map0 = flex.double(flex.grid(fft.m_real()).set_focus(fft.n_real()), 0)
    weight_map = map0.deep_copy()
    map = map0.deep_copy()
    ta = gt.tag_array()
    order_z = space_group_info.group().order_z()
    problems_expected = (redundancy_counter != 0)
    for ijk in flex.nested_loop(n_real):
        t = ta[ijk]
        if (t < 0):
            xyz = [i / n for i, n in zip(ijk, n_real)]
            ss = sgtbx.site_symmetry(unit_cell=uc,
                                     space_group=space_group_info.group(),
                                     original_site=xyz,
                                     min_distance_sym_equiv=1e-5)
            m = space_group_info.group().multiplicity(
                site=boost.rational.vector(ijk, n_real))
            assert m == ss.multiplicity()
            w = m / order_z
            weight_map[ijk] = w
            map[ijk] = w
        elif (redundancy_counter != 0):
            redundancy_counter -= 1
            ijk_asu = n_dim_index_from_one_dim(i1d=t, sizes=n_real)
            assert ta.accessor()(ijk_asu) == t
            map[ijk] = map[ijk_asu]
    sf_map = fft.forward(map)
    del map
    mi = miller.index_generator(space_group_info.type(), False,
                                miller_max).to_array()
    assert mi.size() != 0
    from_map = maptbx.structure_factors.from_map(
        space_group=space_group_info.group(),
        anomalous_flag=False,
        miller_indices=mi,
        complex_map=sf_map,
        conjugate_flag=True)
    sf = [iround(abs(f)) for f in from_map.data()]
    if (sf != [0] * len(sf)):
        assert problems_expected
        return
    else:
        not problems_expected
    #
    map_p1 = map0.deep_copy()
    map_sw = map0.deep_copy()
    for ijk in flex.nested_loop(n_real):
        t = ta[ijk]
        if (t < 0):
            v = random.random() * 2 - 1
            map_p1[ijk] = v
            map_sw[ijk] = v * weight_map[ijk]
        else:
            ijk_asu = n_dim_index_from_one_dim(i1d=t, sizes=n_real)
            assert ta.accessor()(ijk_asu) == t
            assert map_p1[ijk_asu] != 0
            map_p1[ijk] = map_p1[ijk_asu]
    #
    # fft followed by symmetry summation in reciprocal space
    sf_map_sw = fft.forward(map_sw)
    del map_sw
    sf_sw = maptbx.structure_factors.from_map(
        space_group=space_group_info.group(),
        anomalous_flag=False,
        miller_indices=mi,
        complex_map=sf_map_sw,
        conjugate_flag=True).data()
    del sf_map_sw
    #
    # symmetry expansion in real space (done above already) followed fft
    sf_map_p1 = fft.forward(map_p1)
    del map_p1
    sf_p1 = maptbx.structure_factors.from_map(space_group=sgtbx.space_group(),
                                              anomalous_flag=False,
                                              miller_indices=mi,
                                              complex_map=sf_map_p1,
                                              conjugate_flag=True).data()
    del sf_map_p1
    #
    corr = flex.linear_correlation(x=flex.abs(sf_sw), y=flex.abs(sf_p1))
    assert corr.is_well_defined
    assert approx_equal(corr.coefficient(), 1)
示例#16
0
class statistics(ext.statistics):

  def __init__(self, map):
    ext.statistics.__init__(self, map)

class _(boost.python.injector, ext.statistics):

  def show_summary(self, f=None, prefix=""):
    if (f is None): f = sys.stdout
    print >> f, prefix + "max %.6g" % (self.max())
    print >> f, prefix + "min %.6g" % (self.min())
    print >> f, prefix + "mean %.6g" % (self.mean())
    print >> f, prefix + "sigma %.6g" % (self.sigma())

use_space_group_symmetry = sgtbx.search_symmetry_flags(
  use_space_group_symmetry=True)

class _(boost.python.injector, ext.histogram) :
  """
  Injector for extending cctbx.maptbx.histogram
  """
  # XXX make a method of scitbx
  def get_percentile_cutoffs (self, map, vol_cutoff_plus_percent,
      vol_cutoff_minus_percent) :
    """
    For the double-step filtration in cctbx.miller (used as part of the
    procedure for replacing missing F-obs in maps), we need to calculate upper
    and lower cutoffs for the data based on percentile values.  This can be
    done in just a few lines of code by using flex.sort_permutation over the
    entire map, but this has a huge memory overhead (and possibly computational
    overhead as well).  Since we are only interested in subsets of values at