def modify_line_spectra_instrument_group(parent, inst_nxgrp, doc, scan_type):
    '''

    :param nxgrp:
    :param doc:
    :param scan_type:
    :return:
    '''
    rois = parent.get_rois_from_current_md(doc['run_start'])
    dwell = parent._cur_scan_md[doc['run_start']]['dwell'] * 0.001
    det_nm = parent.get_primary_det_nm(doc['run_start'])
    scan_type = parent.get_stxm_scan_type(doc['run_start'])

    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)

    ttl_pnts = num_ev_points * xnpoints
    evdata = np.array(evs, dtype=np.float32)
    uid = parent.get_current_uid()

    det_data = np.array(parent._data['primary'][det_nm][uid]['data'])  # .reshape((ynpoints, xnpoints))
    parent.make_detector(inst_nxgrp, parent._primary_det_prefix, det_data, dwell, ttl_pnts, units='counts')

    sample_x_data = make_1d_array(ttl_pnts, parent.get_sample_x_data('start'))
    sample_y_data = make_1d_array(ttl_pnts, parent.get_sample_y_data('start'))
    parent.make_detector(inst_nxgrp, nxkd.SAMPLE_X, sample_x_data, dwell, ttl_pnts, units='um')
    parent.make_detector(inst_nxgrp, nxkd.SAMPLE_Y, sample_y_data, dwell, ttl_pnts, units='um')

    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))

    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:

        xdata = parent._data['primary'][x_src][uid]['data'][0:xnpoints]
        # ydata is every ynpoint
        ydata = parent._data['primary'][y_src][uid]['data'][0::num_ev_points]

    if ('energy' in inst_nxgrp.keys()):
        del inst_nxgrp['energy']

    _dataset(inst_nxgrp, 'energy', evdata, 'NX_FLOAT')

    parent.make_detector(inst_nxgrp, y_posnr_nm, np.tile(ydata, ynpoints), dwell, ttl_pnts, units='um')
    parent.make_detector(inst_nxgrp, x_posnr_nm, np.tile(xdata, xnpoints), dwell, ttl_pnts, units='um')
示例#2
0
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 = int(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 = data_nxgrp.name.split('/')[-1]

    # 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)

    _dset = _dataset(data_nxgrp, 'data', det_data, 'NX_NUMBER')
    _string_attr(_dset, 'signal', '1')
def modify_generic_scan_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(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(nxgrp, x_posnr_nm, xdata, 'NX_FLOAT')

    # this should be an array the same shape as the 'data' group in NXdata filled with the storagering current
    sr_data = np.array(
        parent._data['primary'][parent.get_devname(DNM_RING_CURRENT) +
                                '_val'][uid]['data'],
        dtype=np.float32)
    if (resize_data):
        sr_data = np.resize(sr_data, (ttlpnts, ))

    _dataset(nxgrp, 'data', sr_data, 'NX_NUMBER')

    modify_generic_scan_ctrl_str_attrs(parent, nxgrp, doc)
示例#4
0
def modify_spectra_ctrl_data_grps(parent, nxgrp, doc, scan_type):
    '''
    :param parent:
    :param 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])

    xnpoints = int(rois[SPDB_X][NPOINTS])
    ynpoints = int(rois[SPDB_Y][NPOINTS])
    evs = parent._wdg_com['SINGLE_LST']['EV_ROIS']
    num_ev_points = len(evs)

    ttlpnts = num_ev_points * xnpoints * ynpoints

    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)

    # _dataset(nxgrp, y_posnr_nm, ydata, 'NX_FLOAT')
    # _dataset(nxgrp, x_posnr_nm, xdata, 'NX_FLOAT')
    #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 nxgrp.keys()):
        del (nxgrp[nxkd.SAMPLE_X])
        del (nxgrp[nxkd.SAMPLE_Y])

    # these names (sample_x, sample_y) are hardcoded into the nxstxm definition
    _dataset(nxgrp, nxkd.SAMPLE_Y, ydata, 'NX_FLOAT')
    _dataset(nxgrp, nxkd.SAMPLE_X, xdata, 'NX_FLOAT')

    # this should be an array the same shape as the 'data' group in NXdata filled with the storagering current
    _sr_data = parent.get_baseline_all_data(
        parent.get_devname(DNM_RING_CURRENT))
    sr_data = np.linspace(_sr_data[0], _sr_data[1], ttlpnts)

    _dataset(nxgrp, 'data',
             np.reshape(sr_data, (num_ev_points, ynpoints, xnpoints)),
             'NX_NUMBER')

    modify_spectra_ctrl_str_attrs(parent, nxgrp, doc)
def modify_single_image_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(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 = int(rois[SPDB_X][NPOINTS])
    ynpoints = int(rois[SPDB_Y][NPOINTS])
    ttlpnts = xnpoints * ynpoints

    # uid = list(parent._cur_scan_md.keys())[0]
    # primary_det_nm = parent.get_primary_det_nm(uid)
    # prim_data_lst = parent._data['primary'][primary_det_nm]['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]['data'][0:xnpoints], dtype=np.float32)
    #     # ydata is every ynpoint
    #     ydata = np.array(parent._data['primary'][y_src]['data'][0::ynpoints], dtype=np.float32)

    _dataset(nxgrp, y_posnr_nm, ydata, 'NX_FLOAT')
    _dataset(nxgrp, x_posnr_nm, xdata, 'NX_FLOAT')

    # this should be an array the same shape as the 'data' group in NXdata filled with the storagering current
    _sr_data = parent.get_baseline_all_data(
        parent.get_devname(DNM_RING_CURRENT))
    sr_data = np.linspace(_sr_data[0], _sr_data[1], ttlpnts)
    #if (resize_data):
    #    sr_data = np.resize(sr_data, (ttlpnts,))
    _dataset(nxgrp, 'data', np.reshape(sr_data, (ynpoints, xnpoints)),
             'NX_NUMBER')

    modify_single_image_ctrl_str_attrs(parent, nxgrp, doc)
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 = dct_get(rois, SPDB_XNPOINTS)
    ynpoints = 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)

    _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) + '_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)
    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')

    modify_focus_ctrl_str_attrs(parent, nxgrp, doc)
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')
示例#8
0
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')
示例#9
0
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_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'])
示例#14
0
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')