Exemple #1
0
class HxnScanStatus:
    '''Broadcast if a scan is in progress via PV

    Processed on every start/end document
    '''
    def __init__(self, running_pv):
        self._last_start = None
        self.running_signal = EpicsSignal(running_pv)
        self._running = False

    @property
    def running(self):
        return self._running

    @running.setter
    def running(self, running):
        self._running = running

        if running is None:
            running = 0

        try:
            self.running_signal.put(running)
        except DisconnectedError:
            logger.error('ScanRunning PV disconnected. Is the hxntools IOC running?')

    def __call__(self, name, doc):
        '''Bluesky callback with document info'''
        if name == 'start':
            self._last_start = doc
        if self._last_start and name in ('start', 'stop'):
            self.running = (name == 'start')
Exemple #2
0
def test():
    loggers = ('ophyd.controls.cas',
               )

    config.setup_loggers(loggers)

    session = config.session
    server = session.cas

    def updated(value=None, **kwargs):
        print('Updated to: %s' % value)

    python_pv = CasPV(config.server_pvnames[0], 123.0, server=server)

    # full_pvname includes the server prefix
    pvname = python_pv.full_pvname

    signal = EpicsSignal(pvname)
    signal.subscribe(updated)

    time.sleep(0.1)

    for i in range(10):
        python_pv.value = i
        time.sleep(0.05)
 def _setEpicsShutterCommands(self, basepvname):
     open_suffix = 'Cmd:Opn-Cmd'
     close_suffix = 'Cmd:Cls-Cmd'
     open_pv = getEpicsPV(basepvname, open_suffix)
     close_pv = getEpicsPV(basepvname, close_suffix)
     self._opencmd = EpicsSignal(open_pv, rw = True, name = '_opencmd')
     self._closecmd = EpicsSignal(close_pv, rw = True, name = '_closecmd')
     return
 def _setEpicsShutterCommands(self, basepvname):
     open_suffix = "Cmd:Opn-Cmd"
     close_suffix = "Cmd:Cls-Cmd"
     open_pv = getEpicsPV(basepvname, open_suffix)
     close_pv = getEpicsPV(basepvname, close_suffix)
     self._opencmd = EpicsSignal(open_pv, rw=True, name="_opencmd")
     self._closecmd = EpicsSignal(close_pv, rw=True, name="_closecmd")
     return
 def _setEpicsShutterStatus(self, basepvname):
     open_suffix = 'Sw:Opn1-Sts'
     close_suffix = 'Sw:Cls1-Sts'
     open_pv = ''.join([basepvname, open_suffix])
     close_pv = ''.join([basepvname, close_suffix])
     self._openstatus = EpicsSignal(open_pv, name = '_openstatus')
     self._closestatus = EpicsSignal(close_pv, name = '_closestatus')
     return
 def __init__(self, requested_pos=None, current_pos=None, gasdict = {}):
    GasSwitcher.__init__(self)
    signals = [EpicsSignal(current_pos, rw=False, alias='_current_pos',
                           name='current_gas'),
               EpicsSignal(requested_pos, alias='_requested_pos',
                           name='requested_gas'),
               ]
    self._gasdict = gasdict
    for sig in signals:
        self.add_signal(sig)
    return
class Shutter(object):
    """Open and close fast shutter.
    """

    def __init__(self, basepvname):
        self._setEpicsShutterCommands(basepvname)
        self._setEpicsShutterStatus(basepvname)
        return


    def _setEpicsShutterCommands(self, basepvname):
        open_suffix = 'Cmd:Opn-Cmd'
        close_suffix = 'Cmd:Cls-Cmd'
        open_pv = getEpicsPV(basepvname, open_suffix)
        close_pv = getEpicsPV(basepvname, close_suffix)
        self._opencmd = EpicsSignal(open_pv, rw = True, name = '_opencmd')
        self._closecmd = EpicsSignal(close_pv, rw = True, name = '_closecmd')
        return


    def _setEpicsShutterStatus(self, basepvname):
        open_suffix = 'Sw:Opn1-Sts'
        close_suffix = 'Sw:Cls1-Sts'
        open_pv = ''.join([basepvname, open_suffix])
        close_pv = ''.join([basepvname, close_suffix])
        self._openstatus = EpicsSignal(open_pv, name = '_openstatus')
        self._closestatus = EpicsSignal(close_pv, name = '_closestatus')
        return


    def openShutter(self):
        if self._openstatus.value == 0:
            return
        self._opencmd.put(1)
        while self._openstatus.value == 1:
            time.sleep(0.01)
        return


    def closeShutter(self):
        if self._closestatus.value == 0:
            return
        self._closecmd.put(1)
        while self._closestatus.value == 1:
            time.sleep(0.01)
        return


    @property
    def shutterStatus(self):
        rv = bool(not self._openstatus.value) and bool(self._closestatus.value)
        return rv
    def __init__(self,
                 open=None,
                 open_status=None,
                 close=None,
                 close_status=None):
        Shutter.__init__(self)
        signals = [
            EpicsSignal(open_status, write_pv=open, alias='_open'),
            EpicsSignal(close_status, write_pv=close, alias='_close'),
        ]

        for sig in signals:
            self.add_signal(sig)
class Shutter(object):
    """Open and close fast shutter.
    """

    def __init__(self, basepvname):
        self._setEpicsShutterCommands(basepvname)
        self._setEpicsShutterStatus(basepvname)
        return

    def _setEpicsShutterCommands(self, basepvname):
        open_suffix = "Cmd:Opn-Cmd"
        close_suffix = "Cmd:Cls-Cmd"
        open_pv = getEpicsPV(basepvname, open_suffix)
        close_pv = getEpicsPV(basepvname, close_suffix)
        self._opencmd = EpicsSignal(open_pv, rw=True, name="_opencmd")
        self._closecmd = EpicsSignal(close_pv, rw=True, name="_closecmd")
        return

    def _setEpicsShutterStatus(self, basepvname):
        open_suffix = "Sw:Opn1-Sts"
        close_suffix = "Sw:Cls1-Sts"
        open_pv = "".join([basepvname, open_suffix])
        close_pv = "".join([basepvname, close_suffix])
        self._openstatus = EpicsSignal(open_pv, name="_openstatus")
        self._closestatus = EpicsSignal(close_pv, name="_closestatus")
        return

    def openShutter(self):
        if self._openstatus.value == 0:
            return
        self._opencmd.put(1)
        while self._openstatus.value == 1:
            time.sleep(0.01)
        return

    def closeShutter(self):
        if self._closestatus.value == 0:
            return
        self._closecmd.put(1)
        while self._closestatus.value == 1:
            time.sleep(0.01)
        return

    @property
    def shutterStatus(self):
        rv = bool(not self._openstatus.value) and bool(self._closestatus.value)
        return rv
Exemple #10
0
class HxnUidBroadcast:
    '''Broadcast uid via PV

    Processed on every start/end document
    '''
    def __init__(self, uid_pv):
        self._uid = None
        self._last_start = None
        self.uid_signal = EpicsSignal(uid_pv)

    @property
    def uid(self):
        '''The uid of the last scan run'''
        return self._uid

    @uid.setter
    def uid(self, uid):
        self._uid = uid

        if uid is None:
            uid = ''

        try:
            self.uid_signal.put(uid)
        except DisconnectedError:
            logger.error('UID PV disconnected. Is the hxntools IOC running?')

    def clear(self):
        '''Clear the scan uid'''
        self.uid = None

    def update(self):
        '''Set the uid from the last start document'''
        if self._last_start is None:
            return

        self.uid = self._last_start['uid']

    def __call__(self, name, doc):
        '''Bluesky callback with document info'''
        if name == 'start':
            self._last_start = doc
        if self._last_start and name in ('start', 'stop'):
            self.update()
Exemple #11
0
def test():
    def callback(sub_type=None, timestamp=None, value=None, **kwargs):
        logger.info('[callback] [%s] (type=%s) value=%s' % (timestamp, sub_type, value))

        # Test that the monitor dispatcher works (you cannot use channel access in
        # callbacks without it)
        logger.info('[callback] caget=%s' % rw_signal.get())

    loggers = ('ophyd.controls.signal',
               'ophyd.session',
               )

    config.setup_loggers(loggers)
    logger = config.logger

    motor_record = config.motor_recs[0]
    val = record_field(motor_record, 'VAL')
    rbv = record_field(motor_record, 'RBV')

    rw_signal = EpicsSignal(rbv, write_pv=val)
                            # put_complete=True)
    rw_signal.subscribe(callback, event_type=rw_signal.SUB_VALUE)
    rw_signal.subscribe(callback, event_type=rw_signal.SUB_SETPOINT)

    rw_signal.value = 2
    time.sleep(1.)
    rw_signal.value = 1
    time.sleep(1.)

    # You can also create a Python Signal:
    sig = Signal(name='testing', value=10)
    logger.info('Python signal: %s' % sig)

    # Even one with a separate setpoint/readback value:
    sig = Signal(name='testing', value=10, setpoint=2,
                 separate_readback=True)
    logger.info('Python signal: %s' % sig)
Exemple #12
0
 def __init__(self, running_pv):
     self._last_start = None
     self.running_signal = EpicsSignal(running_pv)
     self._running = False
Exemple #13
0
# For now, access as simple 'signals'
# diag3_cam = EpicsSignal('XF:23ID1-BI{Diag:3-Cam:1}cam1:Acquire_RBV',
#                         write_pv='XF:23ID1-BI{Diag:3-Cam:1}cam1:Acquire',
#                         rw=True, name='diag3_cam_trigger')
#
# These talk to the same devices, but they do not save images.
# They provide sum, stats, etc.
hfm_cam = AreaDetector('XF:05IDA-BI:1{FS:1-Cam:1}', name='hfm_cam')
#
# BPM camera

#hfm_cam = EpicsSignal('XF:05IDA-BI:1{FS:1-Cam:1}Acquire_RBV',
#                        write_pv='XF:05IDA-BI:1{FS:1-Cam:1}Acquire',
#                        rw=True, name='hfm_cam_trigger')
hfm_tot1 = EpicsSignal('XF:05IDA-BI:1{FS:1-Cam:1}Stats1:Total_RBV',
                       rw=False,
                       name='hfm_tot1')
bpm1_cam = EpicsSignal('XF:05IDA-BI:1{BPM:1-Cam:1}Acquire_RBV',
                       write_pv='XF:05IDA-BI:1{Mir:1-Cam:1}Acquire',
                       rw=True,
                       name='hfm_cam_trigger')
bpm1_tot1 = EpicsSignal('XF:05IDA-BI:1{BPM:1-Cam:1}Stats1:Total_RBV',
                        rw=False,
                        name='bpm1_tot1')
bpm1_diode0 = EpicsSignal('xf05bpm03:DataRead_Ch1',
                          rw=False,
                          name='bpm1_diode0')
bpm1_diode1 = EpicsSignal('xf05bpm03:DataRead_Ch2',
                          rw=False,
                          name='bpm1_diode1')
bpm1_diode2 = EpicsSignal('xf05bpm03:DataRead_Ch3',
Exemple #14
0
 def __init__(self, uid_pv):
     self._uid = None
     self._last_start = None
     self.uid_signal = EpicsSignal(uid_pv)
Exemple #15
0
# VLS-PGM

pgm_energy = PVPositioner('XF:23ID1-OP{Mono}Enrgy-SP',
                          readback='XF:23ID1-OP{Mono}Enrgy-I',
                          stop='XF:23ID1-OP{Mono}Cmd:Stop-Cmd',
                          stop_val=1,
                          put_complete=True,
                          name='pgm_energy',
                          limits=(200, 2200))

pgm_mir_pit = EpicsMotor('XF:23ID1-OP{Mono-Ax:MirP}Mtr', name='pgm_mir_pit')
pgm_grt_pit = EpicsMotor('XF:23ID1-OP{Mono-Ax:GrtP}Mtr', name='pgm_grt_pit')
pgm_mir_x = EpicsMotor('XF:23ID1-OP{Mono-Ax:MirX}Mtr', name='pgm_mir_x')
pgm_grt_x = EpicsMotor('XF:23ID1-OP{Mono-Ax:GrtX}Mtr', name='pgm_grt_x')

pgm_energy_sp = EpicsSignal('XF:23ID1-OP{Mono}Enrgy-SP', name='pgm_energy_sp')
pgm_energy_i = EpicsSignal('XF:23ID1-OP{Mono}Enrgy-I', name='pgm_energy_i')

# M3A Mirror

m3a_x = EpicsMotor('XF:23ID1-OP{Mir:3-Ax:XAvg}Mtr', name='m3a_x')
m3a_pit = EpicsMotor('XF:23ID1-OP{Mir:3-Ax:P}Mtr', name='m3a_pit')
m3a_bdr = EpicsMotor('XF:23ID1-OP{Mir:3-Ax:Bdr}Mtr', name='m3a_bdr')

# Fast CCD Shutter

sh_y = EpicsMotor('XF:23ID1-OP{Sh:Fast-Ax:Y}Mtr', name='sh_y')
sh_x = EpicsMotor('XF:23ID1-OP{Sh:Fast-Ax:X}Mtr', name='sh_x')

# Slits
Exemple #16
0
def getEpicsSignal(basename, suffix, name = None, rw = False):
    pvname = getEpicsPV(basename, suffix)
    rv = EpicsSignal(pvname, rw = rw, name = name)
    return rv
Exemple #17
0
diag3_cam = AreaDetector('XF:23ID1-BI{Diag:3-Cam:1}', name='diag3_cam')
diag5_cam = AreaDetector('XF:23ID1-BI{Diag:5-Cam:1}', name='diag5_cam')
diag6_cam = AreaDetector('XF:23ID1-BI{Diag:6-Cam:1}', name='diag5_cam')
diag6_cam = AreaDetector('XF:23ID1-BI{Diag:6-Cam:1}', name='diag6_cam')
dif_beam_cam = AreaDetector('XF:23ID1-ES{Dif-Cam:Beam}', name='dif_beam_cam')

# Princeton CCD camera

pimte = AreaDetectorFileStorePrinceton(
    'XF:23ID1-ES{Dif-Cam:PIMTE}',
    file_path='/GPFS/xf23id/xf23id1/pimte_data/',
    ioc_file_path='x:/xf23id1/pimte_data/',
    name='pimte')

fshutter = EpicsSignal('XF:23ID1-TS{EVR:1-Out:FP0}Src:Scale-RB',
                       write_pv='XF:23ID1-TS{EVR:1-Out:FP0}Src:Scale-SP',
                       rw=True,
                       name='fshutter')

fccd = AreaDetectorFileStoreHDF5(
    'XF:23ID1-ES{FCCD}',
    file_path='/GPFS/xf23id/xf23id1/fccd_data/',
    #shutter=fshutter, shutter_val=(4,3),
    stats=None,
    name='fccd')
# Test CCD

ccdtest = AreaDetectorFileStoreHDF5(
    'XF:23ID1-ES{Tst-Cam:1}',
    file_path='/GPFS/xf23id/xf23id1/test_data/',
    name='ccdtest')