Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if len(scan.G) > 0:
entry.G = NXlog()
desc = "SPEC geometry arrays, meanings defined by SPEC diffractometer support"
# e.g.: SPECD/four.mac
# http://certif.com/spec_manual/fourc_4_9.html
entry.G.attrs['description'] = desc
for item, value in scan.G.items():
entry.G[item] = NXfield(list(map(float, value.split())))
if scan.T != '':
entry['counting_basis'] = NXfield('SPEC scan with constant counting time')
entry['T'] = NXfield(float(scan.T))
entry['T'].units = 'seconds'
entry['T'].description = 'SPEC scan with constant counting time'
elif scan.M != '':
entry['counting_basis'] = NXfield('SPEC scan with constant monitor count')
entry['M'] = NXfield(float(scan.M))
entry['M'].units = 'counts'
entry['M'].description = 'SPEC scan with constant monitor count'
if scan.Q != '':
entry['Q'] = NXfield(list(map(float,scan.Q)))
entry['Q'].description = 'hkl at start of scan'
root['scan_' + str(key)] = entry
self.progress_bar.setValue(int(key))
self.update_progress()
return root
if '_mca_' in scan.data: # 3-D array
# TODO: ?merge with parser_mca_spectra()?
for mca_key, mca_data in scan.data['_mca_'].items():
key = "__" + mca_key
spectra_lengths = list(map(len, mca_data))
num_channels = max(spectra_lengths)
if num_channels != min(spectra_lengths):
msg = 'MCA spectra have different lengths'
msg += ' in scan #' + str(scan.scanNum)
msg += ' in file ' + str(scan.specFile)
raise ValueError(msg)
data_shape += [num_channels, ]
mca = np.array(mca_data)
nxdata[key] = NXfield(utils.reshape_data(mca, data_shape))
nxdata[key].units = "counts"
try:
# use MCA channel numbers as known at time of scan
chan1 = scan.MCA['first_saved']
chanN = scan.MCA['last_saved']
channel_range = range(chan1, chanN+1)
except:
# basic indices
channel_range = range(1, num_channels+1)
ch_key = key + "_channel"
nxdata[ch_key] = NXfield(channel_range)
nxdata[ch_key].units = 'channel'
axes = (label1, label2, ch_key)
nxdata[key].axes = ':'.join( axes )
# TODO: what about the MCA data in this case?
else:
axis1 = axis1[0:intervals1+1]
axis2 = [axis2[row] for row in range(len(axis2)) if row % (intervals1+1) == 0]
column_labels = scan.L
column_labels.remove(label1) # special handling
column_labels.remove(label2) # special handling
if scan.scanCmd.startswith('hkl'):
# find the reciprocal space axis held constant
label3 = [key for key in ('H', 'K', 'L') if key not in (label1, label2)][0]
axis3 = scan.data.get(label3)[0]
nxdata[label3] = NXfield(axis3)
column_labels.remove(label3) # already handled
nxdata[label1] = NXfield(axis1) # 1-D array
nxdata[label2] = NXfield(axis2) # 1-D array
# build 2-D data objects (do not build label1, label2, [or label3] as 2-D objects)
data_shape = [len(axis2), len(axis1)]
for label in column_labels:
axis = np.array( scan.data.get(label) )
clean_name = utils.sanitize_name(nxdata, label)
nxdata[clean_name] = NXfield(utils.reshape_data(axis, data_shape))
nxdata[clean_name].original_name = label
signal_axis_label = utils.sanitize_name(nxdata, scan.column_last)
nxdata.nxsignal = nxdata[signal_axis_label]
nxdata.nxaxes = [nxdata[label2], nxdata[label1]]
if '_mca_' in scan.data: # 3-D array
# TODO: ?merge with parser_mca_spectra()?
def parser_1D_columns(self, nxdata, scan):
'''generic data parser for 1-D column data'''
from spec2nexus import utils
for column in scan.L:
if column in scan.data:
clean_name = utils.sanitize_name(nxdata, column)
nxdata[clean_name] = NXfield(scan.data[column])
nxdata[clean_name].original_name = column
signal = utils.sanitize_name(nxdata, scan.column_last) # primary Y axis
axis = utils.sanitize_name(nxdata, scan.column_first) # primary X axis
nxdata.nxsignal = nxdata[signal]
nxdata.nxaxes = nxdata[axis]
self.parser_mca_spectra(nxdata, scan, axis)
def parser_mca_spectra(self, nxdata, scan, primary_axis_label):
'''parse for optional MCA spectra'''
if '_mca_' in scan.data: # check for it
for mca_key, mca_data in scan.data['_mca_'].items():
key = "__" + mca_key
nxdata[key] = NXfield(mca_data)
nxdata[key].units = "counts"
ch_key = key + "_channel"
nxdata[ch_key] = NXfield(range(1, len(mca_data[0])+1))
nxdata[ch_key].units = 'channel'
axes = (primary_axis_label, ch_key)
nxdata[key].axes = ':'.join( axes )
time = float(time)
if len(axis1) < intervals1: # stopped scan before second row started
self.parser_1D_columns(nxdata, scan) # fallback support
# TODO: what about the MCA data in this case?
else:
axis1 = axis1[0:intervals1+1]
axis2 = [axis2[row] for row in range(len(axis2)) if row % (intervals1+1) == 0]
column_labels = scan.L
column_labels.remove(label1) # special handling
column_labels.remove(label2) # special handling
if scan.scanCmd.startswith('hkl'):
# find the reciprocal space axis held constant
label3 = [key for key in ('H', 'K', 'L') if key not in (label1, label2)][0]
axis3 = scan.data.get(label3)[0]
nxdata[label3] = NXfield(axis3)
column_labels.remove(label3) # already handled
nxdata[label1] = NXfield(axis1) # 1-D array
nxdata[label2] = NXfield(axis2) # 1-D array
# build 2-D data objects (do not build label1, label2, [or label3] as 2-D objects)
data_shape = [len(axis2), len(axis1)]
for label in column_labels:
axis = np.array( scan.data.get(label) )
clean_name = utils.sanitize_name(nxdata, label)
nxdata[clean_name] = NXfield(utils.reshape_data(axis, data_shape))
nxdata[clean_name].original_name = label
signal_axis_label = utils.sanitize_name(nxdata, scan.column_last)
nxdata.nxsignal = nxdata[signal_axis_label]
nxdata.nxaxes = [nxdata[label2], nxdata[label1]]
else:
axis1 = axis1[0:intervals1+1]
axis2 = [axis2[row] for row in range(len(axis2)) if row % (intervals1+1) == 0]
column_labels = scan.L
column_labels.remove(label1) # special handling
column_labels.remove(label2) # special handling
if scan.scanCmd.startswith('hkl'):
# find the reciprocal space axis held constant
label3 = [key for key in ('H', 'K', 'L') if key not in (label1, label2)][0]
axis3 = scan.data.get(label3)[0]
nxdata[label3] = NXfield(axis3)
column_labels.remove(label3) # already handled
nxdata[label1] = NXfield(axis1) # 1-D array
nxdata[label2] = NXfield(axis2) # 1-D array
# build 2-D data objects (do not build label1, label2, [or label3] as 2-D objects)
data_shape = [len(axis2), len(axis1)]
for label in column_labels:
axis = np.array( scan.data.get(label) )
clean_name = utils.sanitize_name(nxdata, label)
nxdata[clean_name] = NXfield(utils.reshape_data(axis, data_shape))
nxdata[clean_name].original_name = label
signal_axis_label = utils.sanitize_name(nxdata, scan.column_last)
nxdata.nxsignal = nxdata[signal_axis_label]
nxdata.nxaxes = [nxdata[label2], nxdata[label1]]
if '_mca_' in scan.data: # 3-D array
# TODO: ?merge with parser_mca_spectra()?
for mca_key, mca_data in scan.data['_mca_'].items():
def parser_mca_spectra(self, nxdata, scan, primary_axis_label):
'''parse for optional MCA spectra'''
if '_mca_' in scan.data: # check for it
for mca_key, mca_data in scan.data['_mca_'].items():
key = "__" + mca_key
nxdata[key] = NXfield(mca_data)
nxdata[key].units = "counts"
ch_key = key + "_channel"
nxdata[ch_key] = NXfield(range(1, len(mca_data[0])+1))
nxdata[ch_key].units = 'channel'
axes = (primary_axis_label, ch_key)
nxdata[key].axes = ':'.join( axes )