aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/motan/analyzers.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2021-08-24 13:40:47 -0400
committerKevin O'Connor <kevin@koconnor.net>2021-08-30 12:12:01 -0400
commit1e4041a96badaf29533879a2c353981da60cbc67 (patch)
treed4533d8a2bb5f5e69a58f069d064f548d86e4b37 /scripts/motan/analyzers.py
parent5fd1c9853d243cccdb53c75cae0a1a48b882368d (diff)
downloadkutter-1e4041a96badaf29533879a2c353981da60cbc67.tar.gz
kutter-1e4041a96badaf29533879a2c353981da60cbc67.tar.xz
kutter-1e4041a96badaf29533879a2c353981da60cbc67.zip
motan: Pass dataset parameters in parenthesis
Replace names like "trapq:toolhead:x" with "trapq(toolhead,x)". Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'scripts/motan/analyzers.py')
-rw-r--r--scripts/motan/analyzers.py57
1 files changed, 29 insertions, 28 deletions
diff --git a/scripts/motan/analyzers.py b/scripts/motan/analyzers.py
index 9e3f3b57..bdb70011 100644
--- a/scripts/motan/analyzers.py
+++ b/scripts/motan/analyzers.py
@@ -4,6 +4,7 @@
#
# This file may be distributed under the terms of the GNU GPLv3 license.
import collections
+import readlog
######################################################################
@@ -15,12 +16,13 @@ AHandlers = {}
# Calculate a derivative (position to velocity, or velocity to accel)
class GenDerivative:
+ ParametersMin = ParametersMax = 1
DataSets = [
- ('derivative:<dataset>', 'Derivative of the given dataset'),
+ ('derivative(<dataset>)', 'Derivative of the given dataset'),
]
- def __init__(self, amanager, params):
+ def __init__(self, amanager, name_parts):
self.amanager = amanager
- self.source = params
+ self.source = name_parts[1]
amanager.setup_dataset(self.source)
def get_label(self):
label = self.amanager.get_label(self.source)
@@ -46,28 +48,30 @@ AHandlers["derivative"] = GenDerivative
# Calculate a kinematic stepper position from the toolhead requested position
class GenKinematicPosition:
+ ParametersMin = ParametersMax = 1
DataSets = [
- ('kin:<stepper>', 'Stepper position derived from toolhead kinematics'),
+ ('kin(<stepper>)', 'Stepper position derived from toolhead kinematics'),
]
- def __init__(self, amanager, params):
+ def __init__(self, amanager, name_parts):
self.amanager = amanager
+ stepper = name_parts[1]
status = self.amanager.get_initial_status()
kin = status['configfile']['settings']['printer']['kinematics']
if kin not in ['cartesian', 'corexy']:
raise amanager.error("Unsupported kinematics '%s'" % (kin,))
- if params not in ['stepper_x', 'stepper_y', 'stepper_z']:
- raise amanager.error("Unknown stepper '%s'" % (params,))
- if kin == 'corexy' and params in ['stepper_x', 'stepper_y']:
- self.source1 = 'trapq:toolhead:x'
- self.source2 = 'trapq:toolhead:y'
- if params == 'stepper_x':
+ if stepper not in ['stepper_x', 'stepper_y', 'stepper_z']:
+ raise amanager.error("Unknown stepper '%s'" % (stepper,))
+ if kin == 'corexy' and stepper in ['stepper_x', 'stepper_y']:
+ self.source1 = 'trapq(toolhead,x)'
+ self.source2 = 'trapq(toolhead,y)'
+ if stepper == 'stepper_x':
self.generate_data = self.generate_data_corexy_plus
else:
self.generate_data = self.generate_data_corexy_minus
amanager.setup_dataset(self.source1)
amanager.setup_dataset(self.source2)
else:
- self.source1 = 'trapq:toolhead:' + params[-1:]
+ self.source1 = 'trapq(toolhead,%s)' % (stepper[-1:],)
self.source2 = None
self.generate_data = self.generate_data_passthrough
amanager.setup_dataset(self.source1)
@@ -89,15 +93,13 @@ AHandlers["kin"] = GenKinematicPosition
# Calculate a position deviation
class GenDeviation:
+ ParametersMin = ParametersMax = 2
DataSets = [
- ('deviation:<dataset1>-<dataset2>', 'Difference between datasets'),
+ ('deviation(<dataset1>,<dataset2>)', 'Difference between datasets'),
]
- def __init__(self, amanager, params):
+ def __init__(self, amanager, name_parts):
self.amanager = amanager
- parts = params.split('-')
- if len(parts) != 2:
- raise amanager.error("Invalid deviation '%s'" % (params,))
- self.source1, self.source2 = parts
+ self.source1, self.source2 = name_parts[1:]
amanager.setup_dataset(self.source1)
amanager.setup_dataset(self.source2)
def get_label(self):
@@ -117,20 +119,16 @@ AHandlers["deviation"] = GenDeviation
######################################################################
-# List datasets
+# Analyzer management and data generation
######################################################################
+# Return a description of available analyzers
def list_datasets():
datasets = []
for ah in sorted(AHandlers.keys()):
datasets += AHandlers[ah].DataSets
return datasets
-
-######################################################################
-# Data generation
-######################################################################
-
# Manage raw and generated data samples
class AnalyzerManager:
error = None
@@ -159,15 +157,18 @@ class AnalyzerManager:
return self.raw_datasets[name]
if name in self.gen_datasets:
return self.gen_datasets[name]
- nparts = name.split(':')
- if nparts[0] in self.lmanager.available_dataset_types():
+ name_parts = readlog.name_split(name)
+ if name_parts[0] in self.lmanager.available_dataset_types():
hdl = self.lmanager.setup_dataset(name)
self.raw_datasets[name] = hdl
else:
- cls = AHandlers.get(nparts[0])
+ cls = AHandlers.get(name_parts[0])
if cls is None:
raise self.error("Unknown dataset '%s'" % (name,))
- hdl = cls(self, ':'.join(nparts[1:]))
+ num_param = len(name_parts) - 1
+ if num_param < cls.ParametersMin or num_param > cls.ParametersMax:
+ raise self.error("Invalid parameters to dataset '%s'" % (name,))
+ hdl = cls(self, name_parts)
self.gen_datasets[name] = hdl
self.datasets[name] = []
return hdl