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