Пример #1
0
def exercise_lbfgs(test_case, use_geo, out, d_min=2):
    sites_cart, geo_manager = cctbx.geometry_restraints.manager.\
      construct_non_crystallographic_conserving_bonds_and_angles(
        sites_cart=flex.vec3_double(test_case.sites),
        edge_list_bonds=test_case.bonds,
        edge_list_angles=test_case.angles())
    scatterers = flex.xray_scatterer(sites_cart.size(),
                                     xray.scatterer(scattering_type="C", b=20))
    for sc, lbl in zip(scatterers, test_case.labels):
        sc.label = lbl
    structure = xray.structure(crystal_symmetry=geo_manager.crystal_symmetry,
                               scatterers=scatterers)
    structure.set_sites_cart(sites_cart=sites_cart)
    f_calc = structure.structure_factors(d_min=d_min,
                                         anomalous_flag=False).f_calc()
    fft_map = f_calc.fft_map()
    fft_map.apply_sigma_scaling()
    if (use_geo):
        axis = matrix.col(flex.random_double_point_on_sphere())
        rot = scitbx.math.r3_rotation_axis_and_angle_as_matrix(axis=axis,
                                                               angle=25,
                                                               deg=True)
        trans = matrix.col(flex.random_double_point_on_sphere()) * 1.0
        structure.apply_rigid_body_shift(rot=rot, trans=trans)
        geo_manager.energies_sites(sites_cart=structure.sites_cart()).show(
            f=out)
        minimized = real_space_refinement_simple.lbfgs(
            sites_cart=structure.sites_cart(),
            density_map=fft_map.real_map(),
            geometry_restraints_manager=geo_manager,
            gradients_method="fd",
            real_space_target_weight=1,
            real_space_gradients_delta=d_min / 3)
        geo_manager.energies_sites(sites_cart=minimized.sites_cart).show(f=out)
    else:
        minimized = real_space_refinement_simple.lbfgs(
            sites_cart=structure.sites_cart(),
            density_map=fft_map.real_map(),
            unit_cell=structure.unit_cell(),
            gradients_method="fd",
            real_space_gradients_delta=d_min / 3)
    rmsd_start = sites_cart.rms_difference(structure.sites_cart())
    rmsd_final = sites_cart.rms_difference(minimized.sites_cart)
    print("RMSD start, final:", rmsd_start, rmsd_final, file=out)
    if (use_geo):
        assert rmsd_start >= 1 - 1e-6
        assert rmsd_final < 0.2

    def show_f_g(label, f, g):
        print(label, "f, |g|:", f, flex.mean_sq(g)**0.5, file=out)

    show_f_g(label="start", f=minimized.f_start, g=minimized.g_start)
    show_f_g(label="final", f=minimized.f_final, g=minimized.g_final)
    assert minimized.f_final <= minimized.f_start
    return minimized
def exercise_lbfgs(test_case, use_geo, out, d_min=2):
  sites_cart, geo_manager = cctbx.geometry_restraints.manager.construct_non_crystallographic_conserving_bonds_and_angles(
    sites_cart=flex.vec3_double(test_case.sites),
    edge_list_bonds=test_case.bonds,
    edge_list_angles=test_case.angles())
  scatterers = flex.xray_scatterer(
    sites_cart.size(), xray.scatterer(scattering_type="C", b=20))
  for sc,lbl in zip(scatterers, test_case.labels):
    sc.label = lbl
  structure = xray.structure(
    crystal_symmetry=geo_manager.crystal_symmetry,
    scatterers=scatterers)
  structure.set_sites_cart(sites_cart=sites_cart)
  f_calc = structure.structure_factors(
    d_min=d_min, anomalous_flag=False).f_calc()
  fft_map = f_calc.fft_map()
  fft_map.apply_sigma_scaling()
  if (use_geo):
    axis = matrix.col(flex.random_double_point_on_sphere())
    rot = scitbx.math.r3_rotation_axis_and_angle_as_matrix(
      axis=axis, angle=25, deg=True)
    trans = matrix.col(flex.random_double_point_on_sphere()) * 1.0
    structure.apply_rigid_body_shift(rot=rot, trans=trans)
    geo_manager.energies_sites(sites_cart=structure.sites_cart()).show(f=out)
    minimized = real_space_refinement_simple.lbfgs(
      sites_cart=structure.sites_cart(),
      density_map=fft_map.real_map(),
      geometry_restraints_manager=geo_manager,
      real_space_target_weight=1,
      real_space_gradients_delta=d_min/3)
    geo_manager.energies_sites(sites_cart=minimized.sites_cart).show(f=out)
  else:
    minimized = real_space_refinement_simple.lbfgs(
      sites_cart=structure.sites_cart(),
      density_map=fft_map.real_map(),
      unit_cell=structure.unit_cell(),
      real_space_gradients_delta=d_min/3)
  rmsd_start = sites_cart.rms_difference(structure.sites_cart())
  rmsd_final = sites_cart.rms_difference(minimized.sites_cart)
  print >> out, "RMSD start, final:", rmsd_start, rmsd_final
  if (use_geo):
    assert rmsd_start >= 1-1e-6
    assert rmsd_final < 0.2
  def show_f_g(label, f, g):
    print >> out, label, "f, |g|:", f, flex.mean_sq(g)**0.5
  show_f_g(label="start", f=minimized.f_start, g=minimized.g_start)
  show_f_g(label="final", f=minimized.f_final, g=minimized.g_final)
  assert minimized.f_final <= minimized.f_start
  return minimized
Пример #3
0
def run():
    def compute_map(xray_structure, d_min=1.5, resolution_factor=1. / 4):
        fc = xray_structure.structure_factors(d_min=d_min).f_calc()
        fft_map = fc.fft_map(resolution_factor=resolution_factor)
        fft_map.apply_sigma_scaling()
        result = fft_map.real_map_unpadded()
        return result, fc, fft_map

    xrs = random_structure.xray_structure(
        space_group_info=sgtbx.space_group_info("P212121"),
        elements=["N", "C", "O", "S", "P"] * 10,
        volume_per_atom=50)
    map_target, tmp, tmp = compute_map(xray_structure=xrs)
    xrs_sh = xrs.deep_copy_scatterers()
    xrs_sh.shake_sites_in_place(mean_distance=0.8)
    start_error = flex.mean(xrs.distances(other=xrs_sh))
    print "Start:", start_error
    map_current, miller_array, crystal_gridding = compute_map(
        xray_structure=xrs_sh)
    for step in [miller_array.d_min() / 4] * 5:
        if (1):
            minimized = real_space_target_and_gradients.minimization(
                xray_structure=xrs_sh,
                miller_array=miller_array,
                crystal_gridding=crystal_gridding,
                map_target=map_target,
                max_iterations=500,
                min_iterations=25,
                step=step,
                geometry_restraints_manager=None,
                target_type="diff_map")
            xrs_sh = minimized.xray_structure
            map_current = minimized.map_current
            final_error = flex.mean(
                xrs.distances(other=minimized.xray_structure))
        if (0):
            minimized = real_space_refinement_simple.lbfgs(
                sites_cart=xrs_sh.sites_cart(),
                density_map=map_target,
                unit_cell=xrs_sh.unit_cell(),
                geometry_restraints_manager=None,
                real_space_gradients_delta=step)
            xrs_sh = xrs_sh.replace_sites_cart(minimized.sites_cart)
            final_error = flex.mean(xrs.distances(other=xrs_sh))

        print "Final:", final_error
    assert approx_equal(start_error, 0.8, 1.e-3)
    assert final_error < 1.e-4
    print "OK"
def run():
  def compute_map(xray_structure, d_min=1.5, resolution_factor=1./4):
    fc = xray_structure.structure_factors(d_min = d_min).f_calc()
    fft_map = fc.fft_map(resolution_factor=resolution_factor)
    fft_map.apply_sigma_scaling()
    result = fft_map.real_map_unpadded()
    return result, fc, fft_map
  xrs = random_structure.xray_structure(
    space_group_info  = sgtbx.space_group_info("P212121"),
    elements          = ["N","C","O","S","P"]*10,
    volume_per_atom   = 50)
  map_target,tmp,tmp = compute_map(xray_structure = xrs)
  xrs_sh = xrs.deep_copy_scatterers()
  xrs_sh.shake_sites_in_place(mean_distance=0.8)
  start_error = flex.mean(xrs.distances(other = xrs_sh))
  print "Start:", start_error
  map_current, miller_array, crystal_gridding = compute_map(
    xray_structure = xrs_sh)
  for step in [miller_array.d_min()/4]*5:
    if(1):
      minimized = real_space_target_and_gradients.minimization(
        xray_structure              = xrs_sh,
        miller_array                = miller_array,
        crystal_gridding            = crystal_gridding,
        map_target                  = map_target,
        max_iterations              = 500,
        min_iterations              = 25,
        step                        = step,
        geometry_restraints_manager = None,
        target_type                 = "diff_map")
      xrs_sh = minimized.xray_structure
      map_current = minimized.map_current
      final_error = flex.mean(xrs.distances(other = minimized.xray_structure))
    if(0):
      minimized = real_space_refinement_simple.lbfgs(
        sites_cart=xrs_sh.sites_cart(),
        density_map=map_target,
        unit_cell=xrs_sh.unit_cell(),
        geometry_restraints_manager=None,
        real_space_gradients_delta=step)
      xrs_sh = xrs_sh.replace_sites_cart(minimized.sites_cart)
      final_error = flex.mean(xrs.distances(other = xrs_sh))

    print "Final:", final_error
  assert approx_equal(start_error, 0.8, 1.e-3)
  assert final_error < 1.e-4
  print "OK"