Convert calibcant to the new, nestable h5config.
[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 package_config as _package_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     `package_config['temperature']`.
16     """
17     if get_T:
18         _LOG.info('measure temperature')
19         T = get_T()
20     else:
21         T = None
22     if T is None:
23         _LOG.info('fake temperature %g' % _package_config['temperature'])
24         T = _package_config['temperature']
25     return T
26
27 def T(get_T, temperature_config, filename, group='/'):
28     """Wrapper around T_acquire(), T_analyze(), T_save().
29
30     >>> import os
31     >>> import tempfile
32     >>> from h5config.storage.hdf5 import HDF5_Storage, pprint_HDF5
33     >>> from .config import TemperatureConfig
34
35     >>> fd,filename = tempfile.mkstemp(suffix='.h5', prefix='calibcant-')
36     >>> os.close(fd)
37
38     >>> temperature_config = TemperatureConfig(storage=HDF5_Storage(
39     ...         filename=filename, group='/T/config/'))
40     >>> def get_T():
41     ...     return 19.2
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 "|b1">
49             False
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 "|b1">
63             True
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     _LOG.debug('got T: %s' % T_raw)
77     T_ret = _T_analyze(T_raw, temperature_config)
78     temperature_config['default'] = not get_T
79     _T_save(filename, group=group, raw_T=T_raw,
80             temperature_config=temperature_config, processed_T=T_ret)
81     return T_ret