X-Git-Url: http://git.tremily.us/?p=calibcant.git;a=blobdiff_plain;f=bin%2Fcalibcant-calibrate.py;fp=bin%2Fcalibcant-calibrate.py;h=5cf5a92f78570f7234e102866b9a64fd22a1c20d;hp=3d20ab3dd0127ce1b145fcd227d137a3982927b9;hb=566de690725e8a44ff1f2a653ae728b9cbf99095;hpb=f85c5ba71532cfa05a8d4ca04387bb55e731352a diff --git a/bin/calibcant-calibrate.py b/bin/calibcant-calibrate.py index 3d20ab3..5cf5a92 100755 --- a/bin/calibcant-calibrate.py +++ b/bin/calibcant-calibrate.py @@ -7,7 +7,7 @@ (``pyafm.storage.load_afm()``). """ -import os +import argparse as _argparse import time as _time from calibcant.calibrate import Calibrator as _Calibrator @@ -15,7 +15,22 @@ from pyafm.storage import load_afm as _load_afm import calibcant.config as _config +_module_doc = __doc__ + def main(args): + parser = _argparse.ArgumentParser(description=_module_doc) + parser.add_argument( + '--num-bumps', type=int, + help='Number of surface bumps') + parser.add_argument( + '--num-temperatures', type=int, + help='Number of temperature measurements') + parser.add_argument( + '--num-vibrations', type=int, + help='Number of thermal vibration measurements') + + args = parser.parse_args(args) + timestamp = '{0}-{1:02d}-{2:02d}T{3:02d}-{4:02d}-{5:02d}'.format( *_time.localtime()) filename = '{}-calibcant-data.h5'.format(timestamp) @@ -25,6 +40,20 @@ def main(args): {'model':_config.Linear, 'initial-position':-150e-9}) config['temperature'] = _config.TemperatureConfig() config['vibration'] = _config.VibrationConfig() + if args.num_bumps is None: + args.num_bumps = config['num-bumps'] + else: + config['num-bumps'] = args.num_bumps + if args.num_temperatures is None: + args.num_temperatures = config['num-temperatures'] + else: + config['num-temperatures'] = args.num_temperatures + if args.num_vibrations is None: + args.num_vibrations = config['num-vibrations'] + else: + config['num-vibrations'] = args.num_vibrations + insufficient_calibration_data = 0 in [ + args.num_bumps, args.num_temperatures, args.num_vibrations] devices = [] try: afm = _load_afm() @@ -34,7 +63,10 @@ def main(args): deflection = afm.piezo.read_deflection() try: afm.stepper_approach(target_deflection=deflection + 1e3) - k,k_s,data = calibrator.calibrate(filename=filename) + if insufficient_calibration_data: + data = calibrator.acquire(filename=filename) + else: + k,k_s,data = calibrator.calibrate(filename=filename) except: afm.move_away_from_surface() afm.piezo.zero() @@ -42,7 +74,16 @@ def main(args): finally: for device in devices: device.close() - print 'k: {:g} +/- {:g}'.format(k, k_s) + if insufficient_calibration_data: + for count,field,label in [ + (args.num_bumps, 'bump', 'photodiode sensitivity (V/m)'), + (args.num_temperatures, 'temperature', 'temperature (K)'), + (args.num_vibrations, 'vibration', 'variance (V**2)')]: + if count: + d = data[field] + print('{}: {:g} +/- {:g}'.format(label, d.mean(), d.std())) + else: + print('k: {:g} +/- {:g}'.format(k, k_s)) return 0 if __name__ == '__main__':