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)); } }