def modify_generic_scan_ctrl_str_attrs(parent, nxgrp, doc): ''' :param nxgrp: :param doc: :return: ''' rois = parent.get_rois_from_current_md(doc['run_start']) x_posnr_nm = parent.fix_posner_nm(rois[SPDB_X][POSITIONER]) _string_attr(nxgrp, 'axes', [x_posnr_nm])
def modify_focus_ctrl_str_attrs(parent, nxgrp, doc): ''' :param nxgrp: :param doc: :return: ''' rois = parent.get_rois_from_current_md(doc['run_start']) x_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_XPOSITIONER)) y_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_YPOSITIONER)) z_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_ZPOSITIONER)) _string_attr(nxgrp, 'axes', [z_posnr_nm, y_posnr_nm, x_posnr_nm])
def modify_generic_scan_nxdata_group(parent, data_nxgrp, doc, scan_type): ''' :param entry_nxgrp: :param cntr_nm: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(rois[SPDB_X][POSITIONER]) x_posnr_nm = parent.fix_posner_nm(rois[SPDB_X][POSITIONER]) xnpoints = rois[SPDB_X][NPOINTS] ttlpnts = xnpoints uid = parent.get_current_uid() prim_data_lst = parent._data['primary'][x_src][uid]['data'] if (len(prim_data_lst) < ttlpnts): resize_data = True # scan was aborted so use setpoint data here xdata = np.array(rois[SPDB_X][SETPOINTS], dtype=np.float32) else: # use actual data # xdata is teh first xnpoints xdata = np.array( parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) _dataset(data_nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') _string_attr(data_nxgrp, 'axes', [x_posnr_nm]) _string_attr(data_nxgrp, 'signal', 'data') det_nm = parent.get_primary_det_nm(doc['run_start']) # det_data = np.array(self._data['primary'][det_nm]['data'], dtype=np.float32).reshape((ynpoints, xnpoints)) det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) _dataset(data_nxgrp, 'data', det_data, 'NX_NUMBER')
def modify_focus_nxdata_group(parent, data_nxgrp, doc, scan_type): ''' :param entry_nxgrp: :param cntr_nm: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(dct_get(rois, SPDB_XPOSITIONER)) x_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_XPOSITIONER)) # x_posnr_src = rois['X']['SRC'] y_src = parent.get_devname(dct_get(rois, SPDB_YPOSITIONER)) y_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_YPOSITIONER)) # y_posnr_src = rois['Y']['SRC'] zz_src = parent.get_devname(dct_get(rois, SPDB_ZZPOSITIONER)) zz_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_ZZPOSITIONER)) uid = parent.get_current_uid() xnpoints = dct_get(rois, SPDB_XNPOINTS) ynpoints = dct_get(rois, SPDB_YNPOINTS) zznpoints = dct_get(rois, SPDB_ZZNPOINTS) ttl_pnts = xnpoints * zznpoints if (x_src not in parent._data['primary'].keys()): # use the canned setpoints xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) zzdata = np.array(dct_get(rois, SPDB_ZZSETPOINTS), dtype=np.float32) else: prim_data_lst = parent._data['primary'][x_src][uid]['data'] if (len(prim_data_lst) < ttl_pnts): resize_data = True # scan was aborted so use setpoint data here xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) zzdata = np.array(dct_get(rois, SPDB_ZZSETPOINTS), dtype=np.float32) else: # use actual data # xdata is teh first xnpoints xdata = np.array( parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array( parent._data['primary'][y_src][uid]['data'][0::zznpoints], dtype=np.float32) zzdata = np.array( parent._data['primary'][zz_src][uid]['data'][0::ynpoints], dtype=np.float32) _dataset(data_nxgrp, y_posnr_nm, ydata, 'NX_FLOAT') _dataset(data_nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') _dataset(data_nxgrp, zz_posnr_nm, zzdata, 'NX_FLOAT') _string_attr(data_nxgrp, 'axes', [zz_posnr_nm, y_posnr_nm, x_posnr_nm]) _string_attr(data_nxgrp, 'signal', 'data') det_nm = parent.get_primary_det_nm(doc['run_start']) three_d_scans = [scan_types.OSA_FOCUS.value, scan_types.SAMPLE_FOCUS.value] if (scan_types(scan_type) in three_d_scans): # det_data = np.array(parent._data['primary'][det_nm]['data'], dtype=np.float32).reshape((1, ynpoints, xnpoints)) det_data = np.array(parent._data['primary'][det_nm][uid]['data']) # if(len(det_data) > ttl_pnts): # det_data = np.array(parent._data['primary'][det_nm][uid]['data'][0:zznpoints][0:xnpoints], dtype=np.float32) # elif(len(det_data) < ttl_pnts): # print('modify_focus_nxdata_group: NEED TO PAD THE DATA, length should be %d but is %d' % (len(det_data), ttl_pnts)) if (resize_data): det_data = parent.fix_aborted_data(det_data, ttl_pnts) det_data = np.reshape(det_data, (1, zznpoints, xnpoints)) else: # det_data = np.array(parent._data['primary'][det_nm]['data'], dtype=np.float32).reshape((ynpoints, xnpoints)) det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) _dataset(data_nxgrp, 'data', det_data, 'NX_NUMBER')
def modify_base_2d_nxdata_group(parent, data_nxgrp, doc, scan_type): ''' :param entry_nxgrp: :param cntr_nm: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(rois[SPDB_X][POSITIONER]) x_posnr_nm = parent.fix_posner_nm(rois[SPDB_X][POSITIONER]) y_src = parent.get_devname(rois[SPDB_Y][POSITIONER]) y_posnr_nm = parent.fix_posner_nm(rois[SPDB_Y][POSITIONER]) uid = parent.get_current_uid() xnpoints = int(rois[SPDB_X][NPOINTS]) ynpoints = int(rois[SPDB_Y][NPOINTS]) ttlpnts = xnpoints * ynpoints prim_data_lst = parent._data['primary'][x_src][uid]['data'] if (len(prim_data_lst) < ttlpnts): resize_data = True # scan was aborted so use setpoint data here xdata = np.array(rois[SPDB_X][SETPOINTS], dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: # use actual data # xdata is teh first xnpoints xdata = np.array( parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array( parent._data['primary'][y_src][uid]['data'][0::ynpoints], dtype=np.float32) _dataset(data_nxgrp, y_posnr_nm, ydata, 'NX_FLOAT') _dataset(data_nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') _string_attr(data_nxgrp, 'axes', [y_posnr_nm, x_posnr_nm]) _string_attr(data_nxgrp, 'signal', 'data') #det_nm = parent.get_primary_det_nm(doc['run_start']) det_nm = data_nxgrp.name.split('/')[-1] three_d_scans = [scan_types.DETECTOR_IMAGE, scan_types.OSA_IMAGE, scan_types.OSA_FOCUS, scan_types.SAMPLE_FOCUS, scan_types.SAMPLE_IMAGE_STACK, \ scan_types.COARSE_IMAGE, scan_types.COARSE_GONI, scan_types.TOMOGRAPHY] if (scan_types(scan_type) in three_d_scans): # det_data = np.array(parent._data['primary'][det_nm]['data'], dtype=np.float32).reshape((1, ynpoints, xnpoints)) det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) if (resize_data): det_data = parent.fix_aborted_data(det_data, ttlpnts) det_data = np.reshape(det_data, (1, ynpoints, xnpoints)) if (MARK_DATA): # put a black box in corner c = int(xnpoints / 3) r = int(xnpoints / 3) for n in range(r): det_data[0, n, 0:c] = 0 else: # det_data = np.array(parent._data['primary'][det_nm]['data'], dtype=np.float32).reshape((ynpoints, xnpoints)) det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) _dset = _dataset(data_nxgrp, 'data', det_data, 'NX_NUMBER') _string_attr(_dset, 'signal', '1')
def modify_spectra_nxdata_group(parent, data_nxgrp, doc, scan_type): ''' :param parent: :param data_nxgrp: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(rois[SPDB_X][POSITIONER]) x_posnr_nm = parent.fix_posner_nm(rois[SPDB_X][POSITIONER]) y_src = parent.get_devname(rois[SPDB_Y][POSITIONER]) y_posnr_nm = parent.fix_posner_nm(rois[SPDB_Y][POSITIONER]) evs = dct_get(parent._wdg_com, SPDB_SINGLE_LST_EV_ROIS) num_ev_points = len(evs) xnpoints = int(rois[SPDB_X][NPOINTS]) ynpoints = int(rois[SPDB_Y][NPOINTS]) ttlpnts = xnpoints * num_ev_points uid = parent.get_current_uid() #primary_det_nm = parent.get_primary_det_nm(uid) det_nm = data_nxgrp.name.split('/')[-1] det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) det_data = det_data[0::len(parent._sp_id_lst)] rows = 1 cols, = det_data.shape if ((rows * cols) < ttlpnts): #scn had been aborted resize_data = True # scan was aborted so use setpoint data here xdata = np.array(xnpoints, dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: if (x_src not in parent._data['primary'].keys()): xdata = make_1d_array(ttlpnts, rois[SPDB_X][SETPOINTS]) ydata = make_1d_array(ttlpnts, rois[SPDB_Y][SETPOINTS]) else: # use actual data # xdata is teh first xnpoints #xdata = np.array(parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) xdata = make_1d_array(ttlpnts, parent.get_sample_x_data('start')) # ydata is every ynpoint #ydata = np.array(parent._data['primary'][y_src][uid]['data'][0::ynpoints], dtype=np.float32) ydata = make_1d_array(ttlpnts, parent.get_sample_y_data('start')) #regardless of the positioner, these names (sample_x, sample_y) are hardcoded into the nxstxm definition # if there were already sample_x and y created by the default constructors then delete them and recreate with the right data if (nxkd.SAMPLE_Y in data_nxgrp.keys()): del (data_nxgrp[nxkd.SAMPLE_X]) del (data_nxgrp[nxkd.SAMPLE_Y]) _dataset(data_nxgrp, nxkd.SAMPLE_Y, ydata, 'NX_FLOAT') _dataset(data_nxgrp, nxkd.SAMPLE_X, xdata, 'NX_FLOAT') #_string_attr(data_nxgrp, 'axes', [y_posnr_nm, x_posnr_nm]) _string_attr(data_nxgrp, 'axes', ['energy', nxkd.SAMPLE_Y, nxkd.SAMPLE_X]) _string_attr(data_nxgrp, 'signal', 'data') #_dataset(data_nxgrp, 'data', prim_data_arr, 'NX_NUMBER') _dset = _dataset(data_nxgrp, 'data', det_data, 'NX_NUMBER') _string_attr(_dset, 'signal', '1')
def modify_stack_nxdata_group(parent, data_nxgrp, doc, scan_type): ''' :param parent: :param data_nxgrp: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(rois[SPDB_X][POSITIONER]) x_posnr_nm = parent.fix_posner_nm(rois[SPDB_X][POSITIONER]) # x_posnr_src = rois[SPDB_X]['SRC'] y_src = parent.get_devname(rois[SPDB_Y][POSITIONER]) y_posnr_nm = parent.fix_posner_nm(rois[SPDB_Y][POSITIONER]) # y_posnr_src = rois[SPDB_Y]['SRC'] xnpoints = rois[SPDB_X]['NPOINTS'] ynpoints = rois[SPDB_Y]['NPOINTS'] ttlpnts = xnpoints * ynpoints #prim_data_lst = parent._data['primary'][x_src]['data'] #uid = list(parent._cur_scan_md.keys())[0] uid = parent.get_current_uid() primary_det_nm = parent.get_primary_det_nm(uid) #prim_data_lst = parent._data['primary'][primary_det_nm]['data'] prim_data_arr = np.array( parent._data['primary'][primary_det_nm][uid]['data']) if (scan_types(scan_type) is scan_types.SAMPLE_POINT_SPECTRA): rows = 1 cols, = prim_data_arr.shape else: rows, cols = prim_data_arr.shape if ((rows * cols) < ttlpnts): #scn had been aborted resize_data = True # scan was aborted so use setpoint data here xdata = np.array(rois[SPDB_X][SETPOINTS], dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: if (x_src not in parent._data['primary'].keys()): xdata = np.array(rois[SPDB_X][SETPOINTS], dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: # use actual data # xdata is teh first xnpoints xdata = np.array( parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array( parent._data['primary'][y_src][uid]['data'][0::ynpoints], dtype=np.float32) # _dataset(data_nxgrp, y_posnr_nm, ydata, 'NX_FLOAT') # _dataset(data_nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') #regardless of the positioner, these names (sample_x, sample_y) are hardcoded into the nxstxm definition # if there were already sample_x and y created by the default constructors then delete them and recreate with the right data if (nxkd.SAMPLE_Y in data_nxgrp.keys()): del (data_nxgrp[nxkd.SAMPLE_X]) del (data_nxgrp[nxkd.SAMPLE_Y]) _dataset(data_nxgrp, nxkd.SAMPLE_Y, ydata, 'NX_FLOAT') _dataset(data_nxgrp, nxkd.SAMPLE_X, xdata, 'NX_FLOAT') #_string_attr(data_nxgrp, 'axes', [y_posnr_nm, x_posnr_nm]) _string_attr(data_nxgrp, 'axes', ['energy', nxkd.SAMPLE_Y, nxkd.SAMPLE_X]) _string_attr(data_nxgrp, 'signal', 'data') det_nm = parent.get_primary_det_nm(doc['run_start']) #need to find out how many energy points we need to make space for det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) #js_str = parent._cur_scan_md[doc['run_start']]['wdg_com'] #wdg_com = json.loads(js_str) evs = parent._wdg_com['SINGLE_LST']['EV_ROIS'] num_ev_points = len(evs) rows, cols = det_data.shape #init_dat_arr = np.zeros((num_ev_points, rows, cols), dtype=np.float32) init_dat_arr = np.empty((num_ev_points, rows, cols), dtype=np.float32) init_dat_arr[:] = np.NAN init_dat_arr[0] = det_data _dataset(data_nxgrp, 'data', init_dat_arr, 'NX_NUMBER')
def modify_single_image_nxdata_group(parent, data_nxgrp, doc, scan_type): ''' :param entry_nxgrp: :param cntr_nm: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(rois[SPDB_X][POSITIONER]) x_posnr_nm = parent.fix_posner_nm(rois[SPDB_X][POSITIONER]) # x_posnr_src = rois[SPDB_X]['SRC'] y_src = parent.get_devname(rois[SPDB_Y][POSITIONER]) y_posnr_nm = parent.fix_posner_nm(rois[SPDB_Y][POSITIONER]) # y_posnr_src = rois[SPDB_Y]['SRC'] xnpoints = rois[SPDB_X][NPOINTS] ynpoints = rois[SPDB_Y][NPOINTS] ttlpnts = xnpoints * ynpoints #prim_data_lst = parent._data['primary'][x_src]['data'] #uid = list(parent._cur_scan_md.keys())[0] uid = parent.get_current_uid() primary_det_nm = parent.get_primary_det_nm(uid) prim_data_arr = np.array(parent._data['primary'][primary_det_nm][uid]['data']) if(scan_types(scan_type) is scan_types.PATTERN_GEN_SCAN): rows, cols = ynpoints, xnpoints else: rows, cols = prim_data_arr.shape #rows, cols = prim_data_arr.shape if ((rows * cols) < ttlpnts): #scn had been aborted resize_data = True # scan was aborted so use setpoint data here xdata = np.array(rois[SPDB_X][SETPOINTS], dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: if(x_src not in parent._data['primary'].keys()): xdata = np.array(rois[SPDB_X][SETPOINTS], dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: # use actual data # xdata is teh first xnpoints xdata = np.array(parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array(parent._data['primary'][y_src][uid]['data'][0::ynpoints], dtype=np.float32) _dataset(data_nxgrp, y_posnr_nm, ydata, 'NX_FLOAT') _dataset(data_nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') _string_attr(data_nxgrp, 'axes', [y_posnr_nm, x_posnr_nm]) _string_attr(data_nxgrp, 'signal', 'data') det_nm = parent.get_primary_det_nm(doc['run_start']) # three_d_scans = [scan_types.DETECTOR_IMAGE, scan_types.OSA_IMAGE, scan_types.OSA_FOCUS, scan_types.SAMPLE_FOCUS, scan_types.SAMPLE_IMAGE_STACK, \ # scan_types.COARSE_IMAGE_SCAN, scan_types.COARSE_GONI_SCAN, scan_types.TOMOGRAPHY_SCAN] three_d_scans = [scan_types.DETECTOR_IMAGE, scan_types.OSA_IMAGE, scan_types.OSA_FOCUS, scan_types.SAMPLE_FOCUS, \ scan_types.COARSE_IMAGE_SCAN, scan_types.COARSE_GONI_SCAN, scan_types.TOMOGRAPHY_SCAN] if(scan_types(scan_type) in three_d_scans): # det_data = np.array(parent._data['primary'][det_nm]['data'], dtype=np.float32).reshape((1, ynpoints, xnpoints)) det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) if (resize_data): det_data = parent.fix_aborted_data(det_data, ttlpnts) det_data = np.reshape(det_data, (1, ynpoints, xnpoints)) if(MARK_DATA): # put a black box in corner c = int(xnpoints / 3) r = int(xnpoints / 3) for n in range(r): det_data[0, n, 0:c] = 0 else: # det_data = np.array(parent._data['primary'][det_nm]['data'], dtype=np.float32).reshape((ynpoints, xnpoints)) det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) _dataset(data_nxgrp, 'data', det_data, 'NX_NUMBER')
def modify_focus_ctrl_data_grps(parent, nxgrp, doc, scan_type): ''' :param nxgrp: :param doc: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(dct_get(rois, SPDB_XPOSITIONER)) x_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_XPOSITIONER)) # x_posnr_src = rois['X']['SRC'] y_src = parent.get_devname(dct_get(rois, SPDB_YPOSITIONER)) y_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_YPOSITIONER)) # y_posnr_src = rois['Y']['SRC'] uid = parent.get_current_uid() zz_src = parent.get_devname(dct_get(rois, SPDB_ZZPOSITIONER)) zz_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_ZZPOSITIONER)) xnpoints = int(dct_get(rois, SPDB_XNPOINTS)) ynpoints = int(dct_get(rois, SPDB_YNPOINTS)) znpoints = dct_get(rois, SPDB_ZZNPOINTS) ttlpnts = xnpoints * znpoints if (x_src not in parent._data['primary'].keys()): #use the canned setpoints xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) zzdata = np.array(dct_get(rois, SPDB_ZZSETPOINTS), dtype=np.float32) else: prim_data_lst = parent._data['primary'][x_src][uid]['data'] if (len(prim_data_lst) < ttlpnts): resize_data = True # scan was aborted so use setpoint data here xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) zzdata = np.array(dct_get(rois, SPDB_ZZSETPOINTS), dtype=np.float32) else: # use actual data # xdata is teh first xnpoints xdata = np.array( parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array( parent._data['primary'][y_src][uid]['data'][0::znpoints], dtype=np.float32) zzdata = np.array( parent._data['primary'][zz_src][uid]['data'][0::ynpoints], dtype=np.float32) line_position = list(range(0, xnpoints)) _dataset(nxgrp, 'line_position', line_position, 'NX_FLOAT') _dataset(nxgrp, y_posnr_nm, ydata, 'NX_FLOAT') _dataset(nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') _dataset(nxgrp, zz_posnr_nm, zzdata, 'NX_FLOAT') # this should be an array the same shape as the 'data' group in NXdata filled with the storagering current ring_cur_signame = parent.get_devname(DNM_RING_CURRENT) if (ring_cur_signame not in parent._data.keys()): #use the baseline start/stop values and create a sequence from start to stop strt, stp = parent._data['baseline'][ring_cur_signame][uid]['data'] sr_data = np.linspace(strt, stp, ttlpnts, endpoint=True) else: sr_data = np.array( parent._data['baseline'][ring_cur_signame][uid]['data'], dtype=np.float32) if (resize_data): sr_data = np.resize(sr_data, (ttlpnts, )) _dataset(nxgrp, 'data', np.reshape(sr_data, (znpoints, xnpoints)), 'NX_NUMBER') _string_attr(nxgrp, 'axes', [zz_posnr_nm, 'line_position'])
def modify_line_spectra_nxdata_group(parent, data_nxgrp, doc, scan_type): ''' :param entry_nxgrp: :param cntr_nm: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(dct_get(rois, SPDB_XPOSITIONER)) x_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_XPOSITIONER)) # x_posnr_src = rois['X']['SRC'] y_src = parent.get_devname(dct_get(rois, SPDB_YPOSITIONER)) y_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_YPOSITIONER)) uid = parent.get_current_uid() xnpoints = dct_get(rois, SPDB_XNPOINTS) ynpoints = dct_get(rois, SPDB_YNPOINTS) evs = dct_get(parent._wdg_com, SPDB_SINGLE_LST_EV_ROIS) num_ev_points = len(evs) evdata = np.array(evs, dtype=np.float32) ttlpnts = num_ev_points * xnpoints if (x_src not in parent._data['primary'].keys()): # use the canned setpoints xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) else: prim_data_lst = parent._data['primary'][x_src][uid]['data'] if (len(prim_data_lst) < ttlpnts): resize_data = True # scan was aborted so use setpoint data here xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) else: # use actual data # xdata is the first xnpoints xdata = np.array(parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array(parent._data['primary'][y_src][uid]['data'][0::num_ev_points], dtype=np.float32) xstart = dct_get(rois, SPDB_XSTART) xstop = dct_get(rois, SPDB_XSTOP) xstep = dct_get(rois, SPDB_XSTEP) ls_dat = np.linspace(xstart, xstop + xstep, num=xnpoints + 1, endpoint=True) line_position = np.cumsum(np.diff(ls_dat)) _dataset(data_nxgrp, 'line_position', line_position, 'NX_FLOAT') _dataset(data_nxgrp, y_posnr_nm, ydata, 'NX_FLOAT') _dataset(data_nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') if('energy' in data_nxgrp.keys()): del data_nxgrp['energy'] _dataset(data_nxgrp, 'energy', evdata, 'NX_FLOAT') _string_attr(data_nxgrp, 'axes', ['energy', 'line_position']) _string_attr(data_nxgrp, 'signal', 'data') det_nm = parent.get_primary_det_nm(doc['run_start']) det_data = np.array(parent._data['primary'][det_nm][uid]['data'], dtype=np.float32) if (resize_data): det_data = parent.fix_aborted_data(det_data, ttlpnts) det_data = np.transpose(det_data) _dataset(data_nxgrp, 'data', det_data, 'NX_NUMBER')
def modify_line_spectra_ctrl_data_grps(parent, nxgrp, doc, scan_type): ''' :param nxgrp: :param doc: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(dct_get(rois, SPDB_XPOSITIONER)) x_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_XPOSITIONER)) y_src = parent.get_devname(dct_get(rois, SPDB_YPOSITIONER)) y_posnr_nm = parent.fix_posner_nm(dct_get(rois, SPDB_YPOSITIONER)) uid = parent.get_current_uid() xnpoints = dct_get(rois, SPDB_XNPOINTS) ynpoints = dct_get(rois, SPDB_YNPOINTS) evs = dct_get(parent._wdg_com, SPDB_SINGLE_LST_EV_ROIS) num_ev_points = len(evs) evdata = np.array(evs, dtype=np.float32) ttlpnts = num_ev_points * xnpoints if(x_src not in parent._data['primary'].keys()): #use the canned setpoints xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) else: prim_data_lst = parent._data['primary'][x_src][uid]['data'] if (len(prim_data_lst) < ttlpnts): resize_data = True # scan was aborted so use setpoint data here xdata = np.array(dct_get(rois, SPDB_XSETPOINTS), dtype=np.float32) ydata = np.array(dct_get(rois, SPDB_YSETPOINTS), dtype=np.float32) else: # use actual data # xdata is the first xnpoints xdata = np.array(parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array(parent._data['primary'][y_src][uid]['data'][0::ynpoints], dtype=np.float32) xstart = dct_get(rois, SPDB_XSTART) xstop = dct_get(rois, SPDB_XSTOP) xstep = dct_get(rois, SPDB_XSTEP) ls_dat = np.linspace(xstart, xstop + xstep, num=xnpoints + 1, endpoint=True) line_position = np.cumsum(np.diff(ls_dat)) _dataset(nxgrp, 'line_position', line_position, 'NX_FLOAT') _dataset(nxgrp, y_posnr_nm, ydata, 'NX_FLOAT') _dataset(nxgrp, x_posnr_nm, xdata, 'NX_FLOAT') if ('energy' in nxgrp.keys()): del nxgrp['energy'] _dataset(nxgrp, 'energy', evdata, 'NX_FLOAT') # this should be an array the same shape as the 'data' group in NXdata filled with the storagering current ring_cur_signame = parent.get_devname(DNM_RING_CURRENT) + '_val' if(ring_cur_signame not in parent._data.keys()): #use the baseline start/stop values and create a sequence from start to stop strt, stp = parent._data['baseline'][ring_cur_signame][uid]['data'] sr_data = np.linspace(strt, stp, ttlpnts, endpoint=True, dtype=np.float32) else: sr_data = np.array(parent._data['baseline'][ring_cur_signame][uid]['data'], dtype=np.float32) if (resize_data): sr_data = np.resize(sr_data, (ttlpnts,)) _dataset(nxgrp, 'data', np.reshape(sr_data, (xnpoints, num_ev_points)), 'NX_NUMBER') _string_attr(nxgrp, 'axes', ['line_position', 'energy'])
def modify_spectra_nxdata_group(parent, data_nxgrp, doc, prim_data_arr, scan_type): ''' :param parent: :param data_nxgrp: :param doc: :param scan_type: :return: ''' resize_data = False rois = parent.get_rois_from_current_md(doc['run_start']) x_src = parent.get_devname(rois[SPDB_X][POSITIONER]) x_posnr_nm = parent.fix_posner_nm(rois[SPDB_X][POSITIONER]) # x_posnr_src = rois[SPDB_X]['SRC'] y_src = parent.get_devname(rois[SPDB_Y][POSITIONER]) y_posnr_nm = parent.fix_posner_nm(rois[SPDB_Y][POSITIONER]) # y_posnr_src = rois[SPDB_Y]['SRC'] xnpoints = rois[SPDB_X][NPOINTS] ynpoints = rois[SPDB_Y][NPOINTS] ttlpnts = xnpoints * ynpoints #prim_data_lst = parent._data['primary'][x_src]['data'] #uid = list(parent._cur_scan_md.keys())[0] uid = parent.get_current_uid() primary_det_nm = parent.get_primary_det_nm(uid) #prim_data_lst = parent._data['primary'][primary_det_nm]['data'] #prim_data_arr = np.array(parent._data['primary'][primary_det_nm][uid]['data']) rows = 1 cols, = prim_data_arr.shape if ((rows * cols) < ttlpnts): #scn had been aborted resize_data = True # scan was aborted so use setpoint data here xdata = np.array(xnpoints, dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: if (x_src not in parent._data['primary'].keys()): xdata = np.array(rois[SPDB_X][SETPOINTS], dtype=np.float32) ydata = np.array(rois[SPDB_Y][SETPOINTS], dtype=np.float32) else: # use actual data # xdata is teh first xnpoints xdata = np.array( parent._data['primary'][x_src][uid]['data'][0:xnpoints], dtype=np.float32) # ydata is every ynpoint ydata = np.array( parent._data['primary'][y_src][uid]['data'][0::ynpoints], dtype=np.float32) #regardless of the positioner, these names (sample_x, sample_y) are hardcoded into the nxstxm definition # if there were already sample_x and y created by the default constructors then delete them and recreate with the right data if (nxkd.SAMPLE_Y in data_nxgrp.keys()): del (data_nxgrp[nxkd.SAMPLE_X]) del (data_nxgrp[nxkd.SAMPLE_Y]) _dataset(data_nxgrp, nxkd.SAMPLE_Y, ydata, 'NX_FLOAT') _dataset(data_nxgrp, nxkd.SAMPLE_X, xdata, 'NX_FLOAT') #_string_attr(data_nxgrp, 'axes', [y_posnr_nm, x_posnr_nm]) _string_attr(data_nxgrp, 'axes', ['energy', nxkd.SAMPLE_Y, nxkd.SAMPLE_X]) _string_attr(data_nxgrp, 'signal', 'data') _dataset(data_nxgrp, 'data', prim_data_arr, 'NX_NUMBER')