Massive rewrite (v 0.6) to base everything on Cython and revamped pypiezo.
[calibcant.git] / calibcant / T.py
1 # T family.
2 # Fairly stubby, since a one shot Temp measurement is a common thing.
3 # We just wrap that to provide a consistent interface.
4
5 from . import LOG as _LOG
6 from . import base_config as _base_config
7 from .T_analyze import T_analyze as _T_analyze
8 from .T_analyze import T_save as _T_save
9
10
11 def T_acquire(get_T=None):
12     """Measure the current temperature of the sample, 
13
14     If `get_T` is `None`, fake it by returning
15     `base_config['temperature']`.
16     """
17     if get_T:
18         _LOG.info('measure temperature')
19         T = get_T()
20     else:
21         T = None
22     if not T:
23         _LOG.info('fake temperature %g' % _base_config['temperature'])
24         return _base_config['temperature']
25
26 def T(get_T, temperature_config, filename, group='/'):
27     """Wrapper around T_acquire(), T_analyze(), T_save().
28
29     >>> import os
30     >>> import tempfile
31     >>> from pypiezo.config import pprint_HDF5
32     >>> from .config import HDF5_TemperatureConfig
33
34     >>> fd,filename = tempfile.mkstemp(suffix='.h5', prefix='calibcant-')
35     >>> os.close(fd)
36
37     >>> temperature_config = HDF5_TemperatureConfig(
38     ...     filename=filename, group='/T/config/')
39     >>> def get_T():
40     ...     return 19.2
41
42     >>> t = T(get_T=get_T, temperature_config=temperature_config,
43     ...     filename=filename, group='/T/')
44     >>> pprint_HDF5(filename)  # doctest: +ELLIPSIS, +REPORT_UDIFF
45     /
46       /T
47         /T/config
48           <HDF5 dataset "default": shape (), type "|S2">
49             no
50           <HDF5 dataset "units": shape (), type "|S7">
51             Celsius
52         <HDF5 dataset "processed": shape (), type "<f8">
53           292.35
54         <HDF5 dataset "raw": shape (), type "<f8">
55           19.2
56     >>> t = T(get_T=None, temperature_config=temperature_config,
57     ...     filename=filename, group='/T/')
58     >>> pprint_HDF5(filename)  # doctest: +ELLIPSIS, +REPORT_UDIFF
59     /
60       /T
61         /T/config
62           <HDF5 dataset "default": shape (), type "|S3">
63             yes
64           <HDF5 dataset "units": shape (), type "|S7">
65             Celsius
66         <HDF5 dataset "processed": shape (), type "<f8">
67           295.15
68         <HDF5 dataset "raw": shape (), type "<i4">
69           22
70
71     Cleanup our temporary config file.
72
73     >>> os.remove(filename)
74     """
75     T_raw = T_acquire(get_T)
76     T_ret = _T_analyze(T_raw, temperature_config)
77     temperature_config['default'] = not get_T
78     _T_save(filename, group=group, raw_T=T_raw,
79             temperature_config=temperature_config, processed_T=T_ret)
80     return T_ret