def initializeDetection(self, SessionDetails): if (self.EEG.connected): self.SessionDetails = SessionDetails # Initalize Arrows self.ArrowFrameControl.initializeArrows() self.ArrowFrameControl.hideFrame() ''' self.TrainingFile = TrainingFile self.ClassifierScript = ClassifierScript ''' self.Time = 0 self.flag = "" self.PostFinishTime = 3 #Wait time after finish self.NumberOfDoneTrials = 0 self.NumberOfTrueTrials = 0 self.AvgDetectionTime = 0.00 self.NumberOfTrials = SessionDetails["nTrials_Total"] self.BlankTime = SessionDetails["BlankTime"] self.SteadyTime = SessionDetails["SteadyTime"] self.RecordingTime = SessionDetails["RecordingTime"] self.PostRecordingTime = SessionDetails["PostRecordingTime"] self.Name_Label.setText(SessionDetails["ProfileName"]) self.ClassifierName_Label.setText(SessionDetails["Classifiers"]) self.updateDetails() self.Detector = Detector(SessionDetails["TrainingFile"], SessionDetails["Classifiers"]) QtCore.QObject.connect(self.Detector.DetectThread, QtCore.SIGNAL('detected(PyQt_PyObject)'), self.DetectThread_Detected) self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(False) self.NoteFinished.setVisible(False) # WelcomeFrame self.WelcomeFrameCtrl.initializeWelcomeNote() self.WelcomeFrameCtrl.showFrame() if (AppConfig.Autorun): self.WelcomeFrameCtrl.hideFrame() self.ArrowFrameControl.showFrame() self.Detector.startDetection() self.TrainingTimer.start(1000)
def initializeDetection(self, SessionDetails): if(self.EEG.connected): self.SessionDetails = SessionDetails # Initalize Arrows self.ArrowFrameControl.initializeArrows() self.ArrowFrameControl.showFrame() self.AvgDetectionTime = 0.00 self.Name_Label.setText(SessionDetails["ProfileName"]) self.ClassifierName_Label.setText( SessionDetails["Classifiers"] ) self.Detector = Detector(SessionDetails["TrainingFile"], SessionDetails["Classifiers"]) self.Detector.startDetection() QtCore.QObject.connect(self.Detector.DetectThread, QtCore.SIGNAL('detected(PyQt_PyObject)'), self.DetectThread_Detected) self.TrialDataTimer.start(100)
def initializeDetection(self, SessionDetails): if(self.EEG.connected): self.SessionDetails = SessionDetails # Initalize Arrows self.ArrowFrameControl.initializeArrows() self.ArrowFrameControl.hideFrame() ''' self.TrainingFile = TrainingFile self.ClassifierScript = ClassifierScript ''' self.Time = 0 self.flag = "" self.PostFinishTime = 3 #Wait time after finish self.NumberOfDoneTrials = 0 self.NumberOfTrueTrials = 0 self.AvgDetectionTime = 0.00 self.NumberOfTrials = SessionDetails["nTrials_Total"] self.BlankTime = SessionDetails["BlankTime"] self.SteadyTime = SessionDetails["SteadyTime"] self.RecordingTime = SessionDetails["RecordingTime"] self.PostRecordingTime = SessionDetails["PostRecordingTime"] self.Name_Label.setText(SessionDetails["ProfileName"]) self.ClassifierName_Label.setText( SessionDetails["Classifiers"] ) self.updateDetails() self.Detector = Detector(SessionDetails["TrainingFile"], SessionDetails["Classifiers"]) QtCore.QObject.connect(self.Detector.DetectThread, QtCore.SIGNAL('detected(PyQt_PyObject)'), self.DetectThread_Detected) self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(False) self.NoteFinished.setVisible(False) # WelcomeFrame self.WelcomeFrameCtrl.initializeWelcomeNote() self.WelcomeFrameCtrl.showFrame() if(AppConfig.Autorun): self.WelcomeFrameCtrl.hideFrame() self.ArrowFrameControl.showFrame() self.Detector.startDetection() self.TrainingTimer.start(1000)
class Ui_DetectWindow_Extended(Ui_DetectWindow): def InitializeUI(self, EEG): # Controls self.ArrowFrameControl = ArrowFrameControl(self) self.EEG = EEG self.Detector = None self.finishedDetect = True self.detectedDirection = "" self.detectBufferSize = 3 self.lastDetected = "" self.lastDetectedItr = 0 #Creating Motor if(AppConfig.EnableMotors): self.motor = MotorDriver() self.motor.connect() self.resetControlsPosition() #Trial Data Timer self.TrialDataTimer = QtCore.QTimer() self.TrialDataTimer.timeout.connect(self.TrialDataTimer_Timeout) #EVENTS self.centralwidget.resizeEvent = self.onResize self.toggleIcon.mouseReleaseEvent = self.toggleIcon_Clicked self.untoggleIcon.mouseReleaseEvent = self.untoggleIcon_Clicked def hideEvent(self, event): print "test" def initializeDetection(self, SessionDetails): if(self.EEG.connected): self.SessionDetails = SessionDetails # Initalize Arrows self.ArrowFrameControl.initializeArrows() self.ArrowFrameControl.showFrame() self.AvgDetectionTime = 0.00 self.Name_Label.setText(SessionDetails["ProfileName"]) self.ClassifierName_Label.setText( SessionDetails["Classifiers"] ) self.Detector = Detector(SessionDetails["TrainingFile"], SessionDetails["Classifiers"]) self.Detector.startDetection() QtCore.QObject.connect(self.Detector.DetectThread, QtCore.SIGNAL('detected(PyQt_PyObject)'), self.DetectThread_Detected) self.TrialDataTimer.start(100) def stopDetection(self): if(self.Detector): if(self.Detector.DetectionStarted): self.Detector.stopDetection() self.TrialDataTimer.stop() def resetControlsPosition(self): self.ArrowFrameControl.centerPosition() x = (self.centralwidget.width() - self.Arrows_Frame_Normal.width()) / 2 y = (self.centralwidget.height() - self.Arrows_Frame_Normal.height()) / 2 y += self.Arrows_Frame_Normal.height() + 30 self.NoteFrame_3.move(x, y) self.detalisParent_Frame.setGeometry(QtCore.QRect(10, 10, self.centralwidget.width()-20, 60)) self.details_Line.setGeometry(QtCore.QRect(0, 50, self.detalisParent_Frame.width(), 16)) self.detalisChild_Frame.setGeometry(QtCore.QRect(0, 0, self.detalisParent_Frame.width()-30, 50)) self.toggleIcon.setGeometry(QtCore.QRect(self.detalisChild_Frame.width(), 0, 24, 24)) self.untoggleIcon.setGeometry(QtCore.QRect(self.detalisChild_Frame.width()+10, 10, 24, 24)) def setNote3_Label(self, direction): self.Note3_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + direction + " detected.</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Wrong? Press escape, spacebar or hit this button:</span></p></body></html>") def setAvgTime_Label(self): self.AvgTime_Label.setText( str("%.2f" % self.AvgDetectionTime) + " sec" ) def getSessionDetails(self): SessionDetails = {} SessionDetails["TrainingSource"] = self.SessionDetails["TrainingFile"] SessionDetails["Name"] = self.SessionDetails["ProfileName"] SessionDetails["NumberOfTrials"] = self.NumberOfTrials SessionDetails["PreRecordingTime"] = self.BlankTime + self.SteadyTime SessionDetails["RecordingTime"] = self.RecordingTime SessionDetails["PostRecordingTime"] = self.PostRecordingTime SessionDetails["AvgDetectTime"] = self.AvgDetectionTime SessionDetails["Classifier"] = self.SessionDetails["Classifiers"] SessionDetails["Classes"] = self.SessionDetails["ClassesNames"] return SessionDetails def TrialDataTimer_Timeout(self): self.RecordingTime = 4 if(len(self.EEG.eeg_counter) >= (self.EEG.fps * self.RecordingTime)): self.isDetecting = True self.Start_DetectionTime = time.time() #TrialData = self.EEG.getLastTrial(self.RecordingTime) TrialData = self.EEG.getLastData(self.RecordingTime) self.Detector.detect(TrialData) self.TrialDataTimer.stop() def DetectThread_Detected(self, DetectOut): self.End_DetectionTime = time.time() New_DetectionTime = self.End_DetectionTime - self.Start_DetectionTime #self.AvgDetectionTime = ((self.AvgDetectionTime * self.NumberOfDoneTrials) + New_DetectionTime) / (self.NumberOfDoneTrials + 1) print DetectOut if(DetectOut != self.detectedDirection): if(DetectOut != self.lastDetected): self.lastDetectedItr = 0 self.lastDetected = DetectOut else: self.lastDetectedItr = self.lastDetectedItr + 1 if(self.lastDetectedItr == self.detectBufferSize): print "GO ", DetectOut self.detectedDirection = DetectOut self.ArrowFrameControl.resetArrows() self.ArrowFrameControl.showArrow(self.detectedDirection, "GREEN") self.setNote3_Label(self.detectedDirection.title()) if(AppConfig.EnableMotors): if(self.detectedDirection == "RIGHT"): self.motor.goRight() #time.sleep(AppConfig.MotorStopDelay) #self.motor.stop() elif(self.detectedDirection == "LEFT"): self.motor.goLeft() #time.sleep(AppConfig.MotorStopDelay) #self.motor.stop() elif(self.detectedDirection == "FORWARD"): self.motor.goForward() else: self.motor.stop() if(AppConfig.PrintSessionDetails): print self.detectedDirection + " Detected in " + str("%.2f" % self.AvgDetectionTime) + " sec" self.finishedDetect = True self.TrialDataTimer.start(100) def untoggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(True) def toggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(False) def onResize(self, event): self.resetControlsPosition()
class Ui_DetectWindow_Extended(Ui_DetectWindow): def InitializeUI(self, EEG): # Controls self.WelcomeFrameCtrl = WelcomeFrameControl(self) self.ArrowFrameControl = ArrowFrameControl(self) #DELETE self.Recording_ProgBar.setVisible(False) self.Note1_Label.setVisible(False) self.Note2_Label.setVisible(False) self.WrongButton.setVisible(False) self.EEG = EEG self.Detector = None self.finishedDetect = True #Creating Motor if(AppConfig.EnableMotors): self.motor = MotorDriver() self.motor.connect() #Notes Frames self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(False) self.NoteFinished.setVisible(False) #self.Arrows_Frame.setVisible(True) self.resetControlsPosition() #Training Timer self.TrainingTimer = QtCore.QTimer() self.TrainingTimer.timeout.connect(self.TrainingTimer_Timeout) #Trial Data Timer self.TrialDataTimer = QtCore.QTimer() self.TrialDataTimer.timeout.connect(self.TrialDataTimer_Timeout) #Recording Progress-Bar Timer self.RecordingProgBarTimer = QtCore.QTimer() self.RecordingProgBarTimer.timeout.connect(self.RecordingProgBarTimer_Timeout) #EVENTS self.centralwidget.resizeEvent = self.onResize self.centralwidget.keyPressEvent = self.onkeyPress self.toggleIcon.mouseReleaseEvent = self.toggleIcon_Clicked self.untoggleIcon.mouseReleaseEvent = self.untoggleIcon_Clicked QtCore.QObject.connect(self.Start_Button, QtCore.SIGNAL("clicked()"), self.Start_Button_Clicked) QtCore.QObject.connect(self.WrongButton, QtCore.SIGNAL("clicked()"), self.WrongButton_Clicked) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("DetectFlag()"), self.TrainingTimer_DetectFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("RecordingFlag()"), self.TrainingTimer_RecordingFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("SteadyFlag()"), self.TrainingTimer_SteadyFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("BlankFlag()"), self.TrainingTimer_BlankFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("NewTrialFlag()"), self.TrainingTimer_NewTrialFlag) QtCore.QObject.connect(self.EEG.SaveThread, QtCore.SIGNAL('dataSaved(PyQt_PyObject)'), self.SaveThread_DataSaved) def hideEvent(self, event): print "test" def initializeDetection(self, SessionDetails): if(self.EEG.connected): self.SessionDetails = SessionDetails # Initalize Arrows self.ArrowFrameControl.initializeArrows() self.ArrowFrameControl.hideFrame() ''' self.TrainingFile = TrainingFile self.ClassifierScript = ClassifierScript ''' self.Time = 0 self.flag = "" self.PostFinishTime = 3 #Wait time after finish self.NumberOfDoneTrials = 0 self.NumberOfTrueTrials = 0 self.AvgDetectionTime = 0.00 self.NumberOfTrials = SessionDetails["nTrials_Total"] self.BlankTime = SessionDetails["BlankTime"] self.SteadyTime = SessionDetails["SteadyTime"] self.RecordingTime = SessionDetails["RecordingTime"] self.PostRecordingTime = SessionDetails["PostRecordingTime"] self.Name_Label.setText(SessionDetails["ProfileName"]) self.ClassifierName_Label.setText( SessionDetails["Classifiers"] ) self.updateDetails() self.Detector = Detector(SessionDetails["TrainingFile"], SessionDetails["Classifiers"]) QtCore.QObject.connect(self.Detector.DetectThread, QtCore.SIGNAL('detected(PyQt_PyObject)'), self.DetectThread_Detected) self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(False) self.NoteFinished.setVisible(False) # WelcomeFrame self.WelcomeFrameCtrl.initializeWelcomeNote() self.WelcomeFrameCtrl.showFrame() def stopDetection(self): if(self.Detector): if(self.Detector.DetectionStarted): self.Detector.stopDetection() self.TrainingTimer.stop() self.TrialDataTimer.stop() def triggerWrongTrial(self): if(self.trueDirection == "RIGHT"): self.trueDirection = "LEFT" elif(self.trueDirection == "LEFT"): self.trueDirection = "RIGHT" if(self.trueDirection == self.detectedDirection): color = "BLUE" else: color = "RED" self.ArrowFrameControl.showArrow(self.detectedDirection, color) def resetControlsPosition(self): self.ArrowFrameControl.centerPosition() x = (self.centralwidget.width() - self.Arrows_Frame_Normal.width()) / 2 y = (self.centralwidget.height() - self.Arrows_Frame_Normal.height()) / 2 y += self.Arrows_Frame_Normal.height() + 30 self.NoteFrame_1.move(x, y) self.NoteFrame_2.move(x, y) self.NoteFrame_3.move(x, y) self.NoteFinished.move(x, y) self.WelcomeFrameCtrl.centerPosition() #x = (self.centralwidget.width() - self.WelcomeFrame.width()) / 2 #y = (self.centralwidget.height() - self.WelcomeFrame.height()) / 2 #self.WelcomeFrame.move(x, y) self.detalisParent_Frame.setGeometry(QtCore.QRect(10, 10, self.centralwidget.width()-20, 60)) self.details_Line.setGeometry(QtCore.QRect(0, 50, self.detalisParent_Frame.width(), 16)) self.detalisChild_Frame.setGeometry(QtCore.QRect(0, 0, self.detalisParent_Frame.width()-30, 50)) self.toggleIcon.setGeometry(QtCore.QRect(self.detalisChild_Frame.width(), 0, 24, 24)) self.untoggleIcon.setGeometry(QtCore.QRect(self.detalisChild_Frame.width()+10, 10, 24, 24)) x = (self.centralwidget.width() - self.NoteFinished.width()) / 2 y = (self.centralwidget.height() - self.NoteFinished.height()) / 2 self.NoteFinished.move(x, y) def setNote2_Label(self, state): self.Note2_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + state + "</span></p></body></html>") def setNote3_Label(self, direction): self.Note3_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + direction + " detected.</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Wrong? Press escape, spacebar or hit this button:</span></p></body></html>") ''' def setNote3_Label(self, direction): self.Note3_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + direction + " detected.</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Wrong? Press escape, spacebar or hit this button:</span></p></body></html>") ''' def setNoteFinished_Label(self, FileName): self.NoteFinished_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">Thank you for your participation.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:600;\">Data saved to: </span><span style=\" font-size:10pt;\">" + FileName + "</span></p></body></html>") def setNumberOfTrials_Label(self): self.NumberOfTrials_Label.setText("<html><head/><body><p><span style=\" color:#9a9a9a;\">(" + str(self.NumberOfTrueTrials) + ")</span> " + str(self.NumberOfDoneTrials) + "/" + str(self.NumberOfTrials) + "</p></body></html>") def setTimeRemaining_Label(self): TimeRemaining = (self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime + self.AvgDetectionTime) * (self.NumberOfTrials - self.NumberOfDoneTrials) ext = " sec" if(TimeRemaining > 3600): TimeRemaining /= 3600 ext = " hr" elif(TimeRemaining > 60): TimeRemaining /= 60 ext = " min" self.TimeRemaining_Label.setText( str(int(TimeRemaining)) + ext ) def setAvgTime_Label(self): self.AvgTime_Label.setText( str("%.2f" % self.AvgDetectionTime) + " sec" ) def setAccuracy_ProgBar(self): if(self.NumberOfDoneTrials > 0): Accuracy = (self.NumberOfTrueTrials * 1.0 / self.NumberOfDoneTrials) * 100 else: Accuracy = 0 self.Accuracy_ProgBar.setValue( int(Accuracy) ) def setFinished_ProgBar(self): Finished = (self.NumberOfDoneTrials * 1.0 / self.NumberOfTrials) * 100 self.Finished_ProgBar.setValue( int(Finished) ) def updateDetails(self): self.setNumberOfTrials_Label() self.setTimeRemaining_Label() self.setAvgTime_Label() self.setAccuracy_ProgBar() self.setFinished_ProgBar() def getSessionDetails(self): SessionDetails = {} SessionDetails["TrainingSource"] = self.SessionDetails["TrainingFile"] SessionDetails["Name"] = self.SessionDetails["ProfileName"] SessionDetails["NumberOfTrials"] = self.NumberOfTrials SessionDetails["PreRecordingTime"] = self.BlankTime + self.SteadyTime SessionDetails["RecordingTime"] = self.RecordingTime SessionDetails["PostRecordingTime"] = self.PostRecordingTime SessionDetails["AvgDetectTime"] = self.AvgDetectionTime SessionDetails["Classifier"] = self.SessionDetails["Classifiers"] SessionDetails["Classes"] = self.SessionDetails["ClassesNames"] return SessionDetails #EVENTS def RecordingProgBarTimer_Timeout(self): self.Recording_ProgBar.setValue(self.Recording_ProgBar.value() + 1) def TrialDataTimer_Timeout(self): if(self.EEG.eeg_triggers[-1]): if((len(self.EEG.eeg_counter) - self.EEG.eeg_triggers[-1]) >= (self.EEG.fps * self.RecordingTime)): self.setNote2_Label("Detecting...") self.isDetecting = True self.Start_DetectionTime = time.time() TrialData = self.EEG.getLastTrial(self.RecordingTime) self.Detector.detect(TrialData) self.TrialDataTimer.stop() def SaveThread_DataSaved(self, filename): self.NoteFinished_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">Thank you for your participation.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:600;\">Data saved to: </span><span style=\" font-size:10pt;\">" + filename + "</span></p></body></html>") if(AppConfig.PrintSessionDetails): print "Finished, data saved to " + filename def DetectThread_Detected(self, DetectOut): self.ArrowFrameControl.resetArrows() self.End_DetectionTime = time.time() New_DetectionTime = self.End_DetectionTime - self.Start_DetectionTime self.AvgDetectionTime = ((self.AvgDetectionTime * self.NumberOfDoneTrials) + New_DetectionTime) / (self.NumberOfDoneTrials + 1) self.detectedDirection = DetectOut #self.trueDirection = DetectOut if(self.detectedDirection == self.trueDirection): color = "GREEN" else: color = "RED" self.setNote3_Label(self.detectedDirection.title()) print self.detectedDirection self.ArrowFrameControl.showArrow(self.detectedDirection, color) if(AppConfig.EnableMotors): if(self.detectedDirection == "RIGHT"): self.motor.goRight() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() elif(self.detectedDirection == "LEFT"): self.motor.goLeft() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() elif(self.detectedDirection == "FORWARD"): self.motor.goForward() time.sleep(AppConfig.FWDMotorStopDelay) self.motor.stop() if(AppConfig.PrintSessionDetails): print self.detectedDirection + " Detected in " + str("%.2f" % self.AvgDetectionTime) + " sec" self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(True) self.WrongButton.setFocus(True) self.Time = self.NumberOfDoneTrials * (self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime) + self.BlankTime + self.SteadyTime + self.RecordingTime self.finishedDetect = True def TrainingTimer_Timeout(self): if(self.finishedDetect): if(self.Detector): if(self.Detector.DetectionStarted): if(self.NumberOfDoneTrials < self.NumberOfTrials): Time_abs = self.Time - self.NumberOfDoneTrials * (self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime) if(Time_abs >= self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime): if(self.flag != "Blank"): self.flag = "Blank" self.TrainingTimer.emit( QtCore.SIGNAL('NewTrialFlag()') ) elif(Time_abs >= self.BlankTime + self.SteadyTime + self.RecordingTime): if(self.flag != "Detect"): self.flag = "Detect" self.finishedDetect = False self.TrainingTimer.emit( QtCore.SIGNAL('DetectFlag()') ) elif(Time_abs >= self.BlankTime + self.SteadyTime): if(self.flag != "Recording"): self.flag = "Recording" self.TrainingTimer.emit( QtCore.SIGNAL('RecordingFlag()') ) elif(Time_abs >= self.BlankTime): if(self.flag != "Steady"): self.flag = "Steady" self.TrainingTimer.emit( QtCore.SIGNAL('SteadyFlag()') ) elif(Time_abs >= 0): if(self.flag != "Blank"): self.flag = "Blank" self.TrainingTimer.emit( QtCore.SIGNAL('BlankFlag()') ) else: Time_abs = self.Time - self.NumberOfDoneTrials * (self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime) self.NoteFrame_1.setVisible(False) self.ArrowFrameControl.hideFrame() if(Time_abs > self.PostFinishTime): self.TrainingTimer.stop() self.EEG.saveToFile(self.getSessionDetails()) self.NoteFinished_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">Saving, please wait...</span></p></body></html>") self.NoteFinished.setVisible(True) self.Time += 1 def TrainingTimer_NewTrialFlag(self): self.NumberOfDoneTrials += 1 if(self.detectedDirection == self.trueDirection): self.NumberOfTrueTrials += 1 self.updateDetails() self.EEG.setDetectedDirection(self.detectedDirection, self.trueDirection, self.SessionDetails["ClassesNames"]) self.NoteFrame_3.setVisible(False) if(self.NumberOfDoneTrials != self.NumberOfTrials): self.NoteFrame_1.setVisible(True) self.ArrowFrameControl.resetArrows() self.detectedDirection = "" self.trueDirection = "" self.ArrowFrameControl.hideFrame() def TrainingTimer_DetectFlag(self): self.RecordingProgBarTimer.stop() self.Recording_ProgBar.setValue(100) self.TrialDataTimer.start(100) def TrainingTimer_RecordingFlag(self): self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(True) self.setNote2_Label("Start!") self.Recording_ProgBar.setValue(0) self.RecordingProgBarTimer.start(self.RecordingTime * 1000 / 100) self.EEG.setTrigger() self.ArrowFrameControl.resetArrows() self.ArrowFrameControl.showArrow(self.trueDirection, "BLUE") ''' if(self.trueDirection == "RIGHT"): self.setRightArrowColor("BLUE") elif(self.trueDirection == "LEFT"): self.setLeftArrowColor("BLUE") ''' if(AppConfig.PrintSessionDetails): print "Recording..." def getRandomClass(self): RemainingClasses = [] # Get Remaining Classes for c in self.SessionDetails["ClassesNames"]: if( self.SessionDetails["DoneTrials"][c] < self.SessionDetails["nTrials"] ): RemainingClasses.append(c) print RemainingClasses for c in self.SessionDetails["ClassesNames"]: print c, self.SessionDetails["DoneTrials"][c] # Select Randome Class RndInt = randint(0, len(RemainingClasses)-1) return RemainingClasses[RndInt] def TrainingTimer_SteadyFlag(self): self.ArrowFrameControl.showFrame() c = self.getRandomClass() self.trueDirection = c self.SessionDetails["DoneTrials"][c] = self.SessionDetails["DoneTrials"][c] + 1 def TrainingTimer_BlankFlag(self): self.ArrowFrameControl.hideFrame() self.NoteFrame_3.setVisible(False) self.NoteFrame_1.setVisible(True) def untoggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(True) def toggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(False) def onResize(self, event): self.resetControlsPosition() def onkeyPress(self, event): if type(event) == QtGui.QKeyEvent and event.key() == QtCore.Qt.Key_Escape : self.triggerWrongTrial() elif type(event) == QtGui.QKeyEvent and event.key() == QtCore.Qt.Key_Space : self.triggerWrongTrial() def WrongButton_Clicked(self): self.triggerWrongTrial() def Start_Button_Clicked(self): #self.WelcomeFrame.setVisible(False) self.WelcomeFrameCtrl.hideFrame() self.ArrowFrameControl.showFrame() self.Detector.startDetection() self.TrainingTimer.start(1000)
class Ui_DetectWindow_Extended(Ui_DetectWindow): def InitializeUI(self, EEG): # Controls self.WelcomeFrameCtrl = WelcomeFrameControl(self) self.ArrowFrameControl = ArrowFrameControl(self) #DELETE self.Recording_ProgBar.setVisible(False) self.Note1_Label.setVisible(False) self.Note2_Label.setVisible(False) self.WrongButton.setVisible(False) self.EEG = EEG self.Detector = None self.finishedDetect = True #Creating Motor if (AppConfig.EnableMotors): self.motor = MotorDriver() self.motor.connect() #Notes Frames self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(False) self.NoteFinished.setVisible(False) #self.Arrows_Frame.setVisible(True) self.resetControlsPosition() #Training Timer self.TrainingTimer = QtCore.QTimer() self.TrainingTimer.timeout.connect(self.TrainingTimer_Timeout) #Trial Data Timer self.TrialDataTimer = QtCore.QTimer() self.TrialDataTimer.timeout.connect(self.TrialDataTimer_Timeout) #Recording Progress-Bar Timer self.RecordingProgBarTimer = QtCore.QTimer() self.RecordingProgBarTimer.timeout.connect( self.RecordingProgBarTimer_Timeout) #EVENTS self.centralwidget.resizeEvent = self.onResize self.centralwidget.keyPressEvent = self.onkeyPress self.toggleIcon.mouseReleaseEvent = self.toggleIcon_Clicked self.untoggleIcon.mouseReleaseEvent = self.untoggleIcon_Clicked QtCore.QObject.connect(self.Start_Button, QtCore.SIGNAL("clicked()"), self.Start_Button_Clicked) QtCore.QObject.connect(self.WrongButton, QtCore.SIGNAL("clicked()"), self.WrongButton_Clicked) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("DetectFlag()"), self.TrainingTimer_DetectFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("RecordingFlag()"), self.TrainingTimer_RecordingFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("SteadyFlag()"), self.TrainingTimer_SteadyFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("BlankFlag()"), self.TrainingTimer_BlankFlag) QtCore.QObject.connect(self.TrainingTimer, QtCore.SIGNAL("NewTrialFlag()"), self.TrainingTimer_NewTrialFlag) QtCore.QObject.connect(self.EEG.SaveThread, QtCore.SIGNAL('dataSaved(PyQt_PyObject)'), self.SaveThread_DataSaved) def hideEvent(self, event): print "test" def initializeDetection(self, SessionDetails): if (self.EEG.connected): self.SessionDetails = SessionDetails # Initalize Arrows self.ArrowFrameControl.initializeArrows() self.ArrowFrameControl.hideFrame() ''' self.TrainingFile = TrainingFile self.ClassifierScript = ClassifierScript ''' self.Time = 0 self.flag = "" self.PostFinishTime = 3 #Wait time after finish self.NumberOfDoneTrials = 0 self.NumberOfTrueTrials = 0 self.AvgDetectionTime = 0.00 self.NumberOfTrials = SessionDetails["nTrials_Total"] self.BlankTime = SessionDetails["BlankTime"] self.SteadyTime = SessionDetails["SteadyTime"] self.RecordingTime = SessionDetails["RecordingTime"] self.PostRecordingTime = SessionDetails["PostRecordingTime"] self.Name_Label.setText(SessionDetails["ProfileName"]) self.ClassifierName_Label.setText(SessionDetails["Classifiers"]) self.updateDetails() self.Detector = Detector(SessionDetails["TrainingFile"], SessionDetails["Classifiers"]) QtCore.QObject.connect(self.Detector.DetectThread, QtCore.SIGNAL('detected(PyQt_PyObject)'), self.DetectThread_Detected) self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(False) self.NoteFinished.setVisible(False) # WelcomeFrame self.WelcomeFrameCtrl.initializeWelcomeNote() self.WelcomeFrameCtrl.showFrame() def stopDetection(self): if (self.Detector): if (self.Detector.DetectionStarted): self.Detector.stopDetection() self.TrainingTimer.stop() self.TrialDataTimer.stop() def triggerWrongTrial(self): if (self.trueDirection == "RIGHT"): self.trueDirection = "LEFT" elif (self.trueDirection == "LEFT"): self.trueDirection = "RIGHT" if (self.trueDirection == self.detectedDirection): color = "BLUE" else: color = "RED" self.ArrowFrameControl.showArrow(self.detectedDirection, color) def resetControlsPosition(self): self.ArrowFrameControl.centerPosition() x = (self.centralwidget.width() - self.Arrows_Frame_Normal.width()) / 2 y = (self.centralwidget.height() - self.Arrows_Frame_Normal.height()) / 2 y += self.Arrows_Frame_Normal.height() + 30 self.NoteFrame_1.move(x, y) self.NoteFrame_2.move(x, y) self.NoteFrame_3.move(x, y) self.NoteFinished.move(x, y) self.WelcomeFrameCtrl.centerPosition() #x = (self.centralwidget.width() - self.WelcomeFrame.width()) / 2 #y = (self.centralwidget.height() - self.WelcomeFrame.height()) / 2 #self.WelcomeFrame.move(x, y) self.detalisParent_Frame.setGeometry( QtCore.QRect(10, 10, self.centralwidget.width() - 20, 60)) self.details_Line.setGeometry( QtCore.QRect(0, 50, self.detalisParent_Frame.width(), 16)) self.detalisChild_Frame.setGeometry( QtCore.QRect(0, 0, self.detalisParent_Frame.width() - 30, 50)) self.toggleIcon.setGeometry( QtCore.QRect(self.detalisChild_Frame.width(), 0, 24, 24)) self.untoggleIcon.setGeometry( QtCore.QRect(self.detalisChild_Frame.width() + 10, 10, 24, 24)) x = (self.centralwidget.width() - self.NoteFinished.width()) / 2 y = (self.centralwidget.height() - self.NoteFinished.height()) / 2 self.NoteFinished.move(x, y) def setNote2_Label(self, state): self.Note2_Label.setText( "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + state + "</span></p></body></html>") def setNote3_Label(self, direction): self.Note3_Label.setText( "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + direction + " detected.</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Wrong? Press escape, spacebar or hit this button:</span></p></body></html>" ) ''' def setNote3_Label(self, direction): self.Note3_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + direction + " detected.</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Wrong? Press escape, spacebar or hit this button:</span></p></body></html>") ''' def setNoteFinished_Label(self, FileName): self.NoteFinished_Label.setText( "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">Thank you for your participation.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:600;\">Data saved to: </span><span style=\" font-size:10pt;\">" + FileName + "</span></p></body></html>") def setNumberOfTrials_Label(self): self.NumberOfTrials_Label.setText( "<html><head/><body><p><span style=\" color:#9a9a9a;\">(" + str(self.NumberOfTrueTrials) + ")</span> " + str(self.NumberOfDoneTrials) + "/" + str(self.NumberOfTrials) + "</p></body></html>") def setTimeRemaining_Label(self): TimeRemaining = (self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime + self.AvgDetectionTime) * (self.NumberOfTrials - self.NumberOfDoneTrials) ext = " sec" if (TimeRemaining > 3600): TimeRemaining /= 3600 ext = " hr" elif (TimeRemaining > 60): TimeRemaining /= 60 ext = " min" self.TimeRemaining_Label.setText(str(int(TimeRemaining)) + ext) def setAvgTime_Label(self): self.AvgTime_Label.setText( str("%.2f" % self.AvgDetectionTime) + " sec") def setAccuracy_ProgBar(self): if (self.NumberOfDoneTrials > 0): Accuracy = (self.NumberOfTrueTrials * 1.0 / self.NumberOfDoneTrials) * 100 else: Accuracy = 0 self.Accuracy_ProgBar.setValue(int(Accuracy)) def setFinished_ProgBar(self): Finished = (self.NumberOfDoneTrials * 1.0 / self.NumberOfTrials) * 100 self.Finished_ProgBar.setValue(int(Finished)) def updateDetails(self): self.setNumberOfTrials_Label() self.setTimeRemaining_Label() self.setAvgTime_Label() self.setAccuracy_ProgBar() self.setFinished_ProgBar() def getSessionDetails(self): SessionDetails = {} SessionDetails["TrainingSource"] = self.SessionDetails["TrainingFile"] SessionDetails["Name"] = self.SessionDetails["ProfileName"] SessionDetails["NumberOfTrials"] = self.NumberOfTrials SessionDetails["PreRecordingTime"] = self.BlankTime + self.SteadyTime SessionDetails["RecordingTime"] = self.RecordingTime SessionDetails["PostRecordingTime"] = self.PostRecordingTime SessionDetails["AvgDetectTime"] = self.AvgDetectionTime SessionDetails["Classifier"] = self.SessionDetails["Classifiers"] SessionDetails["Classes"] = self.SessionDetails["ClassesNames"] return SessionDetails #EVENTS def RecordingProgBarTimer_Timeout(self): self.Recording_ProgBar.setValue(self.Recording_ProgBar.value() + 1) def TrialDataTimer_Timeout(self): if (self.EEG.eeg_triggers[-1]): if ((len(self.EEG.eeg_counter) - self.EEG.eeg_triggers[-1]) >= (self.EEG.fps * self.RecordingTime)): self.setNote2_Label("Detecting...") self.isDetecting = True self.Start_DetectionTime = time.time() TrialData = self.EEG.getLastTrial(self.RecordingTime) self.Detector.detect(TrialData) self.TrialDataTimer.stop() def SaveThread_DataSaved(self, filename): self.NoteFinished_Label.setText( "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">Thank you for your participation.</span></p><p align=\"center\"><span style=\" font-size:10pt; font-weight:600;\">Data saved to: </span><span style=\" font-size:10pt;\">" + filename + "</span></p></body></html>") if (AppConfig.PrintSessionDetails): print "Finished, data saved to " + filename def DetectThread_Detected(self, DetectOut): self.ArrowFrameControl.resetArrows() self.End_DetectionTime = time.time() New_DetectionTime = self.End_DetectionTime - self.Start_DetectionTime self.AvgDetectionTime = ( (self.AvgDetectionTime * self.NumberOfDoneTrials) + New_DetectionTime) / (self.NumberOfDoneTrials + 1) self.detectedDirection = DetectOut #self.trueDirection = DetectOut if (self.detectedDirection == self.trueDirection): color = "GREEN" else: color = "RED" self.setNote3_Label(self.detectedDirection.title()) print self.detectedDirection self.ArrowFrameControl.showArrow(self.detectedDirection, color) if (AppConfig.EnableMotors): if (self.detectedDirection == "RIGHT"): self.motor.goRight() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() elif (self.detectedDirection == "LEFT"): self.motor.goLeft() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() elif (self.detectedDirection == "FORWARD"): self.motor.goForward() time.sleep(AppConfig.FWDMotorStopDelay) self.motor.stop() if (AppConfig.PrintSessionDetails): print self.detectedDirection + " Detected in " + str( "%.2f" % self.AvgDetectionTime) + " sec" self.NoteFrame_2.setVisible(False) self.NoteFrame_3.setVisible(True) self.WrongButton.setFocus(True) self.Time = self.NumberOfDoneTrials * ( self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime ) + self.BlankTime + self.SteadyTime + self.RecordingTime self.finishedDetect = True def TrainingTimer_Timeout(self): if (self.finishedDetect): if (self.Detector): if (self.Detector.DetectionStarted): if (self.NumberOfDoneTrials < self.NumberOfTrials): Time_abs = self.Time - self.NumberOfDoneTrials * ( self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime) if (Time_abs >= self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime): if (self.flag != "Blank"): self.flag = "Blank" self.TrainingTimer.emit( QtCore.SIGNAL('NewTrialFlag()')) elif (Time_abs >= self.BlankTime + self.SteadyTime + self.RecordingTime): if (self.flag != "Detect"): self.flag = "Detect" self.finishedDetect = False self.TrainingTimer.emit( QtCore.SIGNAL('DetectFlag()')) elif (Time_abs >= self.BlankTime + self.SteadyTime): if (self.flag != "Recording"): self.flag = "Recording" self.TrainingTimer.emit( QtCore.SIGNAL('RecordingFlag()')) elif (Time_abs >= self.BlankTime): if (self.flag != "Steady"): self.flag = "Steady" self.TrainingTimer.emit( QtCore.SIGNAL('SteadyFlag()')) elif (Time_abs >= 0): if (self.flag != "Blank"): self.flag = "Blank" self.TrainingTimer.emit( QtCore.SIGNAL('BlankFlag()')) else: Time_abs = self.Time - self.NumberOfDoneTrials * ( self.BlankTime + self.SteadyTime + self.RecordingTime + self.PostRecordingTime) self.NoteFrame_1.setVisible(False) self.ArrowFrameControl.hideFrame() if (Time_abs > self.PostFinishTime): self.TrainingTimer.stop() self.EEG.saveToFile(self.getSessionDetails()) self.NoteFinished_Label.setText( "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">Saving, please wait...</span></p></body></html>" ) self.NoteFinished.setVisible(True) self.Time += 1 def TrainingTimer_NewTrialFlag(self): self.NumberOfDoneTrials += 1 if (self.detectedDirection == self.trueDirection): self.NumberOfTrueTrials += 1 self.updateDetails() self.EEG.setDetectedDirection(self.detectedDirection, self.trueDirection, self.SessionDetails["ClassesNames"]) self.NoteFrame_3.setVisible(False) if (self.NumberOfDoneTrials != self.NumberOfTrials): self.NoteFrame_1.setVisible(True) self.ArrowFrameControl.resetArrows() self.detectedDirection = "" self.trueDirection = "" self.ArrowFrameControl.hideFrame() def TrainingTimer_DetectFlag(self): self.RecordingProgBarTimer.stop() self.Recording_ProgBar.setValue(100) self.TrialDataTimer.start(100) def TrainingTimer_RecordingFlag(self): self.NoteFrame_1.setVisible(False) self.NoteFrame_2.setVisible(True) self.setNote2_Label("Start!") self.Recording_ProgBar.setValue(0) self.RecordingProgBarTimer.start(self.RecordingTime * 1000 / 100) self.EEG.setTrigger() self.ArrowFrameControl.resetArrows() self.ArrowFrameControl.showArrow(self.trueDirection, "BLUE") ''' if(self.trueDirection == "RIGHT"): self.setRightArrowColor("BLUE") elif(self.trueDirection == "LEFT"): self.setLeftArrowColor("BLUE") ''' if (AppConfig.PrintSessionDetails): print "Recording..." def getRandomClass(self): RemainingClasses = [] # Get Remaining Classes for c in self.SessionDetails["ClassesNames"]: if (self.SessionDetails["DoneTrials"][c] < self.SessionDetails["nTrials"]): RemainingClasses.append(c) print RemainingClasses for c in self.SessionDetails["ClassesNames"]: print c, self.SessionDetails["DoneTrials"][c] # Select Randome Class RndInt = randint(0, len(RemainingClasses) - 1) return RemainingClasses[RndInt] def TrainingTimer_SteadyFlag(self): self.ArrowFrameControl.showFrame() c = self.getRandomClass() self.trueDirection = c self.SessionDetails["DoneTrials"][ c] = self.SessionDetails["DoneTrials"][c] + 1 def TrainingTimer_BlankFlag(self): self.ArrowFrameControl.hideFrame() self.NoteFrame_3.setVisible(False) self.NoteFrame_1.setVisible(True) def untoggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(True) def toggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(False) def onResize(self, event): self.resetControlsPosition() def onkeyPress(self, event): if type(event) == QtGui.QKeyEvent and event.key( ) == QtCore.Qt.Key_Escape: self.triggerWrongTrial() elif type(event) == QtGui.QKeyEvent and event.key( ) == QtCore.Qt.Key_Space: self.triggerWrongTrial() def WrongButton_Clicked(self): self.triggerWrongTrial() def Start_Button_Clicked(self): #self.WelcomeFrame.setVisible(False) self.WelcomeFrameCtrl.hideFrame() self.ArrowFrameControl.showFrame() self.Detector.startDetection() self.TrainingTimer.start(1000)
class Ui_DetectWindow_Extended(Ui_DetectWindow): def InitializeUI(self, MainWindow, SensorsWindow, DetectWindow, EEG): # Controls self.ArrowFrameControl = ArrowFrameControl(self) self.DetectWindow = DetectWindow self.MainWindow = MainWindow self.SensorsWindow = SensorsWindow self.EEG = EEG self.Detector = None self.finishedDetect = True self.detectedDirection = "" self.detectBufferSize = 4 self.lastDetected = "" self.lastDetectedItr = 0 self.FWD = False #Creating Motor if(AppConfig.EnableMotors): self.motor = MotorDriver() self.motor.connect() self.resetControlsPosition() #Trial Data Timer self.TrialDataTimer = QtCore.QTimer() self.TrialDataTimer.timeout.connect(self.TrialDataTimer_Timeout) #EVENTS self.centralwidget.resizeEvent = self.onResize self.toggleIcon.mouseReleaseEvent = self.toggleIcon_Clicked self.untoggleIcon.mouseReleaseEvent = self.untoggleIcon_Clicked if(AppConfig.Autorun): self.MaxWindow = False def hideEvent(self, event): print "test" def initializeDetection(self, SessionDetails): if(self.EEG.connected): self.SessionDetails = SessionDetails # Initalize Arrows self.ArrowFrameControl.initializeArrows() self.ArrowFrameControl.showFrame() self.AvgDetectionTime = 0.00 self.Name_Label.setText(SessionDetails["ProfileName"]) self.ClassifierName_Label.setText( SessionDetails["Classifiers"] ) self.Detector = Detector(SessionDetails["TrainingFile"], SessionDetails["Classifiers"]) self.Detector.startDetection() QtCore.QObject.connect(self.Detector.DetectThread, QtCore.SIGNAL('detected(PyQt_PyObject)'), self.DetectThread_Detected) self.TrialDataTimer.start(100) def stopDetection(self): if(self.Detector): if(self.Detector.DetectionStarted): self.Detector.stopDetection() self.TrialDataTimer.stop() def resetControlsPosition(self): self.ArrowFrameControl.centerPosition() x = (self.centralwidget.width() - self.Arrows_Frame_Normal.width()) / 2 y = (self.centralwidget.height() - self.Arrows_Frame_Normal.height()) / 2 y += self.Arrows_Frame_Normal.height() + 30 self.NoteFrame_3.move(x, y) self.detalisParent_Frame.setGeometry(QtCore.QRect(10, 10, self.centralwidget.width()-20, 60)) self.details_Line.setGeometry(QtCore.QRect(0, 50, self.detalisParent_Frame.width(), 16)) self.detalisChild_Frame.setGeometry(QtCore.QRect(0, 0, self.detalisParent_Frame.width()-30, 50)) self.toggleIcon.setGeometry(QtCore.QRect(self.detalisChild_Frame.width(), 0, 24, 24)) self.untoggleIcon.setGeometry(QtCore.QRect(self.detalisChild_Frame.width()+10, 10, 24, 24)) def setNote3_Label(self, direction): self.Note3_Label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:20pt;\">" + direction + " detected.</span></p><p align=\"center\"><span style=\" font-size:12pt;\">Wrong? Press escape, spacebar or hit this button:</span></p></body></html>") def setAvgTime_Label(self): self.AvgTime_Label.setText( str("%.2f" % self.AvgDetectionTime) + " sec" ) def getSessionDetails(self): SessionDetails = {} SessionDetails["TrainingSource"] = self.SessionDetails["TrainingFile"] SessionDetails["Name"] = self.SessionDetails["ProfileName"] SessionDetails["NumberOfTrials"] = self.NumberOfTrials SessionDetails["PreRecordingTime"] = self.BlankTime + self.SteadyTime SessionDetails["RecordingTime"] = self.RecordingTime SessionDetails["PostRecordingTime"] = self.PostRecordingTime SessionDetails["AvgDetectTime"] = self.AvgDetectionTime SessionDetails["Classifier"] = self.SessionDetails["Classifiers"] SessionDetails["Classes"] = self.SessionDetails["ClassesNames"] return SessionDetails def TrialDataTimer_Timeout(self): self.RecordingTime = 2 if(AppConfig.Autorun): if(not self.MaxWindow): self.DetectWindow.showMaximized() self.MainWindow.hide() self.SensorsWindow.hide() if(len(self.EEG.eeg_counter) >= (self.EEG.fps * self.RecordingTime)): self.isDetecting = True self.Start_DetectionTime = time.time() #TrialData = self.EEG.getLastTrial(self.RecordingTime) TrialData = self.EEG.getLastData(self.RecordingTime) self.Detector.detect(TrialData) self.TrialDataTimer.stop() def DetectThread_Detected(self, DetectOut): self.End_DetectionTime = time.time() New_DetectionTime = self.End_DetectionTime - self.Start_DetectionTime #self.AvgDetectionTime = ((self.AvgDetectionTime * self.NumberOfDoneTrials) + New_DetectionTime) / (self.NumberOfDoneTrials + 1) print DetectOut if(DetectOut != self.detectedDirection): if(DetectOut != self.lastDetected): self.lastDetectedItr = 0 self.lastDetected = DetectOut else: self.lastDetectedItr = self.lastDetectedItr + 1 if(self.lastDetectedItr == self.detectBufferSize): self.lastDetectedItr = 0 self.lastDetected = "" self.ArrowFrameControl.resetArrows() if(DetectOut == "RIGHT"): print "GO ", DetectOut self.FWD = True self.detectedDirection = DetectOut self.ArrowFrameControl.showArrow(self.detectedDirection, "GREEN") self.setNote3_Label(self.detectedDirection.title()) elif(DetectOut == "LEFT"): print "GO ", DetectOut self.FWD = True self.detectedDirection = DetectOut self.ArrowFrameControl.showArrow(self.detectedDirection, "GREEN") self.setNote3_Label(self.detectedDirection.title()) elif(DetectOut == "FORWARD"): print self.FWD self.FWD = not self.FWD if(self.FWD): print "GO ", DetectOut self.detectedDirection = "FWD" self.ArrowFrameControl.showArrow(DetectOut, "GREEN") self.setNote3_Label(DetectOut.title()) else: print "STOP" self.detectedDirection = "STOP" self.ArrowFrameControl.showArrow("NEUTRAL", "GREEN") self.setNote3_Label("Stop") else: self.setNote3_Label("Neutral") if(AppConfig.EnableMotors): if(DetectOut == "RIGHT"): self.motor.goRight() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() print "STOP" self.detectedDirection = "STOP" self.lastDetected = "STOP" self.ArrowFrameControl.showArrow("NEUTRAL", "GREEN") self.setNote3_Label("Stop") self.FWD = False elif(DetectOut == "LEFT"): self.motor.goLeft() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() print "STOP" self.detectedDirection = "STOP" self.lastDetected = "STOP" self.ArrowFrameControl.showArrow("NEUTRAL", "GREEN") self.setNote3_Label("Stop") self.FWD = False elif(DetectOut == "FORWARD"): if(self.FWD): self.motor.goForward() else: self.motor.stop() ''' if(self.detectedDirection == "RIGHT"): self.motor.goRight() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() print "STOP" self.detectedDirection = "STOP" self.lastDetected = "STOP" self.ArrowFrameControl.showArrow("NEUTRAL", "GREEN") self.setNote3_Label("Stop") elif(self.detectedDirection == "LEFT"): self.motor.goLeft() time.sleep(AppConfig.MotorStopDelay) self.motor.stop() print "STOP" self.detectedDirection = "STOP" self.lastDetected = "STOP" self.ArrowFrameControl.showArrow("NEUTRAL", "GREEN") self.setNote3_Label("Stop") elif(self.detectedDirection == "FWD"): self.motor.goForward() else: self.motor.stop() ''' if(AppConfig.PrintSessionDetails): print self.detectedDirection + " Detected in " + str("%.2f" % self.AvgDetectionTime) + " sec" self.finishedDetect = True self.TrialDataTimer.start(100) def untoggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(True) def toggleIcon_Clicked(self, event): self.detalisParent_Frame.setVisible(False) def onResize(self, event): self.resetControlsPosition()