def exercise_sucrose(flipping_type, anomalous_flag, d_min, verbose=False, amplitude_type="quasi-E"): from smtbx import development target_structure = development.sucrose() print "Sucrose" exercise_one_structure( target_structure, flipping_type, anomalous_flag, d_min, grid_resolution_factor=1 / 2, verbose=verbose, amplitude_type=amplitude_type, )
def __init__(self, m): test_case.__init__(self, m) self.xray_structure = development.sucrose() self.t_celsius = 20 self.shall_refine_thermal_displacements = True self.constraints = [ _.scalar_scaled_u(range(len(self.xray_structure.scatterers()))) ] self.expected_reparametrisation_for_hydrogen_named = {} xs = self.xray_structure # Make one O atom isotropic to exercise scalar_scaled_u_iso on a non-H atom sc1 = xs.scatterers()[1] sc1.u_iso = sc1.u_iso_or_equiv(xs.unit_cell()) sc1.set_use_u_iso_only() self.expected_mapping_to_grad_fc = tuple(range(271, 271 + 155)) # There are
def exercise_connectivity_table(): xs = development.sucrose() connectivity = utils.connectivity_table(xs) pair_counts = [ 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4, 1, 4, 1, 4, 4, 1, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1] assert approx_equal(connectivity.pair_asu_table.pair_counts(), pair_counts) connectivity.add_bond(0, 1) assert approx_equal( connectivity.pair_asu_table.pair_counts(), [3, 3, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4, 1, 4, 1, 4, 4, 1, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1]) connectivity.add_bond(5, 5, rt_mx_ji=sgtbx.rt_mx("x+1,y,z")) assert connectivity.pair_asu_table.pair_counts()[5] == 4 connectivity.remove_bond(0, 1) connectivity.remove_bond(5,5, rt_mx_ji=sgtbx.rt_mx("x+1,y,z")) assert approx_equal(connectivity.pair_asu_table.pair_counts(), pair_counts)
def exercise_sucrose(flipping_type, anomalous_flag, d_min, verbose=False, amplitude_type='quasi-E'): from smtbx import development target_structure = development.sucrose() print "Sucrose" exercise_one_structure( target_structure, flipping_type, anomalous_flag, d_min, grid_resolution_factor=1 / 2, verbose=verbose, amplitude_type=amplitude_type, )
def test_connectivity_table(): xs = development.sucrose() connectivity = utils.connectivity_table(xs) pair_counts = [ 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4, 1, 4, 1, 4, 4, 1, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1 ] assert approx_equal(connectivity.pair_asu_table.pair_counts(), pair_counts) connectivity.add_bond(0, 1) assert approx_equal(connectivity.pair_asu_table.pair_counts(), [ 3, 3, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 4, 1, 4, 1, 4, 1, 4, 1, 1, 4, 1, 4, 1, 4, 4, 1, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1 ]) connectivity.add_bond(5, 5, rt_mx_ji=sgtbx.rt_mx("x+1,y,z")) assert connectivity.pair_asu_table.pair_counts()[5] == 4 connectivity.remove_bond(0, 1) connectivity.remove_bond(5, 5, rt_mx_ji=sgtbx.rt_mx("x+1,y,z")) assert approx_equal(connectivity.pair_asu_table.pair_counts(), pair_counts)
def exercise_rigid_bond(): xray_structure = development.sucrose() pair_sym_table = get_pair_sym_table(xray_structure) for table in (None,pair_sym_table): if table is None: xs = xray_structure else: xs = None restraints = \ adp_restraints.rigid_bond_restraints( xray_structure=xs, pair_sym_table=table) assert restraints.proxies.size() == 60 i_seqs = (9,14,28,32,36,38) restraints = \ adp_restraints.rigid_bond_restraints( xray_structure=xs, pair_sym_table=table, i_seqs=i_seqs) expected_i_seqs = ( (9,32),(9,36),(14,36),(14,32),(14,38),(32,36),(32,38),(36,38)) expected_weights = [10000]*len(expected_i_seqs) proxies = restraints.proxies assert proxies.size() == len(expected_i_seqs) for i in range(proxies.size()): assert approx_equal(proxies[i].i_seqs, expected_i_seqs[i]) assert approx_equal(proxies[i].weight, expected_weights[i]) # add more restraints to same shared proxy i_seqs = (10,40,42) restraints = \ adp_restraints.rigid_bond_restraints( xray_structure=xs, pair_sym_table=table, proxies=proxies, i_seqs=i_seqs) expected_i_seqs = ( (9,32),(9,36),(14,36),(14,32),(14,38),(32,36), (32,38),(36,38),(10,42),(10,40),(40,42)) expected_weights = [10000]*len(expected_i_seqs) proxies = restraints.proxies assert proxies.size() == len(expected_i_seqs) for i in range(proxies.size()): assert approx_equal(proxies[i].i_seqs, expected_i_seqs[i]) assert approx_equal(proxies[i].weight, expected_weights[i])
def test_adp_similarity(): xray_structure = development.sucrose() pair_sym_table = get_pair_sym_table(xray_structure) for table in (None,pair_sym_table): if table is None: xs = xray_structure else: xs = None restraints = \ adp_restraints.adp_similarity_restraints( xray_structure=xs, pair_sym_table=table) assert restraints.proxies.size() == 24 i_seqs = (9,14,28,32,36,38) restraints = \ adp_restraints.adp_similarity_restraints( xray_structure=xs, pair_sym_table=table, i_seqs=i_seqs) expected_i_seqs = ((9,32),(14,36),(32,36),(36,38)) expected_weights = (625,156.25,625,625) proxies = restraints.proxies assert proxies.size() == len(expected_i_seqs) for i in range(proxies.size()): assert approx_equal(proxies[i].i_seqs, expected_i_seqs[i]) assert approx_equal(proxies[i].weight, expected_weights[i]) # add more restraints to same shared proxy i_seqs = (3,23,40,42) restraints = \ adp_restraints.adp_similarity_restraints( xray_structure=xs, pair_sym_table=table, proxies=proxies, i_seqs=i_seqs) expected_i_seqs = ( (9,32),(14,36),(32,36),(36,38),(3,23),(40,42)) expected_weights = (625,156.25,625,625,156.25,625) proxies = restraints.proxies assert proxies.size() == len(expected_i_seqs) for i in range(proxies.size()): assert approx_equal(proxies[i].i_seqs, expected_i_seqs[i]) assert approx_equal(proxies[i].weight, expected_weights[i])
def exercise_isotropic_adp(): xray_structure = development.sucrose() xray_structure.scatterers()[10].set_use_u_iso_only() pair_sym_table = get_pair_sym_table(xray_structure) for table in (None,pair_sym_table): restraints = \ adp_restraints.isotropic_adp_restraints( xray_structure=xray_structure, pair_sym_table=table) assert restraints.proxies.size() == 22 i_seqs = (9,14,28,32,36,38) expected_weights = (100,25,100,100,100,100) restraints = \ adp_restraints.isotropic_adp_restraints( xray_structure=xray_structure, pair_sym_table=table, i_seqs=i_seqs) proxies = restraints.proxies assert proxies.size() == len(i_seqs) for i in range(proxies.size()): assert approx_equal(proxies[i].i_seqs[0], i_seqs[i]) assert approx_equal(proxies[i].weight, expected_weights[i]) # add more restraints to same shared proxy i_seqs = (3,5,42) restraints = \ adp_restraints.isotropic_adp_restraints( xray_structure=xray_structure, pair_sym_table=table, proxies=proxies, i_seqs=i_seqs) expected_i_seqs = (9,14,28,32,36,38,3,5,42) expected_weights = (100,25,100,100,100,100,25,25,100) proxies = restraints.proxies assert proxies.size() == len(expected_i_seqs) for i in range(proxies.size()): assert approx_equal(proxies[i].i_seqs[0], expected_i_seqs[i]) assert approx_equal(proxies[i].weight, expected_weights[i])
def __init__(self, m): test_case.__init__(self, m) self.xray_structure = development.sucrose() self.t_celsius = 20 self.shall_refine_thermal_displacements = False self.constraints = [] self.expected_mapping_to_grad_fc = ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 # that was easy ) self.expected_reparametrisation_for_hydrogen_named = {} self.fp_refinement_tolerance = 1e-6 self.fdp_refinement_tolerance = 1e-6
def __init__(self, m): test_case.__init__(self, m) self.xray_structure = development.sucrose() self.t_celsius = 20 self.shall_refine_thermal_displacements = False self.constraints = [ _.terminal_tetrahedral_xh_site(rotating=True, pivot=1, constrained_site_indices=(2, )), _.terminal_tetrahedral_xh_site(rotating=True, pivot=3, constrained_site_indices=(4, )), _.terminal_tetrahedral_xh_site(rotating=True, pivot=5, constrained_site_indices=(6, )), _.terminal_tetrahedral_xh_site(rotating=True, pivot=7, constrained_site_indices=(8, )), _.terminal_tetrahedral_xh_site(rotating=True, pivot=10, constrained_site_indices=(11, )), _.terminal_tetrahedral_xh_site(rotating=True, pivot=12, constrained_site_indices=(13, )), _.terminal_tetrahedral_xh_site(rotating=True, pivot=14, constrained_site_indices=(15, )), _.terminal_tetrahedral_xh_site(rotating=True, pivot=16, constrained_site_indices=(17, )), _.tertiary_xh_site(pivot=19, constrained_site_indices=(20, )), _.secondary_xh2_sites(pivot=21, flapping=True, constrained_site_indices=(26, 22)), _.tertiary_xh_site(pivot=23, constrained_site_indices=(24, )), _.tertiary_xh_site(pivot=25, constrained_site_indices=(27, )), _.tertiary_xh_site(pivot=28, constrained_site_indices=(29, )), _.tertiary_xh_site(pivot=30, constrained_site_indices=(31, )), _.secondary_xh2_sites(pivot=33, flapping=True, constrained_site_indices=(35, 34)), _.tertiary_xh_site(pivot=36, constrained_site_indices=(37, )), _.tertiary_xh_site(pivot=38, constrained_site_indices=(39, )), _.tertiary_xh_site(pivot=40, constrained_site_indices=(41, )), _.secondary_xh2_sites(pivot=42, flapping=True, constrained_site_indices=(43, 44)), ] self.expected_reparametrisation_for_hydrogen_named = { "H2": (core.terminal_tetrahedral_xh_site, 'O2'), "H3": (core.terminal_tetrahedral_xh_site, 'O3'), "H4": (core.terminal_tetrahedral_xh_site, 'O4'), "H5": (core.terminal_tetrahedral_xh_site, 'O5'), "H7": (core.terminal_tetrahedral_xh_site, 'O7'), "H8": (core.terminal_tetrahedral_xh_site, 'O8'), "H9": (core.terminal_tetrahedral_xh_site, 'O9'), "H10": (core.terminal_tetrahedral_xh_site, 'O10'), "H1": (core.tertiary_xh_site, 'C1'), "H2A": (core.secondary_xh2_sites, 'C2'), "H2B": (core.secondary_xh2_sites, 'C2'), "H3B": (core.tertiary_xh_site, 'C3'), "H4B": (core.tertiary_xh_site, 'C4'), "H5B": (core.tertiary_xh_site, 'C5'), "H6": (core.tertiary_xh_site, 'C6'), "H8A": (core.secondary_xh2_sites, 'C8'), "H8B": (core.secondary_xh2_sites, 'C8'), "H9B": (core.tertiary_xh_site, 'C9'), "H10B": (core.tertiary_xh_site, 'C10'), "H11": (core.tertiary_xh_site, 'C11'), "H12A": (core.secondary_xh2_sites, 'C12'), "H12B": (core.secondary_xh2_sites, 'C12'), } self.expected_mapping_to_grad_fc = ( 59, 60, 61, # O1.site 80, 81, 82, 83, 84, 85, # O1.u 0, 1, 2, # O2.site 86, 87, 88, 89, 90, 91, # O2.u 304, 305, 306, # H2.site 92, # H2.u 7, 8, 9, # O3.site 93, 94, 95, 96, 97, 98, # O3.u 307, 308, 309, # H3.site 99, # H3.u 14, 15, 16, # O4.site 100, 101, 102, 103, 104, 105, # O4.u 310, 311, 312, # H4.site 106, # H4.u 21, 22, 23, # O5.site 107, 108, 109, 110, 111, 112, # O5.u 313, 314, 315, # H5.site 113, # H5.u 76, 77, 78, # O6.site 114, 115, 116, 117, 118, 119, # O6.u 28, 29, 30, # O7.site 120, 121, 122, 123, 124, 125, # O7.u 316, 317, 318, # H7.site 126, # H7.u 35, 36, 37, # O8.site 127, 128, 129, 130, 131, 132, # O8.u 319, 320, 321, # H8.site 133, # H8.u 42, 43, 44, # O9.site 134, 135, 136, 137, 138, 139, # O9.u 322, 323, 324, # H9.site 140, # H9.u 49, 50, 51, # O10.site 141, 142, 143, 144, 145, 146, # O10.u 325, 326, 327, # H10.site 147, # H10.u 66, 67, 68, # O11.site 148, 149, 150, 151, 152, 153, # O11.u 56, 57, 58, # C1.site 154, 155, 156, 157, 158, 159, # C1.u 328, 329, 330, # H1.site 160, # H1.u 3, 4, 5, # C2.site 161, 162, 163, 164, 165, 166, # C2.u 334, 335, 336, # H2B.site 167, # H2B.u 10, 11, 12, # C3.site 168, 169, 170, 171, 172, 173, # C3.u 337, 338, 339, # H3B.site 174, # H3B.u 17, 18, 19, # C4.site 175, 176, 177, 178, 179, 180, # C4.u 331, 332, 333, # H2A.site 181, # H2A.u 340, 341, 342, # H4B.site 182, # H4B.u 24, 25, 26, # C5.site 183, 184, 185, 186, 187, 188, # C5.u 343, 344, 345, # H5B.site 189, # H5B.u 63, 64, 65, # C6.site 190, 191, 192, 193, 194, 195, # C6.u 346, 347, 348, # H6.site 196, # H6.u 69, 70, 71, # C7.site 197, 198, 199, 200, 201, 202, # C7.u 52, 53, 54, # C8.site 203, 204, 205, 206, 207, 208, # C8.u 352, 353, 354, # H8A.site 209, # H8A.u 349, 350, 351, # H8B.site 210, # H8B.u 45, 46, 47, # C9.site 211, 212, 213, 214, 215, 216, # C9.u 355, 356, 357, # H9B.site 217, # H9B.u 38, 39, 40, # C10.site 218, 219, 220, 221, 222, 223, # C10.u 358, 359, 360, # H10B.site 224, # H10B.u 73, 74, 75, # C11.site 225, 226, 227, 228, 229, 230, # C11.u 361, 362, 363, # H11.site 231, # H11.u 31, 32, 33, # C12.site 232, 233, 234, 235, 236, 237, # C12.u 364, 365, 366, # H12B.site 238, # H12B.u 367, 368, 369, # H12A.site 239, # H12A.u ) self.site_refinement_tolerance = 1e-4
def __init__(self, m): test_case.__init__(self, m) self.xray_structure = development.sucrose() self.t_celsius = 20 self.shall_refine_thermal_displacements = False self.constraints = [ _.terminal_tetrahedral_xh_site( rotating=True, pivot=1, constrained_site_indices=(2,)), _.terminal_tetrahedral_xh_site( rotating=True, pivot=3, constrained_site_indices=(4,)), _.terminal_tetrahedral_xh_site( rotating=True, pivot=5, constrained_site_indices=(6,)), _.terminal_tetrahedral_xh_site( rotating=True, pivot=7, constrained_site_indices=(8,)), _.terminal_tetrahedral_xh_site( rotating=True, pivot=10, constrained_site_indices=(11,)), _.terminal_tetrahedral_xh_site( rotating=True, pivot=12, constrained_site_indices=(13,)), _.terminal_tetrahedral_xh_site( rotating=True, pivot=14, constrained_site_indices=(15,)), _.terminal_tetrahedral_xh_site( rotating=True, pivot=16, constrained_site_indices=(17,)), _.tertiary_xh_site( pivot=19, constrained_site_indices=(20,)), _.secondary_xh2_sites( pivot=21, flapping = True, constrained_site_indices=(26, 22)), _.tertiary_xh_site( pivot=23, constrained_site_indices=(24,)), _.tertiary_xh_site( pivot=25, constrained_site_indices=(27,)), _.tertiary_xh_site( pivot=28, constrained_site_indices=(29,)), _.tertiary_xh_site( pivot=30, constrained_site_indices=(31,)), _.secondary_xh2_sites( pivot=33, flapping = True, constrained_site_indices=(35, 34)), _.tertiary_xh_site( pivot=36, constrained_site_indices=(37,)), _.tertiary_xh_site( pivot=38, constrained_site_indices=(39,)), _.tertiary_xh_site( pivot=40, constrained_site_indices=(41,)), _.secondary_xh2_sites( pivot=42, flapping = True, constrained_site_indices=(43, 44)), ] self.expected_reparametrisation_for_hydrogen_named = { "H2": (core.terminal_tetrahedral_xh_site, 'O2'), "H3": (core.terminal_tetrahedral_xh_site, 'O3'), "H4": (core.terminal_tetrahedral_xh_site, 'O4'), "H5": (core.terminal_tetrahedral_xh_site, 'O5'), "H7": (core.terminal_tetrahedral_xh_site, 'O7'), "H8": (core.terminal_tetrahedral_xh_site, 'O8'), "H9": (core.terminal_tetrahedral_xh_site, 'O9'), "H10": (core.terminal_tetrahedral_xh_site, 'O10'), "H1": (core.tertiary_xh_site, 'C1'), "H2A": (core.secondary_xh2_sites, 'C2'), "H2B": (core.secondary_xh2_sites, 'C2'), "H3B": (core.tertiary_xh_site, 'C3'), "H4B": (core.tertiary_xh_site, 'C4'), "H5B": (core.tertiary_xh_site, 'C5'), "H6": (core.tertiary_xh_site, 'C6'), "H8A": (core.secondary_xh2_sites, 'C8'), "H8B": (core.secondary_xh2_sites, 'C8'), "H9B": (core.tertiary_xh_site, 'C9'), "H10B": (core.tertiary_xh_site, 'C10'), "H11": (core.tertiary_xh_site, 'C11'), "H12A": (core.secondary_xh2_sites, 'C12'), "H12B": (core.secondary_xh2_sites, 'C12'), } self.expected_mapping_to_grad_fc = ( 59,60,61 , # O1.site 80,81,82,83,84,85 , # O1.u 0,1,2 , # O2.site 86,87,88,89,90,91 , # O2.u 304,305,306 , # H2.site 92 , # H2.u 7,8,9 , # O3.site 93,94,95,96,97,98 , # O3.u 307,308,309 , # H3.site 99 , # H3.u 14,15,16 , # O4.site 100,101,102,103,104,105 , # O4.u 310,311,312 , # H4.site 106 , # H4.u 21,22,23 , # O5.site 107,108,109,110,111,112 , # O5.u 313,314,315 , # H5.site 113 , # H5.u 76,77,78 , # O6.site 114,115,116,117,118,119 , # O6.u 28,29,30 , # O7.site 120,121,122,123,124,125 , # O7.u 316,317,318 , # H7.site 126 , # H7.u 35,36,37 , # O8.site 127,128,129,130,131,132 , # O8.u 319,320,321 , # H8.site 133 , # H8.u 42,43,44 , # O9.site 134,135,136,137,138,139 , # O9.u 322,323,324 , # H9.site 140 , # H9.u 49,50,51 , # O10.site 141,142,143,144,145,146 , # O10.u 325,326,327 , # H10.site 147 , # H10.u 66,67,68 , # O11.site 148,149,150,151,152,153 , # O11.u 56,57,58 , # C1.site 154,155,156,157,158,159 , # C1.u 328,329,330 , # H1.site 160 , # H1.u 3,4,5 , # C2.site 161,162,163,164,165,166 , # C2.u 334,335,336 , # H2B.site 167 , # H2B.u 10,11,12 , # C3.site 168,169,170,171,172,173 , # C3.u 337,338,339 , # H3B.site 174 , # H3B.u 17,18,19 , # C4.site 175,176,177,178,179,180 , # C4.u 331,332,333 , # H2A.site 181 , # H2A.u 340,341,342 , # H4B.site 182 , # H4B.u 24,25,26 , # C5.site 183,184,185,186,187,188 , # C5.u 343,344,345 , # H5B.site 189 , # H5B.u 63,64,65 , # C6.site 190,191,192,193,194,195 , # C6.u 346,347,348 , # H6.site 196 , # H6.u 69,70,71 , # C7.site 197,198,199,200,201,202 , # C7.u 52,53,54 , # C8.site 203,204,205,206,207,208 , # C8.u 352,353,354 , # H8A.site 209 , # H8A.u 349,350,351 , # H8B.site 210 , # H8B.u 45,46,47 , # C9.site 211,212,213,214,215,216 , # C9.u 355,356,357 , # H9B.site 217 , # H9B.u 38,39,40 , # C10.site 218,219,220,221,222,223 , # C10.u 358,359,360 , # H10B.site 224 , # H10B.u 73,74,75 , # C11.site 225,226,227,228,229,230 , # C11.u 361,362,363 , # H11.site 231 , # H11.u 31,32,33 , # C12.site 232,233,234,235,236,237 , # C12.u 364,365,366 , # H12B.site 238 , # H12B.u 367,368,369 , # H12A.site 239 , # H12A.u ) self.site_refinement_tolerance = 1e-4