Пример #1
0
def get_atom_radius(xray_structure=None,
                    d_min=None,
                    map_data=None,
                    crystal_symmetry=None,
                    radius=None):
    if (radius is not None): return radius
    radii = []
    if (d_min is not None):
        radii.append(d_min)
    if ([xray_structure, crystal_symmetry].count(None) == 0):
        assert crystal_symmetry.is_similar_symmetry(
            xray_structure.crystal_symmetry())
    if ([map_data, crystal_symmetry].count(None) == 0):
        d99 = maptbx.d99(map=map_data,
                         crystal_symmetry=crystal_symmetry).result.d99
        radii.append(d99)
    if (xray_structure is not None and d_min is not None):
        b_iso = adptbx.u_as_b(
            flex.mean(xray_structure.extract_u_iso_or_u_equiv()))
        o = maptbx.atom_curves(scattering_type="C",
                               scattering_table="electron")
        rad_image = o.image(d_min=d_min,
                            b_iso=b_iso,
                            radius_max=max(15., d_min),
                            radius_step=0.01).radius
        radii.append(rad_image)
    return max(3, min(10, max(radii)))
Пример #2
0
 def _atom_radius(self):
     b_iso = adptbx.u_as_b(
         flex.mean(self.xray_structure.extract_u_iso_or_u_equiv()))
     o = maptbx.atom_curves(scattering_type="C",
                            scattering_table="electron")
     return o.image(d_min=self.d_min,
                    b_iso=b_iso,
                    radius_max=max(15., self.d_min),
                    radius_step=0.01).radius
Пример #3
0
def get_atom_radius(xray_structure=None, resolution=None, radius=None):
  if(radius is not None): return radius
  radii = []
  if(resolution is not None):
    radii.append(resolution)
  if(xray_structure is not None and resolution is not None):
    b_iso = adptbx.u_as_b(
      flex.mean(xray_structure.extract_u_iso_or_u_equiv()))
    o = maptbx.atom_curves(scattering_type="C", scattering_table="electron")
    rad_image = o.image(d_min=resolution, b_iso=b_iso,
      radius_max=max(15.,resolution), radius_step=0.01).radius
    radii.append(rad_image)
  return max(3, min(10, max(radii)))
Пример #4
0
def run():
    for i, mxp in enumerate([0, 6]):
        o = maptbx.atom_curves(scattering_type="C", scattering_table="wk1995")
        b = o.bcr_approx(
            d_min=2.0,
            b_iso=0,
            radius_max=5,
            radius_step=0.01,
            mxp=mxp,
            epsc=0.001,
            kpres=0  # BCR params
        )
        r = rfactor(b.image_values, b.bcr_approx_values)
        if (i == 0): assert r > 10, r
        else: assert r < 0.3, r
Пример #5
0
def run():
    o = maptbx.atom_curves(scattering_type="C")
    result = o.image(d_min=3.0, b_iso=50, radius_step=0.01)
    assert approx_equal(result.radius, 2.59, 0.01)
    #
    o.xray_structure.set_b_iso(value=50)
    map_data = get_map_data(xrs=o.xray_structure, d_min=3.0)
    image = flex.double()
    dim = o.xray_structure.unit_cell().parameters()[0]
    for i, r in enumerate(result.radii):
        mv = map_data.eight_point_interpolation([r / dim, 0, 0])
        image.append(mv)
    cc = flex.linear_correlation(x=image, y=result.image_values).coefficient()
    assert cc > 0.99
    num = flex.sum(flex.abs(flex.abs(image) - flex.abs(result.image_values)))
    den = flex.sum(flex.abs(flex.abs(image) + flex.abs(result.image_values)))
    r = 100. * 2. * num / den
    assert r < 6.
Пример #6
0
def run(d_min=2.0, radius_max=5, radius_step=0.01):
    for i, mxp in enumerate([0, 6]):
        o = maptbx.atom_curves(scattering_type="C", scattering_table="wk1995")
        b = o.bcr_approx(
            d_min=d_min,
            radius_max=radius_max,
            radius_step=radius_step,
            mxp=mxp,
            epsc=0.001,
            kpres=0  # BCR params
        )
        r = rfactor(b.image_values, b.bcr_approx_values)
        if (i == 0): assert r > 10, r
        else: assert r < 0.4, r
        #
        # b_iso is not 0
        #
        b_iso = 50
        im = o.image(d_min=d_min,
                     b_iso=b_iso,
                     radius_max=radius_max,
                     radius_step=radius_step)
        bcr_approx_values = flex.double()
        bcr_approx_values_cpp = flex.double()
        # c++
        sc = xray.scatterer("c", site=(0, 0, 0), u=adptbx.b_as_u(b_iso))
        bcr_cpp = ext.bcr_model(scatterer=sc, B=b.B, C=b.C, R=b.R)
        calc = ext.calculator(bcr_model=bcr_cpp)
        #
        for r in im.radii:
            first = 0
            second = 0
            for B, C, R in zip(b.B, b.C, b.R):
                if (abs(R) < 1.e-6):
                    first += bcr.gauss(B=B, C=C, r=r, b_iso=b_iso)
                else:
                    second += C * bcr.chi(B=B, R=R, r=r, b_iso=b_iso)
            bcr_approx_values.append(first + second)
            bcr_approx_values_cpp.append(calc.rho(r))
        r = rfactor(im.image_values, bcr_approx_values)
        if (i == 0): assert r > 10, r
        else: assert r < 0.4, r
        assert approx_equal(bcr_approx_values, bcr_approx_values_cpp)