starting namespace more like assembly, continued on NDscan
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user