Esempio n. 1
0
    def queue_patterns(self, patterns: numpy.ndarray) -> None:
        if self._trigger_type == TriggerType.SOFTWARE:
            super().queue_patterns(patterns)
            return

        self._validate_patterns(patterns)
        patterns = self._normalize_patterns(patterns)
        patterns = numpy.atleast_2d(patterns)
        n_patterns = patterns.shape[0]  # type: int

        ## The Alpao SDK seems to only support the trigger mode start.  It
        ## still has option called nRepeats that we can't really figure
        ## what is meant to do.  When set to 1, the mode is start.  What
        ## we want it is to have trigger mode once which was not
        ## supported.  We have received a modified version where if
        ## nRepeats is set to same number of patterns, does trigger mode
        ## once (not documented on Alpao SDK).
        if self._trigger_mode == TriggerMode.ONCE:
            n_repeats = n_patterns
        elif self._trigger_mode == TriggerMode.START:
            n_repeats = 1
        else:
            raise Exception("trigger type '%s' and trigger mode '%s'" %
                            (self._trigger_type.name, self._trigger_mode.name))

        data_pointer = patterns.ctypes.data_as(asdk.Scalar_p)
        status = asdk.SendPattern(self._dm, data_pointer, n_patterns,
                                  n_repeats)
        self._raise_if_error(status)
Esempio n. 2
0
    def queue_patterns(self, patterns: numpy.ndarray) -> None:
        if self._trigger_type == microscope.TriggerType.SOFTWARE:
            super().queue_patterns(patterns)
            return

        self._validate_patterns(patterns)
        patterns = self._normalize_patterns(patterns)
        patterns = numpy.atleast_2d(patterns)
        n_patterns: int = patterns.shape[0]

        # The Alpao SDK seems to only support the trigger mode start.  It
        # still has option called nRepeats that we can't really figure
        # what is meant to do.  When set to 1, the mode is start.  What
        # we want it is to have trigger mode once which was not
        # supported.  We have received a modified version where if
        # nRepeats is set to same number of patterns, does trigger mode
        # once (not documented on Alpao SDK).
        if self._trigger_mode == microscope.TriggerMode.ONCE:
            n_repeats = n_patterns
        elif self._trigger_mode == microscope.TriggerMode.START:
            n_repeats = 1
        else:
            # We should not get here in the first place since
            # set_trigger filters unsupported modes.
            raise microscope.UnsupportedFeatureError(
                "trigger type '%s' and trigger mode '%s' is not supported" %
                (self._trigger_type.name, self._trigger_mode.name))

        data_pointer = patterns.ctypes.data_as(asdk.Scalar_p)

        # We don't know if the previous queue of pattern ran until the
        # end, so we need to clear it before sending (see issue #50)
        status = asdk.Stop(self._dm)
        self._raise_if_error(status)

        status = asdk.SendPattern(self._dm, data_pointer, n_patterns,
                                  n_repeats)
        self._raise_if_error(status)