assert start < stop, (f"start ({start}) must be smaller than " f"stop ({stop}) for {k}") limits = motor.limits if any(not (limits[0] < v < limits[1]) for v in (start, stop)): raise LimitError(f"your requested {k} values are out of limits for " "the motor " f"{limits[0]} < ({start}, {stop}) < {limits[1]}") def _get_v_with_dflt(sig, dflt): ret = yield from bps.read(sig) return ret[sig.name]["value"] if ret is not None else dflt x_centers = Signal(value=[], name="x_centers", kind="normal") x_centers.tolerance = 1e-15 y_centers = Signal(value=[], name="y_centers", kind="normal") y_centers.tolerance = 1e-15 z_centers = Signal(value=[], name="z_centers", kind="normal") z_centers.tolerance = 1e-15 def xy_fly( scan_title, *, beamline_operator, dwell_time, xstart, xstop, xstep_size, ystart,
# and maybe the xspress3 if xspress3 is not None: yield from bps.read(xspress3) yield from bps.save() for y in range(num_ypixels): if xspress3 is not None: yield from bps.mov(xspress3.fly_next, True) yield from fly_row() yield from fly_body() E_centers = Signal(value=[], name='E_centers', kind='normal') E_centers.tolerance = 1e-15 def E_fly(scan_title, *, start, stop, step_size, num_scans): _validate_motor_limits(mono.energy, start, stop, 'E') assert step_size > 0, f'step_size ({step_size}) must be more than 0' assert num_scans > 0, f'num_scans ({num_scans}) must be more than 0' e_back = yield from _get_v_with_dflt(mono.e_back, 1977.04) energy_cal = yield from _get_v_with_dflt(mono.cal, 0.40118) def _linear_to_energy(linear): linear = np.asarray(linear) return (e_back / np.sin( np.deg2rad(45) + 0.5 * np.arctan((28.2474 - linear) / 35.02333) + np.deg2rad(energy_cal) / 2))