Add calibcant-calibrate.py, now that we have a configurable default AFM to calibrate.
[calibcant.git] / bin / calibcant-calibrate.py
1 #!/usr/bin/env python
2 # calibcant - tools for thermally calibrating AFM cantilevers
3 #
4 # Copyright
5
6 """Run a cantilever calibration using the default AFM
7 (``pyafm.storage.load_afm()``).
8 """
9
10 import os
11 import time as _time
12
13 from calibcant.calibrate import Calibrator as _Calibrator
14 from pyafm.storage import load_afm as _load_afm
15 import calibcant.config as _config
16
17
18 def main(args):
19     timestamp = '{0}-{1:02d}-{2:02d}T{3:02d}-{4:02d}-{5:02d}'.format(
20         *_time.localtime())
21     filename = '{}-calibcant-data.h5'.format(timestamp)
22     config = _config.CalibrateConfig()
23     config['bump'] = _config.BumpConfig()
24     config['bump'].update(
25         {'model':_config.Linear, 'initial-position':-150e-9})
26     config['temperature'] = _config.TemperatureConfig()
27     config['vibration'] = _config.VibrationConfig()
28     devices = []
29     try:
30         afm = _load_afm()
31         afm.load_from_config(devices=devices)
32         calibrator = _Calibrator(config=config, afm=afm)
33         calibrator.setup_config()
34         deflection = afm.piezo.read_deflection()
35         afm.stepper_approach(target_deflection=deflection + 1e3)
36         k,k_s,data = calibrator.calibrate(filename=filename)
37     finally:
38         for device in devices:
39             device.close()
40     print 'k: {:g} +/- {:g}'.format(k, k_s)
41     return 0
42
43 if __name__ == '__main__':
44     import sys
45
46     sys.exit(main(sys.argv[1:]))