def func(): m = motor.read()[motor_field]['value'] v = Imax * np.exp(-(m - center)**2 / (2 * sigma**2)) arr = self.gauss(dims, img_sigma) * v + np.random.random(dims) * .01 fs_uid = save_ndarray(arr, self.output_dir) return fs_uid
def trigger(self, *, block_group=True): self.ready = False m = self._motor._data[self._motor_field]['value'] v = self.Imax * np.exp(-(m - self.center)**2 / (2 * self.sigma**2)) arr = self.gauss(self.dims, self.img_sigma) * v + np.random.random( self.dims) * .01 fs_uid = save_ndarray(arr, self.output_dir) self._data = {self._name: {'value': fs_uid, 'timestamp': ttime.time()}} ttime.sleep(0.05) # simulate exposure time self.ready = True return self
def run(run_start=None, sleep=0): # Make the data rs = np.random.RandomState(5) # set up the data keys entry data_keys1 = {'linear_motor': dict(source='PV:ES:sam_x', dtype='number'), 'img': dict(source='CCD', shape=(5, 5), dtype='array', external='FILESTORE:'), 'total_img_sum': dict(source='CCD:sum', dtype='number'), 'img_x_max': dict(source='CCD:xmax', dtype='number'), 'img_y_max': dict(source='CCD:ymax', dtype='number'), 'img_sum_x': dict(source='CCD:xsum', dtype='array', shape=(5,), external='FILESTORE:'), 'img_sum_y': dict(source='CCD:ysum', dtype='array', shape=(5,), external='FILESTORE:') } data_keys2 = {'Tsam': dict(source='PV:ES:Tsam', dtype='number')} # save the first event descriptor e_desc1 = insert_event_descriptor( run_start=run_start, data_keys=data_keys1, time=0., uid=str(uuid.uuid4())) e_desc2 = insert_event_descriptor( run_start=run_start, data_keys=data_keys2, time=0., uid=str(uuid.uuid4())) # number of motor positions to fake num1 = 20 # number of temperatures to record per motor position num2 = 10 events = [] for idx1, i in enumerate(range(num1)): img = next(frame_generator) img_sum = float(img.sum()) img_sum_x = img.sum(axis=0) img_sum_y = img.sum(axis=1) img_x_max = float(img_sum_x.argmax()) img_y_max = float(img_sum_y.argmax()) fsid_img = save_ndarray(img) fsid_x = save_ndarray(img_sum_x) fsid_y = save_ndarray(img_sum_y) # Put in actual ndarray data, as broker would do. data1 = {'linear_motor': (i, noisy(i)), 'total_img_sum': (img_sum, noisy(i)), 'img': (fsid_img, noisy(i)), 'img_sum_x': (fsid_x, noisy(i)), 'img_sum_y': (fsid_y, noisy(i)), 'img_x_max': (img_x_max, noisy(i)), 'img_y_max': (img_y_max, noisy(i)) } event = insert_event(event_descriptor=e_desc1, seq_num=idx1, time=noisy(i), data=data1, uid=str(uuid.uuid4())) fill_event(event) events.append(event) for idx2, i2 in enumerate(range(num2)): time = noisy(i/num2) data2 = {'Tsam': (idx1 + np.random.randn()/100, time)} event = insert_event(event_descriptor=e_desc2, seq_num=idx2+idx1, time=time, data=data2, uid=str(uuid.uuid4())) events.append(event) ttime.sleep(sleep) return events
def run(run_start_uid=None, sleep=0): frame_generator = frame_generators.brownian(img_size, step_scale=.5, I_fluc_function=I_func_gaus, step_fluc_function=scale_fluc) # seed data to make deterministic np.random.RandomState(5) # set up the data keys entry data_keys1 = {'linear_motor': dict(source='PV:ES:sam_x', dtype='number'), 'img': dict(source='CCD', shape=(5, 5), dtype='array', external='FILESTORE:'), 'total_img_sum': dict(source='CCD:sum', dtype='number'), 'img_x_max': dict(source='CCD:xmax', dtype='number'), 'img_y_max': dict(source='CCD:ymax', dtype='number'), 'img_sum_x': dict(source='CCD:xsum', dtype='array', shape=(5,), external='FILESTORE:'), 'img_sum_y': dict(source='CCD:ysum', dtype='array', shape=(5,), external='FILESTORE:') } data_keys2 = {'Tsam': dict(source='PV:ES:Tsam', dtype='number')} # save the first event descriptor descriptor1_uid = insert_descriptor( run_start=run_start_uid, data_keys=data_keys1, time=0., uid=str(uuid.uuid4())) descriptor2_uid = insert_descriptor( run_start=run_start_uid, data_keys=data_keys2, time=0., uid=str(uuid.uuid4())) events = [] for idx1, i in enumerate(range(num1)): img = next(frame_generator) img_sum = float(img.sum()) img_sum_x = img.sum(axis=0) img_sum_y = img.sum(axis=1) img_x_max = float(img_sum_x.argmax()) img_y_max = float(img_sum_y.argmax()) fsid_img = save_ndarray(img) fsid_x = save_ndarray(img_sum_x) fsid_y = save_ndarray(img_sum_y) # Put in actual ndarray data, as broker would do. data1 = {'linear_motor': i, 'total_img_sum': img_sum, 'img': fsid_img, 'img_sum_x': fsid_x, 'img_sum_y': fsid_y, 'img_x_max': img_x_max, 'img_y_max': img_y_max } timestamps1 = {k: noisy(i) for k in data1} event_uid = insert_event(descriptor=descriptor1_uid, seq_num=idx1, time=noisy(i), data=data1, timestamps=timestamps1, uid=str(uuid.uuid4())) event, = find_events(uid=event_uid) events.append(event) for idx2, i2 in enumerate(range(num2)): time = noisy(i/num2) data2 = {'Tsam': idx1 + np.random.randn()} timestamps2 = {'Tsam': time} event_uid = insert_event(descriptor=descriptor2_uid, seq_num=idx2+idx1, time=time, data=data2, uid=str(uuid.uuid4()), timestamps=timestamps2) event, = find_events(uid=event_uid) events.append(event) ttime.sleep(sleep) return events
def _npsave_helper(dd, base_path): eid = fs_write.save_ndarray(dd, base_path) with fsa.handler_context({'npy': fs_read.NpyHandler}): ret = fsa.retrieve(eid) assert_array_equal(dd, ret)