1 # calibcant - tools for thermally calibrating AFM cantilevers
3 # Copyright (C) 2008-2011 W. Trevor King <wking@drexel.edu>
5 # This file is part of calibcant.
7 # calibcant is free software: you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation, either
10 # version 3 of the License, or (at your option) any later version.
12 # calibcant is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with calibcant. If not, see
19 # <http://www.gnu.org/licenses/>.
21 """Define some variables to configure the package for a particular lab
26 from FFT_tools import window_hann as _window_hann
27 import h5config.config as _config
28 import h5config.tools as _h5config_tools
31 class PackageConfig (_h5config_tools.PackageConfig):
32 "Configure `calibcant` module operation"
33 settings = _h5config_tools.PackageConfig.settings + [
34 _config.BooleanSetting(
36 help='Plot piezo motion using `matplotlib`.',
40 help=('Default temperature for thermal calibration in degrees '
45 class _TemperatureUnit (object):
47 class Celsius (_TemperatureUnit):
49 class Kelvin (_TemperatureUnit):
52 class TemperatureConfig (_config.Config):
53 "Configure `calibcant` temperature operation"
55 _config.ChoiceSetting(
57 help='Units of raw temperature measurements.',
63 _config.BooleanSetting(
65 help=('The temperature values are defaults (vs. real '
70 class _BumpModel (object):
72 class Linear (_BumpModel):
74 class Quadratic (_BumpModel):
77 class BumpConfig (_config.Config):
78 "Configure `calibcant` bump operation"
81 name='initial-position',
82 help=('Position relative to surface for start of bump in meters. '
83 'Should be less than zero to ensure non-contact region '
84 'before you hit the surface.'),
88 help=('Maximum deflection in volts in case of stepper positioning '
89 'to achieve the initial position.'),
91 _config.IntegerSetting(
93 help=('Number of stepper steps to move "far" away from the '
94 'surface. For possible stepper adjustments while initially '
95 'locating the surface.'),
99 help='Distance to approach in meters.',
101 _config.FloatSetting(
103 help='Approach/retract speed in meters/second.',
105 _config.FloatSetting(
107 help='Number of samples during approach and during retreat.',
109 _config.ChoiceSetting(
111 help='Bump deflection model.',
115 ('quadratic', Quadratic),
120 class _VibrationModel (object):
122 class Variance (_VibrationModel):
124 class BreitWigner (_VibrationModel):
126 class OffsetBreitWigner (_VibrationModel):
129 class VibrationConfig (_config.Config):
130 "Configure `calibcant` vibration operation"
132 _config.FloatSetting(
134 help='Sampling frequency in Hz.',
136 _config.FloatSetting(
138 help=('Aquisition time in seconds. This is rounded up as required '
139 'so the number of samples will be an integer power of two.'),
141 _config.ChoiceSetting(
143 help='Vibration model.',
146 ('variance', Variance),
147 ('Breit-Wigner', BreitWigner),
148 ('offset Breit-Wigner', OffsetBreitWigner),
150 _config.IntegerSetting(
152 help='FFT chunk size (for PSD fits).',
154 _config.BooleanSetting(
156 help='Overlap FFT chunks (for PSD fits).'),
157 _config.ChoiceSetting(
159 help='FFT chunk window (for PSD fits).',
160 default=_window_hann,
162 ('Hann', _window_hann),
164 _config.FloatSetting(
165 name='minimum-fit-frequency',
166 help='Lower bound of Lorentzian fitting region.',
168 _config.FloatSetting(
169 name='maximum-fit-frequency',
170 help='Upper bound of Lorentzian fitting region.',
175 class CalibrationConfig (_config.Config):
176 "Configure a full `calibcant` calibration run"
178 _config.ConfigSetting(
180 help='Configure the surface bumps',
181 config_class=BumpConfig),
182 _config.IntegerSetting(
184 help='Number of surface bumps.',
186 _config.ConfigSetting(
188 help='Configure the temperature measurements',
189 config_class=TemperatureConfig),
190 _config.IntegerSetting(
191 name='num-temperatures',
192 help='Number of temperature measurements.',
194 _config.ConfigSetting(
196 help='Configure the temperature measurements',
197 config_class=VibrationConfig),
198 _config.IntegerSetting(
199 name='num-vibrations',
200 help='Number of thermal vibration measurements.',
202 _config.FloatSetting(
203 name='temperature-sleep',
204 help=('Time between temperature measurements (in seconds) to get '
205 'independent measurements when reading from slow sensors.'),
207 _config.FloatSetting(
208 name='vibration-spacing',
209 help=('Approximate distance from the surface in meters for the '
210 'vibration measurements. This should be large enough that '
211 'surface effects are negligable.'),