Example #1
0
    def test_multiscan(self):
        """A 2D scan."""
        other = LinearMotor()
        values_0 = np.linspace(0, 10, 2) * q.mm
        values_1 = np.linspace(5, 10, 3) * q.mm
        range_0 = Region(self.motor['position'], values_0)
        range_1 = Region(other['position'], values_1)

        def feedback():
            return self.motor.position, other.position

        gen = resolve(scan(feedback, [range_0, range_1]))
        p_0, p_1, result = zip(*gen)
        result_x, result_y = zip(*result)

        first_expected = [0 * q.mm, 10 * q.mm]
        second_expected = [5 * q.mm, 7.5 * q.mm, 10 * q.mm]
        combined = list(product(first_expected, second_expected))
        p_0_exp, p_1_exp = zip(*combined)

        # test parameter values
        compare_sequences(p_0, p_0_exp, assert_almost_equal)
        compare_sequences(p_1, p_1_exp, assert_almost_equal)
        # feedback result is a tuple in this case, test both parts
        compare_sequences(result_x, p_0_exp, assert_almost_equal)
        compare_sequences(result_y, p_1_exp, assert_almost_equal)
Example #2
0
    def test_scan_param_feedback(self):
        p = self.motor['position']
        values = np.linspace(1, 10, 10) * q.mm
        scan_param = Region(p, values)

        x, y = zip(*resolve(scan_param_feedback(scan_param, p)))
        compare_sequences(x, y, self.assertEqual)
Example #3
0
    def test_process(self):
        def feedback():
            return self.motor.position

        values = np.linspace(1, 10, 12) * q.mm
        param_range = Region(self.motor['position'], values)

        x, y = zip(*list(resolve(scan(feedback, param_range))))
        compare_sequences(x, y, self.assertEqual)
Example #4
0
    def test_callback(self):
        called = []
        motor = LinearMotor()
        values = np.linspace(0, 2, 3) * q.mm
        qrange = Region(motor['position'], values)

        def callback():
            called.append(motor.position.to(q.mm).magnitude)

        list(resolve(scan(lambda: None, qrange, callbacks={qrange: callback})))

        np.testing.assert_almost_equal(called, range(3))
def plot_exposure_scan(min_exposure=1*q.ms, max_exposure=500*q.ms, num_points=10):
    """
    Plot the mean value of the detector image for exposure times between
    *min_exposure* and *max_exposure*, use *num_points* data points.

    Returns: a tuple with exposure times and corresponding mean values.
    """
    accum = Accumulate()
    region = Region(camera['exposure_time'], np.linspace(min_exposure, max_exposure, num_points))

    with camera.recording():
        inject(resolve(get_exposure_result(region)), broadcast(PyplotViewer(style='-o')(), accum()))

    return zip(*accum.items)