예제 #1
0
 def test_ignore_edges(self):
     data_array = np.ones(shape=(100, 100)) * 5000
     value = 50
     data_array[1:-1, 1:-1] = value
     clim0 = pst._get_limits_from_array(data_array, ignore_edges=True)
     assert (value, value) == clim0
     clim1 = pst._get_limits_from_array(data_array, ignore_edges=False)
     assert not ((value, value) == clim1)
예제 #2
0
 def test_ignore_zeros(self):
     data_array0 = np.zeros(shape=(100, 100))
     value = 50
     data_array0[:, 70:80] = value
     clim0_0 = pst._get_limits_from_array(data_array0, ignore_zeros=True)
     assert (value, value) == clim0_0
     clim0_1 = pst._get_limits_from_array(data_array0, sigma=0)
     assert (data_array0.mean(), data_array0.mean()) == clim0_1
     clim0_2 = pst._get_limits_from_array(data_array0, sigma=1)
     assert (0.0, 20.0) == clim0_2
예제 #3
0
 def test_simple_sigma(self):
     data_array0 = np.array((5, 10))
     clim0 = pst._get_limits_from_array(data_array0, sigma=0)
     assert (data_array0.mean(), data_array0.mean()) == clim0
     data_array1 = np.array((5, -10))
     clim1 = pst._get_limits_from_array(data_array1, sigma=0)
     assert (data_array1.mean(), data_array1.mean()) == clim1
     data_array2 = np.array((-5, 10))
     clim2 = pst._get_limits_from_array(data_array2, sigma=0)
     assert (data_array2.mean(), data_array2.mean()) == clim2
     data_array3 = np.array((-5, -10))
     clim3 = pst._get_limits_from_array(data_array3, sigma=0)
     assert (data_array3.mean(), data_array3.mean()) == clim3
예제 #4
0
    def get_magnitude_signal(self, autolim=True, autolim_sigma=4):
        """Get DPC magnitude image visualized as greyscale.

        Converts the x and y beam shifts into a magnitude map, showing the
        magnitude of the beam shifts.

        Useful for visualizing magnetic domain structures.

        Parameters
        ----------
        autolim : bool, default True
        autolim_sigma : float, default 4

        Returns
        -------
        magnitude_signal : HyperSpy 2D signal

        Examples
        --------
        >>> s = pxm.dummy_data.get_simple_dpc_signal()
        >>> s_magnitude = s.get_magnitude_signal()
        >>> s_magnitude.plot()

        See Also
        --------
        get_color_signal : Signal showing both phase and magnitude
        get_phase_signal : Signal showing the phase

        """
        inav02 = np.abs(self.inav[0].data)**2
        inav12 = np.abs(self.inav[1].data)**2
        magnitude = np.sqrt(inav02 + inav12)
        magnitude_limits = None
        if autolim:
            magnitude_limits = pst._get_limits_from_array(magnitude,
                                                          sigma=autolim_sigma)
            np.clip(magnitude,
                    magnitude_limits[0],
                    magnitude_limits[1],
                    out=magnitude)

        signal = Signal2D(magnitude)
        pst._copy_signal2d_axes_manager_metadata(self, signal)
        return signal
    def get_color_signal(self, rotation=None, autolim=True, autolim_sigma=4):
        """Get DPC image visualized using continuous color scale.

        Converts the x and y beam shifts into an RGB array, showing the
        magnitude and direction of the beam shifts.

        Useful for visualizing magnetic domain structures.

        Parameters
        ----------
        rotation : float, optional
            In degrees. Useful for correcting the mismatch between
            scan direction and diffraction pattern rotation.
        autolim : bool, default True
        autolim_sigma : float, default 4

        Returns
        -------
        color_signal : HyperSpy 2D RGB signal

        Examples
        --------
        >>> s = pxm.dummy_data.get_simple_dpc_signal()
        >>> s_color = s.get_color_signal()
        >>> s_color.plot()

        Rotate the beam shift by 30 degrees

        >>> s_color = s.get_color_signal(rotation=30)

        See Also
        --------
        get_color_signal : Signal showing both phase and magnitude
        get_phase_signal : Signal showing the phase

        """
        # Rotate the phase by -30 degrees in the color "wheel", to get better
        # visualization in the vertical and horizontal direction.
        if rotation is None:
            rotation = -30
        else:
            rotation = rotation - 30
        inav0 = self.inav[0].data
        inav1 = self.inav[1].data
        phase = np.arctan2(inav0, inav1) % (2 * np.pi)
        magnitude = np.sqrt(np.abs(inav0) ** 2 + np.abs(inav1) ** 2)

        magnitude_limits = None
        if autolim:
            magnitude_limits = pst._get_limits_from_array(
                magnitude, sigma=autolim_sigma
            )
        rgb_array = pst._get_rgb_phase_magnitude_array(
            phase=phase,
            magnitude=magnitude,
            rotation=rotation,
            magnitude_limits=magnitude_limits,
        )
        signal_rgb = Signal1D(rgb_array * (2 ** 16 - 1))
        signal_rgb.change_dtype("uint16")
        signal_rgb.change_dtype("rgb16")
        pst._copy_signal2d_axes_manager_metadata(self, signal_rgb)
        return signal_rgb