Convert to load_from_config() handling
[unfold-protein.git] / unfold_protein / unfolder.py
index cc5977ea1ddc64318e4f0ba03a31d31f5b054387..cdec01a44f9d217fb1c36692c50978148516f310 100755 (executable)
@@ -23,10 +23,11 @@ import email.utils as _email_utils
 import os.path as _os_path
 import time as _time
 
-import h5py as _h5py
-import pypiezo.base as _pypiezo_base
 from h5config.storage.hdf5 import HDF5_Storage as _HDF5_Storage
 from h5config.storage.hdf5 import h5_create_group as _h5_create_group
+import h5py as _h5py
+import pyafm.afm as _pyafm_afm
+import pypiezo.base as _pypiezo_base
 
 from . import LOG as _LOG
 from . import package_config as _package_config
@@ -56,10 +57,24 @@ class ExceptionTooFar (Exception):
 
 
 class Unfolder (object):
-    def __init__(self, config, afm):
+    def __init__(self, config=None, afm=None):
         self.config = config
         self.afm = afm
-        self.zero_piezo()
+        if self.afm:
+            self.zero_piezo()
+
+    def load_from_config(self, devices):
+        c = self.config  # reduce verbosity
+        if self.afm is None and c['afm']:
+            self.afm = _pyafm_afm.AFM(config=c['afm'])
+            self.afm.load_from_config(devices=devices)
+
+    def setup_config(self):
+        if self.afm:
+            self.afm.setup_config()
+            self.config['afm'] = self.afm.config
+        else:
+            self.config['afm'] = None
 
     def run(self):
         """Approach-bind-unfold-save[-plot] cycle.
@@ -217,8 +232,6 @@ class Unfolder (object):
             storage = _HDF5_Storage()
             config_cwg = _h5_create_group(f, 'config')
             storage.save(config=self.config, group=config_cwg)
-            afm_piezo_cwg = _h5_create_group(config_cwg, 'afm/piezo')
-            storage.save(config=self.afm.piezo.config, group=afm_piezo_cwg)
             f['/environment/timestamp'] = timestamp
             x_axis_name = 'x'
             f['/environment/{}-position/data'.format(x_axis_name)