Esempio n. 1
0
        public IEnumerable <View> RunCompTrial(string stimulus, int cls, StreamWriter dataWriter, StreamWriter logWriter, List <EEGDataEntry> currentTrialEntries)
        {
            //Rest
            yield return(new RestView(this.settings.BlinkTime));

            //Fixate
            yield return(new FixationView(this.settings.FixationTime));

            //Generate stimulus view
            var stimulusView = new TextView(stimulus, this.settings.DisplayTime, GUIUtils.Constants.DISPLAY_FONT_LARGE);

            stimulusView.DoOnDeploy(c => this.dataSource.Marker = cls);
            bool needToRerun = false;

            stimulusView.DoOnFinishing(() =>
            {
                this.dataSource.Marker = EEGDataEntry.MARKER_DEFAULT;
                lock (currentTrialEntries)
                {
                    if (this.settings.ArtifactDetectionSettings.HasMotionArtifact(currentTrialEntries))
                    {
                        logWriter.WriteLine("Motion Artifact Detected");
                        needToRerun = true;
                    }
                    else
                    {
                        if (this.settings.SaveTrialData)
                        {
                            foreach (var entry in currentTrialEntries)
                            {
                                dataWriter.WriteLine(entry);
                            }
                        }

                        //Add training trials to the classifier
                        classifier.AddTrial(currentTrialEntries.AsIArray());
                    }
                    currentTrialEntries.Clear();
                }
            });
            logWriter.WriteLine(stimulus);
            yield return(stimulusView);

            yield return(new TextView(stimulus + "*", settings.SpeakTime, GUIUtils.Constants.DISPLAY_FONT_LARGE));

            //Check number of artifacts
            if (needToRerun)
            {
                if (cls == 1)
                {
                    numArt1++;
                }
                if (cls == 2)
                {
                    numArt2++;
                }
                numArt++;
            }
            if (numArt > 12)
            {
                numArt = 0;
                yield return(new TextView("Please keep face movements to a minimum", settings.InstructionTime, GUIUtils.Constants.DISPLAY_FONT_LARGE));
            }
        }