예제 #1
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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