Esempio n. 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)
Esempio n. 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')
Esempio n. 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')
Esempio n. 4
0
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):
Esempio n. 5
0
File: daq18.py Progetto: 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 = []
Esempio n. 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)