Beispiel #1
0
def exercise_with_disorder():
    p = shelx.parse_smtbx_refinement_model(file=StringIO(disordered))
    xs = p.structure
    mi = xs.build_miller_set(d_min=0.6, anomalous_flag=True)
    fcalc = mi.structure_factors_from_scatterers(xs,
                                                 algorithm="direct").f_calc()
    xm = refinement.model(fo_sq=fcalc.norm(),
                          xray_structure=xs,
                          constraints=p.constraints,
                          restraints_manager=p.restraints_manager,
                          weighting_scheme=p.weighting_scheme,
                          temperature_in_celsius=p.temperature_in_celsius,
                          conformer_indices=p.conformer_indices)
    assert xm.temperature_in_celsius == -153
    ls = xm.least_squares()
    expected_reparametrisation_for = {}
    for i in (13, 14, 15):
        for s in 'ABCDEF':
            pivot_letter = 'A' if s < 'D' else 'B'
            expected_reparametrisation_for["H%i%s" % (i, s)] = (
                core.terminal_tetrahedral_xh3_sites,
                "C%i%s" % (i, pivot_letter))
    for sc, params in itertools.izip(
            ls.reparametrisation.structure.scatterers(),
            ls.reparametrisation.asu_scatterer_parameters):
        if sc.scattering_type != 'H':
            continue
        (expected_type,
         expected_pivot) = expected_reparametrisation_for[sc.label]
        assert isinstance(params.site, expected_type)
        assert ([sc1.label for sc1 in params.site.argument(0).scatterers
                 ] == [expected_pivot])
Beispiel #2
0
def exercise_with_disorder():
  p = shelx.parse_smtbx_refinement_model(file=StringIO(disordered))
  xs = p.structure
  mi = xs.build_miller_set(d_min=0.6, anomalous_flag=True)
  fcalc = mi.structure_factors_from_scatterers(xs, algorithm="direct").f_calc()
  xm = refinement.model(fo_sq=fcalc.norm(),
                        xray_structure=xs,
                        constraints=p.constraints,
                        restraints_manager=p.restraints_manager,
                        weighting_scheme=p.weighting_scheme,
                        temperature_in_celsius=p.temperature_in_celsius,
                        conformer_indices=p.conformer_indices)
  assert xm.temperature_in_celsius == -153
  ls = xm.least_squares()
  expected_reparametrisation_for = {}
  for i in (13, 14, 15):
    for s in 'ABCDEF':
      pivot_letter = 'A' if s < 'D' else 'B'
      expected_reparametrisation_for["H%i%s" % (i,s)] = (
        core.terminal_tetrahedral_xh3_sites, "C%i%s" % (i,pivot_letter))
  for sc, params in itertools.izip(
    ls.reparametrisation.structure.scatterers(),
    ls.reparametrisation.asu_scatterer_parameters):
    if sc.scattering_type != 'H':
      continue
    (expected_type, expected_pivot) = expected_reparametrisation_for[sc.label]
    assert isinstance(params.site, expected_type)
    assert ([sc1.label for sc1 in params.site.argument(0).scatterers] ==
            [expected_pivot])
Beispiel #3
0
def exercise_rigu():
    ins = """
CELL 0.71073 7.772741 8.721603 10.863736 90 102.9832 90
ZERR 2 0.000944 0.001056 0.001068 0 0.0107 0
LATT -1
SYMM -X,0.5+Y,-Z
SFAC C H O
UNIT 24 44 22
RIGU 0.0001 0.0001 O4 C C12

C12   1    -0.12812  0.06329 -0.17592  11.00000  0.01467  0.02689  0.02780 =
 -0.00379  0.00441 -0.00377
O4    3     0.08910  0.02721  0.02186  11.00000  0.02001  0.03168  0.03125 =
 -0.00504  0.00144 -0.00274
C     1    -0.05545 -0.04221 -0.06528  11.00000  0.01560  0.02699  0.02581 =
 -0.00481  0.00597 -0.00068
HKLF 4
END
  """
    sio = StringIO(ins)
    import iotbx.shelx as shelx
    model = shelx.parse_smtbx_refinement_model(file=sio)
    sites_cart = model.structure.sites_cart()
    u_cart = model.structure.scatterers().extract_u_cart(
        model.structure.unit_cell())
    arp = adp_restraint_params(sites_cart=sites_cart, u_cart=u_cart)
    for rp in model._proxies['rigu']:
        rr = adp_restraints.rigu(arp, rp)
        U1 = matrix.sym(sym_mat3=u_cart[rp.i_seqs[0]])
        U2 = matrix.sym(sym_mat3=u_cart[rp.i_seqs[1]])
        vz = matrix.col(sites_cart[rp.i_seqs[1]]) - matrix.col(
            sites_cart[rp.i_seqs[0]])
        vy = vz.ortho()
        vx = vy.cross(vz)
        R = matrix.rec(
            vx.normalize().elems + vy.normalize().elems + vz.normalize().elems,
            (3, 3))
        # with this matrix we can only test Z component as X and Y will differ
        dU = ((R * U1) * R.transpose() -
              (R * U2) * R.transpose()).as_sym_mat3()
        assert approx_equal(dU[2], rr.delta_33())
        #with the original matrix all components should match
        R1 = matrix.rec(rr.RM(), (3, 3))
        dU = ((R1 * U1) * R1.transpose() -
              (R1 * U2) * R1.transpose()).as_sym_mat3()
        assert approx_equal(dU[2], rr.delta_33())
        assert approx_equal(dU[4], rr.delta_13())
        assert approx_equal(dU[5], rr.delta_23())
        # check the raw gradients against the reference implementation
        for x, y in zip(rr.reference_gradients(R1), rr.raw_gradients()):
            for idx in range(0, 6):
                assert approx_equal(x[idx], y[idx])
        for x, y in zip(rigu_finite_diff(R1, U1), rr.raw_gradients()):
            for idx in range(0, 6):
                assert approx_equal(x[idx], y[idx])