예제 #1
0
파일: com.py 프로젝트: Taimin/LiberTEM
    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"),
            ])
예제 #2
0
파일: com.py 프로젝트: sk1p/LiberTEM
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)
예제 #3
0
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)
예제 #4
0
파일: com.py 프로젝트: saisunku/LiberTEM
    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"),
            ])