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)))
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
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)))
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
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.
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)