def exercise_is_simple_interaction(): for space_group_symbol in ["P1", "P41"]: for shifts in flex.nested_loop((-2, -2, -2), (2, 2, 2), False): shifts = matrix.col(shifts) structure = xray.structure( crystal_symmetry=crystal.symmetry( unit_cell=(10, 10, 20, 90, 90, 90), space_group_symbol=space_group_symbol), scatterers=flex.xray_scatterer([ xray.scatterer(label="O", site=shifts + matrix.col((0, 0, 0))), xray.scatterer(label="N", site=shifts + matrix.col((0.5, 0.5, 0))), xray.scatterer(label="C", site=shifts + matrix.col((0.25, 0.25, 0))) ])) asu_mappings = structure.asu_mappings(buffer_thickness=7) pair_generator = crystal.neighbors_simple_pair_generator( asu_mappings=asu_mappings, distance_cutoff=7) simple_interactions = {} for i_pair, pair in enumerate(pair_generator): if (asu_mappings.is_simple_interaction(pair)): assert asu_mappings_is_simple_interaction_emulation( asu_mappings, pair) key = (pair.i_seq, pair.j_seq) assert simple_interactions.get(key, None) is None simple_interactions[key] = 1 else: assert not asu_mappings_is_simple_interaction_emulation( asu_mappings, pair) assert len(simple_interactions) == 2 assert simple_interactions[(0, 2)] == 1 assert simple_interactions[(1, 2)] == 1
def exercise_is_simple_interaction(): for space_group_symbol in ["P1", "P41"]: for shifts in flex.nested_loop((-2,-2,-2),(2,2,2),False): shifts = matrix.col(shifts) structure = xray.structure( crystal_symmetry=crystal.symmetry( unit_cell=(10,10,20,90,90,90), space_group_symbol=space_group_symbol), scatterers=flex.xray_scatterer([ xray.scatterer(label="O", site=shifts+matrix.col((0,0,0))), xray.scatterer(label="N", site=shifts+matrix.col((0.5,0.5,0))), xray.scatterer(label="C", site=shifts+matrix.col((0.25,0.25,0)))])) asu_mappings = structure.asu_mappings(buffer_thickness=7) pair_generator = crystal.neighbors_simple_pair_generator( asu_mappings=asu_mappings, distance_cutoff=7) simple_interactions = {} for i_pair,pair in enumerate(pair_generator): if (asu_mappings.is_simple_interaction(pair)): assert asu_mappings_is_simple_interaction_emulation( asu_mappings, pair) key = (pair.i_seq,pair.j_seq) assert simple_interactions.get(key, None) is None simple_interactions[key] = 1 else: assert not asu_mappings_is_simple_interaction_emulation( asu_mappings, pair) assert len(simple_interactions) == 2 assert simple_interactions[(0,2)] == 1 assert simple_interactions[(1,2)] == 1
def check_distances(sites_cart, point_distance, verbose): asu_mappings = non_crystallographic_asu_mappings(sites_cart=sites_cart) distance_cutoff = point_distance * math.sqrt(2) * 0.99 simple_pair_generator = crystal.neighbors_simple_pair_generator( asu_mappings=asu_mappings, distance_cutoff=distance_cutoff) pair_generator = crystal.neighbors_fast_pair_generator( asu_mappings=asu_mappings, distance_cutoff=distance_cutoff) assert simple_pair_generator.count_pairs() == pair_generator.count_pairs() pair_generator.restart() neighbors = {} for pair in pair_generator: assert pair.j_seq != pair.i_seq assert pair.j_sym == 0 assert approx_equal(pair.dist_sq, point_distance**2) neighbors[pair.i_seq] = neighbors.get(pair.i_seq, 0) + 1 neighbors[pair.j_seq] = neighbors.get(pair.j_seq, 0) + 1 n_dict = {} for n in neighbors.values(): n_dict[n] = n_dict.get(n, 0) + 1 if (verbose): print n_dict if (len(neighbors) > 0): assert max(neighbors.values()) <= 12
def check_distances(sites_cart, point_distance, verbose): asu_mappings = non_crystallographic_asu_mappings(sites_cart=sites_cart) distance_cutoff = point_distance * math.sqrt(2) * 0.99 simple_pair_generator = crystal.neighbors_simple_pair_generator( asu_mappings=asu_mappings, distance_cutoff=distance_cutoff) pair_generator = crystal.neighbors_fast_pair_generator( asu_mappings=asu_mappings, distance_cutoff=distance_cutoff) assert simple_pair_generator.count_pairs() == pair_generator.count_pairs() pair_generator.restart() neighbors = {} for pair in pair_generator: assert pair.j_seq != pair.i_seq assert pair.j_sym == 0 assert approx_equal(pair.dist_sq, point_distance**2) neighbors[pair.i_seq] = neighbors.get(pair.i_seq, 0) + 1 neighbors[pair.j_seq] = neighbors.get(pair.j_seq, 0) + 1 n_dict = {} for n in neighbors.values(): n_dict[n] = n_dict.get(n, 0) + 1 if (verbose): print(n_dict) if (len(neighbors) > 0): assert max(neighbors.values()) <= 12
def exercise_bond_sorted_asu_proxies(structure, distance_cutoff): asu_mappings = structure.asu_mappings(buffer_thickness=distance_cutoff) bond_asu_table = crystal.pair_asu_table(asu_mappings=asu_mappings) bond_asu_table.add_all_pairs(distance_cutoff=distance_cutoff) bond_sym_table = bond_asu_table.extract_pair_sym_table() el = bond_sym_table.simple_edge_list() es = bond_sym_table.full_simple_connectivity() assert es.size() == bond_sym_table.size() for i, j in el: assert j in es[i] assert i in es[j] npis = bond_sym_table.number_of_pairs_involving_symmetry() assert len(list(bond_sym_table.iterator())) == len(el) + npis bond_params_table = geometry_restraints.bond_params_table( structure.scatterers().size()) for i_seq, bond_sym_dict in enumerate(bond_sym_table): for j_seq in bond_sym_dict.keys(): if (i_seq > j_seq): j_seq, i_seq = i_seq, j_seq bond_params_table[i_seq][j_seq] = geometry_restraints.bond_params( distance_ideal=3.1, weight=1) proxies_fast = geometry_restraints.bond_sorted_asu_proxies( bond_params_table=bond_params_table, bond_asu_table=bond_asu_table) proxies_conservative = geometry_restraints.bond_sorted_asu_proxies( pair_asu_table=bond_asu_table) pair_generator = crystal.neighbors_simple_pair_generator( asu_mappings=asu_mappings, distance_cutoff=distance_cutoff, minimal=False) proxies_slow = geometry_restraints.bond_sorted_asu_proxies( asu_mappings=asu_mappings) for pair in pair_generator: proxies_slow.process( geometry_restraints.bond_asu_proxy(pair=pair, distance_ideal=3.1, weight=1)) def compare_proxies(proxies_1, proxies_2): assert proxies_1.simple.size() == proxies_2.simple.size() assert proxies_1.asu.size() == proxies_2.asu.size() ctrl = {} for proxy in proxies_1.simple: assert proxy.i_seqs not in ctrl ctrl[proxy.i_seqs] = 0 for proxy in proxies_2.simple: assert proxy.i_seqs in ctrl ctrl[proxy.i_seqs] += 1 assert list(ctrl.values()) == [1] * len(ctrl) ctrl = {} for proxy in proxies_1.asu: key = proxy.i_seq, proxy.j_seq, proxy.j_sym assert key not in ctrl ctrl[key] = 0 for proxy in proxies_2.asu: key = proxy.i_seq, proxy.j_seq, proxy.j_sym assert key in ctrl ctrl[key] += 1 assert list(ctrl.values()) == [1] * len(ctrl) compare_proxies(proxies_1=proxies_fast, proxies_2=proxies_conservative) compare_proxies(proxies_1=proxies_fast, proxies_2=proxies_slow) sites_cart = structure.sites_cart() for proxy in proxies_conservative.simple: i, j = proxy.i_seqs assert approx_equal( abs(matrix.col(sites_cart[i]) - matrix.col(sites_cart[j])), proxy.distance_ideal) assert proxy.weight == 1 distance = proxies_conservative.asu_mappings().unit_cell().distance get_rt_mx_ji = proxies_conservative.asu_mappings().get_rt_mx_ji sites_frac = structure.sites_frac() for proxy in proxies_conservative.asu: assert approx_equal( distance(sites_frac[proxy.i_seq], get_rt_mx_ji(pair=proxy) * sites_frac[proxy.j_seq]), proxy.distance_ideal) assert proxy.weight == 1
def exercise_bond_sorted_asu_proxies( structure, distance_cutoff): asu_mappings = structure.asu_mappings(buffer_thickness=distance_cutoff) bond_asu_table = crystal.pair_asu_table(asu_mappings=asu_mappings) bond_asu_table.add_all_pairs(distance_cutoff=distance_cutoff) bond_sym_table = bond_asu_table.extract_pair_sym_table() el = bond_sym_table.simple_edge_list() es = bond_sym_table.full_simple_connectivity() assert es.size() == bond_sym_table.size() for i,j in el: assert j in es[i] assert i in es[j] npis = bond_sym_table.number_of_pairs_involving_symmetry() assert len(list(bond_sym_table.iterator())) == len(el) + npis bond_params_table = geometry_restraints.bond_params_table( structure.scatterers().size()) for i_seq,bond_sym_dict in enumerate(bond_sym_table): for j_seq in bond_sym_dict.keys(): if (i_seq > j_seq): j_seq,i_seq = i_seq,j_seq bond_params_table[i_seq][j_seq] = geometry_restraints.bond_params( distance_ideal=3.1, weight=1) proxies_fast = geometry_restraints.bond_sorted_asu_proxies( bond_params_table=bond_params_table, bond_asu_table=bond_asu_table) proxies_conservative = geometry_restraints.bond_sorted_asu_proxies( pair_asu_table=bond_asu_table) pair_generator = crystal.neighbors_simple_pair_generator( asu_mappings=asu_mappings, distance_cutoff=distance_cutoff, minimal=False) proxies_slow = geometry_restraints.bond_sorted_asu_proxies( asu_mappings=asu_mappings) for pair in pair_generator: proxies_slow.process(geometry_restraints.bond_asu_proxy( pair=pair, distance_ideal=3.1, weight=1)) def compare_proxies(proxies_1, proxies_2): assert proxies_1.simple.size() == proxies_2.simple.size() assert proxies_1.asu.size() == proxies_2.asu.size() ctrl = {} for proxy in proxies_1.simple: assert not ctrl.has_key(proxy.i_seqs) ctrl[proxy.i_seqs] = 0 for proxy in proxies_2.simple: assert ctrl.has_key(proxy.i_seqs) ctrl[proxy.i_seqs] += 1 assert ctrl.values() == [1]*len(ctrl) ctrl = {} for proxy in proxies_1.asu: key = proxy.i_seq,proxy.j_seq,proxy.j_sym assert not ctrl.has_key(key) ctrl[key] = 0 for proxy in proxies_2.asu: key = proxy.i_seq,proxy.j_seq,proxy.j_sym assert ctrl.has_key(key) ctrl[key] += 1 assert ctrl.values() == [1]*len(ctrl) compare_proxies(proxies_1=proxies_fast, proxies_2=proxies_conservative) compare_proxies(proxies_1=proxies_fast, proxies_2=proxies_slow) sites_cart = structure.sites_cart() for proxy in proxies_conservative.simple: i,j = proxy.i_seqs assert approx_equal( abs(matrix.col(sites_cart[i]) - matrix.col(sites_cart[j])), proxy.distance_ideal) assert proxy.weight == 1 distance = proxies_conservative.asu_mappings().unit_cell().distance get_rt_mx_ji = proxies_conservative.asu_mappings().get_rt_mx_ji sites_frac = structure.sites_frac() for proxy in proxies_conservative.asu: assert approx_equal( distance( sites_frac[proxy.i_seq], get_rt_mx_ji(pair=proxy) * sites_frac[proxy.j_seq]), proxy.distance_ideal) assert proxy.weight == 1