summaryrefslogtreecommitdiff
path: root/ui/code_templates.py
diff options
context:
space:
mode:
authorChristian Kolset <christian.kolset@gmail.com>2026-06-09 23:18:43 -0600
committerChristian Kolset <christian.kolset@gmail.com>2026-06-09 23:18:43 -0600
commit91b0b613f0b58498315ef91f6a541dd1089b88de (patch)
tree65b378d6ad2706ac1e29a7e7888c78770d4c945a /ui/code_templates.py
parentd396692de571445537e617ac31627d7bd7ab84aa (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.py41
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
""",