def make_k_vecs(self): """ Generate the k vectors from the experiment parameters given in constructor """ xim, yim = self.spatial.make_pixel_lut(self.dims) peaks = [numpy.ravel(xim), numpy.ravel(yim)] # First, x, is the slow pixel direction, should not change # when raveled #for i in range(10): # print "slow, fast" # print peaks[0][i],peaks[1][i] assert abs(peaks[0][10] - peaks[0][0]) < 3 # Second, y, is the fast, should change by ~ 1 pixel per pixel assert abs(peaks[1][10] - peaks[1][0] - 10) < 3 tth, eta = transform.compute_tth_eta(peaks, **self.pars.get_parameters()) self.k = transform.compute_k_vectors(tth, eta, self.pars.get('wavelength')) # FIXME # This should be something like domega/dk where # dk [ k(omega=0) - k(omega=1) ] self.lorfac = numpy.ones(self.dims[0] * self.dims[1], numpy.float32)
def test_0_0_0(self): """ wedge, chi = 0 """ SANITY = False om = np.zeros(self.np, np.float) g_old = transform.compute_g_vectors(self.tth, self.eta, om, self.wvln, wedge=0.0, chi=0.0) if SANITY: print g_old.shape, g_old[:, 0] k = transform.compute_k_vectors(self.tth, self.eta, self.wvln) if SANITY: print "k=", k[:, 0] g_new = gv_general.k_to_g(k, om) if SANITY: print g_new.shape, g_new[:, 0] if SANITY: print "end routine" self.assertAlmostEqual(array_diff(g_new, g_old), 0, 6)
def testhklcalc_many(wedge, chi): # hklcalc_many # apply wedge, chi to axis if necessary axis = np.array( [0,0,-1], np.float ) UBI = np.eye(3).ravel() hkl = np.zeros( (len(omega), 3), np.float) XL = np.ones( (len(omega), 3), np.float)*1e3 T = np.array([100,200,300],np.float) wvln = 0.254 pre = np.eye(3).ravel() post = gv_general.chiwedge( wedge=wedge, chi=chi ).ravel() kc = XL.copy() wripaca.hklcalc_many( XL, axis, omega*np.pi/180, UBI, T, pre, post, hkl, wvln, kc) print "axis is",axis t, e = transform.compute_tth_eta_from_xyz( XL.T, t_x = T[0], t_y = T[1], t_z = T[2], omega = omega, wedge = wedge, chi = chi ) #print t,e,omega ori = transform.compute_grain_origins( omega, wedge=wedge, chi=chi, t_x = T[0], t_y = T[1], t_z = T[2] ) print "last origin",ori.T[-1],ori.T[0] print "last xl",XL[-1],XL[0] kve = transform.compute_k_vectors( t, e, wvln ) print "last k",kve.T[-1],kve.T[0] gve = transform.compute_g_vectors( t, e, omega, wvln, wedge=wedge, chi=chi ) print "last g",gve.T[-1],gve.T[0] htest = np.dot( UBI.reshape(3,3), gve ) for i in range(len(t)): # print gve[:,i] # print hkl[i] if ((gve[:,i]-hkl[i])**2).sum() > 1e-10: print "FAIL", print i,gve[:,i],hkl[i],((gve[:,i]-hkl[i])**2).sum() print wedge,chi sys.exit() print "OK for wedge",wedge,"chi",chi
def test_0_0(self): """ wedge, chi = 0 """ SANITY = False if SANITY: print("*" * 80) om = np.zeros(self.np, np.float) g_old = transform.compute_g_vectors(self.tth, self.eta, self.omega, self.wvln, wedge=0.0, chi=0.0) if SANITY: print(g_old.shape, g_old[:, :3]) k = transform.compute_k_vectors(self.tth, self.eta, self.wvln) if SANITY: print("k=", k[:, :3]) g_new = gv_general.k_to_g(k, self.omega, axis=[0, 0, -1]) if SANITY: print(g_new.shape, g_new[:, :3]) if SANITY: print("end routine") if SANITY: print("*" * 80) self.assertAlmostEqual(array_diff(g_new, g_old), 0, 6)
def test_25_30(self): """ wedge, chi = 25,30 """ w, c = 25, 30 SANITY = False if SANITY: print "*" * 80 om = np.zeros(self.np, np.float) g_old = transform.compute_g_vectors(self.tth, self.eta, self.omega, self.wvln, wedge=w, chi=c) if SANITY: print g_old.shape, "\n", g_old[:, :3] k = transform.compute_k_vectors(self.tth, self.eta, self.wvln) if SANITY: print "k=", k[:, :3] post = gv_general.chiwedge(chi=c, wedge=w) g_new = gv_general.k_to_g(k, self.omega, axis=[0, 0, -1], post=post) if SANITY: print g_new.shape, g_new[:, :3] if SANITY: print "end routine" if SANITY: print "*" * 80 self.assertAlmostEqual(array_diff(g_new, g_old), 0, 6)
def test1(): np.random.seed(42) w = 40 / 12. nv = 1024 * 1024 xyz = 1e5 * (np.random.random((nv, 3)) + (0.2, -0.5, -0.5)).T old = [] new = [] for i in range(5): start = timer() t, e = compute_tth_eta_from_xyz(xyz, None) k = compute_k_vectors(t, e, w) old.append(timer() - start) knew = k_from_xyz(xyz, w) start = timer() ok = np.allclose(k, knew) new.append(timer() - start) if ok: print("Matches", nv) else: print("Fails") print("old perf", np.min(old), np.mean(old), np.std(old)) print("new perf", np.min(new), np.mean(new), np.std(new)) print("speedup", np.min(old) / np.min(new))