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"
82 help=('Maximum deflection in volts in case of stepper positioning '
83 'to achieve the initial position.'),
85 _config.IntegerSetting(
87 help=('Number of stepper steps to move "far" away from the '
88 'surface. For possible stepper adjustments while initially '
89 'locating the surface.'),
93 help='Distance to approach in meters.',
97 help='Approach/retract speed in meters/second.',
101 help='Number of samples during approach and during retreat.',
103 _config.ChoiceSetting(
105 help='Bump deflection model.',
109 ('quadratic', Quadratic),
113 class BumpResult (_config.Config):
114 "The result of a `calibcant` bump operation"
117 class _VibrationModel (object):
119 class Variance (_VibrationModel):
121 class BreitWigner (_VibrationModel):
123 class OffsetBreitWigner (_VibrationModel):
126 class VibrationConfig (_config.Config):
127 "Configure `calibcant` vibration operation"
129 _config.FloatSetting(
131 help='Sampling frequency in Hz.',
133 _config.FloatSetting(
135 help=('Aquisition time in seconds. This is rounded up as required '
136 'so the number of samples will be an integer power of two.'),
138 _config.ChoiceSetting(
140 help='Vibration model.',
143 ('variance', Variance),
144 ('Breit-Wigner', BreitWigner),
145 ('offset Breit-Wigner', OffsetBreitWigner),
147 _config.IntegerSetting(
149 help='FFT chunk size (for PSD fits).',
151 _config.BooleanSetting(
153 help='Overlap FFT chunks (for PSD fits).'),
154 _config.ChoiceSetting(
156 help='FFT chunk window (for PSD fits).',
157 default=_window_hann,
159 ('Hann', _window_hann),
161 _config.FloatSetting(
162 name='minimum-fit-frequency',
163 help='Lower bound of Lorentzian fitting region.',
165 _config.FloatSetting(
166 name='maximum-fit-frequency',
167 help='Upper bound of Lorentzian fitting region.',
172 class CalibrationConfig (_config.Config):
173 "Configure a full `calibcant` calibration run"
175 _config.ConfigSetting(
177 help='Configure the surface bumps',
178 config_class=BumpConfig),
179 _config.IntegerSetting(
181 help='Number of surface bumps.',
183 _config.ConfigSetting(
185 help='Configure the temperature measurements',
186 config_class=TemperatureConfig),
187 _config.IntegerSetting(
188 name='num-temperatures',
189 help='Number of temperature measurements.',
191 _config.ConfigSetting(
193 help='Configure the temperature measurements',
194 config_class=VibrationConfig),
195 _config.IntegerSetting(
196 name='num-vibrations',
197 help='Number of thermal vibration measurements.',
199 _config.FloatSetting(
200 name='temperature-sleep',
201 help=('Time between temperature measurements (in seconds) to get '
202 'independent measurements when reading from slow sensors.'),
204 _config.FloatSetting(
205 name='vibration-spacing',
206 help=('Approximate distance from the surface in meters for the '
207 'vibration measurements. This should be large enough that '
208 'surface effects are negligable.'),