コード例 #1
0
        private IEnumerable <View> GetViews(StreamWriter logWriter, StreamWriter anslog)
        {
            RandomizedQueue <StudyTestPair> usedPairs = new RandomizedQueue <StudyTestPair>();

            var stimulusPairs = new RandomizedQueue <StudyTestPair>();

            stimulusPairs.AddRange(this.stp);

            while (stimulusPairs.Count > 0)
            {
                StudyTestPair currstp = stimulusPairs.RemoveRandom();
                usedPairs.Add(currstp);
                foreach (var view in RunTrial(currstp.test, currstp.answer, currstp.index, logWriter, anslog))
                {
                    yield return(view);
                }
            }
            stimulusPairs.AddRange(usedPairs);
        }
コード例 #2
0
        private IEnumerable <View> GetViews(ISynchronizeInvoke invoker, StreamWriter anslog, StreamWriter logWriter, StreamWriter dataWriter, int round, RandomizedQueue <string> pres)
        {
            var currentTrialEntries = new List <EEGDataEntry>();

            //To do: Save the date/time earlier and use it for both this and the dataWriter. Put it in GetEnumerator and pass to GetViews

            using (var artifactListener = new EEGDataListener(invoker, null, data =>
            {
                foreach (var entry in data)
                {
                    if (entry.HasStimulusMarker())
                    {
                        lock (currentTrialEntries)
                        {
                            currentTrialEntries.Add(entry);
                        }
                    }
                }
            }, null))
            {
                this.dataSource.AddListener(artifactListener);
                //DIFFERENCE: Instead of getting blocks, we want to go through the entire set once for each test phase, but we
                //want items within that set to be random
                RandomizedQueue <StudyTestPair> usedPairs = new RandomizedQueue <StudyTestPair>();

                var stimulusPairs = new RandomizedQueue <StudyTestPair>();
                stimulusPairs.AddRange(this.stp);

                while (stimulusPairs.Count > 0)
                {
                    StudyTestPair currstp = stimulusPairs.RemoveRandom();
                    usedPairs.Add(currstp);
                    //logWriter.WriteLine("Question: " + currstp.index);
                    foreach (var view in RunTrial(round, currstp.test, currstp.answer, currstp.index, dataWriter, logWriter, anslog, currentTrialEntries, pres))
                    {
                        yield return(view);
                    }
                }
                stimulusPairs.AddRange(usedPairs);
            }
        }
コード例 #3
0
        /// <summary>
        /// The enumerator implementation
        /// </summary>
        public override IEnumerator <View> GetEnumerator()
        {
            IViewResult result;
            RandomizedQueue <string> pres = new RandomizedQueue <string>();

            pres.AddRange(presentation);
            using (var logWriter = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test_log_" + settings.SubjectName + "_" + DateTime.Now.ToString("MM dd yyyy H mm ss") + ".txt")))
                using (var anslog = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test_anslog_" + settings.SubjectName + "_" + DateTime.Now.ToString("MM dd yyyy H mm ss") + ".txt")))
                {
                    //Click to Start
                    yield return(new ChoiceView(new string[]
                    {
                        "Start Test"
                    }, out result)
                    {
                        Text = "Click When Ready"
                    });

                    foreach (var view in this.GetViews(logWriter, anslog))
                    {
                        yield return(view);
                    }
                }
        }
コード例 #4
0
        /// <summary>
        /// The enumerator implementation
        /// </summary>
        public override IEnumerator <View> GetEnumerator()
        {
            IViewResult result;
            Random      numgen = new Random();
            int         a, b;
            RandomizedQueue <string> pres     = new RandomizedQueue <string>();
            RandomizedQueue <string> usedPres = new RandomizedQueue <string>();

            pres.AddRange(presentation);
            using (var logWriter = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "krmon_log_" + settings.SubjectName + "_" + DateTime.Now.ToString("MM dd yyyy H mm ss") + ".txt")))
                using (var anslog = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "krmon_anslog_" + settings.SubjectName + "_" + DateTime.Now.ToString("MM dd yyyy H mm ss") + ".txt")))
                    using (var dataWriter = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "krmon_data_" + settings.SubjectName + "_" + DateTime.Now.ToString("MM dd yyyy H mm ss") + ".csv")))
                    {
                        //Alternating Study and Test Phases
                        for (int i = 0; i < settings.NumRounds; i++)
                        {
                            yield return(new ChoiceView(new string[]
                            {
                                "Start Study Phase"
                            }, out result)
                            {
                                Text = "Click When Ready"
                            });

                            while (pres.Count > 0)
                            {
                                var stimulus = pres.RemoveRandom();
                                yield return(new TextView(stimulus, this.settings.PresentationTime, GUIUtils.Constants.DISPLAY_FONT_LARGE));

                                yield return(new RestView(this.settings.RestTime));

                                usedPres.Add(stimulus);
                            }
                            pres.AddRange(usedPres);
                            usedPres.Clear();

                            a = numgen.Next(4, 13);
                            b = numgen.Next(4, 13);

                            yield return(new VocabView(string.Format("{0} x {1} = {2}", a, b, a * b), "Verify", settings.DisplayTime, settings.DelayTime, true, anslog, out result));

                            yield return(new ChoiceView(new string[]
                            {
                                "Start Test Phase"
                            }, out result)
                            {
                                Text = "Click When Ready"
                            });

                            var connected = true; // assume it's connected
                            using (var invoker = new SingleThreadedInvoker())
                                using (var connectionListener = new EEGDataListener(invoker, s => connected = true, null, s => connected = false))
                                {
                                    // listen for a broken connection
                                    this.dataSource.AddListener(connectionListener);
                                    foreach (var view in this.GetViews(invoker, anslog, logWriter, dataWriter, i, pres))
                                    {
                                        if (connected)
                                        {
                                            yield return(view);
                                        }
                                        else
                                        {
                                            GUIUtils.Alert("Lost connection to headset!");
                                            break;
                                        }
                                    }

                                    this.dataSource.RemoveListener(connectionListener);
                                }
                        }
                    }
        }
コード例 #5
0
        /// <summary>
        /// The enumerator implementation
        /// </summary>
        public override IEnumerator <View> GetEnumerator()
        {
            IViewResult result;


            yield return(new ChoiceView(new string[]
            {
                "Start Training Phase"
            }, out result)
            {
                Text = "Click When Ready"
            });

            for (int j = 0; j < comp.Count; j++)
            {
                yield return(new TextView(comp[j], settings.PresentationTime, GUIUtils.Constants.DISPLAY_FONT_LARGE));

                yield return(new RestView(settings.RestTime));
            }
            yield return(new ChoiceView(new string[]
            {
                "Begin Testing"
            }, out result)
            {
                Text = "Click When Ready"
            });

            //Display each block of stimuli
            for (int j = 0; j < (settings.NumBlocks * 2); j++)
            {
                int limit = blocks[j].Count;
                for (int k = 0; k < limit; k++)
                {
                    //Rest
                    yield return(new RestView(this.settings.BlinkTime));

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

                    var stimulus = blocks[j].RemoveRandom();
                    //Generate stimulus view
                    yield return(new TextView(stimulus, settings.PresentationTime, GUIUtils.Constants.DISPLAY_FONT_LARGE));

                    yield return(new TextView(stimulus + "*", settings.PresentationTime / 2, GUIUtils.Constants.DISPLAY_FONT_LARGE));
                }
                yield return(new ChoiceView(new string[]
                {
                    "Ready for next block"
                }, out result));
            }

            RandomizedQueue <string>        pres      = new RandomizedQueue <string>();
            RandomizedQueue <string>        usedPres  = new RandomizedQueue <string>();
            RandomizedQueue <StudyTestPair> studySoon = new RandomizedQueue <StudyTestPair>();
            RandomizedQueue <StudyTestPair> testSoon  = new RandomizedQueue <StudyTestPair>();
            RandomizedQueue <StudyTestPair> testLate  = new RandomizedQueue <StudyTestPair>();

            pres.AddRange(presentation);
            testSoon.AddRange(stp);
            yield return(new ChoiceView(new string[]
            {
                "Start Initial Study Phase"
            }, out result)
            {
                Text = "Click When Ready"
            });

            while (pres.Count > 0)
            {
                var stimulus = pres.RemoveRandom();
                yield return(new TextView(stimulus, this.settings.PresentationTime, GUIUtils.Constants.DISPLAY_FONT_LARGE));

                yield return(new RestView(this.settings.RestTime));

                usedPres.Add(stimulus);
            }
            pres.AddRange(usedPres);
            using (var logWriterV = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "userctrl_logv_" + settings.SubjectName + "_" + DateTime.Now.ToString("MM dd yyyy H mm ss") + ".txt")))
                using (var logWriter = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "userctrl_log_" + settings.SubjectName + "_" + DateTime.Now.ToString("MM dd yyyy H mm ss") + ".csv")))
                {
                    yield return(new ChoiceView(new string[]
                    {
                        "Start Practice Phase"
                    }, out result)
                    {
                        Text = "Click When Ready"
                    });


                    using (var invoker = new SingleThreadedInvoker())
                    {
                        foreach (var view in this.GetViews(invoker, logWriterV, logWriter,
                                                           studySoon, testSoon, testLate))
                        {
                            yield return(view);
                        }
                    }
                }
        }