def convert_to_measurement(self, dataArray): data = dataArray.data param = ScanningParam() param.filename = dataArray.info['filename'] if dataArray.info['data_info'][0]['Name'] != 'Z': raise UnhandledFileError, \ 'currently only topography is supported.' else: param.type = 'topo' n = dataArray.info['channel'] if 0 == (n % 2): param.direction = 'Forward' elif 1 == (n % 2): if 'both' == dataArray.info['data_info'][n // 2 * 2 - 1]['Direction']: param.direction = 'Backward' else: param.direction = 'Forward' param.current = float(dataArray.info['z-controller']['Setpoint'].split(\ ' ')[0]) param.vgap = dataArray.info['bias'] # BUG will not work for multichannel files: unit = dataArray.info['data_info'][0]['Unit'] # For convenience scale units if param.type == 'topo' and unit == 'm': unit = u'nm' data = data * 1e9 param.unit = unit param.creation_date = dataArray.info['rec_date'] param.comment = dataArray.info['comment'] axis1 = AxisParam() axis2 = AxisParam() axis3 = AxisParam() if param.type in ('topo', ): axis1.length = dataArray.info['scan_pixels'][0] axis1.unit = 'nm' axis1.increment = dataArray.info['scan_range'][ 0] / axis1.length * 1e9 axis1.start = 0 # dataArray.info['scan_offset'][0] in meter axis2.length = dataArray.info['scan_pixels'][1] axis2.unit = 'nm' axis2.increment = dataArray.info['scan_range'][ 1] / axis2.length * 1e9 axis2.start = 0 param.axis1 = axis1 param.axis2 = axis2 print dataArray.info['scan_pixels'] print dataArray.info['scan_range'] return Measurement(data, param)
def convert_to_measurement(self, dataArray): data = dataArray.data param = ScanningParam() param.filename = dataArray.info['filename'] param.type = dataArray.info['type'] param.direction = dataArray.info['direction'] param.current = dataArray.info['current'] param.vgap = dataArray.info['vgap'] unit = dataArray.info['unit'] # For convenience scale units if param.type == 'topo' and unit == 'm': unit = u'nm' data = data * 1e9 elif param.type == 'ivcurve' and unit == 'A': unit = u'nA' data = data * 1e9 elif param.type == 'ivmap' and unit == 'A': unit = u'nA' data = data * 1e9 param.unit = unit param.creation_date = dataArray.info['date'] param.comment = dataArray.info['comment'] axis1 = AxisParam() axis2 = AxisParam() axis3 = AxisParam() if param.type in ('topo','ivmap'): axis1.length = dataArray.info['xres'] axis1.unit = dataArray.info['unitxy'] #axis1.length_physical = dataArray.info['xreal'] axis1.increment = dataArray.info['xinc'] axis1.start = 0 axis2.length = dataArray.info['yres'] axis2.unit = dataArray.info['unitxy'] #axis2.length_physical = dataArray.info['yreal'] axis2.increment = dataArray.info['yinc'] axis2.start = 0 param.axis1 = axis1 param.axis2 = axis2 if param.type in ('ivcurve','ivmap'): if param.type == 'ivcurve': axisv = axis1 param.axis1 = axisv else: axisv = axis3 param.axis3 = axisv axisv.unit = dataArray.info['unitv'] coef = 1 # For convenience scale units if axisv.unit == 'V': axisv.unit = 'mV' coef = 1e3 axisv.length = dataArray.info['vres'] #axisv.length_physical = dataArray.info['vreal'] * coef axisv.increment = dataArray.info['vinc'] * coef axisv.start = dataArray.info['vstart'] * coef return Measurement(data, param)