From 434e8c556602a9f211396f5549bcc81527f51d80 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 21 Apr 2011 08:12:27 -0400 Subject: [PATCH] Initial attempt at PicoForce 0x05120005 support. --- hooke/driver/picoforce.py | 119 +++++-- test/data/vclamp_picoforce/0x05120005 | 433 ++++++++++++++++++++++++ test/data/vclamp_picoforce/README | 16 +- test/data/vclamp_picoforce/playlist.hkp | 2 + test/picoforce_driver.py | 4 + 5 files changed, 544 insertions(+), 30 deletions(-) create mode 100644 test/data/vclamp_picoforce/0x05120005 diff --git a/hooke/driver/picoforce.py b/hooke/driver/picoforce.py index 4912b77..845412d 100644 --- a/hooke/driver/picoforce.py +++ b/hooke/driver/picoforce.py @@ -32,7 +32,8 @@ from .. import curve as curve # this module defines data containers. from . import Driver as Driver # this is the Driver base class -__version__='0.0.0.20100516' +__version__='0.0.0.20110421' + class PicoForceDriver (Driver): """Handle Bruker Picoforce force spectroscopy files. @@ -151,7 +152,8 @@ class PicoForceDriver (Driver): Otherwise, raise `ValueError`. """ version = info['Force file list'].get('Version', None) - if version not in ['0x06120002', '0x06130001', '0x07200000']: + if version not in ['0x05120005', '0x06120002', '0x06130001', + '0x07200000']: raise NotImplementedError( '%s file version %s not supported (yet!)\n%s' % (self.name, version, @@ -194,6 +196,9 @@ class PicoForceDriver (Driver): traces = {} version = info['Force file list']['Version'] type_re = re.compile('S \[(\w*)\] "([\w\s.]*)"') + if isinstance(info['Ciao force image list'], dict): + # there was only one image, but convert to list for processing + info['Ciao force image list'] = [info['Ciao force image list']] for image in info['Ciao force image list']: offset = int(image['Data offset']) length = int(image['Data length']) @@ -208,7 +213,7 @@ class PicoForceDriver (Driver): offset=offset, info=image, ) - if version in ['0x06120002', '0x06130001']: + if version in ['0x05120005', '0x06120002', '0x06130001']: match = type_re.match(image['@4:Image Data']) assert match != None, 'Bad regexp for %s, %s' \ % ('@4:Image Data', image['@4:Image Data']) @@ -243,6 +248,37 @@ class PicoForceDriver (Driver): #d.tofile('%s.dat' % tname, sep='\n') pass traces[tname] = d + if 'Z sensor' not in traces: + # some picoforce files only save deflection + assert version == '0x05120005', version + force_info = info['Ciao force list'] + deflection = traces['Deflection'] + volt_re = re.compile( + 'V \[Sens. ([\w\s.]*)\] \(([.0-9]*) V/LSB\) *(-?[.0-9]*) V') + match = volt_re.match(force_info['@4:Ramp size Zsweep']) + size = float(match.group(3)) + match = volt_re.match(force_info['@4:Ramp offset Zsweep']) + offset = float(match.group(3)) + match = volt_re.match(force_info['@4:Ramp Begin Zsweep']) + begin = float(match.group(3)) + match = volt_re.match(force_info['@4:Ramp End Zsweep']) + end = float(match.group(3)) + #\@4:Feedback value Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) 0 V + #\@4:Z display Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) 18.53100 V + assert len(deflection) % 2 == 0, len(deflection) + points = len(deflection)/2 + traces['Z sensor'] = curve.Data( + shape=deflection.shape, + dtype=numpy.float, + info=info['Ciao force image list'][0], + ) + # deflection data seems to be saved as + # [final approach, ..., initial approach, + # initial retract, ..., final retract] + traces['Z sensor'][:points] = numpy.linspace( + offset+begin+size, offset+begin, points) + traces['Z sensor'][-points:] = numpy.linspace( + offset+begin+size, offset+end, points) return traces def _validate_traces(self, z_piezo, deflection): @@ -307,12 +343,18 @@ class PicoForceDriver (Driver): def _translate_block_info(self, info, z_piezo_info, deflection_info, name): version = info['Force file list']['Version'] + if version == '0x05120005': + k_key = 'Spring constant' + else: + assert version in [ + '0x06120002', '0x06130001', '0x07200000'], version + k_key = 'Spring Constant' ret = { 'name': name, 'raw info': info, 'raw z piezo info': z_piezo_info, 'raw deflection info': deflection_info, - 'spring constant (N/m)': float(z_piezo_info['Spring Constant']), + 'spring constant (N/m)': float(z_piezo_info[k_key]), } t = info['Force file list']['Date'] # 04:42:34 PM Tue Sep 11 2007 @@ -322,11 +364,16 @@ class PicoForceDriver (Driver): 'V \[Sens. ([\w\s.]*)\] \(([.0-9]*) V/LSB\) (-?[.0-9]*) V') hz_re = re.compile( 'V \[Sens. ([\w\s.]*)\] \(([.0-9]*) kHz/LSB\) (-?[.0-9]*) kHz') - if version in ['0x06120002', '0x06130001']: + if version in ['0x05120005', '0x06120002', '0x06130001']: match = volt_re.match(z_piezo_info['@4:Z scale']) assert match != None, 'Bad regexp for %s, %s' \ % ('@4:Z scale', z_piezo_info['@4:Z scale']) - assert match.group(1) == 'ZSensorSens', z_piezo_info['@4:Z scale'] + if version == '0x05120005': + assert match.group(1) == 'Deflection', ( + z_piezo_info['@4:Z scale']) + else: + assert match.group(1) == 'ZSensorSens', ( + z_piezo_info['@4:Z scale']) else: assert version == '0x07200000', version match = hz_re.match(z_piezo_info['@4:Z scale']) @@ -341,14 +388,24 @@ class PicoForceDriver (Driver): match = volt_re.match(deflection_info['@4:Z scale']) assert match != None, 'Bad regexp for %s, %s' \ % ('@4:Z scale', deflection_info['@4:Z scale']) - assert match.group(1) == 'DeflSens', z_piezo_info['@4:Z scale'] + if version == '0x05120005': + assert match.group(1) == 'Deflection', z_piezo_info['@4:Z scale'] + else: + assert version in [ + '0x06120002', '0x06130001', '0x07200000'], version + assert match.group(1) == 'DeflSens', z_piezo_info['@4:Z scale'] ret['deflection sensitivity (V/bit)'] = float(match.group(2)) ret['deflection range (V)'] = float(match.group(3)) ret['deflection offset (V)'] = 0.0 # offset assumed if raw data is signed... nm_sens_re = re.compile('V ([.0-9]*) nm/V') - if version in ['0x06120002', '0x06130001']: + if version == '0x05120005': + match = nm_sens_re.match(info['Scanner list']['@Sens. Zscan']) + assert match != None, 'Bad regexp for %s/%s, %s' \ + % ('Scanner list', '@Sens. Zscan', + info['Scanner list']['@Sens. Zscan']) + elif version in ['0x06120002', '0x06130001']: match = nm_sens_re.match(info['Ciao scan list']['@Sens. ZSensorSens']) assert match != None, 'Bad regexp for %s/%s, %s' \ % ('Ciao scan list', '@Sens. ZSensorSens', @@ -361,9 +418,17 @@ class PicoForceDriver (Driver): info['Ciao scan list']['@Sens. ZsensSens']) ret['z piezo sensitivity (m/V)'] = float(match.group(1))*1e-9 - match = nm_sens_re.match(info['Ciao scan list']['@Sens. DeflSens']) - assert match != None, 'Bad regexp for %s/%s, %s' \ - % ('Ciao scan list', '@Sens. DeflSens', info['Ciao scan list']['@Sens. DeflSens']) + if version == '0x05120005': + match = nm_sens_re.match(info['Ciao scan list']['@Sens. Deflection']) + assert match != None, 'Bad regexp for %s/%s, %s' \ + % ('Scanner list', '@Sens. Zscan', + info['Ciao scan list']['@Sens. Deflection']) + else: + assert version in [ + '0x06120002', '0x06130001', '0x07200000'], version + match = nm_sens_re.match(info['Ciao scan list']['@Sens. DeflSens']) + assert match != None, 'Bad regexp for %s/%s, %s' \ + % ('Ciao scan list', '@Sens. DeflSens', info['Ciao scan list']['@Sens. DeflSens']) ret['deflection sensitivity (m/V)'] = float(match.group(1))*1e-9 match = volt_re.match(info['Ciao force list']['@Z scan start']) @@ -392,22 +457,28 @@ class PicoForceDriver (Driver): ret['z piezo sensitivity (V/bit)'] = float(match.group(2)) ret['z piezo range (V)'] = float(match.group(3)) else: - assert version == '0x07200000', version + assert version in ['0x05120005', '0x07200000'], version pass - match = volt_re.match(z_piezo_info['@4:Ramp size']) - assert match != None, 'Bad regexp for %s, %s' \ - % ('@4:Ramp size', info['@4:Ramp size']) - assert match.group(1) == 'Zsens', match.group(1) - ret['z piezo ramp size (V/bit)'] = float(match.group(2)) - ret['z piezo ramp size (V)'] = float(match.group(3)) + if version == '0x05120005': + # already accounded for when generating 'Z sensor' trace + pass + else: + assert version in [ + '0x06120002', '0x06130001', '0x07200000'], version + match = volt_re.match(z_piezo_info['@4:Ramp size']) + assert match != None, 'Bad regexp for %s, %s' \ + % ('@4:Ramp size', info['@4:Ramp size']) + assert match.group(1) == 'Zsens', match.group(1) + ret['z piezo ramp size (V/bit)'] = float(match.group(2)) + ret['z piezo ramp size (V)'] = float(match.group(3)) - match = volt_re.match(z_piezo_info['@4:Ramp offset']) - assert match != None, 'Bad regexp for %s, %s' \ - % ('@4:Ramp offset', info['@4:Ramp offset']) - assert match.group(1) == 'Zsens', match.group(1) - ret['z piezo ramp offset (V/bit)'] = float(match.group(2)) - ret['z piezo ramp offset (V)'] = float(match.group(3)) + match = volt_re.match(z_piezo_info['@4:Ramp offset']) + assert match != None, 'Bad regexp for %s, %s' \ + % ('@4:Ramp offset', info['@4:Ramp offset']) + assert match.group(1) == 'Zsens', match.group(1) + ret['z piezo ramp offset (V/bit)'] = float(match.group(2)) + ret['z piezo ramp offset (V)'] = float(match.group(3)) # Unaccounted for: # Samps* diff --git a/test/data/vclamp_picoforce/0x05120005 b/test/data/vclamp_picoforce/0x05120005 new file mode 100644 index 0000000..dbfb3ab --- /dev/null +++ b/test/data/vclamp_picoforce/0x05120005 @@ -0,0 +1,433 @@ +\*Force file list +\Version: 0x05120005 +\Date: 10:28:31 AM Thu Mar 03 2011 +\Start context: FOL +\Data length: 40960 +\Text: +\History: +\Navigator note: +\Engage X Pos: +\Engage Y Pos: +\*Equipment list +\Description: Extended BioScope +\Controller: IIIA +\Microscope: BioScope +\Extender: Basic +\Tip Exchange: None +\Vision: None +\Zoom System: Motorized +\Scanner file: 1921g1xg.scn +\Profile name: default +\*Scanner list +\Scanner type: Dimension +\Serial number: 378-1X +\Piezo size: G +\File name: 1921g1xg.scn +\Retracted offset der: 1.35 +\Extended offset der: 9.4 +\Allow rotation: Allow +\Piezo cal: 440 +\X sensitivity: 158.404 +\X derate: 0.2309 +\X mag: 1.22 +\X mag1: 0.9 +\X arg: 3.15 +\Fast arg derate: 0 +\X round: 0 +\Orthogonality: -0.0109083 +\Y sensitivity: 178.164 +\Y derate: 0.2144 +\Y mag: 0.92 +\Y mag1: 1.23 +\Y arg: 3.02 +\Slow arg derate: 0 +\X slow sensitivity: 172.112 +\X slow derate: 0.3127 +\Y fast sensitivity: 153.356 +\Y fast derate: 0.2526 +\X slow-fast coupling: 0.5267 +\X slow-fast coupling derating: 0.0003709 +\Y slow-fast coupling: 0.4497 +\Y slow-fast coupling derating: -0.0005157 +\Fast cal freq: 2.44141 +\Slow cal freq: 4.76838 +\Xs-Yf coupling: 0.06706 +\Xs-Yf coupling derating: -3.915e-005 +\Ys-Xf coupling: 0.0717 +\Ys-Xf coupling derating: -0.0002088 +\X offset sens: 280 +\Y offset sens: 280 +\@Sens. Zscan: V 14.84000 nm/V +\@Sens. Current: V 10.00000 nA/V +\*Ciao scan list +\Parameter select: Main +\Operating mode: Force +\Tip serial number: +\Scan size: 0 nm +\X offset: 0 nm +\Y offset: 0 nm +\Rotate Ang.: 0 +\Samps/line: 512 +\Lines: 512 +\Y disable: Enabled +\Aspect ratio: 1:1 +\Bidirectional scan: Disabled +\Scan line shift: 0 +\Scan rate: 1.45322 +\Tip velocity: 0 +\Minimum scan rate: 0.1 +\Lift rate: 4 +\X drift: 0 +\Y drift: 0 +\Step XY size: 300 +\Cycles: 10 +\Step XY period: 0.005 +\Step size: 5 +\Units: Metric +\Color table: 12 +\Scope dualtrace: Dual +\Auto X Sep: 0 +\Auto Y Sep: 0 +\Auto pattern: Linear +\Auto number: 2 +\Capture direction: Up +\Capture prelines: 50 +\Engage Setpoint: 1 +\Min int. gain: 3 +\Parm update retract: Disabled +\Drive feedback: Disabled +\Drive time: 0 +\Drive setpoint: 1 +\Drive gain: 80 +\Profiler profiling: Disabled +\Profiler length goal: 500 +\Profiler length actual: 0.001 +\Profiler speed: 1 +\Profiler scan time: 0.001 +\Profiler resolution: 0.001 +\Profiler x position: 0 +\Profiler y position: 0 +\Profiler z position: 0 +\Profiler profiler position: 0 +\Profiler tilt angle: 0 +\Profiler direction: Forward +\Profiler axis: Aux +\Profiler ramp-up ideal-distance multiplier: 25 +\Profiler ramp-up total-distance minimum: 2 +\Profiler ramp-up total-distance goal: 10 +\Profiler backlash-removal distance: 10 +\Profiler backlash-removal speed: 33 +\Profiler num profile axis display points 3D: 512 +\Gain start: 32 +\Gain end: 192 +\Gain incr: 32 +\Pro. Gain factor: 1.5 +\Max shift: 0.05 +\Lines/gain: 3 +\Gain offset: 0.9 +\Auto Gain: Disabled +\Start size: 0 nm +\Pass 2 size: 0 nm +\Pass 3 size: 0 nm +\Pass 4 size: 0 nm +\Feature scan angle: 0 +\Feature Scan rate: 1 +\Feature step size: 0.138889 +\Feature setpoint: 0.1 +\Feature threshold: 2000 +\Pass delay: 5 +\Z offset: 0 +\Z tolerance: 13791 +\Engage X offset: 0 nm +\Engage Y offset: 0 nm +\Engage step size: 0.138889 +\Engage Z sens.: 12.5 +\Engage Z avg.: 10 +\Engage Z delay: 0.5 +\Height engage: Disabled +\Current sens.: High 1 pA/V +\Extended Current sens: High 1 pA/V +\Bias limit: 12 V +\AFM Current Sens.: High 1 nA/V +\SECPM sens: 1000 mV/V +\Nanopot gain: 1x +\HF current: 1 +\HF freq.: 100 +\HF Start freq.: 100 +\HF End freq.: 100 +\HF Step freq.: 100 +\HF power: -30 +\HF Start power: -30 +\HF End power: -30 +\HF Step power: 0 +\HF RF: Off +\HF AM: Off +\HF lower limit: -20 +\HF upper limit: 0 +\HF int. gain: 5 +\HF prop. gain: 5 +\HF engage: Disabled +\HF current capture: 0 +\HF display: Current +\MR preamp gain: 1000 +\MSM bias voltage: 0 +\MSM resistance: 150 +\MSM bias delay: 1 +\MSM test current: 3 +\MSM max sensor resist: 200 +\MSM min sensor resist: 10 +\MSM enable: Enabled +\MSM Probe Delay: 2 +\Engage MRR: -1 +\Scan MRR: -1 +\XY Closed Loop: Off +\Analog2 High Voltage: 0 +\Analog22 High Voltage: 0 +\@InterleaveList: S [InterleaveOffMode] "Disabled" +\@LinearizeList: S [LinearizeOffMode] "modeLinearizeOff" +\@MicroscopeList: S [AFMMode] "Contact" +\@Capacitance feedback: S [] "" +\@MSMSource: S [MSMCurrentMode] "Current" +\@2:Zmod: S [] "Disabled" +\@3:Zmod: S [] "Disabled" linked +\@4:SPMFeedbackList: S [SPMFb] "Deflection" +\@3:SPMFeedbackList: S [SPMFb] "Deflection" linked +\@2:InputFbList: S [] "" +\@3:InputFbList: S [] "" +\@2:Capacitance feedback: S [] "" +\@3:Capacitance feedback: S [] "" +\@Sens. Deflection: V 105.2792 nm/V +\@Sens. Friction: V 1.000000 +\@Sens. Amplitude: V 1.000000 +\@Sens. Phase: V 1.000000 +\@Sens. Frequency: V 1.000000 +\@Sens. Potential: V 1.000000 +\@Sens. dC/dV: V 1.000000 +\@Sens. Fdback bias: V 1.000000 +\@Sens. In 0: V 1.000000 +\@Sens. Thermal: V 1.000000 +\@Sens. Resistance: V 1.000000 +\@Sens. High Frequency: V 1.000000 +\@Sample period: V (0.1000000 us/LSB) 16.00000 us +\@Z center: V [Sens. Zscan] (0.006713867 V/LSB) -0.006713867 V +\@1:Z limit: V [Sens. Zscan] (0.006713867 V/LSB) 440.0000 V +\@1:DeflectionLimit: V (20.00000 V/LSB) 20.00000 V +\@1:FM igain: V (1.000000 1/LSB) 0 +\@1:FM pgain: V (1.000000 1/LSB) 0 +\@1:AmplitudeLimit: V (20.00000 V/LSB) 2.500000 V +\@Lift start height: V [Sens. Zscan] (0.002056286 V/LSB) 1.740543 V +\@Lift scan height: V [Sens. Zscan] (0.002056286 V/LSB) 0.5801810 V +\@Drive height: V [Sens. Zscan] (0.002056286 V/LSB) 0 V +\@2:AFMSetDeflection: V (0.0003051758 V/LSB) 0 V +\@3:AFMSetDeflection: V (0.0003051758 V/LSB) 1.000000 V linked +\@2:TMSetAmplitude: V (0.0003051758 V/LSB) 0.2565259 V +\@3:TMSetAmplitude: V (0.0003051758 V/LSB) 2.000000 V linked +\@2:TMSetDeflection: V (0.0003051758 V/LSB) 1.000000 V +\@3:TMSetDeflection: V (0.0003051758 V/LSB) 1.000000 V linked +\@2:TMSetPhase: V (0.005493164 º/LSB) 0 º +\@3:TMSetPhase: V (0.005493164 º/LSB) 0 º +\@2:STMSetCurrent: V [Sens. Current] (0.0003051758 V/LSB) 10.00000 V +\@3:STMSetCurrent: V [Sens. Current] (0.0003051758 V/LSB) 10.00000 V +\@2:Drive frequency: V (0.0000058208 kHz/LSB) 323.3117 kHz +\@3:Drive frequency: V (0.0000058208 kHz/LSB) 10.00000 kHz linked +\@2:Drive phase: V (0.005493164 º/LSB) 159.3457 º +\@3:Drive phase: V (0.005493164 º/LSB) 0 º linked +\@2:Drive amplitude: V (0.6103516 mV/LSB) 321.7564 mV +\@3:Drive amplitude: V (0.6103516 mV/LSB) 200.0000 mV linked +\@2:Cap. feedback setpt: V (0.0003051758 V/LSB) 0 V +\@3:Cap. feedback setpt: V (0.0003051758 V/LSB) 0 V +\@2:Bias Frequency: V (0.0000058208 kHz/LSB) 0 kHz +\@3:Bias Frequency: V (0.0000058208 kHz/LSB) 0 kHz +\@2:AC bias ampl: V (0.0003051758 V/LSB) 0 V +\@3:AC bias ampl: V (0.0003051758 V/LSB) 0 V +\@2:DC bias: V (0.0003662109 V/LSB) 0 V +\@3:DC bias: V (0.0003662109 V/LSB) 0 V +\@2:Lock-in phase: V (0.005493164 º/LSB) 90.00000 º +\@3:Lock-in phase: V (0.005493164 º/LSB) 90.00000 º +\@2:Stray cap. adj.: V (0.0003051758 V/LSB) 0 V +\@3:Stray cap. adj.: V (0.0003051758 V/LSB) 0 V +\@2:Bias: V (0.3051758 mV/LSB) 0 mV +\@3:Bias: V (0.3051758 mV/LSB) 0 mV +\@2:Analog 1: V (0.0003051758 V/LSB) 0 V +\@3:Analog 1: V (0.0003051758 V/LSB) 0 V +\@2:Analog 2: V (0.0003662109 V/LSB) 0 V +\@3:Analog 2: V (0.0003662109 V/LSB) 0 V +\@2:SPMFbIgain: V (0.03125000 1/LSB) 0.3000000 +\@3:SPMFbIgain: V (0.03125000 1/LSB) 0.4000000 linked +\@2:SPMFbPgain: V (0.03125000 1/LSB) 0.3000000 +\@3:SPMFbPgain: V (0.03125000 1/LSB) 0.6000000 linked +\@2:SPMFbSgain: V (0.0000305176 1/LSB) 0 +\@3:SPMFbSgain: V (0.0000305176 1/LSB) 0 linked +\@2:Tip Drive phase: V (0.005493164 º/LSB) 0 º +\@3:Tip Drive phase: V (0.005493164 º/LSB) 0 º +\@2:MSM lock-in phase: V (0.005493164 º/LSB) 90.00000 º +\@3:MSM lock-in phase: V (0.005493164 º/LSB) 90.00000 º +\@2:STMFbIgain: V (0.03125000 1/LSB) 1.000000 +\@3:STMFbIgain: V (0.03125000 1/LSB) 1.000000 +\@2:STMFbPgain: V (0.03125000 1/LSB) 0 +\@3:STMFbPgain: V (0.03125000 1/LSB) 0 +\@2:STMFbSgain: V (0.0000305176 1/LSB) 0 +\@3:STMFbSgain: V (0.0000305176 1/LSB) 0 +\*Ciao force list +\Scan rate: 1.26826 +\Forward vel.: 170.925 +\Reverse vel.: 170.925 +\Samps/line: 1024 1023 +\Ave lines: 1 +\Display mode: Both +\Trigger mode: Relative +\Trig slope: Positive +\Plot start: 0 +\Plot end: 1 +\Auto start: Enable +\Auto offset: Off +\Start mode: Calibrate +\End mode: Retracted +\User mode: Advanced +\Ramp delay: 0 +\Reverse delay: 0 +\Indent setpoint: -1 +\X Rotate: 0 +\Scratch length: 0 nm +\Scratch rate: 1 +\Scratch angle: 0 +\Size linked: Off +\Lift height: 100 +\Drop height: 10 +\Columns: 1 +\Rows: 1 +\Column step: 0 +\Row step: 0 +\Capture: Off +\Volume offset: 0 +\force/line: 16 0 +\Samples / line: 16 0 +\Z direction: Extend +\Z position: -54.4159 +\Center plot: Enabled +\FV scan rate: 0.0395209 +\Tip factor: 0 +\True resonance: 0 +\Tip type: 100W +\PF PGain : 0 +\PF ITime : 0 +\Linearization: Disabled +\Closed Loop: Disabled +\Feedback type: None +\Feedback counts: 0 +\@Z scan start: V [Sens. Zscan] (0.006713867 V/LSB) -66.98425 V +\@Z scan size: V [Sens. Zscan] (0.006713867 V/LSB) 15.38000 V +\@Z step size: V [Sens. Zscan] (0.006713867 V/LSB) 0 V +\@Sample period: V (0.1000000 us/LSB) 35.00000 us +\@4:Image Data: S [Deflection] "Deflection" +\@4:Trig threshold Deflection: V [Sens. Deflection] (0.0003051758 V/LSB) 3.261286 V +\@4:Threshold step Deflection: V [Sens. Deflection] (0.0003051758 V/LSB) 0 V +\@4:Ramp channel: S [Zsweep] "Z" +\@4:Ramp size Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) 67.38544 V +\@4:Ramp offset Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) -33.29103 V +\@4:Ramp Begin Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) 0 V +\@4:Ramp End Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) 0 V +\@4:Feedback value Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) 0 V +\@4:Z display Zsweep: V [Sens. Zscan] (0.002056286 V/LSB) 18.53100 V +\*Ciao force image list +\Data offset: 40960 +\Data length: 4096 +\Bytes/pixel: 2 +\Start context: FOL +\Data type: FORCE +\Do zoffder: 0 +\Note: +\Plane fit: 0 0 0 0 +\Frame direction: Up +\Stage X: 0 +\Stage Y: 0 +\Stage type: N/A +\Profile length: 0 +\Profile speed [um/s]: 0 +\Samps/line: 1024 1023 +\Scan line: Main +\Realtime planefit: Line +\Offline planefit: Full +\Z direction: Retract +\Force display mode: Normal +\Spring constant: 0.3 +\Separation Scale: 0 +\Force offset: 0 +\Z magnew force: 1 +\Scope coupling: DC +\Smoothing filter: 0 +\Graph function: i +\STS I range: 15000 +\STS DLI/DLV range: 10 +\STS DLI/DV range: 10 +\STS DI/DV range: 10 +\STS Log(i) range: 10 +\@4:Image Data: S [Deflection] "Deflection" +\@Z magnify: C [4:Z scale] 1.000000 +\@4:Z scale: V [Sens. Deflection] (0.0003051758 V/LSB) 10.62338 V +\@4:Z offset: V [Sens. Deflection] (0.0003051758 V/LSB) 0.2655843 V +\@4:FV scale: V [Sens. Deflection] (0.0003051758 V/LSB) 0.8956499 V +\@4:Volume offset: V [Sens. Deflection] (0.0003051758 V/LSB) 0 V +\@4:Ramp channel: S [Zsweep] "Z" +\@Z scan size: V [Sens. Zscan] (0.006713867 V/LSB) 15.38000 V +\@4:Ramp size: V [Sens. Zscan] (0.002056286 V/LSB) 67.38544 V +\@4:Ramp offset: V [Sens. Zscan] (0.002056286 V/LSB) -33.29103 V +\@4:Ramp Begin: V [Sens. Zscan] (0.002056286 V/LSB) 0 V +\@4:Ramp End: V [Sens. Zscan] (0.002056286 V/LSB) 0 V +\@4:Z display: V [Sens. Zscan] (0.002056286 V/LSB) 18.53100 V +\*File list end +Êt'h´ïšb·OÐ Ztà  à }  € —  ô ò Ú } • © M  6 ü · ä ù ] / r ( ä + x ñ +, + +Ï +$ + +› +! +j ´ = +¿  ˆ ¶ ˨" “»Á÷ÝgVʼí–0‰Ÿç:•@ó÷/bó›ý#N¥Ç›RX”ã.ëÁ–Ž„õïG{üh©áf°Þª,*_Lû ^ª©W}mê¢ó¨E|cêÿ C²ÿ‘ÿiÿ3ÿ‹ÿ‹ÿÿÿþYÿÆþþ˜þÿþ¡ýFþ7þeýýþxýÜüýü=ýýèü +ýãüüƒü[üügüeü«û†ûüÅû û}û½ûûœúû ûžú—úçúÈú-ú7ú]úøùÞùúüù~ùù°ùrùRùBùøøÖøìøþøæø„øTø…ø5øÞ÷ð÷ü÷ì÷¶÷÷œ÷x÷÷ ÷D÷ööÍößöšö ö¦ö:ö)ö%öàõªõáõóõsõõ¼õ7õ õ=õ-õØô²ôîô´ôFômôŽôôÑó)ôô€ónóáó¦óó7óƒóÑòaòèòólò"òuòYòÌñ­ñÿñôñoñUñ¡ñƒññ&ñUñôðÃð´ð©ð£ðdð_ðVð!ðéï¹ïÇï¸ï¡ïbïIï\ïï¹îèîõî°î‰îîJî î8î3îóíÌí®íqíoíxíRí6íííììyì«ìòì{ìì%ìeìì¦ëñëì™ëOë†ëJë÷ê8ë2ëÄêŒêêêlêIêêêêÚé¤é­é¬é‡éOéé"ééèèãè°è~è}èhè1è-èèøçÄç»ç’ç†ç—çUçççÿæèæ¹æÅæ´æXæ&æ0æBææíå×åîåææ$æææææææ!ææææææææææææææææ"ææ æææææææ$æææ æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ æææææææ æææææææææ æææææææææ +æææ +æææææææ ææ ææææææææææææææ æ ææ æææ ææ ææææ +ææææææææææ +æ +æææææææ æææ æ +ææ æææææ +æ +ææææ +ææææ ææ +ææææææææææææææ æ ææ æææ æ ææ æ +ææææ æ æ æ ææ +æææ ææÿåæææææ +ææ +æ æ ææ æææ ææ æææææ +æ ææ ææææ ææææ ææ ææææ ææ ææææ +æ æ +ææææüå +æ ææææ æææææ ææüåææ +æ æÿå +ææææ æææûå ææ +ææææ +æ +æ +ææææææ æ æ ææææÿåÿåæüåúåææ +æææ ææúåæææÿå ææææ +æææúåæææææææææýåæÿåæùåææÿåæ ææææýå ææ÷åÿåæÿåþåæ æúåæþå æææýå æýå÷åþåüåæææææüåæææøåýåùåææ æþåæýå æÿåþåôåÿåøåóåæúå æ ææææûåææææææþåæææææüåæ æææýåúå æûåææþå÷åüå æóåææýåøåûåöåæüåùåþåúåûåæÿåææææíåÿåýåææúåæüåþåýåøåææýåæýåÿåÿåþåæÿåõåæþåôåúåæþåýåþåûåææüåýåýåæûåùåæùåõåüå÷åæ÷å÷åöåøåøåýåüåÿåùåùåûåæðåýåøåæ÷å÷åææøåüåòåÿåýå÷åøåùåýåûåúåíåóåøåêåïåþå÷åûåóåûåþåýåþåùåöåðåòåöåöåûåõåòåøåíåòåöåüåõåúåðåþåøåýåúåõå÷å÷åöåóåøåïåæüåæïå÷åúåøåøåõåùåøåûåñåþå÷åýåìåúåùåðåùåæúåýåùåþå÷å÷åòåöåùåôåÿÿÚH¶îÙ2_†ô k m ™ D  ø ‡  R F   ° € { w Y _ + È +­ +_ +k +Œ +9 +( +þ Ê » ‚  É 8 šíL ß‘áª>Žw#M-®­Ÿ…“DÖèÆàÐJQ5úÙÁ|c•65bË¡Á¤zagÀÈõè¨dN  6ꔺœ.Nþ~¨„)‹9Ťûÿéÿ1?ÿ§ÿ’ÿYÿ°ÿ”ÿÿÿ0ÿÔþ¢þÒþ¥þ-þTþbþúýþ+þ þ§ý§ýÆýaýQý›ýÂý+ýóüdýýü¶ü¨üjüaüTü4üUüYü9üÜûü=üxû û û“ûæúçúgûû’úæúûáú~ú”ú¥újúCú1úú8ú+úÂù¸ùÖùØùkùnù¾ù&ùÊø#ù`ùÑø‚øòøÒøøó÷|øSøÚ÷—÷Ó÷½÷r÷²÷¥÷d÷9÷÷Ëöçöàö¤öoöZöNöö½õö;öŠõEõ›õ¢õõõyõ#õ¼ô–ô¤ô³ôtôKôô ô ô¿ó“ó½óªóóóióóÜòöòÒòŸòjòeò}òzòòòòÑñ•ñ’ñ£ñƒñEñ0ññHñ2ñÜðïðñìðið\ð¡ðhð#ðõïýïðÏïÚïðï¿ïVïOïuï2ïþîï ïåî“î¡î¨îî;î&î1îäí¾íÑíÉí¡íIíGíNííí í÷ìµì†ì¨ìKìRì_ììÑëåëÄëyë„ë—ë^ëëë%ëÈêÐê+ë¶ê%êwê±êGêê$êêÖéÊé¨é¢ééqé8éóèé'éÌèiè»è–èûç5ènèè¨ç‘çÕç¬çOçrçÍççªæûæ]çâæ}æ©æ­æcææUæeæçåŸåÓåÝå{åWåzåGååÞäÃäóäÜääkätä?ä2äääáã·ãŒã†ãŠã„ã²ä¡åïåAæ)ææ(æ"æææææææ&æ&æ!æ(æ%æææ&æ ææ$æ(æææææ$æ!æ'æææ%ææ!ææ"æ(ææææ(æ#ææ%ææ,æ%æ&æ&æ)ææ(æ#æ'ææ%æ'ææ!æææææ#ææ&æ æææ$ææ$æææ+æ æ#ææææ æææææ&æææ æææææææ%æææææ#æ"ææææææ æææææ#ææææææææææææææææææææ"æææææææææ"ææææææææææææææææææææææææææææ ææææææææ#ææææ ææææææ ææææ æ ææææææææææ æ æææææææææ æææææ ææææææ ææææææ +æ ææææ æ ææ ææææ ææ æææææ ææææææææææ ææ æ æææ æææææ ææææ ææææ æææææ æ æææææææææææææææ æ ææ æ ææþå +æææææææ æææææ ææææ ææ ææ æææ ææææ +ææææ ææýåææææææææææææææ æææ æ æ ææ +æææ æ æææ æææ ææ ææææûåææ +æææææææ æææ ææ +æýåææææ ææææ ææææ æææææææææææ +æýåææææ ææææææææ æææúåææüåæ æþåæ æ +æþåæææææûåæøåüåùåææüåææýåÿåæ +æûåæùåûåæûåöåûåúåææýåúåúåüåæûåøåææææ÷åúåýåþå +ææÿåýåææúåþåþåÿåæòåûåüåúåüåæúåÿåÿåðåæþåæùåùåýåúåóåææ÷åûåæúåôåæûåæÿåææýåýåùåæææøåþåææúåÿåæÿåæðåúåüåæùåæÿåôåüåôåæõåæúåøåôåüåüåöåõåúåæùåûåñåøåýåþå÷åüåúåøåüåóåüåþåóåóå÷åüåúåõåøåôåûåêåõåùå÷åûåôåíåýåôåüå÷å÷åûåÿåêåÿåñåðåñåæ \ No newline at end of file diff --git a/test/data/vclamp_picoforce/README b/test/data/vclamp_picoforce/README index 4f742fd..7f3a178 100644 --- a/test/data/vclamp_picoforce/README +++ b/test/data/vclamp_picoforce/README @@ -2,9 +2,13 @@ Uploaded by Massimo Sandal. PicoForce file version 0x06120002. -There is also a version 0x06130001 file named "0x06130001", posted to - http://code.google.com/p/hooke/issues/detail?id=10 -by Fabrizio Benedetti on Jun 12, 2009, and a 0x07200000 file named -"0x07200000", posted to - http://code.google.com/p/hooke/issues/detail?id=26 -by illysam (Rolf Schmidt) on Nov 18, 2009. +There are also version specific files: + 0x05120005 + posted to http://code.google.com/p/hooke/issues/detail?id=42 + by sala...@iwt.uni-bremen.de on Apr 21, 2009 + 0x06130001 + posted to http://code.google.com/p/hooke/issues/detail?id=10 + by Fabrizio Benedetti on Jun 12, 2009 + 0x07200000 + posted to http://code.google.com/p/hooke/issues/detail?id=26 + by illysam (Rolf Schmidt) on Nov 18, 2009 diff --git a/test/data/vclamp_picoforce/playlist.hkp b/test/data/vclamp_picoforce/playlist.hkp index 0a3936f..b4da645 100644 --- a/test/data/vclamp_picoforce/playlist.hkp +++ b/test/data/vclamp_picoforce/playlist.hkp @@ -204,6 +204,8 @@ listitems: path: 20071120a_i27_t33.198 - !!python/object:hooke.curve.Curve path: 20071120a_i27_t33.199 +- !!python/object:hooke.curve.Curve + path: '0x05120005' - !!python/object:hooke.curve.Curve path: '0x06130001' - !!python/object:hooke.curve.Curve diff --git a/test/picoforce_driver.py b/test/picoforce_driver.py index 1d54fed..bcaa6f3 100644 --- a/test/picoforce_driver.py +++ b/test/picoforce_driver.py @@ -68,4 +68,8 @@ block names: ['approach', 'retract'] block sizes: [(2048, 2), (2048, 2)] Success +>>> h = r.run_lines(h, ['previous_curve']) +Success + +>>> h = r.run_lines(h, ['curve_info']) # doctest: +ELLIPSIS, +REPORT_UDIFF """ -- 2.26.2