def _buildDataStructure(self): # pragma: no cover if self.windowSeconds is None: self.windowSize = self.len else: self.windowSize = EEGDataCollector.calcWindowSize( self.windowSeconds, self.samplingRate) windowRatio = EEGDataCollector.calcWindowRatio(self.windowSize, self.windowCount) for start in range(0, len(self.rawData), windowRatio): end = start + self.windowSize if end <= len(self.rawData): self.data.append(self._buildWindow(start, end))
def test_windowsFilled(self): emptyDto = self.getEmptyDto() windowSize = EEGDataCollector.calcWindowSize(WINDOW_SECONDS, SAMPLING_RATE) win1 = self.collector.windows[0] win2 = self.collector.windows[1] self.assertEquals(win1.index, 0) self.assertEquals(win1.dto, emptyDto) self.assertEquals(win2.index, windowSize / 2) self.assertEquals(win2.dto, emptyDto) self._fillValues(windowSize / 2) self.assertEquals(win1.index, windowSize / 2) self.assertEquals(win1.dto.getData()["X"], { 'quality': [0, 0], 'value': [24.0, 24.0] }) self.assertEquals(win2.dto, emptyDto) self.assertEquals(win2.index, 0) self._fillValues(windowSize / 2) self.assertEquals(win1.dto, emptyDto) self.assertEquals(win2.index, 2)
def createEmotivDataCollector(collectedQueue): collectorConfig = ConfigProvider().getCollectorConfig() fields = collectorConfig.get("eegFields") + collectorConfig.get( "gyroFields") windowSize = collectorConfig.get("windowSeconds") windowCount = collectorConfig.get("windowCount") return EEGDataCollector(EmotivConnector(), collectedQueue, fields, windowSize, windowCount)
def createDemoEEGDataCollector(demoFile, collectedQueue): collectorConfig = ConfigProvider().getCollectorConfig() fields = collectorConfig.get("eegFields") + collectorConfig.get( "gyroFields") windowSeconds = collectorConfig.get("windowSeconds") windowCount = collectorConfig.get("windowCount") datasource = Factory.createDummyPacketSource(demoFile) return EEGDataCollector(datasource, collectedQueue, fields, windowSeconds, windowCount, 128)
def createTestDataCollector(collectedQueue, fields, windowSeconds, samplingRate, windowCount, filePath=None): datasource = TestFactory.createDummyPacketSource(filePath) return EEGDataCollector(datasource, collectedQueue, fields, windowSeconds, windowCount, samplingRate)
def __init__(self, queue, filePath, signals=None, save=True, plot=True, logScale=False, name=""): self.queue = queue self.filePath = filePath self._initStatsDict() self.config = ConfigProvider() self.eegData = FileUtil().getDto(filePath) self._initSignals(signals) self.su = SignalUtil() self.qu = QualityUtil() self.eu = EEGUtil() self.fft = FFTUtil() self._initFields() self.save = save self.plot = plot self.name = name self._initPlotter(logScale) self.ssPrint = SignalStatisticPrinter(filePath) self.preProcessor = SignalPreProcessor() self.processor = SignalProcessor() windowSeconds = self.config.getCollectorConfig().get("windowSeconds") self.windowSize = EEGDataCollector.calcWindowSize(windowSeconds, self.eegData.samplingRate)
def test_calcWindowSize(self): self.assertEqual(EEGDataCollector.calcWindowSize(1, 64), 64) self.assertEqual(EEGDataCollector.calcWindowSize(2, 32), 64)
def test__calcWindowRatio(self): self.assertEqual(EEGDataCollector.calcWindowRatio(128, 2), 64) self.assertEqual(EEGDataCollector.calcWindowRatio(4, 4), 1) self.assertEqual(EEGDataCollector.calcWindowRatio(64, 4), 16)
from base_test import * # @UnusedWildImport from Queue import Queue import threading from time import sleep from posdbos.test.test_factory import TestFactory from posdbos.collector.data_collector import EEGDataCollector from posdbos.collector.window_dto import WindowDto WINDOW_SECONDS = 1 SAMPLING_RATE = 4 WINDOW_COUNT = 2 FIELDS = ["F3", "F4", "X", "Y"] WINDOW_SIZE = EEGDataCollector.calcWindowSize(WINDOW_SECONDS, SAMPLING_RATE) class DataCollectorTest(BaseTest): def setUp(self): self.collectedQueue = Queue() self.collector = TestFactory.createTestDataCollector( self.collectedQueue, FIELDS, WINDOW_SECONDS, SAMPLING_RATE, WINDOW_COUNT) 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}