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
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
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
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
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)
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)
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)
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))
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
def _gen(self): return rel_grid_scan(self.detectors, *self.args, md=self.md)
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))
# 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)