Commit 8ffbc4ad423462be75c94c4cb854d4db68b03f5d

Authored by Christopher Stone
1 parent e9ac5444
Exists in master

Split class series into separate module, as part of attempt to declutter main

robots/little_john/telemetry/code/monitor/version1/main.py
@@ -21,6 +21,7 @@ import logging @@ -21,6 +21,7 @@ import logging
21 21
22 from serialselect import selectserial 22 from serialselect import selectserial
23 from colours import * 23 from colours import *
  24 +from series import Series
24 25
25 logging.basicConfig(format='%(levelname)s:\t%(message)s', level=logging.DEBUG) 26 logging.basicConfig(format='%(levelname)s:\t%(message)s', level=logging.DEBUG)
26 logging.info("Logging system active") 27 logging.info("Logging system active")
@@ -38,47 +39,6 @@ else: @@ -38,47 +39,6 @@ else:
38 os='Other' 39 os='Other'
39 logging.info('OS = ' + os) 40 logging.info('OS = ' + os)
40 41
41 -class Series:  
42 - def __init__(self, points=300, title="Series title", xname="x-axis name", yname="y-axis name"):  
43 - """Set up an object to store a 2D data series"""  
44 - # Proposal:  
45 - # In order to neatly handle multiple lines on the same graph  
46 - # a series is not so much a set of 2D data points, but a number  
47 - # of series sharing an x axis. For example  
48 - # (time, temperature)  
49 - # (time, xaccel, yaccel, zaccel)  
50 - # The latter seta of points much be of like nature and share an axis  
51 - # (time, temperature, xaccel)  
52 - # would be a meaningless thing to plot on a single graph anyway  
53 -  
54 - self.title = title  
55 - self.xname = xname  
56 - self.yname = yname  
57 - self.xlimits = (0, 100)  
58 - self.ylimits = (-100, 100)  
59 - self.data = []  
60 - self.points = points  
61 -  
62 - def addpoint(self, point):  
63 - """Add a point to the dataset, and remove the oldest, if necessary"""  
64 - self.data.append(point)  
65 - if len(self.data) > self.points:  
66 - del self.data[0]  
67 - self.autoscale(0)  
68 -  
69 - def autoscale(self, axis): # axis=0 is x, 1 is y  
70 - minval = self.data[0][axis]  
71 - maxval = self.data[0][axis]  
72 - for value in self.data:  
73 - if value[axis] < minval:  
74 - minval = value[axis]  
75 - if value[axis] > maxval:  
76 - maxval = value[axis]  
77 - if axis == 0:  
78 - self.xlimits = (minval, maxval)  
79 - else:  
80 - self.ylimits = (minval, maxval)  
81 -  
82 class Plot(pyglet.window.Window): 42 class Plot(pyglet.window.Window):
83 def __init__(self, series): 43 def __init__(self, series):
84 """Setup a the details of a plot, and create a corresponding window""" 44 """Setup a the details of a plot, and create a corresponding window"""
robots/little_john/telemetry/code/monitor/version1/series.py 0 → 100644
@@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
  1 +# Class to store data for a live graph
  2 +# Written as a telemetry tool by:
  3 +# The UoN Robot Wars Project, 2018
  4 +
  5 +
  6 +class Series:
  7 + def __init__(self, points=300, title="Series title", xname="x-axis name", yname="y-axis name"):
  8 + """Set up an object to store a 2D data series"""
  9 + # Proposal:
  10 + # In order to neatly handle multiple lines on the same graph
  11 + # a series is not so much a set of 2D data points, but a number
  12 + # of series sharing an x axis. For example
  13 + # (time, temperature)
  14 + # (time, xaccel, yaccel, zaccel)
  15 + # The latter seta of points much be of like nature and share an axis
  16 + # (time, temperature, xaccel)
  17 + # would be a meaningless thing to plot on a single graph anyway
  18 +
  19 + self.title = title
  20 + self.xname = xname
  21 + self.yname = yname
  22 + self.xlimits = (0, 100)
  23 + self.ylimits = (-100, 100)
  24 + self.data = []
  25 + self.points = points
  26 +
  27 + def addpoint(self, point):
  28 + """Add a point to the dataset, and remove the oldest, if necessary"""
  29 + self.data.append(point)
  30 + if len(self.data) > self.points:
  31 + del self.data[0]
  32 + self.autoscale(0)
  33 +
  34 + def autoscale(self, axis): # axis=0 is x, 1 is y
  35 + minval = self.data[0][axis]
  36 + maxval = self.data[0][axis]
  37 + for value in self.data:
  38 + if value[axis] < minval:
  39 + minval = value[axis]
  40 + if value[axis] > maxval:
  41 + maxval = value[axis]
  42 + if axis == 0:
  43 + self.xlimits = (minval, maxval)
  44 + else:
  45 + self.ylimits = (minval, maxval)