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