def branch_3_mn(): m = None n = None small = 1.e-15 for i in range(10000): m2 = [] n2 = [] for i in range(4): r1 = random.random() r2 = random.random() r3 = random.random() if (r3 > 0.1): r1 = r2 m2.append(r1) n2.append(r2) p1 = 0.5 * (m2[0] + m2[3] + math.sqrt(4 * m2[1] * m2[2] + (m2[0] - m2[3])**2)) p2 = 0.5 * (m2[0] + m2[3] - math.sqrt(4 * m2[1] * m2[2] + (m2[0] - m2[3])**2)) q1 = 0.5 * (n2[0] + m2[3] + math.sqrt(4 * n2[1] * n2[2] + (n2[0] - n2[3])**2)) q2 = 0.5 * (n2[0] + m2[3] - math.sqrt(4 * n2[1] * n2[2] + (n2[0] - n2[3])**2)) if (min(p1, p2) > 0.0 and min(q1, q2) > 0.0): r = random.random() if (r > 0.5): r1 = r3 r2 = r2 m = [m2[0], m2[3], r1, m2[1], 0, 0] n = [n2[0], n2[3], r2, n2[1], 0, 0] if ([ adptbx.is_positive_definite(m), adptbx.is_positive_definite(n) ].count(True) == 2): esm = adptbx.eigensystem(m) esn = adptbx.eigensystem(n) vn = esn.values() vm = esm.values() mmin = flex.min(flex.double(vm)) nmin = flex.min(flex.double(vn)) if (abs(abs(mmin) - abs(nmin)) < small and mmin > 0. and nmin > 0.): for i, v in enumerate(vn): if (abs(abs(nmin) - v) < small): break for j, v in enumerate(vm): if (abs(abs(mmin) - v) < small): break vecn = flex.double(esn.vectors(i)) vecm = flex.double(esm.vectors(j)) if (flex.mean(vecm - vecn) < small): break else: m = None n = None assert [m, n] != [None, None] assert [adptbx.is_positive_definite(m), adptbx.is_positive_definite(n)].count(True) == 2 r = random.random() if (r > 0.5): m = adptbx.random_rotate_ellipsoid(u_cart=m) n = adptbx.random_rotate_ellipsoid(u_cart=n) return m, n
def branch_3_mn(): m = None n = None small = 1.e-15 for i in xrange(10000): m2=[] n2=[] for i in xrange(4): r1 = random.random() r2 = random.random() r3 = random.random() if(r3 > 0.1): r1 = r2 m2.append(r1) n2.append(r2) p1 = 0.5 * (m2[0]+m2[3] + math.sqrt(4*m2[1]*m2[2]+(m2[0]-m2[3])**2)) p2 = 0.5 * (m2[0]+m2[3] - math.sqrt(4*m2[1]*m2[2]+(m2[0]-m2[3])**2)) q1 = 0.5 * (n2[0]+m2[3] + math.sqrt(4*n2[1]*n2[2]+(n2[0]-n2[3])**2)) q2 = 0.5 * (n2[0]+m2[3] - math.sqrt(4*n2[1]*n2[2]+(n2[0]-n2[3])**2)) if(min(p1,p2) > 0.0 and min(q1,q2) > 0.0): r = random.random() if(r > 0.5): r1 = r3 r2 = r2 m = [m2[0],m2[3],r1,m2[1],0,0] n = [n2[0],n2[3],r2,n2[1],0,0] if([adptbx.is_positive_definite(m), adptbx.is_positive_definite(n)].count(True)==2): esm = adptbx.eigensystem(m) esn = adptbx.eigensystem(n) vn = esn.values() vm = esm.values() mmin = flex.min(flex.double(vm)) nmin = flex.min(flex.double(vn)) if(abs(abs(mmin) - abs(nmin)) < small and mmin> 0. and nmin> 0.): for i, v in enumerate(vn): if(abs(abs(nmin) - v) < small): break for j, v in enumerate(vm): if(abs(abs(mmin) - v) < small): break vecn = flex.double(esn.vectors(i)) vecm = flex.double(esm.vectors(j)) if(flex.mean(vecm-vecn) < small): break else: m = None n = None assert [m,n] != [None,None] assert [adptbx.is_positive_definite(m), adptbx.is_positive_definite(n)].count(True)==2 r = random.random() if(r > 0.5): m = adptbx.random_rotate_ellipsoid(u_cart = m) n = adptbx.random_rotate_ellipsoid(u_cart = n) return m,n
def run(): symmetry = crystal.symmetry(unit_cell=(10.67, 10.67, 4.68, 90, 90, 120), space_group_symbol="P 3") special_position_settings = crystal.special_position_settings( crystal_symmetry=symmetry, min_distance_sym_equiv=0.5) site = (0, 0, 0.236) u_cif = ((0.17, 0.17, 0.19, 0.09, 0, 0)) site_symmetry = special_position_settings.site_symmetry(site) print "Input Ucif:", u_cif u_star = adptbx.u_cif_as_u_star(symmetry.unit_cell(), u_cif) if (not site_symmetry.is_compatible_u_star(u_star)): print "Warning: ADP tensor is incompatible with site symmetry." u_star = site_symmetry.average_u_star(u_star) u_cif = adptbx.u_star_as_u_cif(symmetry.unit_cell(), u_star) print "Averaged Ucif:", u_cif u_cart = adptbx.u_star_as_u_cart(symmetry.unit_cell(), u_star) eigenvalues = adptbx.eigenvalues(u_cart) if (not adptbx.is_positive_definite(eigenvalues)): print "ADP tensor is not positive definite." print "Eigenvectors and values:" eigensystem = adptbx.eigensystem(u_cart) for i in xrange(3): print " v=(%.5f %.5f %.5f) " % eigensystem.vectors(i), print "lambda=%.4f" % (eigensystem.values()[i], )
def run(): symmetry = crystal.symmetry( unit_cell=(10.67, 10.67, 4.68, 90, 90, 120), space_group_symbol="P 3") special_position_settings = crystal.special_position_settings( crystal_symmetry=symmetry, min_distance_sym_equiv=0.5) site = (0, 0, 0.236) u_cif = ((0.17, 0.17, 0.19, 0.09, 0, 0)) site_symmetry = special_position_settings.site_symmetry(site) print "Input Ucif:", u_cif u_star = adptbx.u_cif_as_u_star(symmetry.unit_cell(), u_cif) if (not site_symmetry.is_compatible_u_star(u_star)): print "Warning: ADP tensor is incompatible with site symmetry." u_star = site_symmetry.average_u_star(u_star) u_cif = adptbx.u_star_as_u_cif(symmetry.unit_cell(), u_star) print "Averaged Ucif:", u_cif u_cart = adptbx.u_star_as_u_cart(symmetry.unit_cell(), u_star) eigenvalues = adptbx.eigenvalues(u_cart) if (not adptbx.is_positive_definite(eigenvalues)): print "ADP tensor is not positive definite." print "Eigenvectors and values:" eigensystem = adptbx.eigensystem(u_cart) for i in xrange(3): print " v=(%.5f %.5f %.5f) " % eigensystem.vectors(i), print "lambda=%.4f" % (eigensystem.values()[i],)
def check_u_cart(axis, u_cart): ev = adptbx.eigenvalues(u_cart) assert ev[0] > 0 assert approx_equal(ev[1:], [0, 0]) es = adptbx.eigensystem(u_cart) evs = es.vectors(0), es.vectors(1), es.vectors(2) a1 = math.acos((axis[0]*evs[0][0]+axis[1]*evs[0][1]+axis[2]*evs[0][2])/ \ (evs[0][0]**2+evs[0][1]**2+evs[0][2]**2)) *180/math.pi a2 = math.acos((axis[0]*evs[1][0]+axis[1]*evs[1][1]+axis[2]*evs[1][2])/ \ (evs[1][0]**2+evs[1][1]**2+evs[1][2]**2)) *180/math.pi a3 = math.acos((axis[0]*evs[2][0]+axis[1]*evs[2][1]+axis[2]*evs[2][2])/ \ (evs[2][0]**2+evs[2][1]**2+evs[2][2]**2)) *180/math.pi assert approx_equal(a1, 90.)
def check_u_cart(axis, u_cart): ev = adptbx.eigenvalues(u_cart) assert ev[0] > 0 assert approx_equal(ev[1:],[0,0]) es = adptbx.eigensystem(u_cart) evs = es.vectors(0),es.vectors(1),es.vectors(2) a1 = math.acos((axis[0]*evs[0][0]+axis[1]*evs[0][1]+axis[2]*evs[0][2])/ \ (evs[0][0]**2+evs[0][1]**2+evs[0][2]**2)) *180/math.pi a2 = math.acos((axis[0]*evs[1][0]+axis[1]*evs[1][1]+axis[2]*evs[1][2])/ \ (evs[1][0]**2+evs[1][1]**2+evs[1][2]**2)) *180/math.pi a3 = math.acos((axis[0]*evs[2][0]+axis[1]*evs[2][1]+axis[2]*evs[2][2])/ \ (evs[2][0]**2+evs[2][1]**2+evs[2][2]**2)) *180/math.pi assert approx_equal(a1, 90.)
def exercise_eigen_core(diag): u = adptbx.random_rotate_ellipsoid(diag + [0., 0., 0.]) ev = list(adptbx.eigenvalues(u)) diag.sort() ev.sort() for i in xrange(3): check_eigenvalue(u, ev[i]) for i in xrange(3): assert abs(diag[i] - ev[i]) < 1.e-4 if (adptbx.is_positive_definite(ev)): es = adptbx.eigensystem(u) ev = list(es.values()) ev.sort() for i in xrange(3): check_eigenvalue(u, ev[i]) for i in xrange(3): assert abs(diag[i] - ev[i]) < 1.e-4 evec = [] for i in xrange(3): check_eigenvector(u, es.values()[i], es.vectors(i)) evec.extend(es.vectors(i)) return # XXX following tests disabled for the moment # sometimes fail if eigenvalues are very similar but not identical sqrt_eval = matrix.diag(flex.sqrt(flex.double(es.values()))) evec = matrix.sqr(evec).transpose() sqrt_u = evec * sqrt_eval * evec.transpose() u_full = matrix.sym(sym_mat3=u).elems assert approx_equal(u_full, (sqrt_u.transpose() * sqrt_u).elems, eps=1.e-3) assert approx_equal(u_full, (sqrt_u * sqrt_u.transpose()).elems, eps=1.e-3) assert approx_equal(u_full, (sqrt_u * sqrt_u).elems, eps=1.e-3) sqrt_u_plus_shifts = matrix.sym(sym_mat3=[ x + 10 * (random.random() - .5) for x in sqrt_u.as_sym_mat3() ]) sts = (sqrt_u_plus_shifts.transpose() * sqrt_u_plus_shifts).as_sym_mat3() ev = adptbx.eigenvalues(sts) assert min(ev) >= 0 sts = (sqrt_u_plus_shifts * sqrt_u_plus_shifts.transpose()).as_sym_mat3() ev = adptbx.eigenvalues(sts) assert min(ev) >= 0 sts = (sqrt_u_plus_shifts * sqrt_u_plus_shifts).as_sym_mat3() ev = adptbx.eigenvalues(sts) assert min(ev) >= 0
def principal_axes_of_inertia(real_map, site_cart, unit_cell, radius): st = sphericity_tensor(map_data=real_map, unit_cell=unit_cell, radius=radius, site_frac=unit_cell.fractionalize(site_cart)) es = adptbx.eigensystem(st) def center_of_mass_(): return center_of_mass(map_data=real_map, unit_cell=unit_cell, cutoff=0.1) def inertia_tensor(): return st def eigensystem(): return es return group_args(center_of_mass=center_of_mass_, inertia_tensor=inertia_tensor, eigensystem=eigensystem)
def exercise_eigen_core(diag): u = adptbx.random_rotate_ellipsoid(diag + [0.0, 0.0, 0.0]) ev = list(adptbx.eigenvalues(u)) diag.sort() ev.sort() for i in xrange(3): check_eigenvalue(u, ev[i]) for i in xrange(3): assert abs(diag[i] - ev[i]) < 1.0e-4 if adptbx.is_positive_definite(ev): es = adptbx.eigensystem(u) ev = list(es.values()) ev.sort() for i in xrange(3): check_eigenvalue(u, ev[i]) for i in xrange(3): assert abs(diag[i] - ev[i]) < 1.0e-4 evec = [] for i in xrange(3): check_eigenvector(u, es.values()[i], es.vectors(i)) evec.extend(es.vectors(i)) return # XXX following tests disabled for the moment # sometimes fail if eigenvalues are very similar but not identical sqrt_eval = matrix.diag(flex.sqrt(flex.double(es.values()))) evec = matrix.sqr(evec).transpose() sqrt_u = evec * sqrt_eval * evec.transpose() u_full = matrix.sym(sym_mat3=u).elems assert approx_equal(u_full, (sqrt_u.transpose() * sqrt_u).elems, eps=1.0e-3) assert approx_equal(u_full, (sqrt_u * sqrt_u.transpose()).elems, eps=1.0e-3) assert approx_equal(u_full, (sqrt_u * sqrt_u).elems, eps=1.0e-3) sqrt_u_plus_shifts = matrix.sym(sym_mat3=[x + 10 * (random.random() - 0.5) for x in sqrt_u.as_sym_mat3()]) sts = (sqrt_u_plus_shifts.transpose() * sqrt_u_plus_shifts).as_sym_mat3() ev = adptbx.eigenvalues(sts) assert min(ev) >= 0 sts = (sqrt_u_plus_shifts * sqrt_u_plus_shifts.transpose()).as_sym_mat3() ev = adptbx.eigenvalues(sts) assert min(ev) >= 0 sts = (sqrt_u_plus_shifts * sqrt_u_plus_shifts).as_sym_mat3() ev = adptbx.eigenvalues(sts) assert min(ev) >= 0
def principal_axes_of_inertia ( real_map, site_cart, unit_cell, radius): st = sphericity_tensor( map_data = real_map, unit_cell = unit_cell, radius = radius, site_frac = unit_cell.fractionalize(site_cart)) es = adptbx.eigensystem(st) def center_of_mass_(): return center_of_mass( map_data=real_map, unit_cell=unit_cell, cutoff=0.1) def inertia_tensor(): return st def eigensystem(): return es return group_args( center_of_mass = center_of_mass_, inertia_tensor = inertia_tensor, eigensystem = eigensystem)
def get_anisotropy(u): esv = adptbx.eigensystem(u).values() return min(esv)/max(esv)
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)
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.")
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.")