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)
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)
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)
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)