Ejemplo n.º 1
0
def acq_rel_grid_scan(
    dets: list,
    exposure: float,
    wait: float,
    start0: float, stop0: float, num0: int,
    start1: float, stop1: float, num1: int
):
    """Make a plan of two dimensional grid scan."""
    area_det = xpd_configuration["area_det"]
    x_controller = xpd_configuration["x_controller"]
    y_controller = xpd_configuration["y_controller"]

    def per_step(detectors, step: dict, pos_cache):
        """ customized step to ensure shutter is open before
        reading at each motor point and close shutter after reading
        """
        yield from bps.checkpoint()
        for motor, pos in step.items():
            yield from bps.mv(motor, pos)
        yield from bps.sleep(wait)
        yield from open_shutter_stub()
        yield from bps.sleep(glbl["shutter_sleep"])
        yield from bps.trigger_and_read(list(detectors) + list(step.keys()))
        yield from close_shutter_stub()

    plan = bp.rel_grid_scan(
        [area_det],
        x_controller, start0, stop0, num0,
        y_controller, start1, stop1, num1,
        snake_axes=True,
        per_step=per_step
    )
    yield from _configure_area_det(exposure)
    yield from plan
Ejemplo n.º 2
0
def test_rmesh_pseudo(hw, RE):
    p3x3 = hw.pseudo3x3
    p3x3.set(1, -2, 100)
    init_pos = p3x3.position
    sig = hw.sig
    d = DocCollector()

    RE.subscribe(d.insert)
    rs = RE(
        bp.rel_grid_scan([sig], p3x3.pseudo1, 0, 3, 5, p3x3.pseudo2, 7, 10, 7))

    if RE.call_returns_result:
        uid = rs.run_start_uids[0]
    else:
        uid = rs[0]

    df = pd.DataFrame(
        [_['data'] for _ in d.event[d.descriptor[uid][0]['uid']]])

    for k in p3x3.describe():
        assert k in df

    for k in sig.describe():
        assert k in df

    assert all(df[sig.name] == 0)
    assert all(df[p3x3.pseudo3.name] == 100)
    assert len(df) == 35
    assert min(df[p3x3.pseudo1.name]) == 1
    assert init_pos == p3x3.position
Ejemplo n.º 3
0
def test_rmesh_pseudo(hw, RE):
    p3x3 = hw.pseudo3x3
    p3x3.set(1, -2, 100)
    init_pos = p3x3.position
    sig = hw.sig
    d = DocCollector()

    RE.subscribe(d.insert)
    rs, = RE(bp.rel_grid_scan(
        [sig],
        p3x3.pseudo1, 0, 3, 5,
        p3x3.pseudo2, 7, 10, 7, False))
    df = pd.DataFrame([_['data']
                       for _ in d.event[d.descriptor[rs][0]['uid']]])

    for k in p3x3.describe():
        assert k in df

    for k in sig.describe():
        assert k in df

    assert all(df[sig.name] == 0)
    assert all(df[p3x3.pseudo3.name] == 100)
    assert len(df) == 35
    assert min(df[p3x3.pseudo1.name]) == 1
    assert init_pos == p3x3.position
Ejemplo n.º 4
0
def multi_sample_grid(samples, dx, dy, num_x, num_y):
    uids = []
    for index, sample_metadata in samples.items():
        yield from mv(motor1, positions[index])
        uid = yield from rel_grid_scan(
            [det],
            motor1, -dx, dx, num_x,
            motor2, -dy, dy, num_y, False,  # False -> Do not "snake" path.
            md=sample_metadata)
        uids.append(uid)
    return tuple(uids)  # tuple because immutable is safer
Ejemplo n.º 5
0
def user_plan(x_range, nx, y_range, ny, count_time=0.2, sample_name="no name"):
    motor_args = []
    motor_args += [neat_stage.y, -y_range, y_range, ny]
    motor_args += [neat_stage.x, -x_range, x_range, nx, False]

    yield from bps.mv(mca.preset_real_time, count_time, scaler.preset_time,
                      count_time)
    _md = {"sample_name": sample_name}

    yield from bp.rel_grid_scan(
        [mca, scaler],
        *motor_args,
        # per_step=None,  # use default
        per_step=optimize_energy_per_step,
        md=_md)
Ejemplo n.º 6
0
def test_outer_product_dscan(RE, hw):
    scan = bp.rel_grid_scan([hw.det],
                                          hw.motor1, 1, 3, 3,
                                          hw.motor2, 10, 20, 2, False)
    # Note: motor1 is the first motor specified, and so it is the "slow"
    # axis, matching the numpy convention.
    hw.motor1.set(5)
    hw.motor2.set(8)
    expected_data = [
        {'motor2': 18.0, 'det': 1.0, 'motor1': 6.0},
        {'motor2': 28.0, 'det': 1.0, 'motor1': 6.0},
        {'motor2': 18.0, 'det': 1.0, 'motor1': 7.0},
        {'motor2': 28.0, 'det': 1.0, 'motor1': 7.0},
        {'motor2': 18.0, 'det': 1.0, 'motor1': 8.0},
        {'motor2': 28.0, 'det': 1.0, 'motor1': 8.0}]
    for d in expected_data:
        d.update({'motor1_setpoint': d['motor1']})
        d.update({'motor2_setpoint': d['motor2']})
    multi_traj_checker(RE, scan, expected_data)
Ejemplo n.º 7
0
def test_outer_product_dscan_snaked(RE, hw):
    scan = bp.rel_grid_scan([hw.det],
                                          hw.motor1, 1, 3, 3,
                                          hw.motor2, 10, 20, 2, True)
    # Note: motor1 is the first motor specified, and so it is the "slow"
    # axis, matching the numpy convention.
    hw.motor1.set(5)
    hw.motor2.set(8)
    expected_data = [
        {'motor2': 18.0, 'det': 1.0, 'motor1': 6.0},
        {'motor2': 28.0, 'det': 1.0, 'motor1': 6.0},
        {'motor2': 28.0, 'det': 1.0, 'motor1': 7.0},
        {'motor2': 18.0, 'det': 1.0, 'motor1': 7.0},
        {'motor2': 18.0, 'det': 1.0, 'motor1': 8.0},
        {'motor2': 28.0, 'det': 1.0, 'motor1': 8.0}]
    for d in expected_data:
        d.update({'motor1_setpoint': d['motor1']})
        d.update({'motor2_setpoint': d['motor2']})
    multi_traj_checker(RE, scan, expected_data)
Ejemplo n.º 8
0
 def relgridscan(self,
                 motor1,
                 start1,
                 stop1,
                 nstep1,
                 motor2,
                 start2,
                 nstop2,
                 nstep2,
                 nEvents,
                 record=True):
     daq.configure(nEvents, record=record, controls=[motor1, motor2])
     RE(
         rel_grid_scan([daq],
                       motor1,
                       start1,
                       stop1,
                       nstep1,
                       motor2,
                       start2,
                       nstop2,
                       nstep2,
                       snake_axes=True))
Ejemplo n.º 9
0
def test_rmesh_pseudo(hw, RE):
    p3x3 = hw.pseudo3x3
    p3x3.set(1, -2, 100)
    init_pos = p3x3.position
    sig = hw.sig
    d = DocCollector()

    RE.subscribe(d.insert)
    rs, = RE(
        bp.rel_grid_scan([sig], p3x3.pseudo1, 0, 3, 5, p3x3.pseudo2, 7, 10, 7,
                         False))
    df = pd.DataFrame([_['data'] for _ in d.event[d.descriptor[rs][0]['uid']]])

    for k in p3x3.describe():
        assert k in df

    for k in sig.describe():
        assert k in df

    assert all(df[sig.name] == 0)
    assert all(df[p3x3.pseudo3.name] == 100)
    assert len(df) == 35
    assert min(df[p3x3.pseudo1.name]) == 1
    assert init_pos == p3x3.position
Ejemplo n.º 10
0
 def _gen(self):
     return rel_grid_scan(self.detectors, *self.args, md=self.md)
Ejemplo n.º 11
0
def test_simple_rel_grid_scan():
    RE = RunEngine()
    hardware = yaqc_bluesky.Device(39424)
    sensor = yaqc_bluesky.Device(39425)
    RE(rel_grid_scan([sensor], hardware, -1, 1, 15))
Ejemplo n.º 12
0
# Wilson's samples
confgiure3 = configure_area_det(pe1c, 120, 0.2)
plan10 = bp.count([pe1c], per_shot=my_take_reading)
plan11 = bp.count([pe1c], per_shot=my_take_reading)
plan12 = bp.count([pe1c], per_shot=my_take_reading)
plan13 = bp.count([pe1c], per_shot=my_take_reading)
plan14 = bp.count([pe1c], per_shot=my_take_reading)
plan15 = bp.count([pe1c], per_shot=my_take_reading)
plan16 = bp.count([pe1c], per_shot=my_take_reading)
plan17 = bp.count([pe1c], per_shot=my_take_reading)
plan18 = bp.count([pe1c], per_shot=my_take_reading)
plan19 = bp.count([pe1c], per_shot=my_take_reading)

# Yevgeny's samples
configure4 = configure_area_det(pe1c, 120, 0.2)
plan20 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)
plan21 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)
plan22 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)
plan23 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)
plan24 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)

# Hunter's samples
configure5 = configure_area_det(pe1c, 120, 0.2)
plan25 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)
plan26 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)
plan27 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)
plan28 = bp.rel_grid_scan([pe1c], motor, -3, 3, 3, per_step=my_per_step)

# Wenhu's samples
configure6 = configure_area_det(pe1c, 120, 0.2)
plan29 = bp.count([pe1c], 3, 5, per_shot=my_take_reading)