diff --git a/interface/__init__.py b/interface/__init__.py index 8f3efde..397be37 100644 --- a/interface/__init__.py +++ b/interface/__init__.py @@ -1,6 +1,11 @@ from .snap import getSnap from .snap import saveSnap +from .snap import loadSnap +from .snap import parseSnapShotReqYAML from .save import saveDataset +from .save import getDatasetFileName from .load import loadDataset from .elog import writeElog from .slic import SlicScan +from .doocs import doocsread +from .doocs import doocswrite diff --git a/interface/snap.py b/interface/snap.py index 714504b..5cc0063 100644 --- a/interface/snap.py +++ b/interface/snap.py @@ -57,15 +57,14 @@ def getSnap(pvs=None): ret={} val = epics.caget_many(pvs) for i,pv in enumerate(pvs): - if val[i]: # filter out None values + if not val[i] is None: # filter out None values ret[pv]=float(val[i]) -# epics.ca.clear_cache() return ret -def saveSnap(pvs={},label="", comment = "generated by application"): +def saveSnap(pvs={},label="", comment = "generated by application",reqfile = "SF_settings.yaml"): filename = datetime.datetime.now().strftime('/sf/data/applications/snapshot/SF_settings_%Y%m%d_%H%M%S.snap') with open(filename,'w') as fid: - fid.write('#{"labels":["%s"],"comment":"%s", "machine_parms":{}, "save_time": 0.0, "req_file_name": "SF_settings.yaml"}\n' % (label,comment)) + fid.write('#{"labels":["%s"],"comment":"%s", "machine_parms":{}, "save_time": 0.0, "req_file_name": "%s"}\n' % (label,comment,reqfile)) for key in pvs.keys(): if isinstance(pvs[key],int): fid.write('%s,{"val": %d}\n' % (key,pvs[key])) @@ -73,6 +72,21 @@ def saveSnap(pvs={},label="", comment = "generated by application"): fid.write('%s,{"val": %f}\n' % (key,pvs[key])) elif isinstance(pvs[key],str): fid.write('%s,{"val": %s}\n' % (key,pvs[key])) + return filename + +def loadSnap(filename): + res={} + with open(filename,'r') as fid: + lines=fid.readlines() + for line in lines[1:]: + split = line.split(',') + pv = split[0].strip() + val = split[1].split('"val":')[1].split('}')[0] + if '.' in val: + res[pv]=float(val) + else: + res[pv]= val + return res diff --git a/util/__init__.py b/util/__init__.py index 7d06df8..9c8a749 100644 --- a/util/__init__.py +++ b/util/__init__.py @@ -1,4 +1,5 @@ from .zmqbase import ZMQBase from .serverbase import ServerBase +from .simplecapture import SimpleCapture diff --git a/util/zmqbase.py b/util/zmqbase.py index 1e883d3..08a2b91 100644 --- a/util/zmqbase.py +++ b/util/zmqbase.py @@ -36,6 +36,9 @@ class ZMQBase: self.logger.info("Watchdog server came online") self.serverIsOffline=False if check: + if reply['action'] == 'quit': + client.close() + context.term() return (reply['action'] == 'quit') else: self.logger.warning("Malformed reply from server") @@ -49,6 +52,7 @@ class ZMQBase: if not self.serverIsOffline: self.logger.info("Watchdog server seems to be offline") self.serverIsOffline=True + context.term() return False # Create new connection