From 0cfaa624db73c46c69a169c9f6dce8068967a125 Mon Sep 17 00:00:00 2001 From: Stepan Bahnik Date: Mon, 28 Apr 2014 22:42:35 +0200 Subject: [PATCH] show tracks for ra and fixed some bugs --- Stuff/Modules/cm.py | 4 ++-- Stuff/Modules/graphs.py | 3 ++- Stuff/Modules/options.py | 5 ++++- Stuff/Modules/parameters.py | 6 +++++- Stuff/Modules/processor.py | 4 +--- Stuff/Modules/ra.py | 47 +++++++++++++++++++++++++++++++++++++++++++-- Stuff/Modules/showtracks.py | 12 ++++++------ Stuff/Modules/starter.py | 4 ++-- Stuff/Modules/version.py | 2 +- 9 files changed, 68 insertions(+), 19 deletions(-) diff --git a/Stuff/Modules/cm.py b/Stuff/Modules/cm.py index 55c50f0..aec233f 100644 --- a/Stuff/Modules/cm.py +++ b/Stuff/Modules/cm.py @@ -17,7 +17,7 @@ along with Carousel Maze Manager. If not, see . """ -from math import degrees, atan2, sin, cos, pi, radians, sqrt +from math import degrees, atan2, sin, cos, pi, radians, sqrt, ceil from collections import deque, OrderedDict import os @@ -505,7 +505,7 @@ def getAngleBoxes(self, time = 20, startTime = 0, width = "default", results = " else: sectorCenterAngle = center - angles = [0] * int(360 / width) + angles = [0] * ceil(360 / width) for content in self.data[start:]: if content[1] <= time: angle = (degrees(self._angle(*content[indices])) - sectorCenterAngle + diff --git a/Stuff/Modules/graphs.py b/Stuff/Modules/graphs.py index 5965e2c..f3ec754 100644 --- a/Stuff/Modules/graphs.py +++ b/Stuff/Modules/graphs.py @@ -453,7 +453,8 @@ def CM_loaded(self, cm, initTime = 0, minTime = 0, maxTime = "max"): self.compute(cm) y = self.height * (1 - self.radius/self.maxY) - self.create_line((0, y, self.width, y), fill = "grey") + color = "grey" if m.mode == "MWM" else "red" + self.create_line((0, y, self.width, y), fill = color) self.drawGraph(maxY = self.maxY, valueList = self.points) diff --git a/Stuff/Modules/options.py b/Stuff/Modules/options.py index 43bbb45..24fda88 100644 --- a/Stuff/Modules/options.py +++ b/Stuff/Modules/options.py @@ -363,7 +363,10 @@ def __init__(self, root, name, options): self.opts.append({}) var = BooleanVar if option[1][2] == 'bool' else StringVar self.opts[row]["variable"] = var() - self.opts[row]["variable"].set(optionGet(*option[1])) + current = optionGet(*option[1]) + if type(current) == str: + current = "'" + current + "'" + self.opts[row]["variable"].set(current) self.opts[row]["label"] = ttk.Label(self, text = option[0]) self.opts[row]["label"].grid(column = 0, row = row, pady = 2, sticky = E) if option[1][2] == 'bool': diff --git a/Stuff/Modules/parameters.py b/Stuff/Modules/parameters.py index ba59bc8..a219daf 100644 --- a/Stuff/Modules/parameters.py +++ b/Stuff/Modules/parameters.py @@ -240,8 +240,12 @@ def __init__(self): self["Robot filename"] = Par("getRoomName", "info", {}) + self["Mean distance from robot"] = Par("getDistanceFromRobot", "basic", {}) - + self["Time in distances"] = Par("getDistanceBoxes", "advanced", { + "width": (Opt('WidthParTimeInDistances', 10, ['int', 'float']), + "Width of brackets [in cm]") + }) diff --git a/Stuff/Modules/processor.py b/Stuff/Modules/processor.py index 3470567..d6c1a3e 100644 --- a/Stuff/Modules/processor.py +++ b/Stuff/Modules/processor.py @@ -72,8 +72,7 @@ def __init__(self, root): # labels self.statusBar = ttk.Label(self, textvariable = self.status) self.modeLab = ttk.Label(self, text = m.fullname[m.mode], font = ("Helvetica", "16")) - - + # adding to grid self.parametersF.grid(column = 0, row = 3, columnspan = 4, sticky = (N, W), padx = 4) self.fileStorageFrame.grid(column = 3, row = 0, pady = 5, padx = 4) @@ -93,7 +92,6 @@ def __init__(self, root): self.optionFrame.grid(column = 0, row = 5, sticky = (N, E), padx = 6) - # what should be enlarged self.columnconfigure(2, weight = 1) self.rowconfigure(2, weight = 3) diff --git a/Stuff/Modules/ra.py b/Stuff/Modules/ra.py index ef78010..b4a4203 100644 --- a/Stuff/Modules/ra.py +++ b/Stuff/Modules/ra.py @@ -17,8 +17,8 @@ along with Carousel Maze Manager. If not, see . """ -from collections import OrderedDict -from math import sqrt +from collections import OrderedDict, Counter +from math import sqrt, ceil import os @@ -166,9 +166,52 @@ def getSpeedAfterShock(self, time = 20, startTime = 0, after = 25): speeds.append(self._computeSpeed(self.data[shock], self.data[shock + after])) return format(median(speeds), "0.2f") + def getAngleBoxes(self, *args, indices = slice(7,9), **kwargs): return super().getAngleBoxes(*args, indices = indices, **kwargs) + def getDistanceFromRobot(self, time = 20, startTime = 0, distances = False): + time = time * 60000 + start = self.findStart(startTime) + + distances = [sqrt((line[2] - line[7])**2 + (line[3] - line[8])**2) for line + in self.data[start:] if line[1] < time] + + if not distances: + result = (sum(distances) / len(distances)) / self.trackerResolution + return format(result, "0.2f") + else: + return distances + + + def getDistanceBoxes(self, time = 20, startTime = 0, width = 10): + distances = self.getDistanceFromRobot(time = time, startTime = startTime) + maximum = self.arenaDiameter * 100 + counter = Counter([(dist / self.trackerResolution) // width for dist in distances]) + boxes = [0] * ceil(maximum / width) + for key, value in counter.items(): + boxes[int(key)] = value + length = len(distances) + result = ("|".join(map(lambda x: format(x / length, "0.3f"), boxes))) + + return result + + + + + + + + + + + + + + + + + diff --git a/Stuff/Modules/showtracks.py b/Stuff/Modules/showtracks.py index bb3c6f1..7e0d901 100644 --- a/Stuff/Modules/showtracks.py +++ b/Stuff/Modules/showtracks.py @@ -405,24 +405,24 @@ def __init__(self, root, files, controlled = False): # frame radiobuttons self.frameVar = StringVar() - if m.mode == "CM": + if m.files == "pair": self.frameVar.set("arena") else: self.frameVar.set("room") - if m.mode == "CM": + if m.files == "pair": self.frameFrame = ttk.Labelframe(self.bottomFrame, text = "Frame") self.frameFrame.grid(column = 2, row = 0, padx = 5, rowspan = 2, pady = 3, sticky = N) - self.arenaFrameRB = ttk.Radiobutton(self.frameFrame, text = "Arena", + self.arenaFrameRB = ttk.Radiobutton(self.frameFrame, text = m.pairing[m.mode][0], variable = self.frameVar, value = "arena", command = self.toggleFrame) - self.arenaFrameRB.grid(column = 0, row = 0, pady = 2) + self.arenaFrameRB.grid(column = 0, row = 0, pady = 2, sticky = W) - self.roomFrameRB = ttk.Radiobutton(self.frameFrame, text = "Room", + self.roomFrameRB = ttk.Radiobutton(self.frameFrame, text = m.pairing[m.mode][1], variable = self.frameVar, value = "room", command = self.toggleFrame) - self.roomFrameRB.grid(column = 0, row = 1, pady = 2) + self.roomFrameRB.grid(column = 0, row = 1, pady = 2, sticky = W) diff --git a/Stuff/Modules/starter.py b/Stuff/Modules/starter.py index bd5b33c..e89f2d6 100644 --- a/Stuff/Modules/starter.py +++ b/Stuff/Modules/starter.py @@ -51,11 +51,11 @@ def __init__(self): self.after(250, lambda: print(self.winfo_width())) self.after(250, lambda: print(self.winfo_height())) ''' - x, y = 1010, 788 + x, y = 1010, 813 self.minsize(x, y) placeWindow(self, x, y) - self.selectFunction = ttk.Notebook(self) + self.selectFunction = ttk.Notebook(self, height = y, width = x) self.selectFunction.grid() self["menu"] = MenuCM(self) diff --git a/Stuff/Modules/version.py b/Stuff/Modules/version.py index 5209028..2ab3047 100644 --- a/Stuff/Modules/version.py +++ b/Stuff/Modules/version.py @@ -21,7 +21,7 @@ def version(): return ['0', '4', '0'] def date(): - return "27 April 2014" + return "28 April 2014" def copyleft(): return "2013, 2014"