Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
scan.interpret()
entry = NXentry()
entry.title = str(scan)
entry.date = utils.iso8601(scan.date)
entry.command = scan.scanCmd
entry.scan_number = NXfield(scan.scanNum)
entry.comments = '\n'.join(scan.comments)
entry.data = self.scan_NXdata(scan) # store the scan data
entry.positioners = self.metadata_NXlog(scan.positioner,
'SPEC positioners (#P & #O lines)')
if hasattr(scan, 'metadata') and len(scan.metadata) > 0:
entry.metadata = self.metadata_NXlog(scan.metadata,
'SPEC metadata (UNICAT-style #H & #V lines)')
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'
def metadata_NXlog(self, spec_metadata, description):
'''
return the specific metadata in an NXlog object
'''
from spec2nexus import utils
nxlog = NXlog()
nxlog.attrs['description'] = description
for subkey, value in spec_metadata.items():
clean_name = utils.sanitize_name(nxlog, subkey)
nxlog[clean_name] = NXfield(value)
nxlog[clean_name].original_name = subkey
return nxlog