diff --git a/kabuki/actor.py b/kabuki/actor.py index 70cf86a..c082318 100644 --- a/kabuki/actor.py +++ b/kabuki/actor.py @@ -10,41 +10,41 @@ def get_src(pvname, cls): src = src_cache[pvname] assert isinstance(src, cls) except KeyError: - src = cls(pvname) - src_cache[pvname] = src + src = src_cache[pvname] = cls(pvname) return src def decide_src_plt(pvname): - pvname = pvname.upper() + Src = decide_src_type(pvname) + src = get_src(pvname, Src) + if not src.is_connected: + raise RuntimeError(f"{pvname} is not connected") - if pvname.endswith(":FPICTURE"): - print("Camera", pvname) - src = get_src(pvname, Camera) - plt = Plot2D - if not src.is_connected: - raise RuntimeError(f"{pvname} is not connected") + Plt = decide_plt_type(src) + plt = Plt(name=pvname) - else: - print("Source", pvname) - src = get_src(pvname, Source) - if not src.is_connected: - raise RuntimeError(f"{pvname} is not connected") - print(src.nelm) - if src.nelm == 0: - raise RuntimeError(f"{src}: {src.value}") - - if src.nelm == 1: - print("Scalar") - plt = Plot0D - else: - print("Curve") - plt = Plot1D - - plt = plt(name=pvname) return src, plt +def decide_src_type(pvname): + if pvname.endswith(":FPICTURE"): + return Camera + return Source + + +def decide_plt_type(src): + if isinstance(src, Camera): + return Plot2D + + nelm = src.nelm + if nelm == 1: + return Plot0D + elif nelm > 1: + return Plot1D + + raise RuntimeError(f"Cannot decide plot type for {src}: {src.value}") + + class Actor: