def get_generic_results(self, img_sum, img_y, img_x): ref_x = self.parameters["cx"] ref_y = self.parameters["cy"] y_centers_raw, x_centers_raw = center_shifts(img_sum, img_y, img_x, ref_y, ref_x) shape = y_centers_raw.shape if self.parameters["flip_y"]: transform = flip_y() else: transform = identity() # Transformations are applied right to left transform = rotate_deg(self.parameters["scan_rotation"]) @ transform y_centers, x_centers = transform @ (y_centers_raw.reshape(-1), x_centers_raw.reshape(-1)) y_centers = y_centers.reshape(shape) x_centers = x_centers.reshape(shape) if img_sum.dtype.kind == 'c': x_real, x_imag = np.real(x_centers), np.imag(x_centers) y_real, y_imag = np.real(y_centers), np.imag(y_centers) return COMResultSet([ AnalysisResult(raw_data=x_real, visualized=visualize_simple(x_real), key="x_real", title="x [real]", desc="x component of the center"), AnalysisResult(raw_data=y_real, visualized=visualize_simple(y_real), key="y_real", title="y [real]", desc="y component of the center"), AnalysisResult(raw_data=x_imag, visualized=visualize_simple(x_imag), key="x_imag", title="x [imag]", desc="x component of the center"), AnalysisResult(raw_data=y_imag, visualized=visualize_simple(y_imag), key="y_imag", title="y [imag]", desc="y component of the center"), ]) else: f = CMAP_CIRCULAR_DEFAULT.rgb_from_vector((y_centers, x_centers)) d = divergence(y_centers, x_centers) c = curl_2d(y_centers, x_centers) m = magnitude(y_centers, x_centers) return COMResultSet([ AnalysisResult(raw_data=(x_centers, y_centers), visualized=f, key="field", title="field", desc="cubehelix colorwheel visualization", include_in_download=False), AnalysisResult(raw_data=m, visualized=visualize_simple(m), key="magnitude", title="magnitude", desc="magnitude of the vector field"), AnalysisResult(raw_data=d, visualized=visualize_simple(d), key="divergence", title="divergence", desc="divergence of the vector field"), AnalysisResult(raw_data=c, visualized=visualize_simple(c), key="curl", title="curl", desc="curl of the 2D vector field"), AnalysisResult(raw_data=x_centers, visualized=visualize_simple(x_centers), key="x", title="x", desc="x component of the center"), AnalysisResult(raw_data=y_centers, visualized=visualize_simple(y_centers), key="y", title="y", desc="y component of the center"), ])
def apply_correction(y_centers, x_centers, scan_rotation, flip_y, forward=True): shape = y_centers.shape if flip_y: transform = coordinates.flip_y() else: transform = coordinates.identity() # Transformations are applied right to left transform = coordinates.rotate_deg(scan_rotation) @ transform y_centers = y_centers.reshape(-1) x_centers = x_centers.reshape(-1) if not forward: transform = np.linalg.inv(transform) y_transformed, x_transformed = transform @ (y_centers, x_centers) y_transformed = y_transformed.reshape(shape) x_transformed = x_transformed.reshape(shape) return (y_transformed, x_transformed)
def test_flip_y(): y, x = np.random.random((2, 7)) r_y, r_x = c.flip_y() @ (y, x) assert np.allclose(r_y, -y) assert np.allclose(r_x, x)
def get_generic_results(self, img_sum, img_y, img_x, damage): from libertem.viz import CMAP_CIRCULAR_DEFAULT, visualize_simple ref_x = self.parameters["cx"] ref_y = self.parameters["cy"] y_centers_raw, x_centers_raw = center_shifts(img_sum, img_y, img_x, ref_y, ref_x) shape = y_centers_raw.shape if self.parameters["flip_y"]: transform = flip_y() else: transform = identity() # Transformations are applied right to left transform = rotate_deg(self.parameters["scan_rotation"]) @ transform y_centers, x_centers = transform @ (y_centers_raw.reshape(-1), x_centers_raw.reshape(-1)) y_centers = y_centers.reshape(shape) x_centers = x_centers.reshape(shape) if img_sum.dtype.kind == 'c': x_real, x_imag = np.real(x_centers), np.imag(x_centers) y_real, y_imag = np.real(y_centers), np.imag(y_centers) return COMResultSet([ AnalysisResult(raw_data=x_real, visualized=visualize_simple(x_real, damage=damage), key="x_real", title="x [real]", desc="x component of the center"), AnalysisResult(raw_data=y_real, visualized=visualize_simple(y_real, damage=damage), key="y_real", title="y [real]", desc="y component of the center"), AnalysisResult(raw_data=x_imag, visualized=visualize_simple(x_imag, damage=damage), key="x_imag", title="x [imag]", desc="x component of the center"), AnalysisResult(raw_data=y_imag, visualized=visualize_simple(y_imag, damage=damage), key="y_imag", title="y [imag]", desc="y component of the center"), ]) else: damage = damage & np.isfinite(x_centers) & np.isfinite(y_centers) # Make sure that an all-False `damage` is handled since np.max() # trips on an empty array. # As a remark -- the NumPy error message # "zero-size array to reduction operation maximum which has no identity" # is probably wrong since -np.inf is the identity element for maximum on # floating point numbers and should be returned here. if np.count_nonzero(damage) > 0: vmax = np.sqrt( np.max(x_centers[damage]**2 + y_centers[damage]**2)) else: vmax = 1 f = CMAP_CIRCULAR_DEFAULT.rgb_from_vector( (x_centers, y_centers, 0), vmax=vmax) d = divergence(y_centers, x_centers) c = curl_2d(y_centers, x_centers) m = magnitude(y_centers, x_centers) return COMResultSet([ AnalysisResult(raw_data=(x_centers, y_centers), visualized=f, key="field", title="field", desc="cubehelix colorwheel visualization", include_in_download=False), AnalysisResult(raw_data=m, visualized=visualize_simple(m, damage=damage), key="magnitude", title="magnitude", desc="magnitude of the vector field"), AnalysisResult(raw_data=d, visualized=visualize_simple(d, damage=damage), key="divergence", title="divergence", desc="divergence of the vector field"), AnalysisResult(raw_data=c, visualized=visualize_simple(c, damage=damage), key="curl", title="curl", desc="curl of the 2D vector field"), AnalysisResult(raw_data=x_centers, visualized=visualize_simple(x_centers, damage=damage), key="x", title="x", desc="x component of the center"), AnalysisResult(raw_data=y_centers, visualized=visualize_simple(y_centers, damage=damage), key="y", title="y", desc="y component of the center"), ])