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
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 = []