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