コード例 #1
0
ファイル: tools.py プロジェクト: keitaroyam/cctbx_fork
def tls_from_uanisos(xray_structure,
                     selections,
                     tlsos_initial,
                     number_of_macro_cycles       = 3000,
                     max_iterations               = 1000,
                     refine_T                     = True,
                     refine_L                     = True,
                     refine_S                     = True,
                     verbose                      = -1,
                     enforce_positive_definite_TL = True,
                     out                          = None):
  global time_tls_from_uanisos
  t1 = time.time()
  if(out is None): out = sys.stdout
  if(verbose > 0):
    show_tls(tlsos = tlsos_initial,
             text  = "TLS from ADP: start TLS values", out = out)
  u_cart=xray_structure.scatterers().extract_u_cart(xray_structure.unit_cell())
  T_min = []
  L_min = []
  S_min = []
  group_counter = 0
  for tlso_initial, selection in zip(tlsos_initial, selections):
    group_counter += 1
    T_initial = tlso_initial.t
    L_initial = tlso_initial.l
    S_initial = tlso_initial.s
    if(enforce_positive_definite_TL):
      T_initial = adptbx.eigenvalue_filtering(T_initial)
      L_initial = adptbx.eigenvalue_filtering(L_initial)
    stop_flag = 0
    target_stop = -1.0
    sites_cart_selected = xray_structure.sites_cart().select(selection)
    u_cart_selected = u_cart.select(selection)
    for i in range(1, number_of_macro_cycles+1):
      target_start = target_stop
      minimized = tls_from_uaniso_minimizer(uaniso    = u_cart_selected,
                                            T_initial = T_initial,
                                            L_initial = L_initial,
                                            S_initial = S_initial,
                                            refine_T  = refine_T,
                                            refine_L  = refine_L,
                                            refine_S  = refine_S,
                                            max_iterations = max_iterations,
                                            origin    = tlso_initial.origin,
                                            sites     = sites_cart_selected)
      if(refine_T):  T_initial = minimized.T_min
      else:          assert approx_equal(T_initial, minimized.T_min)
      if(refine_L):  L_initial = minimized.L_min
      else:          assert approx_equal(L_initial, minimized.L_min)
      if(refine_S):  S_initial = minimized.S_min
      else:          assert approx_equal(S_initial, minimized.S_min)
    if(verbose > 0):
      print >> out, "TLS group %d: minimized target = " %(group_counter),minimized.f
    T_min_ = minimized.T_min
    L_min_ = minimized.L_min
    if(enforce_positive_definite_TL):
      T_min_ = adptbx.eigenvalue_filtering(T_min_)
      L_min_ = adptbx.eigenvalue_filtering(L_min_)
    T_min.append(T_min_)
    L_min.append(L_min_)
    S_min.append(minimized.S_min)
    if(enforce_positive_definite_TL):
      assert adptbx.is_positive_definite(T_min_, 1.e-6)
      assert adptbx.is_positive_definite(L_min_, 1.e-6)
  tlsos_result = generate_tlsos(selections     = selections,
                                xray_structure = xray_structure,
                                T              = T_min,
                                L              = L_min,
                                S              = S_min)
  if(verbose > 0):
    show_tls(tlsos = tlsos_result,
             text  = "TLS from ADP: final TLS values", out = out)
  t2 = time.time()
  time_tls_from_uanisos += (t2 - t1)
  return tlsos_result
コード例 #2
0
ファイル: tst_adptbx.py プロジェクト: zhuligs/cctbx_project
def exercise_interface():
  episq = 8*(math.pi**2)
  assert approx_equal(adptbx.u_as_b(2.3), 2.3*episq)
  assert approx_equal(adptbx.b_as_u(adptbx.u_as_b(2.3)), 2.3)
  u = (3,4,9, 2,1,7)
  assert approx_equal(adptbx.u_as_b(u), [x*episq for x in u])
  assert approx_equal(adptbx.b_as_u(adptbx.u_as_b(u)), u)
  uc = uctbx.unit_cell((5,4,7,80,110,100))
  for fw,bw in ((adptbx.u_cif_as_u_star, adptbx.u_star_as_u_cif),
                (adptbx.u_cart_as_u_star, adptbx.u_star_as_u_cart),
                (adptbx.u_cart_as_u_cif, adptbx.u_cif_as_u_cart),
                (adptbx.u_cart_as_beta, adptbx.beta_as_u_cart),
                (adptbx.u_cif_as_beta, adptbx.beta_as_u_cif)):
    assert approx_equal(bw(uc, fw(uc, u)), u)
  assert approx_equal(adptbx.beta_as_u_star(adptbx.u_star_as_beta(u)), u)
  assert approx_equal(adptbx.u_cart_as_u_iso(adptbx.u_iso_as_u_cart(2.3)), 2.3)
  for fw,bw in ((adptbx.u_iso_as_u_star, adptbx.u_star_as_u_iso),
                (adptbx.u_iso_as_u_cif, adptbx.u_cif_as_u_iso),
                (adptbx.u_iso_as_beta, adptbx.beta_as_u_iso)):
    assert approx_equal(bw(uc, fw(uc, 2.3)), 2.3)
  fc = adptbx.factor_u_cart_u_iso(u_cart=u)
  assert approx_equal(fc.u_iso, adptbx.u_cart_as_u_iso(u))
  assert approx_equal(
    fc.u_cart_minus_u_iso,
    [uii-fc.u_iso for uii in u[:3]]+list(u[3:]))
  f = adptbx.factor_u_star_u_iso(
    unit_cell=uc, u_star=adptbx.u_cart_as_u_star(uc, u))
  assert approx_equal(f.u_iso, fc.u_iso)
  assert approx_equal(
    f.u_star_minus_u_iso,
    adptbx.u_cart_as_u_star(uc, fc.u_cart_minus_u_iso))
  f = adptbx.factor_u_cif_u_iso(
    unit_cell=uc, u_cif=adptbx.u_cart_as_u_cif(uc, u))
  assert approx_equal(f.u_iso, fc.u_iso)
  assert approx_equal(
    f.u_cif_minus_u_iso,
    adptbx.u_cart_as_u_cif(uc, fc.u_cart_minus_u_iso))
  f = adptbx.factor_beta_u_iso(
    unit_cell=uc, beta=adptbx.u_cart_as_beta(uc, u))
  assert approx_equal(f.u_iso, fc.u_iso)
  assert approx_equal(
    f.beta_minus_u_iso,
    adptbx.u_cart_as_beta(uc, fc.u_cart_minus_u_iso))
  assert approx_equal(adptbx.debye_waller_factor_b_iso(0.25,2.3),
                      math.exp(-2.3*0.25))
  assert approx_equal(adptbx.debye_waller_factor_u_iso(0.25,2.3),
                      math.exp(-2.3*episq*0.25))
  assert approx_equal(adptbx.debye_waller_factor_b_iso(uc, (1,2,3), 2.3),
                      adptbx.debye_waller_factor_u_iso(uc, (1,2,3), 2.3/episq))
  u_star = adptbx.u_cart_as_u_star(uc, u)
  dw = adptbx.debye_waller_factor_u_star((1,2,3), u_star)
  assert approx_equal(dw, adptbx.debye_waller_factor_beta((1,2,3),
                            adptbx.u_star_as_beta(u_star)))
  assert approx_equal(dw, adptbx.debye_waller_factor_u_cif(uc, (1,2,3),
                            adptbx.u_star_as_u_cif(uc, u_star)))
  assert approx_equal(dw, adptbx.debye_waller_factor_u_cart(uc, (1,2,3),
                            adptbx.u_star_as_u_cart(uc, u_star)))
  for e in adptbx.eigenvalues(u):
    check_eigenvalue(u, e)
  assert not adptbx.is_positive_definite(adptbx.eigenvalues(u))
  assert not adptbx.is_positive_definite(adptbx.eigenvalues(u), 0)
  assert adptbx.is_positive_definite(adptbx.eigenvalues(u), 1.22)
  assert not adptbx.is_positive_definite(u)
  assert not adptbx.is_positive_definite(u, 0)
  assert adptbx.is_positive_definite(u, 1.22)
  up = (0.534, 0.812, 0.613, 0.0166, 0.134, -0.0124)
  s = adptbx.eigensystem(up)
  assert approx_equal(s.values(), (0.813132, 0.713201, 0.432668))
  for i in xrange(3):
    check_eigenvector(up, s.values()[i], s.vectors(i))
  c = (1,2,3, 3,-4,5, 4,5,6)
  v = (198,18,1020,116,447,269)
  assert approx_equal(adptbx.c_u_c_transpose(c, u), v)
  assert approx_equal(adptbx.eigensystem(u).values(),
    (14.279201519086316, 2.9369143826320214, -1.2161159017183376))
  s = adptbx.eigensystem(up)
  try: s.vectors(4)
  except RuntimeError, e: assert str(e).endswith("Index out of range.")
  else: raise Exception_expected
  uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0)
  assert approx_equal(uf, (3.0810418, 4.7950710, 9.3400030,
                           1.7461615, 1.1659954, 6.4800706))
  uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0, u_max=3)
  assert approx_equal(uf, (2.7430890, 1.0378360, 2.1559895,
                           0.6193215, -0.3921632, 1.2846854))
  uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0, u_max=3)
  assert approx_equal(scitbx.linalg.eigensystem.real_symmetric(u).values(),
                      (14.2792015, 2.9369144, -1.2161159))
  assert approx_equal(scitbx.linalg.eigensystem.real_symmetric(uf).values(),
                      (3, 2.9369144, 0))
  uf = adptbx.eigenvalue_filtering(up)
  assert approx_equal(uf, up)
コード例 #3
0
def tls_from_uanisos(xray_structure,
                     selections,
                     tlsos_initial,
                     number_of_macro_cycles=3000,
                     max_iterations=1000,
                     refine_T=True,
                     refine_L=True,
                     refine_S=True,
                     verbose=-1,
                     enforce_positive_definite_TL=True,
                     out=None):
    global time_tls_from_uanisos
    t1 = time.time()
    if (out is None): out = sys.stdout
    if (verbose > 0):
        show_tls(tlsos=tlsos_initial,
                 text="TLS from ADP: start TLS values",
                 out=out)
    u_cart = xray_structure.scatterers().extract_u_cart(
        xray_structure.unit_cell())
    T_min = []
    L_min = []
    S_min = []
    group_counter = 0
    for tlso_initial, selection in zip(tlsos_initial, selections):
        group_counter += 1
        T_initial = tlso_initial.t
        L_initial = tlso_initial.l
        S_initial = tlso_initial.s
        if (enforce_positive_definite_TL):
            T_initial = adptbx.eigenvalue_filtering(T_initial)
            L_initial = adptbx.eigenvalue_filtering(L_initial)
        stop_flag = 0
        target_stop = -1.0
        sites_cart_selected = xray_structure.sites_cart().select(selection)
        u_cart_selected = u_cart.select(selection)
        for i in range(1, number_of_macro_cycles + 1):
            target_start = target_stop
            minimized = tls_from_uaniso_minimizer(
                uaniso=u_cart_selected,
                T_initial=T_initial,
                L_initial=L_initial,
                S_initial=S_initial,
                refine_T=refine_T,
                refine_L=refine_L,
                refine_S=refine_S,
                max_iterations=max_iterations,
                origin=tlso_initial.origin,
                sites=sites_cart_selected)
            if (refine_T): T_initial = minimized.T_min
            else: assert approx_equal(T_initial, minimized.T_min)
            if (refine_L): L_initial = minimized.L_min
            else: assert approx_equal(L_initial, minimized.L_min)
            if (refine_S): S_initial = minimized.S_min
            else: assert approx_equal(S_initial, minimized.S_min)
        if (verbose > 0):
            print >> out, "TLS group %d: minimized target = " % (
                group_counter), minimized.f
        T_min_ = minimized.T_min
        L_min_ = minimized.L_min
        if (enforce_positive_definite_TL):
            T_min_ = adptbx.eigenvalue_filtering(T_min_)
            L_min_ = adptbx.eigenvalue_filtering(L_min_)
        T_min.append(T_min_)
        L_min.append(L_min_)
        S_min.append(minimized.S_min)
        if (enforce_positive_definite_TL):
            assert adptbx.is_positive_definite(T_min_, 1.e-6)
            assert adptbx.is_positive_definite(L_min_, 1.e-6)
    tlsos_result = generate_tlsos(selections=selections,
                                  xray_structure=xray_structure,
                                  T=T_min,
                                  L=L_min,
                                  S=S_min)
    if (verbose > 0):
        show_tls(tlsos=tlsos_result,
                 text="TLS from ADP: final TLS values",
                 out=out)
    t2 = time.time()
    time_tls_from_uanisos += (t2 - t1)
    return tlsos_result
コード例 #4
0
 for i in xrange(3):
     check_eigenvector(up, s.values()[i], s.vectors(i))
 c = (1, 2, 3, 3, -4, 5, 4, 5, 6)
 v = (198, 18, 1020, 116, 447, 269)
 assert approx_equal(adptbx.c_u_c_transpose(c, u), v)
 assert approx_equal(
     adptbx.eigensystem(u).values(),
     (14.279201519086316, 2.9369143826320214, -1.2161159017183376))
 s = adptbx.eigensystem(up)
 try:
     s.vectors(4)
 except RuntimeError, e:
     assert str(e).endswith("Index out of range.")
 else:
     raise Exception_expected
 uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0)
 assert approx_equal(
     uf, (3.0810418, 4.7950710, 9.3400030, 1.7461615, 1.1659954, 6.4800706))
 uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0, u_max=3)
 assert approx_equal(
     uf,
     (2.7430890, 1.0378360, 2.1559895, 0.6193215, -0.3921632, 1.2846854))
 uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0, u_max=3)
 assert approx_equal(
     scitbx.linalg.eigensystem.real_symmetric(u).values(),
     (14.2792015, 2.9369144, -1.2161159))
 assert approx_equal(
     scitbx.linalg.eigensystem.real_symmetric(uf).values(),
     (3, 2.9369144, 0))
 uf = adptbx.eigenvalue_filtering(up)
 assert approx_equal(uf, up)
コード例 #5
0
ファイル: tst_adptbx.py プロジェクト: keitaroyam/cctbx_fork
    s = adptbx.eigensystem(up)
    assert approx_equal(s.values(), (0.813132, 0.713201, 0.432668))
    for i in xrange(3):
        check_eigenvector(up, s.values()[i], s.vectors(i))
    c = (1, 2, 3, 3, -4, 5, 4, 5, 6)
    v = (198, 18, 1020, 116, 447, 269)
    assert approx_equal(adptbx.c_u_c_transpose(c, u), v)
    assert approx_equal(adptbx.eigensystem(u).values(), (14.279201519086316, 2.9369143826320214, -1.2161159017183376))
    s = adptbx.eigensystem(up)
    try:
        s.vectors(4)
    except RuntimeError, e:
        assert str(e).endswith("Index out of range.")
    else:
        raise Exception_expected
    uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0)
    assert approx_equal(uf, (3.0810418, 4.7950710, 9.3400030, 1.7461615, 1.1659954, 6.4800706))
    uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0, u_max=3)
    assert approx_equal(uf, (2.7430890, 1.0378360, 2.1559895, 0.6193215, -0.3921632, 1.2846854))
    uf = adptbx.eigenvalue_filtering(u_cart=u, u_min=0, u_max=3)
    assert approx_equal(scitbx.linalg.eigensystem.real_symmetric(u).values(), (14.2792015, 2.9369144, -1.2161159))
    assert approx_equal(scitbx.linalg.eigensystem.real_symmetric(uf).values(), (3, 2.9369144, 0))
    uf = adptbx.eigenvalue_filtering(up)
    assert approx_equal(uf, up)


def u_star_minus_u_iso_airlie(unit_cell, u_star):
    u_iso = adptbx.u_star_as_u_iso(unit_cell, u_star)
    u_star_as_beta = adptbx.u_star_as_beta(u_star)
    u_iso_as_beta = adptbx.u_iso_as_beta(unit_cell, u_iso)
    beta_minus_u_iso = [a - i for a, i in zip(u_star_as_beta, u_iso_as_beta)]