/// <summary> /// Calculates the statistical parameters for the current trial and <see cref="SampleType"/> /// </summary> /// <param name="sampleType"> /// The <see cref="SampleType"/> of which the data should be used. /// </param> public void CalculateAOIStatistics(SampleType sampleType) { this.aoiStatistics = new Dictionary <string, AOIStatistic>(); foreach (VGElement aoi in this.AoiCollection) { var aoiStatistic = new AOIStatistic(); var aoiContainer = new VGElementCollection(); aoiContainer.Add(aoi); switch (sampleType) { case SampleType.Gaze: aoiStatistic = Statistics.Statistic.CalcAOIStatistic(this.GazeFixationsView, aoiContainer); break; case SampleType.Mouse: aoiStatistic = Statistics.Statistic.CalcAOIStatistic(this.MouseFixationsView, aoiContainer); break; } if (!this.aoiStatistics.ContainsKey(aoi.Name)) { this.aoiStatistics.Add(aoi.Name, aoiStatistic); } } }
/// <summary> /// Calculates the statistical parameters for the current trial and <see cref="SampleType"/> /// </summary> /// <param name="sampleType"> /// The <see cref="SampleType"/> of which the data should be used. /// </param> public void CalculateAOIStatistics(SampleType sampleType) { this.aoiStatistics = new Dictionary<string, AOIStatistic>(); foreach (VGElement aoi in this.AoiCollection) { var aoiStatistic = new AOIStatistic(); var aoiContainer = new VGElementCollection(); aoiContainer.Add(aoi); switch (sampleType) { case SampleType.Gaze: aoiStatistic = Statistics.Statistic.CalcAOIStatistic(this.GazeFixationsView, aoiContainer); break; case SampleType.Mouse: aoiStatistic = Statistics.Statistic.CalcAOIStatistic(this.MouseFixationsView, aoiContainer); break; } if (!this.aoiStatistics.ContainsKey(aoi.Name)) { this.aoiStatistics.Add(aoi.Name, aoiStatistic); } } }
/// <summary> /// This static method calculates the average fixation duration /// at the AOIs given in the table. /// </summary> /// <param name="fixationTable">A <see cref="DataTable"/> with the fixations /// to use.</param> /// <param name="aois">An <see cref="VGElementCollection"/> with the AOIs to calculate the parameter for.</param> /// <returns>An <see cref="int"/> with the average fixation duration at the AOIs in ms.</returns> public static AOIStatistic CalcAOIStatistic(DataView fixationTable, VGElementCollection aois) { AOIStatistic aoiStatistic = new AOIStatistic(); // NO Target AOI defined aoiStatistic.FixationDurationMean = -2; aoiStatistic.FixationDurationMedian = -2; aoiStatistic.FixationCount = -2; aoiStatistic.SumOfTimeOfAllFixations = -2; aoiStatistic.FirstHitTimeAfterBeeingOutside = -2; aoiStatistic.SaccadeDuration = -2; aoiStatistic.SaccadeLength = -2; aoiStatistic.SaccadeVelocity = -2; if (aois.Count == 0) { return aoiStatistic; } DataTable fixationsInAOIs = (DataTable)fixationTable.Table.Clone(); fixationsInAOIs.Clear(); int hitCount = 0; bool wasOutside = false; aoiStatistic.FirstHitTimeAfterBeeingOutside = -1; foreach (DataRowView fixRow in fixationTable) { if (IsFixAtTarget(aois, fixRow) != null) { hitCount++; aoiStatistic.HitTimes.Add(hitCount, (long)fixRow["StartTime"]); fixationsInAOIs.Rows.Add(fixRow.Row.ItemArray); if (wasOutside && aoiStatistic.FirstHitTimeAfterBeeingOutside == -1) { aoiStatistic.FirstHitTimeAfterBeeingOutside = (long)fixRow["StartTime"]; } } else { wasOutside = true; } } // Fixation Durations double[] fixationsDurations = GetFixationDurationsArray(fixationsInAOIs); Descriptive descriptives = new Descriptive(fixationsDurations); // -1 : no fixations in AOI if (fixationsDurations.Length > 0) { descriptives.Analyze(); // analyze the data } aoiStatistic.FixationDurationMean = fixationsDurations.Length == 0 ? -1 : descriptives.Result.Mean; aoiStatistic.FixationDurationMedian = fixationsDurations.Length == 0 ? -1 : descriptives.Result.Median; aoiStatistic.FixationCount = fixationsDurations.Length == 0 ? -1 : (int)descriptives.Result.Count; aoiStatistic.SumOfTimeOfAllFixations = fixationsDurations.Length == 0 ? -1 : descriptives.Result.Sum; // Saccade Durations double saccadeDuration; double saccadeLength; double saccadeVelocity; GetSaccadeArrays(fixationsInAOIs, out saccadeDuration, out saccadeLength, out saccadeVelocity); aoiStatistic.SaccadeDuration = saccadeDuration; aoiStatistic.SaccadeLength = saccadeLength; aoiStatistic.SaccadeVelocity = saccadeVelocity; return aoiStatistic; }