diff options
| author | Christian Kolset <christian.kolset@gmail.com> | 2026-06-09 23:18:43 -0600 |
|---|---|---|
| committer | Christian Kolset <christian.kolset@gmail.com> | 2026-06-09 23:18:43 -0600 |
| commit | 91b0b613f0b58498315ef91f6a541dd1089b88de (patch) | |
| tree | 65b378d6ad2706ac1e29a7e7888c78770d4c945a /ui/code_templates.py | |
| parent | d396692de571445537e617ac31627d7bd7ab84aa (diff) | |
Derived channels: signal display names as vars, auto-update template code, None op
- Variable names derived from signal display name (e.g. "Acceleration X" → acceleration_x)
instead of raw channel ID; all auto-names lowercase with underscores
- Template code auto-updates x[0]/x[1] refs to named vars as sources are added/changed;
stops updating once user edits the code manually
- Derivative wrt-channel mode uses separate template with x[1] substituted to channel var
- Added "None" passthrough operation (result = x[0])
- source_names persisted in .labdaq profiles
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'ui/code_templates.py')
| -rw-r--r-- | ui/code_templates.py | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/ui/code_templates.py b/ui/code_templates.py index 32332e9..ffa1662 100644 --- a/ui/code_templates.py +++ b/ui/code_templates.py @@ -23,8 +23,11 @@ Namespace available in all kinds: BUILTIN_TEMPLATES: dict = { + "none": """\ +result = x[0] +""", + "derivative": """\ -# dy/dt — backward finite difference prev_v = state.get("v", x[0]) prev_t = state.get("t", t) state["v"] = x[0] @@ -32,8 +35,15 @@ state["t"] = t result = (x[0] - prev_v) / (t - prev_t) if t != prev_t else 0.0 """, + "derivative_channel": """\ +prev_v = state.get("v", x[0]) +prev_x = state.get("x", x[1]) +state["v"] = x[0] +state["x"] = x[1] +result = (x[0] - prev_v) / (x[1] - prev_x) if x[1] != prev_x else 0.0 +""", + "second_derivative": """\ -# d²y/dt² — two-pass finite difference prev_v = state.get("v", x[0]) prev_t = state.get("t", t) prev_vel = state.get("vel", 0.0) @@ -46,31 +56,38 @@ state["t"] = t state["vel"] = cur_vel """, + "second_derivative_channel": """\ +prev_v = state.get("v", x[0]) +prev_x = state.get("x", x[1]) +prev_vel = state.get("vel", 0.0) + +cur_vel = (x[0] - prev_v) / (x[1] - prev_x) if x[1] != prev_x else 0.0 +result = (cur_vel - prev_vel) / (x[1] - prev_x) if x[1] != prev_x else 0.0 + +state["v"] = x[0] +state["x"] = x[1] +state["vel"] = cur_vel +""", + "rms": """\ -# Rolling RMS over a sliding window import math as _math buf = state.setdefault("buf", []) buf.append(x[0]) -window = 20 # adjust window size (samples) here +window = 20 if len(buf) > window: buf.pop(0) result = _math.sqrt(sum(v * v for v in buf) / len(buf)) """, "power": """\ -# Electrical power P = V × I -# source 0 = voltage, source 1 = current result = x[0] * x[1] """, "difference": """\ -# Difference A − B -# source 0 = A, source 1 = B result = x[0] - x[1] """, "sum": """\ -# Sum of all sources result = sum(x) """, } @@ -82,17 +99,11 @@ SCRIPT_TEMPLATES: dict = { "expression": "x[0]", "function": """\ -# Function body — use 'return' to output the value. -# Named source vars, t, math, vars, state all available. offset = vars.get("offset", 0) return x[0] - offset """, "custom_script": """\ -# Assign computed value to 'result'. -# Named source vars, t, math, vars, state all available. - -# Example: running zero-offset zero = vars.get("zero", 0) result = x[0] - zero """, |
