Source code for hikari.dataframes.ubase

import numpy as np
from uncertainties import ufloat, ufloat_fromstr, unumpy
from uncertainties.umath import sin as usin, cos as ucos
from uncertainties.umath import acos as uacos, sqrt as usqrt

from hikari.dataframes import BaseFrame


[docs] class UBaseFrame(BaseFrame): """ A sub-class of :class:`hikari.dataframes.BaseFrame` capable of the same operation as its parent, but using `uncertainty.ufloats` instead of floats. As a result, types specified in docstring might be wrong due to inheritance. """ IMPORTED_FROM_CIF = { 'a': ['_cell_length_a', ufloat_fromstr, 1.0], 'b': ['_cell_length_b', ufloat_fromstr, 1.0], 'c': ['_cell_length_c', ufloat_fromstr, 1.0], 'al': ['_cell_length_alpha', ufloat_fromstr, 90], 'be': ['_cell_length_beta', ufloat_fromstr, 90], 'ga': ['_cell_length_gamma', ufloat_fromstr, 90], 'ub11': ['_diffrn_orient_matrix_UB_11', float, 1.0], 'ub12': ['_diffrn_orient_matrix_UB_12', float, 0.0], 'ub13': ['_diffrn_orient_matrix_UB_13', float, 0.0], 'ub21': ['_diffrn_orient_matrix_UB_21', float, 0.0], 'ub22': ['_diffrn_orient_matrix_UB_22', float, 1.0], 'ub23': ['_diffrn_orient_matrix_UB_23', float, 0.0], 'ub31': ['_diffrn_orient_matrix_UB_31', float, 0.0], 'ub32': ['_diffrn_orient_matrix_UB_32', float, 0.0], 'ub33': ['_diffrn_orient_matrix_UB_33', float, 1.0]} def __init__(self): super(UBaseFrame, self).__init__() u0, u1, upi = ufloat(0., 0), ufloat(1., 0), ufloat(np.pi, 0) u_eye = unumpy.uarray(np.eye(3), np.zeros([3, 3])) self._a_d = self._b_d = self._c_d = u1 self._a_r = self._b_r = self._c_r = u1 self._al_d = self._be_d = self._ga_d = upi / 2 self._al_r = self._be_r = self._ga_r = upi / 2 self._a_v, self._b_v, self._c_v = u_eye self._a_w, self._b_w, self._c_w = u_eye self._refresh_cell() self.orientation = np.array(((1.0, 0, 0), (0, 1.0, 0), (0, 0, 1.0))) """3x3 matrix describing orientation of crystal during experiment."""
[docs] def _refresh_cell(self): a, b, c = self.a_d, self.b_d, self.c_d sa, sb, sg = usin(self.al_d), usin(self.be_d), usin(self.ga_d) ca, cb, cg = ucos(self.al_d), ucos(self.be_d), ucos(self.ga_d) v = a * b * c * usqrt(1 - ca**2 - cb**2 - cg**2 + 2 * ca * cb * cg) u0 = ufloat(0., 0) self._a_v = np.array([a, u0, u0]) self._b_v = np.array([b * cg, b * sg, u0]) self._c_v = np.array([c * cb, c * (ca - cb * cg)/sg, v/(a * b * sg)]) self._a_r = b * c * sa / v self._b_r = c * a * sb / v self._c_r = a * b * sg / v self._al_r = uacos((cb * cg - ca) / (sb * sg)) self._be_r = uacos((cg * ca - cb) / (sg * sa)) self._ga_r = uacos((ca * cb - cg) / (sa * sb)) self._a_w = np.cross(self.b_v, self.c_v) / v self._b_w = np.cross(self.c_v, self.a_v) / v self._c_w = np.cross(self.a_v, self.b_v) / v