Example #1
0
    def collect(self):
        if self.data:
            logger.info('Found leftover data, clearing')
            self.clear_data()

        logger.info(f'Starting PPM scan for {self.ppm}')
        ppm_obj = EpicsSignalRO(self.ppm.upper() + PPM_EXT)
        #print('getting ', ppm_obj.get())
        ppm_obj.wait_for_connection(timeout=1.0)
        uid = ppm_obj.subscribe(self.data_cb)
        time.sleep(self.collection_time)  # Threading?
        logger.info('Done collecting PPM data')
        ppm_obj.unsubscribe(uid)
Example #2
0
def ad_prefix():
    prefixes = ['13SIM1:', 'XF:31IDA-BI{Cam:Tbl}']

    for prefix in prefixes:
        test_pv = prefix + 'TIFF1:PluginType_RBV'
        try:
            sig = EpicsSignalRO(test_pv)
            sig.wait_for_connection(timeout=2)
        except TimeoutError:
            ...
        else:
            print('areaDetector detected with prefix:', prefix)
            return prefix
        finally:
            sig.destroy()
    raise pytest.skip('No areaDetector IOC running')
Example #3
0
def ad_prefix():
    'AreaDetector prefix'
    prefixes = ['13SIM1:', 'XF:31IDA-BI{Cam:Tbl}']

    for prefix in prefixes:
        test_pv = prefix + 'TIFF1:PluginType_RBV'
        try:
            sig = EpicsSignalRO(test_pv)
            sig.wait_for_connection(timeout=2)
        except TimeoutError:
            ...
        else:
            print('areaDetector detected with prefix:', prefix)
            return prefix
        finally:
            sig.destroy()
    raise pytest.skip('No areaDetector IOC running')
from ophyd import EpicsSignal
from ophyd import EpicsSignalRO
from ophyd import EpicsSignalWithRBV
from ophyd import PVPositioner
from ophyd import Signal
import datetime
import os
import time

SECOND = 1
MINUTE = 60 * SECOND
HOUR = 60 * MINUTE

# write output to log file in userDir, name=MMDD-HHmm-heater-log.txt
user_dir = EpicsSignalRO("9idcLAX:userDir", name="user_dir", string=True)
user_dir.wait_for_connection()
log_file_name = os.path.join(
    user_dir.get(),
    datetime.datetime.now().strftime("%m%d-%H%M-heater-log.txt"))

# Can't call the instrument package in this module.
# Thus, we must re-define these devices here


class FeatureMixin(Device):
    @property
    def settled(self):
        return self.done.get() == self.done_value


class Linkam_CI94_Device(FeatureMixin, PVPositioner):
Example #5
0
File: daq18.py Project: pcdshub/xcs
class PPM_Record():
    def __init__(self,
                 pvname='IM3L0:PPM:SPM:VOLT_BUFFER_RBV',
                 time=1,
                 filename=None):
        self.collection_time = time
        self.arr = []
        self.pvname = pvname
        self.sig = EpicsSignalRO(pvname)
        try:
            self.sig.wait_for_connection(timeout=3.0)
        except TimeoutError:
            print(f'Could not connect to data PV {pvname}, timed out.')
            print('Either on wrong subnet or the ioc is off.')
        if filename is not None:
            self.filename = filename
        else:
            self.setFilename()

    def cb10(self, value, **kwargs):
        #print('value ',value)
        # Downsample to 10Hz from 1000Hz
        for i in range(10):
            self.arr.append(np.mean(value[100 * i:100 * (i + 1)]))
        #print('{} values collected'.format(len(self.arr)))

    def cb100(self, value, **kwargs):
        # Downsample to 100Hz from 1000Hz
        for i in range(100):
            self.arr.append(np.mean(value[10 * i:10 * (i + 1)]))

    def cb(self, value, **kwargs):
        self.arr.append(value)

    def setCollectionTime(self, ctime=None):
        self.collection_time = ctime

    def collectData(self, rate=10):
        if rate == 100:
            cbid = self.sig.subscribe(self.cb100)
        elif rate == 10:
            cbid = self.sig.subscribe(self.cb10)
        else:
            cbid = self.sig.subscribe(self.cb)
        time.sleep(self.collection_time)
        self.sig.unsubscribe(cbid)

    def setFilename(self, basename=None, useTime=False):
        if basename is None:
            basename = self.pvname.split(':')[0] + '_powermeter_data'
        if useTime:
            self.filename = basename + '_{}'.format(int(time.time()))
        else:
            self.filename = basename

    def writeFile(self):
        #print('saving to {}'.format(self.filename))
        with open(self.filename, 'w') as fd:
            for value in self.arr:
                print(value, file=fd)
        #if len(self.arr) == 0:
        #    print('Warning: no data points collected! File is empty!')
        self.arr = []
Example #6
0
 def get_motor_pv(label):
     _pv_signal = EpicsSignalRO(f"{prefix}Kohzu{label}PvSI", name="tmp")
     _pv_signal.wait_for_connection()
     return _pv_signal.get(as_string=True)