starting namespace more like assembly, continued on NDscan

This commit is contained in:
2021-04-23 17:50:27 +02:00
parent b00619e9e1
commit b5cabd7533
6 changed files with 60 additions and 18 deletions
+30 -4
View File
@@ -1,4 +1,6 @@
from .scan import Scan
import numpy as np
from numpy.random import RandomState
# class Scan:
@@ -30,17 +32,18 @@ class ScanND:
fina,
Npulses=100,
basepath="",
Npulses=100,
basepath="",
scan_info_dir="",
checker=None,
scan_directories=False,
callbackStartStep=None,
cb_start_scan=None,
cb_start_step=None,
cb_end_step=None,
cb_end_scan=None,
checker_sleep_time=0.2,
return_at_end="question",
run_table=None,
elog=None,
):
):
scan_array = []
scan_adjustables = []
for n_dim, (adj_tdim, arr_tdim) in enumerate(zip(adjustables, arrays)):
@@ -60,3 +63,26 @@ class ScanND:
except TypeError:
scan_array.append(tuple([arr_tdim]))
scan_adjustables.append(tuple([adj_tdim]))
self.scan_adjustables = scan_adjustables
self.scan_array = scan_array
self.scan_dimension = n_dim + 1
@property
def steps_total(self):
return np.prod([len(ta[0]) for ta in self.scan_array])
@property
def shape(self):
return tuple([len(ta[0]) for ta in self.scan_array])
def create_stepping_order(self,order='C'):
return [tuple(te) for te in np.vstack(np.unravel_index(np.arange(self.steps_total),self.shape,order=order)).T]
def create_random_selection(self,N_elements=None,scan_percentage=None,random_type=equal,sort_dimensions=False):
rs = RandomState(seed=0)
rs.choice(a,5,p=np.exp(-a)/sum(np.exp(-a)),replace=False)
+1 -1
View File
@@ -358,7 +358,7 @@ class PvRecord:
self.pvname = self.Id
else:
self._pvreadback = PV(pvreadbackname)
self.pvname = self.pvreadbackname
self.pvname = pvreadbackname
self.alias = Alias(name, channel=pvreadbackname, channeltype="CA")
def get_current_value(self, readback=True):
+2
View File
@@ -156,6 +156,8 @@ class SmaractStreamdevice(Assembly):
name="sensor_type",
is_setting=True,
)
self._append(PvRecord, self.pvname + ":GET_SENSOR_TYPE", name="sensor_type_getter_number", is_setting=False)
self._append(PvRecord, self.pvname + ":SET_SENSOR_TYPE", name="sensor_type_setter_number", is_setting=False)
self._append(PvRecord, self.pvname + ":LLM", name="limit_low", is_setting=False)
self._append(
PvRecord, self.pvname + ":HLM", name="limit_high", is_setting=False
+6 -2
View File
@@ -66,9 +66,13 @@ class Assembly:
is_status=True,
is_alias=True,
view_toplevel_only=True,
call_obj=True,
**kwargs,
):
self.__dict__[name] = foo_obj_init(*args, **kwargs, name=name)
):
if call_obj and callable(foo_obj_init):
self.__dict__[name] = foo_obj_init(*args, **kwargs, name=name)
else:
self.__dict__[name] = foo_obj_init
self.alias.append(self.__dict__[name].alias)
# except:
# print(f'object {name} / {foo_obj_init} not initialized with name/parent')
+8 -2
View File
@@ -7,6 +7,7 @@ from functools import partial
# from .lazy_proxy import Proxy
from ..aliases import Alias
from ..elements.assembly import Assembly
import getpass
import colorama
import socket
@@ -254,9 +255,10 @@ class Terminal:
print(colorama.ansi.set_title("♻️ " + self.get_string() + extension))
class Namespace(object):
class Namespace(Assembly):
def __init__(self, name=None, root_module=None, alias_namespace=None):
self.name = name
super().__init__(name)
# self.name = name
self.lazy_items = {}
self.initialized_items = {}
self.root_module = root_module
@@ -350,6 +352,8 @@ class Namespace(object):
obj_initialized = obj_maker(*args, **kwargs)
self.initialized_items[name] = self.lazy_items.pop(name)
if hasattr(obj_initialized, "alias"):
self._append(obj_initialized,name=name,is_setting=True,is_status='recursive',call_obj=False)
if self.alias_namespace and hasattr(obj_initialized, "alias"):
for ta in obj_initialized.alias.get_all():
try:
@@ -382,6 +386,8 @@ class Namespace(object):
self.initialized_items[name] = obj
if self.root_module:
sys.modules[self.root_module].__dict__[name] = obj
if hasattr(obj, "alias"):
self._append(obj,name=name,is_setting=True,is_status='recursive',call_obj=False)
if self.alias_namespace and hasattr(obj, "alias"):
for ta in obj.alias.get_all():
try:
+13 -9
View File
@@ -1,22 +1,26 @@
from epics import PV
from ..aliases import Alias
from ..elements.assembly import Assembly
from ..devices_general.adjustable import PvEnum
class PhotonShutter:
class PhotonShutter(Assembly):
def __init__(self, pvname, name=None):
self.name = name
self.pv = PV(pvname)
if name:
self.alias = Alias(name, channel=pvname, channeltype="CA")
super().__init__(name=name)
self._append(PvEnum,pvname,name='request')
def open(self):
self.pv.put(1)
self.request(1)
def close(self):
self.pv.put(0)
self.request(0)
def __call__(self,*args):
if args:
self.request.set_target_value(args[0])
else:
return self.request.get_current_value()
def get_state(self):
return self.pv.get()
class SafetyShutter: