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>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user