diff --git a/acquisition/scan.py b/acquisition/scan.py index 604e9f1..9d95618 100755 --- a/acquisition/scan.py +++ b/acquisition/scan.py @@ -1,18 +1,40 @@ import pyscan +import os +import json class ScanSimple: - def __init__(self,adjustables,values,counterCallers,fina): + def __init__(self,adjustables,values,counterCallers,fina,basepath='',scan_info_dir=''): self.Nsteps = len(values) self.adjustables = adjustables self.values_todo = values - self.values_done = None + self.values_done = [] self.counterCallers = counterCallers self.fina = fina self.nextStep = 0 + self.basepath = basepath + self.scan_info_dir = scan_info_dir + self.scan_info = {'scan_parameters': + { + 'name':[ta.name for ta in adjustables ], + 'Id':[ta.Id for ta in adjustables] + }, + 'scan_values':[], + 'scan_files':[], + 'scan_step_info':[]} + self.scan_info_filename = os.path.join(self.scan_info_dir,fina) + self.scan_info_filename += '_scan_info.json' - def doNextStep(self): + def get_filename(self,stepNo,Ndigits=4): + fina = os.path.join(self.basepath,self.fina) + fina += '_setp%04d.h5'%stepNo + return fina + + def doNextStep(self,step_info=None): + if not len(self.values_todo)>0: + return False values_step = self.values_todo[0] ms = [] + fina = self.get_filename(self.nextStep) for adj,tv in zip(self.adjustables,values_step): ms.append(adj.changeTo(tv)) for tm in ms: @@ -20,5 +42,28 @@ class ScanSimple: for ctr in self.counterCallers: ms.append(ctr.acquire(file_name=fina)) for tm in ms: - tm.wait() + tm.wait() + self.values_done.append(self.values_todo.pop(0)) + self.appendScanInfo(values_step,fina,step_info=step_info) + self.writeScanInfo() + + self.nextStep +=1 + return True + + def appendScanInfo(self,values_step,step_files=None,step_info=None): + self.scan_info['scan_values'].append(values_step) + self.scan_info['scan_files'].append(step_files) + self.scan_info['scan_step_info'].append(step_info) + + def writeScanInfo(self): + with open(self.scan_info_filename,'w') as f: + json.dump(self.scan_info,f,indent=4,sort_keys=True) + + def scanAll(self): + done = False + while not done: + done = not self.doNextStep() + + + diff --git a/devices_general/motors.py b/devices_general/motors.py index 79395b1..3c6f0dd 100755 --- a/devices_general/motors.py +++ b/devices_general/motors.py @@ -17,8 +17,7 @@ class MotorRecord: self.Id = pvname self._motor = _Motor(pvname) self._elog = elog - if name: - self.name = name + self.name = name # Conventional methods and properties for all Adjustable objects @@ -155,12 +154,6 @@ class MotorRecord: - - - - - - class Changer: def __init__(self, target=None, parent=None, mover=None, hold=True, stopper=None): self.target = target