Example #1
0
    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))