Пример #1
0
        /// <summary>
        ///   This method iterates the imported fixation rows to
        ///   catch the trial changes that are detected during the call
        ///   of <see cref="GenerateOgamaFixationDataList(int)" />.
        ///   The trials are then written into the trial list.
        /// </summary>
        private static void GenerateOgamaSubjectAndTrialList()
        {
            // Clear foregoing imports.
            TrialList.Clear();
            SubjectList.Clear();

            if (FixationDataList.Count == 0)
            {
                return;
            }

            // Initializes variables
            var lastSequence = -5;
            var lastSubject  = "#";

            // Iterate raw data list
            for (int i = 0; i < FixationDataList.Count; i++)
            {
                var    importRow       = FixationDataList[i];
                int    currentSequence = importRow.TrialSequence;
                string currentSubject  = importRow.SubjectName;

                FixationDataList[i] = importRow;

                // If subject has changed write new subject table entry.
                if (currentSubject != lastSubject)
                {
                    var newSubjectsData = new SubjectsData {
                        SubjectName = currentSubject
                    };
                    SubjectList.Add(newSubjectsData);
                    lastSubject = currentSubject;
                }

                // If trial has changed parse the trial information to
                // create a trial entry in the trialList.
                if (currentSequence != lastSequence)
                {
                    string subject = importRow.SubjectName ?? "Subject1";

                    // Create trial row
                    var newTrialData = new TrialsData
                    {
                        SubjectName   = subject,
                        TrialSequence = importRow.TrialSequence,
                        TrialID       = importRow.TrialID,
                        TrialName     = importRow.TrialID.ToString(CultureInfo.InvariantCulture)
                    };

                    TrialList.Add(newTrialData);

                    lastSequence = currentSequence;
                }
            }
        }
Пример #2
0
        ///////////////////////////////////////////////////////////////////////////////
        // Eventhandler                                                              //
        ///////////////////////////////////////////////////////////////////////////////
        #region EVENTS

        ///////////////////////////////////////////////////////////////////////////////
        // Eventhandler for UI, Menu, Buttons, Toolbars etc.                         //
        ///////////////////////////////////////////////////////////////////////////////
        #region WINDOWSEVENTHANDLER
        #endregion //WINDOWSEVENTHANDLER

        ///////////////////////////////////////////////////////////////////////////////
        // Eventhandler for Custom Defined Events                                    //
        ///////////////////////////////////////////////////////////////////////////////
        #region CUSTOMEVENTHANDLER
        #endregion //CUSTOMEVENTHANDLER

        #endregion //EVENTS

        ///////////////////////////////////////////////////////////////////////////////
        // Methods and Eventhandling for Background tasks                            //
        ///////////////////////////////////////////////////////////////////////////////
        #region BACKGROUNDWORKER
        #endregion //BACKGROUNDWORKER

        ///////////////////////////////////////////////////////////////////////////////
        // Inherited methods                                                         //
        ///////////////////////////////////////////////////////////////////////////////
        #region OVERRIDES
        #endregion //OVERRIDES

        ///////////////////////////////////////////////////////////////////////////////
        // Methods for doing main class job                                          //
        ///////////////////////////////////////////////////////////////////////////////
        #region METHODS

        /// <summary>
        /// Generate all the lists of subject, trial and raw data.
        /// </summary>
        /// <remarks>This is the heart of the class. If something does not work as expected,
        /// first have a look here.</remarks>
        private static void GenerateSubjectTrialRawdataList()
        {
            rawDataList.Clear();
            trialList.Clear();
            subjectList.Clear();
            trialEventsList.Clear();

            // Use the decimal separator specified.
            NumberFormatInfo nfi = CultureInfo.GetCultureInfo("en-US").NumberFormat;

            if (asciiSettings.DecimalSeparatorCharacter == ',')
            {
                nfi = CultureInfo.GetCultureInfo("de-DE").NumberFormat;
            }

            // Begin reading File
            string lastSubject = string.Empty;
            int    lastTrialID = -5;
            string line        = string.Empty;
            int    counter     = 0;

            try
            {
                // Open file
                using (StreamReader importReader = new StreamReader(asciiSettings.Filename))
                {
                    string[] columns;
                    Dictionary <string, int> columnNames = new Dictionary <string, int>();

                    // Read every line of ImportFile
                    while ((line = importReader.ReadLine()) != null)
                    {
                        // ignore empty lines
                        if (line.Trim() == string.Empty)
                        {
                            continue;
                        }

                        // Ignore Quotes
                        if (line.StartsWith("#"))
                        {
                            continue;
                        }

                        // Skip first line filled with column titles
                        if (counter == 0)
                        {
                            columns = line.Split('\t');
                            for (int i = 0; i < columns.Length; i++)
                            {
                                columnNames.Add(columns[i], i);
                            }

                            counter++;
                            continue;
                        }

                        // Split line in columns
                        string[] items = line.Split('\t');

                        // read subjects data
                        string subjectName = items[columnNames["SubjectName"]];
                        if (subjectName != lastSubject)
                        {
                            SubjectsData newSubjectData = new SubjectsData();
                            newSubjectData.SubjectName = subjectName;
                            newSubjectData.Category    = items[columnNames["SubjectCategory"]];
                            int result;
                            if (int.TryParse(items[columnNames["Age"]], out result))
                            {
                                newSubjectData.Age = result;
                            }

                            newSubjectData.Sex        = items[columnNames["Sex"]];
                            newSubjectData.Handedness = items[columnNames["Handedness"]];
                            newSubjectData.Comments   = items[columnNames["Comments"]];

                            if (!subjectList.Contains(newSubjectData))
                            {
                                subjectList.Add(newSubjectData);
                            }

                            lastSubject = subjectName;
                        }

                        // read trials data
                        int trialID = Convert.ToInt32(items[columnNames["TrialID"]]);
                        if (trialID != lastTrialID)
                        {
                            TrialsData newTrialsData = new TrialsData();
                            newTrialsData.SubjectName    = subjectName;
                            newTrialsData.TrialID        = trialID;
                            newTrialsData.TrialName      = items[columnNames["TrialName"]];
                            newTrialsData.TrialSequence  = Convert.ToInt32(items[columnNames["TrialSequence"]]);
                            newTrialsData.Category       = items[columnNames["TrialCategory"]];
                            newTrialsData.TrialStartTime = Convert.ToInt64(items[columnNames["TrialStartTime"]]);
                            int result;
                            if (int.TryParse(items[columnNames["Duration"]], out result))
                            {
                                newTrialsData.Duration = result;
                            }

                            if (items[columnNames["EliminateData"]] != string.Empty)
                            {
                                newTrialsData.EliminateData = true;
                            }

                            if (!trialList.Contains(newTrialsData))
                            {
                                trialList.Add(newTrialsData);
                            }

                            lastTrialID = trialID;
                        }

                        // read trials data
                        string eventeventID = items[columnNames["EventEventID"]];
                        if (eventeventID != string.Empty)
                        {
                            TrialEventsData newTrialEventsData = new TrialEventsData();
                            newTrialEventsData.EventID       = Convert.ToInt32(items[columnNames["EventEventID"]]);
                            newTrialEventsData.EventParam    = items[columnNames["EventParam"]];
                            newTrialEventsData.EventTask     = items[columnNames["EventTask"]];
                            newTrialEventsData.EventTime     = Convert.ToInt64(items[columnNames["EventTime"]]);
                            newTrialEventsData.EventType     = items[columnNames["EventType"]];
                            newTrialEventsData.SubjectName   = subjectName;
                            newTrialEventsData.TrialSequence = Convert.ToInt32(items[columnNames["TrialSequence"]]);
                            if (!trialEventsList.Contains(newTrialEventsData))
                            {
                                trialEventsList.Add(newTrialEventsData);
                            }
                        }

                        // Create Ogama columns placeholder
                        RawData newRawData = new RawData();

                        // Save time value
                        newRawData.Time          = Convert.ToInt64(items[columnNames["Time"]]);
                        newRawData.SubjectName   = subjectName;
                        newRawData.TrialSequence = Convert.ToInt32(items[columnNames["TrialSequence"]]);
                        newRawData.Category      = items[columnNames["TrialCategory"]];

                        if (items[columnNames["PupilDiaX"]] != string.Empty)
                        {
                            newRawData.PupilDiaX = Convert.ToSingle(items[columnNames["PupilDiaX"]], nfi);
                        }

                        if (items[columnNames["PupilDiaY"]] != string.Empty)
                        {
                            newRawData.PupilDiaY = Convert.ToSingle(items[columnNames["PupilDiaY"]], nfi);
                        }

                        if (items[columnNames["GazePosX"]] != string.Empty)
                        {
                            newRawData.GazePosX = Convert.ToSingle(items[columnNames["GazePosX"]], nfi);
                        }

                        if (items[columnNames["GazePosY"]] != string.Empty)
                        {
                            newRawData.GazePosY = Convert.ToSingle(items[columnNames["GazePosY"]], nfi);
                        }

                        if (items[columnNames["MousePosX"]] != string.Empty)
                        {
                            newRawData.MousePosX = Convert.ToSingle(items[columnNames["MousePosX"]], nfi);
                        }

                        if (items[columnNames["MousePosY"]] != string.Empty)
                        {
                            newRawData.MousePosY = Convert.ToSingle(items[columnNames["MousePosY"]], nfi);
                        }

                        if (items[columnNames["EventID"]] != string.Empty)
                        {
                            newRawData.EventID = Convert.ToInt32(items[columnNames["EventID"]]);
                        }

                        // Add the parsed raw data row to the list.
                        rawDataList.Add(newRawData);
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionMethods.HandleException(ex);
            }
        }