Exemplo n.º 1
0
def test_gon_init():
    logger.debug('test_gon_init')
    FakeGon = make_fake_device(BaseGon)
    FakeGon(name='test',
            prefix_hor='hor',
            prefix_ver='ver',
            prefix_rot='rot',
            prefix_tip='tip',
            prefix_tilt='tilt')
    FakeGon = make_fake_device(GonWithDetArm)
    FakeGon(name='test',
            prefix_hor='hor',
            prefix_ver='ver',
            prefix_rot='rot',
            prefix_tip='tip',
            prefix_tilt='tilt',
            prefix_detver='detver',
            prefix_dettilt='dettilt',
            prefix_2theta='2theta')
    FakeGon = make_fake_device(XYZStage)
    FakeGon(name='test', prefix_x='x', prefix_y='y', prefix_z='z')
    FakeGon = make_fake_device(SamPhi)
    FakeGon(name='test', prefix_samz='samz', prefix_samphi='samphi')
    FakeGon = make_fake_device(Kappa)
    FakeGon(name='test',
            prefix_x='x',
            prefix_y='y',
            prefix_z='z',
            prefix_eta='eta',
            prefix_kappa='kappa',
            prefix_phi='phi')
Exemplo n.º 2
0
def test_make_fake_device():
    assert make_fake_device(EpicsSignal) == FakeEpicsSignal
    assert make_fake_device(EpicsSignalRO) == FakeEpicsSignalRO

    FakeSample = make_fake_device(Sample)
    my_fake = FakeSample('KITCHEN', name='kitchen')
    assert isinstance(my_fake, Sample)

    # Skipped
    assert my_fake.nothing.__class__ is Signal

    # Normal
    assert isinstance(my_fake.butter, FakeEpicsSignal)
    assert isinstance(my_fake.flour, FakeEpicsSignalRO)
    assert isinstance(my_fake.sink, FakeEpicsSignal)

    # Nested
    assert isinstance(my_fake.egg.yolk, FakeEpicsSignal)
    assert isinstance(my_fake.egg.whites, FakeEpicsSignalRO)

    # Dynamic
    assert isinstance(my_fake.fridge.milk, FakeEpicsSignal)
    assert isinstance(my_fake.fridge.cheese, FakeEpicsSignalRO)

    my_fake.read()
Exemplo n.º 3
0
def fake_new_attenuator(request):
    """AT2L0, AT1K4 - attenuators new to LCLS-II."""
    if request.param == 'at2l0':
        FakeAT2L0 = make_fake_device(AT2L0)
        return FakeAT2L0('AT2L0:', name='fake_at2l0')
    FakeAT1K4 = make_fake_device(AT1K4)
    return FakeAT1K4('AT1K4:',
                     calculator_prefix='AT1K4:CALC',
                     name='fake_at1k4')
Exemplo n.º 4
0
def test_do_not_break_real_class():
    make_fake_device(Sample)
    assert Sample.butter.cls is EpicsSignal
    assert Sample.egg.cls is SampleNested
    assert SampleNested.whites.cls is EpicsSignalRO
    assert Sample.fridge.defn['milk'][0] is EpicsSignal

    with pytest.raises(DisconnectedError):
        my_real = Sample('KITCHEN', name='kitchen')
        my_real.read()
Exemplo n.º 5
0
def test_vh_init():
    logger.debug('test_vh_init')
    FakeVH = make_fake_device(VonHamosFE)
    FakeVH(name='test', prefix_focus='zoom', prefix_energy='buzz')
    FakeVH('TST', name='test', prefix_focus='zoom', prefix_energy='buzz')
    FakeVH = make_fake_device(VonHamosFER)
    FakeVH(name='test', prefix_focus='zoom', prefix_energy='buzz',
           prefix_rot='whirl')
    FakeVH('TST', name='test', prefix_focus='zoom', prefix_energy='buzz',
           prefix_rot='whirl')
    FakeVH = make_fake_device(VonHamos4Crystal)
    FakeVH('TST', name='test', prefix_focus='zoom', prefix_energy='buzz')
Exemplo n.º 6
0
def test_jet_init():
    logger.debug('test_jet_init')
    FakeJet = make_fake_device(Injector)
    FakeJet(name='test', x_prefix='X', y_prefix='Y', z_prefix='Z')
    FakeJet = make_fake_device(InjectorWithFine)
    FakeJet(name='test',
            x_prefix='X',
            y_prefix='Y',
            z_prefix='Z',
            fine_x_prefix='x',
            fine_y_prefix='y',
            fine_z_prefix='z')
    FakeJet = make_fake_device(BeckhoffJet)
    FakeJet('TST', name='test')
Exemplo n.º 7
0
def fake_pim():
    FakePIM = make_fake_device(PIMMotor)
    FakePIM.state.cls = HotfixFakeEpicsSignal
    pim = FakePIM('Test:Yag', name='test')
    pim.state.sim_put(0)
    pim.state.sim_set_enum_strs(['Unknown'] + PIMMotor.states_list)
    return pim
Exemplo n.º 8
0
def fake_mpod_module4Channel():
    FakeMPODmodule = make_fake_device(MPODApalisModule4Channel)
    mpod_module4 = FakeMPODmodule('TEST:MPOD:MOD:4', name='TestM4')
    mpod_module4.voltage_ramp_speed.sim_put(10)
    mpod_module4.current_ramp_speed.sim_put(10)
    mpod_module4.faults.sim_put(0)
    return mpod_module4
Exemplo n.º 9
0
def fake_inout():
    Fake = make_fake_device(InOutRecordPositioner)
    Fake.state.cls = HotfixFakeEpicsSignal
    inout = Fake('Test:Ref', name='test')
    inout.state.sim_put(0)
    inout.state.sim_set_enum_strs(('Unknown', 'IN', 'OUT'))
    return inout
Exemplo n.º 10
0
def make_fake_ccm():
    fake_device_cache[ccm.CCMMotor] = FastMotor
    FakeCCM = make_fake_device(ccm.CCM)
    fake_ccm = FakeCCM(alio_prefix='ALIO',
                       theta2fine_prefix='THETA',
                       theta2coarse_prefix='THTA',
                       chi2_prefix='CHI',
                       x_down_prefix='X:DOWN',
                       x_up_prefix='X:UP',
                       y_down_prefix='Y:DOWN',
                       y_up_north_prefix='Y:UP:NORTH',
                       y_up_south_prefix='Y:UP:SOUTH',
                       in_pos=8,
                       out_pos=0,
                       name='fake_ccm')
    fake_ccm.calc.alio.set(SAMPLE_ALIO)

    def init_pos(mot, pos=0):
        mot.user_readback.sim_put(0)
        mot.user_setpoint.sim_put(0)
        mot.user_setpoint.sim_set_limits((0, 0))
        mot.motor_spg.sim_put(2)
        mot.part_number.sim_put('tasdf')

    init_pos(fake_ccm.x.down)
    init_pos(fake_ccm.x.up)
    init_pos(fake_ccm.y.down)
    init_pos(fake_ccm.y.up_north)
    init_pos(fake_ccm.y.up_south)

    fake_ccm.calc.energy_request.setpoint.sim_put(0)

    return fake_ccm
Exemplo n.º 11
0
def quadem():
    FakeQuadEM = make_fake_device(QuadEM)
    em = FakeQuadEM('quadem:', name='quadem')
    clear_fake_device(em)

    em.conf.port_name.put('NSLS_EM')

    for k in [
            'image', 'current1', 'current2', 'current3', 'current4', 'sum_all'
    ]:
        cc = getattr(em, k)

        if isinstance(cc, ImagePlugin):
            cc.plugin_type.sim_put(ImagePlugin._plugin_type)
            cc.nd_array_port.sim_put('NSLS_EM')
        elif isinstance(cc, StatsPlugin):
            cc.plugin_type.sim_put(StatsPlugin._plugin_type)
            cc.nd_array_port.sim_put('NSLS_EM')

        cc.enable.sim_set_enum_strs(['Disabled', 'Enabled'])
        cc.enable.put('Enabled')
        cc.port_name.sim_put(k.upper())

    em.wait_for_connection()

    return em
Exemplo n.º 12
0
def fake_prefocus():
    FakePrefocus = make_fake_device(Prefocus)
    prefocus = FakePrefocus('TST:PFLS', name='prefocus')
    prefocus.state.sim_set_enum_strs(('Unknown', 'OUT', 'LENS1', 'LENS2',
                                      'LENS3'))
    prefocus.state.sim_put(1)
    return prefocus
Exemplo n.º 13
0
def quadem():
    FakeQuadEM = make_fake_device(QuadEM)
    em = FakeQuadEM('quadem:', name='quadem')
    clear_fake_device(em)

    em.conf.port_name.put('NSLS_EM')

    for k in ['image', 'current1', 'current2', 'current3', 'current4',
              'sum_all']:
        cc = getattr(em, k)

        if isinstance(cc, ImagePlugin):
            cc.plugin_type.sim_put(ImagePlugin._plugin_type)
            cc.nd_array_port.sim_put('NSLS_EM')
        elif isinstance(cc, StatsPlugin):
            cc.plugin_type.sim_put(StatsPlugin._plugin_type)
            cc.nd_array_port.sim_put('NSLS_EM')
        else:
            cc.plugin_type.sim_put('unknown')

        cc.enable.sim_set_enum_strs(['Disabled', 'Enabled'])
        cc.enable.put('Enabled')
        cc.port_name.sim_put(k.upper())

    em.wait_for_connection()

    return em
Exemplo n.º 14
0
def fake_gauge_set():
    FakeGaugeSet = make_fake_device(GaugeSetPirani)
    gs = FakeGaugeSet('Test:Gauge', name='test', index='99')
    gs.gcc.state.sim_put(1)
    gs.gcc.pressure.sim_put(99)
    gs.gpi.pressure.sim_put(98)
    return gs
Exemplo n.º 15
0
def fake_ionpump():
    FakeIonPump = make_fake_device(IonPumpBase)
    pump = FakeIonPump('Test:pump', name='test')
    pump.state.sim_set_enum_strs(['OFF', 'ON'])
    pump.state.sim_put(1)
    pump._pressure.sim_put(99.)
    return pump
Exemplo n.º 16
0
def fake_detector():
    try:
        from ophyd import (SimDetector, CommonPlugins, SimDetectorCam,
                           Component as Cpt, select_version)
        from ophyd.sim import make_fake_device
    except ImportError as ex:
        pytest.skip(f'ophyd version not compatible ({ex})')

    CommonPlugins_V32 = select_version(CommonPlugins, (3, 2))

    class Detector(SimDetector, CommonPlugins_V32):
        cam = Cpt(SimDetectorCam, 'cam1:')
        cam2 = Cpt(SimDetectorCam, 'cam2:')

    FakeDetector = make_fake_device(Detector)
    det = FakeDetector('13SIM1:', name='det')

    for dotted, subdev in sorted(det.walk_subdevices(include_lazy=True)):
        if hasattr(subdev, 'nd_array_port'):
            subdev.port_name.sim_put(subdev.dotted_name)
            subdev.nd_array_port.sim_put('cam')
        elif hasattr(subdev, 'port_name'):
            subdev.port_name.sim_put(subdev.dotted_name)

    return det
Exemplo n.º 17
0
def lxt(monkeypatch):
    """LaserTiming pseudopositioner device instance for testing."""
    lxt = make_fake_device(LaserTiming)('prefix', name='lxt')
    lxt._fs_tgt_time.sim_set_limits(lxt.limits)
    lxt._fs_tgt_time.sim_put(0)
    wrap_pv_positioner_move(monkeypatch, lxt)
    return lxt
Exemplo n.º 18
0
def fake_ccm():
    FakeCCM = make_fake_device(ccm.CCM)
    fake_ccm = FakeCCM(alio_prefix='ALIO',
                       theta2fine_prefix='THETA',
                       x_down_prefix='X:DOWN',
                       x_up_prefix='X:UP',
                       y_down_prefix='Y:DOWN',
                       y_up_north_prefix='Y:UP:NORTH',
                       y_up_south_prefix='Y:UP:SOUTH',
                       in_pos=8,
                       out_pos=0,
                       name='fake_ccm')
    fake_ccm.calc.alio.readback.sim_put(SAMPLE_ALIO)
    fake_ccm.calc.alio.setpoint.sim_put(SAMPLE_ALIO)

    def init_pos(mot, pos=0):
        mot.user_readback.sim_put(0)
        mot.user_setpoint.sim_put(0)
        mot.motor_spg.sim_put(2)

    init_pos(fake_ccm.x.down)
    init_pos(fake_ccm.x.up)
    init_pos(fake_ccm.y.down)
    init_pos(fake_ccm.y.up_north)
    init_pos(fake_ccm.y.up_south)
    return fake_ccm
Exemplo n.º 19
0
def test_lasertiming_dmov_fail():
    logger.debug('test_lasertiming_dmov_fail')
    FakeLaserTiming = make_fake_device(LaserTiming)
    lxt = FakeLaserTiming('FAKE:VIT', name='fstiming')
    # The move should timeout if the DMOV signal is never put to
    with pytest.raises(StatusTimeoutError):
        lxt.mv(1e-6, wait=True, timeout=1)
Exemplo n.º 20
0
def fake_xfls():
    FakeXFLS = make_fake_device(XFLS)
    FakeXFLS.state.cls = HotfixFakeEpicsSignal
    xfls = FakeXFLS('TST:XFLS', name='lens')
    xfls.state.sim_put(4)
    xfls.state.sim_set_enum_strs(('Unknown', 'LENS1', 'LENS2', 'LENS3', 'OUT'))
    return xfls
Exemplo n.º 21
0
def test_beam_energy_request_behavior():
    FakeCls = make_fake_device(BeamEnergyRequest)

    # No wait variant: reports done immediately, skips moves smaller than atol
    nowait = FakeCls('TST', name='nowait', skip_small_moves=True, atol=0.9)
    assert isinstance(nowait, FakeBeamEnergyRequestNoWait)
    nowait.setpoint.put(0)
    assert nowait.position == 0
    nowait.move(0.1, timeout=0.1)
    assert nowait.position == 0
    nowait.move(1, timeout=0.1)
    assert nowait.position == 1

    # Wait variant: acr needs to put 0 to when moving and 1 back when done
    acrwait = FakeCls('TST', name='acrwait', acr_status_suffix='WAITER')
    assert isinstance(acrwait, FakeBeamEnergyRequestACRWait)
    acrwait.done.sim_put(1)
    st = acrwait.move(1, wait=False)
    try:
        st.wait(timeout=0.1)
    except Exception:
        ...
    assert not st.done
    acrwait.done.sim_put(0)
    try:
        st.wait(timeout=0.1)
    except Exception:
        ...
    assert not st.done
    acrwait.done.sim_put(1)
    try:
        st.wait(timeout=1)
    except Exception:
        ...
    assert st.done
Exemplo n.º 22
0
def fake_pps():
    FakePPS = make_fake_device(PPSStopper)
    FakePPS.state.cls = HotfixFakeEpicsSignal
    pps = FakePPS("PPS:H0:SUM", name="test_pps")
    pps.state.sim_set_enum_strs(['Unknown', 'IN', 'OUT'])
    pps.state.put('OUT')
    return pps
Exemplo n.º 23
0
def fake_mesh():
    FakeMesh = make_fake_device(Mesh)
    # Using SP channel = 1, RB channel = 2, scale = 1000
    mesh = FakeMesh('Test:Mesh', 1, 2)
    mesh.write_sig.sim_put(1.0)
    mesh.read_sig.sim_put(1.05)  # rb will be slightly off from sp
    return mesh
Exemplo n.º 24
0
def transfocator():
    FakeTransfocator = make_fake_device(Transfocator)
    # Create our base transfocator
    trans = FakeTransfocator("TST:LENS", name='Transfocator')
    # Set all the lens values to ridiculous values and out
    for lens in trans.xrt_lenses:
        lens._sig_z.sim_put(100.0)
        lens._sig_focus.sim_put(1000.0)
        lens._sig_radius.sim_put(100.0)
        remove(lens)
    for lens, z in zip(trans.tfs_lenses,
                       np.linspace(250, 260, len(trans.tfs_lenses))):
        lens._sig_z.sim_put(z)
        lens._sig_focus.sim_put(1000.0)
        lens._sig_radius.sim_put(100.0)
        remove(lens)
    # Give two reasonable values so we can test calculations
    trans.prefocus_bot._sig_focus.sim_put(50.0)
    trans.tfs_02._sig_z.sim_put(275.)
    trans.tfs_02._sig_focus.sim_put(25.)
    # Use a nominal sample position
    trans.nominal_sample = 300.0
    # Set a reasonable limit
    trans.xrt_limit.sim_put(-1.0)
    return trans
Exemplo n.º 25
0
def fake_offset_ims():
    off_ims = make_fake_device(OffsetMotor)('FAKE:OFFSET:IMS',
                                            motor_prefix='MOTOR:PREFIX',
                                            name='fake_offset_ims')
    motor_setup(off_ims.motor)
    # start with motor position at 1
    off_ims.motor.user_readback.sim_put(1)
    return off_ims
Exemplo n.º 26
0
def fake_class_setup(cls):
    """
    Make the fake class and modify if needed
    """
    FakeClass = make_fake_device(cls)
    if issubclass(FakeClass, PCDSMotorBase):
        FakeClass.motor_spg.cls = HotfixFakeEpicsSignal
    return FakeClass
Exemplo n.º 27
0
def fake_lodcm():
    FakeLODCM = make_fake_device(SimLODCM)

    # After the fake_lodcm setup:
    # fake_lodcm will have get_material() = 'C' by default
    # and get_reflection() = (1, 1, 1) by default

    lodcm = FakeLODCM('FAKE:LOM', name='fake_lom')
    lodcm.h1n_state.state.sim_put(1)
    lodcm.h1n_state.state.sim_set_enum_strs(['Unknown'] + H1N.states_list)
    lodcm.yag.state.sim_put(1)
    lodcm.yag.state.sim_set_enum_strs(['Unknown'] + YagLom.states_list)
    lodcm.dectris.state.sim_put(1)
    lodcm.dectris.state.sim_set_enum_strs(['Unknown'] + Dectris.states_list)
    lodcm.diode.state.sim_put(1)
    lodcm.diode.state.sim_set_enum_strs(['Unknown'] + Diode.states_list)
    lodcm.foil.state.sim_put(1)
    lodcm.foil.state.sim_set_enum_strs(['Unknown'] + Foil.states_list)
    lodcm.h1n_state.state.sim_put(1)

    # additional states for Crystal Tower 1
    # set y1_state and chi1_state to 'C'
    lodcm.y1_state.state.sim_put(1)
    lodcm.y1_state.state.sim_set_enum_strs(['Unknown'] + Y1.states_list)
    lodcm.chi1_state.state.sim_put(1)
    lodcm.chi1_state.state.sim_set_enum_strs(['Unknown'] + CHI1.states_list)

    # additional states for Crystal Tower 2
    # set y2_state, chi2_state and h2_state to 'C'
    lodcm.y2_state.state.sim_put(1)
    lodcm.y2_state.state.sim_set_enum_strs(['Unknown'] + Y2.states_list)
    lodcm.chi2_state.state.sim_put(1)
    lodcm.chi2_state.state.sim_set_enum_strs(['Unknown'] + CHI2.states_list)
    lodcm.h2n_state.state.sim_put(1)
    lodcm.h2n_state.state.sim_set_enum_strs(['Unknown'] + H2N.states_list)

    # set the reflection to default to (1, 1, 1) for both towers and both
    # materials
    lodcm.tower1.diamond_reflection.sim_put((1, 1, 1))
    lodcm.tower1.silicon_reflection.sim_put((1, 1, 1))
    lodcm.tower2.diamond_reflection.sim_put((1, 1, 1))
    lodcm.tower2.silicon_reflection.sim_put((1, 1, 1))

    lodcm.th1Si = make_fake_offset_ims('TH1SI:PREFIX', user_offset=-23)
    lodcm.th2Si = make_fake_offset_ims('TH2C:PREFIX', user_offset=-23)
    lodcm.th1C = make_fake_offset_ims('TH1C:PREFIX')
    lodcm.th2C = make_fake_offset_ims('TH2C:PREFIX')

    lodcm.z1Si = make_fake_offset_ims('TH1SI:PREFIX')
    lodcm.z2Si = make_fake_offset_ims('TH2C:PREFIX')
    lodcm.z1C = make_fake_offset_ims('TH1C:PREFIX')
    lodcm.z2C = make_fake_offset_ims('TH2C:PREFIX')

    lodcm.tower2.x2_retry_deadband.sim_put(-1)
    lodcm.tower2.z2_retry_deadband.sim_put(-1)

    return lodcm
Exemplo n.º 28
0
def fake_pim():
    FakePIM = make_fake_device(PIM)
    pim = FakePIM('Test:Yag', name='test')
    pim.state.state.sim_put(0)
    pim.state.state.sim_set_enum_strs(['Unknown'] + PIMY.states_list)
    pim.y_motor.error_severity.sim_put(0)
    pim.y_motor.bit_status.sim_put(0)
    pim.y_motor.motor_spg.sim_put(2)
    return pim
Exemplo n.º 29
0
def fake_mps_limits():
    FakeLimits = make_fake_device(MPSLimits)
    mps = FakeLimits("Tst:Mps:Lim", logic=lambda x, y: x, name='MPS Limits')
    # Not bypassed or faulted
    mps.in_limit.fault.sim_put(0)
    mps.in_limit.bypass.sim_put(0)
    mps.out_limit.fault.sim_put(0)
    mps.out_limit.bypass.sim_put(0)
    return mps
Exemplo n.º 30
0
def test_clear_fake_device():
    FakeSample = make_fake_device(Sample)
    my_fake = FakeSample('KITCHEN', name='kitchen')
    clear_fake_device(my_fake, default_value=49, default_string_value='string')
    assert my_fake.butter.value == 49
    assert my_fake.flour.value == 49
    assert my_fake.sink.value == 49
    assert my_fake.egg.yolk.value == 'string'
    assert my_fake.egg.whites.value == 49
Exemplo n.º 31
0
def fake_ipm():
    FakeIPM = make_fake_device(IPM)
    ipm = FakeIPM("Test:My:IPM", name='test_ipm')
    ipm.diode.state.sim_put(0)
    ipm.diode.state.sim_set_enum_strs(['Unknown'] +
                                      InOutRecordPositioner.states_list)
    ipm.state.sim_put(0)
    ipm.state.sim_set_enum_strs(['Unknown'] + IPM.states_list)
    return ipm