def setUp(self): source = EEGTableToPacketConverter() source.convert() self.collector = EEGDataCollector(source, FIELDS, WINDOW_SIZE) dataHandler = lambda x: x self.collector.setHandler(dataHandler) self.notifyCalled = 0
filtered = SignalUtil().butterBandpassFilter(raw, freqRange[0], freqRange[1], self.samplingRate) self.axAlpha.cla() self.axAlpha.doPlot(self.timeArray, filtered) def plotThetaChannel(self, raw): chanName = "theta" freqRange = EEGUtil().channel_ranges[chanName] filtered = SignalUtil().butterBandpassFilter(raw, freqRange[0], freqRange[1], self.samplingRate) self.axTheta.cla() self.axTheta.doPlot(self.timeArray, filtered) if __name__ == "__main__": try: print "STARTING STUFF" field = "F4" e = EEGSignalPlotter(field) emotiv = Emotiv(display_output=False) gevent.spawn(emotiv.setup) gevent.sleep(0) collector = EEGDataCollector(emotiv, fields=[field]) collector.setHandler(e.update) t = threading.Thread(target=collector.collectData) t.start() except KeyboardInterrupt: collector.close() t.join() print "ENDING STUFF"
class DataCollectorTest(unittest.TestCase): def setUp(self): source = EEGTableToPacketConverter() source.convert() self.collector = EEGDataCollector(source, FIELDS, WINDOW_SIZE) dataHandler = lambda x: x self.collector.setHandler(dataHandler) self.notifyCalled = 0 def notify(self, data): self.notifyCalled += 1 def _fillValues(self, count): data = self.collector.datasource.data fields = self.collector.fields for i in range(count): row = data[i].sensors fData = {x: row[x] for x in fields} self.collector._addData(fData) def _fillWindowFull(self): self._fillValues(WINDOW_SIZE) def getInitWindow(self): d = {} for key in FIELDS: d[key] = {"value": [], "quality": []} return d def test_windowsFilled(self): initWindow = self.getInitWindow() win1 = self.collector.windows[0] win2 = self.collector.windows[1] self.assertEquals(win1.index, WINDOW_SIZE / 2) self.assertEquals(win1.window, initWindow) self.assertEquals(win2.index, 0) self.assertEquals(win2.window, initWindow) self._fillValues(WINDOW_SIZE / 2) self.assertEquals(win1.window, initWindow) self.assertEquals(win1.index, 0) self.assertEquals(win2.index, WINDOW_SIZE / 2) self.assertEquals(win2.window["X"], {'quality': [0, 0], 'value': [24.0, 24.0]}) self._fillValues(WINDOW_SIZE / 2) self.assertEquals(win1.index, 2) self.assertEquals(win2.window, initWindow) def test_addData(self): win1, win2 = self.collector.windows win1.registerObserver(self) win2.registerObserver(self) self.assertEqual(self.notifyCalled, 0) # stop populating after 1 round collectorThread = threading.Thread(target=self.collector.collectData) collectorThread.start() sleep(0.1) self.collector.close() collectorThread.join() self.assertTrue(self.notifyCalled > 0) def test_filter(self): fields = ["F3", "X"] self.collector.fields = fields data = self.collector.datasource.data; filteredData = self.collector._filter(data[0].sensors) self.assertEqual(len(filteredData), len(fields)) self.assertTrue(set(filteredData.keys()).issubset(set(fields))) self.assertTrue(set(filteredData.keys()).issuperset(set(fields)))