コード例 #1
0
def exercise():
    exercise_bond()
    for irexp in [1, 2, 3, 4, 5]:
        for rexp in [3, 4]:
            exercise_nonbonded(
                nonbonded_type=geometry_restraints.nonbonded_prolsq,
                repulsion_function=geometry_restraints.
                prolsq_repulsion_function(irexp=irexp, rexp=rexp))
    for irexp in [1, 2, 3, 4, 5]:
        exercise_nonbonded(
            nonbonded_type=geometry_restraints.nonbonded_inverse_power,
            repulsion_function=geometry_restraints.
            inverse_power_repulsion_function(nonbonded_distance_cutoff=1.e20,
                                             irexp=irexp))
    for exponent in [1, 2, 3]:
        exercise_nonbonded(
            nonbonded_type=geometry_restraints.nonbonded_cos,
            repulsion_function=geometry_restraints.cos_repulsion_function(
                max_residual=13, exponent=exponent))
    for norm_height_at_vdw_distance in [0.1, 0.2, 0.3]:
        exercise_nonbonded(
            nonbonded_type=geometry_restraints.nonbonded_gaussian,
            repulsion_function=geometry_restraints.gaussian_repulsion_function(
                max_residual=12,
                norm_height_at_vdw_distance=norm_height_at_vdw_distance))
    exercise_angle()
    exercise_dihedral()
    exercise_chirality(verbose="--verbose" in sys.argv[1:])
    exercise_planarity()
    print("OK")
コード例 #2
0
def exercise():
  exercise_bond()
  for irexp in [1,2,3,4,5]:
    for rexp in [3,4]:
      exercise_nonbonded(
        nonbonded_type=geometry_restraints.nonbonded_prolsq,
        repulsion_function=geometry_restraints.prolsq_repulsion_function(
          irexp=irexp,
          rexp=rexp))
  for irexp in [1,2,3,4,5]:
    exercise_nonbonded(
      nonbonded_type=geometry_restraints.nonbonded_inverse_power,
      repulsion_function=geometry_restraints.inverse_power_repulsion_function(
        nonbonded_distance_cutoff=1.e20,
        irexp=irexp))
  for exponent in [1,2,3]:
    exercise_nonbonded(
      nonbonded_type=geometry_restraints.nonbonded_cos,
      repulsion_function=geometry_restraints.cos_repulsion_function(
        max_residual=13,
        exponent=exponent))
  for norm_height_at_vdw_distance in [0.1,0.2,0.3]:
    exercise_nonbonded(
      nonbonded_type=geometry_restraints.nonbonded_gaussian,
      repulsion_function=geometry_restraints.gaussian_repulsion_function(
        max_residual=12,
        norm_height_at_vdw_distance=norm_height_at_vdw_distance))
  exercise_angle()
  exercise_dihedral()
  exercise_chirality(verbose="--verbose" in sys.argv[1:])
  exercise_planarity()
  print "OK"
コード例 #3
0
 def __init__(self,
       si_structure,
       distance_cutoff,
       nonbonded_distance_cutoff=None,
       nonbonded_buffer=1,
       nonbonded_repulsion_function_type="gaussian",
       nonbonded_max_residual_bond_stretch_factor=1.0,
       n_trials=1,
       n_macro_cycles=2,
       max_exceptions_handled=10,
       connectivities=None,
       out=None,
       dev=False):
   assert nonbonded_repulsion_function_type in ["gaussian", "cos", "prolsq"]
   assert n_trials > 0
   assert n_macro_cycles > 0
   assert max_exceptions_handled >= 0
   if (out is None): out = sys.stdout
   si_structure.show_summary(f=out).show_scatterers(f=out)
   print >> out
   out.flush()
   def get_si_si_sym_table():
     si_asu_mappings = si_structure.asu_mappings(
       buffer_thickness=distance_cutoff)
     asu_table = crystal.pair_asu_table(asu_mappings=si_asu_mappings)
     asu_table.add_all_pairs(distance_cutoff=distance_cutoff)
     si_si_sym_table = asu_table.extract_pair_sym_table()
     si_pair_counts = si_structure.pair_sym_table_show_distances(
       pair_sym_table=si_si_sym_table,
       out=out)
     if (connectivities is not None):
       assert list(si_pair_counts) == connectivities
     print >> out
     return si_si_sym_table, si_pair_counts
   si_si_sym_table, si_pair_counts = get_si_si_sym_table()
   out.flush()
   si_o = add_oxygen(
     si_structure=si_structure,
     si_si_sym_table=si_si_sym_table)
   si_o.structure.show_summary(f=out).show_scatterers(f=out)
   si_o_sst = si_o.structure.site_symmetry_table()
   print >> out
   out.flush()
   si_o_pair_counts = si_o.structure.pair_sym_table_show_distances(
     pair_sym_table=si_o.bond_sym_table,
     out=out)
   n_si = si_pair_counts.size()
   n_si_o = si_o_pair_counts.size()
   assert si_o_pair_counts[:n_si].all_eq(si_pair_counts)
   assert si_o_pair_counts[n_si:].count(2) == n_si_o-n_si
   print >> out
   out.flush()
   o_si_o_sym_table = make_o_si_o_sym_table(
     si_o_structure=si_o.structure,
     si_o_bond_sym_table=si_o.bond_sym_table)
   o_si_o_pair_counts = si_o.structure.pair_sym_table_show_distances(
     pair_sym_table=o_si_o_sym_table,
     out=out)
   assert o_si_o_pair_counts[:n_si].all_eq(0)
   if (si_pair_counts.count(4) == n_si):
     assert o_si_o_pair_counts[n_si:].all_eq(6)
   print >> out
   out.flush()
   shell_sym_tables = crystal.coordination_sequences.shell_sym_tables(
     full_pair_sym_table=si_o.bond_sym_table.full_connectivity(
       site_symmetry_table=si_o_sst),
     site_symmetry_table=si_o_sst,
     max_shell=3)
   if (1):
     shell_sym_tables[0].add_pair_sym_table_in_place(other=si_si_sym_table)
   if (1):
     shell_sym_tables[0].add_pair_sym_table_in_place(other=o_si_o_sym_table)
   shell_sym_tables = [_.tidy(site_symmetry_table=si_o_sst)
     for _ in shell_sym_tables]
   bond_params_table = setup_bond_params_table(
     structure=si_o.structure,
     bond_sym_table=shell_sym_tables[0])
   nonbonded_params = setup_nonbonded_params()
   nonbonded_types = flex.std_string()
   for scatterer in si_o.structure.scatterers():
     nonbonded_types.append(scatterer.scattering_type)
   if (nonbonded_repulsion_function_type == "gaussian"):
     nonbonded_function = geometry_restraints.gaussian_repulsion_function(
       max_residual=bond_params_table.mean_residual(
         bond_stretch_factor=nonbonded_max_residual_bond_stretch_factor))
     if (nonbonded_distance_cutoff is None):
       nonbonded_distance_cutoff = 7
   elif (nonbonded_repulsion_function_type == "cos"):
     nonbonded_function = geometry_restraints.cos_repulsion_function(
       max_residual=bond_params_table.mean_residual(
         bond_stretch_factor=nonbonded_max_residual_bond_stretch_factor))
   else:
     nonbonded_function = geometry_restraints.prolsq_repulsion_function()
   geometry_restraints_manager = geometry_restraints.manager.manager(
     crystal_symmetry=si_o.structure,
     site_symmetry_table=si_o_sst,
     bond_params_table=bond_params_table,
     shell_sym_tables=shell_sym_tables,
     nonbonded_params=nonbonded_params,
     nonbonded_types=nonbonded_types,
     nonbonded_function=nonbonded_function,
     nonbonded_distance_cutoff=nonbonded_distance_cutoff,
     nonbonded_buffer=nonbonded_buffer,
     max_reasonable_bond_distance=100)
   minimized = None
   for i_trial in xrange(n_trials):
     for i_exceptions_handled in xrange(max_exceptions_handled+1):
       trial_structure = si_o.structure.deep_copy_scatterers()
       if (i_trial > 0):
         n_scatterers = trial_structure.scatterers().size()
         trial_structure.set_sites_cart(flex.vec3_double(flex.random_double(
           size=n_scatterers*3)*10-5))
         trial_structure.apply_symmetry_sites()
       trial_minimized = []
       trial_sites_cart = None
       for i_macro_cycle in xrange(n_macro_cycles):
         if (trial_sites_cart is not None):
           trial_structure.set_sites_cart(sites_cart=trial_sites_cart)
           trial_structure = trial_structure.random_shift_sites(
             max_shift_cart=0.2)
           trial_structure.apply_symmetry_sites()
         trial_sites_cart = trial_structure.sites_cart()
         geometry_restraints_flags = geometry_restraints.flags.flags(
           bond=True,
           nonbonded=((i_macro_cycle % 2) != (n_macro_cycles % 2)))
         if (not dev):
           try:
             m = geometry_restraints.lbfgs.lbfgs(
               sites_cart=trial_sites_cart,
               correct_special_position_tolerance=1.0,
               geometry_restraints_manager=geometry_restraints_manager,
               geometry_restraints_flags=geometry_restraints_flags,
               lbfgs_termination_params=scitbx.lbfgs.termination_parameters(
                 max_iterations=100),
               lbfgs_exception_handling_params=
                 scitbx.lbfgs.exception_handling_parameters(
                   ignore_line_search_failed_step_at_lower_bound=True))
           except RuntimeError, lbfgs_error:
             if (i_trial == 0): raise
             if (not str(lbfgs_error).startswith(
                   "Bond distance > max_reasonable_bond_distance: ")): raise
             m = None
             break
           else:
             trial_minimized.append(m)
             trial_structure.set_sites_cart(sites_cart=trial_sites_cart)
         else:
           m = dev_lbfgs(
             sites_cart=trial_sites_cart,
             geometry_restraints_manager=geometry_restraints_manager,
             geometry_restraints_flags=geometry_restraints_flags,
             lbfgs_termination_params=scitbx.lbfgs.termination_parameters(
               max_iterations=100),
             lbfgs_exception_handling_params=
               scitbx.lbfgs.exception_handling_parameters(
                 ignore_line_search_failed_step_at_lower_bound=True))
           trial_minimized.append(m)
           trial_structure.set_sites_cart(sites_cart=trial_sites_cart)
       if (m is not None):
         break
     else:
       raise RuntimeError(
         "max_exceptions_handled=%d exceeded: %s" % (
           max_exceptions_handled, str(lbfgs_error)))
     ftr = trial_minimized[-1].final_target_result
     pair_proxies = geometry_restraints_manager.pair_proxies(
       sites_cart=trial_sites_cart)
     min_nonbonded_distance = flex.min_default(
       pair_proxies.nonbonded_proxies.deltas(sites_cart=trial_sites_cart),
       None)
     print >> out, \
       "i_trial, bond, nonbonded, min distance: %d, %.6g, %.6g, %s" % (
         i_trial,
         ftr.bond_residual_sum,
         ftr.nonbonded_residual_sum,
         format_value(format="%.4g", value=min_nonbonded_distance))
     out.flush()
     if (minimized is None or       minimized[-1].final_target_result.target
                            > trial_minimized[-1].final_target_result.target):
       minimized = trial_minimized
       minimized_structure = trial_structure
       best_i_trial = i_trial