コード例 #1
0
        public static string GetPursuitTextLog(EyeMoveCalculation calc)
        {
            var sb     = new StringBuilder();
            var sep    = "  ";
            var rowSep = "=========================================";

            sb.Append(rowSep);
            sb.Append(Environment.NewLine);
            sb.Append($"Date/Time: {DateTime.Now.ToShortDateString()} {DateTime.Now.ToShortTimeString()}");
            sb.Append(Environment.NewLine);
            sb.Append($"Results for: {EyeMoveTypes.Pursuit} Move");
            sb.Append(Environment.NewLine);
            sb.Append(rowSep);
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);

            if (calc.PursuitLongSinGain != null)
            {
                sb.Append($"Eye/Spot Long Sin Gain: {Math.Round(calc.PursuitLongSinGain.GetValueOrDefault(), 2)} ");
                sb.Append(Environment.NewLine);
            }
            if (calc.PursuitMidSinGain != null)
            {
                sb.Append($"Eye/Spot Mid Sin Gain: {Math.Round(calc.PursuitMidSinGain.GetValueOrDefault(), 2)} ");
                sb.Append(Environment.NewLine);
            }

            if (calc.PursuitShortSinGain != null)
            {
                sb.Append($"Eye/Spot Short Sin Gain: {Math.Round(calc.PursuitShortSinGain.GetValueOrDefault(), 2)} ");
                sb.Append(Environment.NewLine);
            }

            sb.Append(Environment.NewLine);

            if (calc.PursuitLongSinAccuracy != null)
            {
                sb.Append($"Long Sin Accuracy: {Math.Round(calc.PursuitLongSinAccuracy.GetValueOrDefault(), 2)} ");
                sb.Append(Environment.NewLine);
            }
            if (calc.PursuitMidSinAccuracy != null)
            {
                sb.Append($"Mid Sin Accuracy: {Math.Round(calc.PursuitMidSinAccuracy.GetValueOrDefault(), 2)} ");
                sb.Append(Environment.NewLine);
            }
            if (calc.PursuitShortSinAccuracy != null)
            {
                sb.Append($"Short Sin Accuracy: {Math.Round(calc.PursuitShortSinAccuracy.GetValueOrDefault(), 2)} ");
                sb.Append(Environment.NewLine);
            }
            return(sb.ToString());
        }
コード例 #2
0
        public static string GetCsvOutput(bool addHeader, List <EyeMoveCalculation> saccadeCalculations,
                                          List <EyeMoveCalculation> antiSaccadeCalculations, EyeMoveCalculation pursuitMoveCalculations, CalcConfig config, FiltersConfig filtersConfig)
        {
            string csvDelimiter = " "; //"\t";
            var    sb           = new StringBuilder();

            sb.Append("Saccades:");
            sb.Append(Environment.NewLine);
            if (addHeader)
            {
                sb.Append("ID" + csvDelimiter);
                sb.Append("FromFixationPoint" + csvDelimiter);
                sb.Append("EyeMoveType" + csvDelimiter);
                sb.Append("Latency" + csvDelimiter);
                sb.Append("Duration" + csvDelimiter);
                sb.Append("Distance" + csvDelimiter);
                sb.Append("Amplitude" + csvDelimiter);
                sb.Append("AvgVelocity" + csvDelimiter);
                sb.Append("MaxVelocity" + csvDelimiter);
                sb.Append("Gain" + Environment.NewLine);
            }

            foreach (var outputItem in saccadeCalculations)
            {
                sb.Append(outputItem.EyeMove.Id + csvDelimiter);
                sb.Append(outputItem.EyeMove.IsFirstMove + csvDelimiter);
                sb.Append(outputItem.EyeMove.EyeMoveType + csvDelimiter);
                sb.Append(outputItem.Latency + csvDelimiter);
                sb.Append(outputItem.Duration + csvDelimiter);
                sb.Append(outputItem.Distance + csvDelimiter);
                sb.Append(outputItem.Amplitude + csvDelimiter);
                sb.Append(outputItem.AvgVelocity + csvDelimiter);
                sb.Append(outputItem.MaxVelocity + csvDelimiter);
                sb.Append(outputItem.Gain + csvDelimiter);
                sb.Append(Environment.NewLine);
            }

            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("AntiSaccades:");
            sb.Append(Environment.NewLine);
            if (addHeader)
            {
                sb.Append("ID" + csvDelimiter);
                sb.Append("FromFixationPoint" + csvDelimiter);
                sb.Append("EyeMoveType" + csvDelimiter);
                sb.Append("Latency" + csvDelimiter);
                sb.Append("Duration" + csvDelimiter);
                sb.Append("Distance" + csvDelimiter);
                sb.Append("Amplitude" + csvDelimiter);
                sb.Append("AvgVelocity" + csvDelimiter);
                sb.Append("MaxVelocity" + csvDelimiter);
                sb.Append("Gain" + Environment.NewLine);
            }

            foreach (var outputItem in antiSaccadeCalculations)
            {
                sb.Append(outputItem.EyeMove.Id + csvDelimiter);
                sb.Append(outputItem.EyeMove.IsFirstMove + csvDelimiter);
                sb.Append(outputItem.EyeMove.EyeMoveType + csvDelimiter);
                sb.Append(outputItem.Latency + csvDelimiter);
                sb.Append(outputItem.Duration + csvDelimiter);
                sb.Append(outputItem.Distance + csvDelimiter);
                sb.Append(outputItem.Amplitude + csvDelimiter);
                sb.Append(outputItem.AvgVelocity + csvDelimiter);
                sb.Append(outputItem.MaxVelocity + csvDelimiter);
                sb.Append(outputItem.Gain + csvDelimiter);
                sb.Append(Environment.NewLine);
            }

            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("Pursuit:");
            sb.Append(Environment.NewLine);

            if (addHeader)
            {
                sb.Append("Long Sin Gain" + csvDelimiter);
                sb.Append("Mid Sin Gain" + csvDelimiter);
                sb.Append("Short Sin Gain" + csvDelimiter);
                sb.Append("Long Sin Accuracy" + csvDelimiter);
                sb.Append("Mid Sin Accuracy" + csvDelimiter);
                sb.Append("Short Sin Accuracy" + csvDelimiter);
                sb.Append(Environment.NewLine);
            }


            sb.Append(pursuitMoveCalculations.PursuitLongSinGain + csvDelimiter);
            sb.Append(pursuitMoveCalculations.PursuitMidSinGain + csvDelimiter);
            sb.Append(pursuitMoveCalculations.PursuitShortSinGain + csvDelimiter);
            sb.Append(pursuitMoveCalculations.PursuitLongSinAccuracy + csvDelimiter);
            sb.Append(pursuitMoveCalculations.PursuitMidSinAccuracy + csvDelimiter);
            sb.Append(pursuitMoveCalculations.PursuitShortSinAccuracy + csvDelimiter);
            sb.Append(Environment.NewLine);

            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("Found");
            sb.Append(Environment.NewLine);
            sb.Append($"Saccades: {saccadeCalculations.Count}");
            sb.Append(Environment.NewLine);
            sb.Append($"AntiSaccades: {antiSaccadeCalculations.Count}");
            sb.Append(Environment.NewLine);
            sb.Append($"Inorrect AntiSaccades: {19 - antiSaccadeCalculations.Count}");

            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("Settings");
            sb.Append(Environment.NewLine);
            sb.Append($"Distance From Screen: {csvDelimiter} {config.DistanceFromScreen}");
            sb.Append(Environment.NewLine);
            sb.Append($"Tracker Frequency: {csvDelimiter} {config.TrackerFrequency}");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("Sacade Search Configuration");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Latency: {csvDelimiter} {config.SaccadeMoveFinderConfig.MinLatency}");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Duration: {csvDelimiter}  {config.SaccadeMoveFinderConfig.MinDuration}");
            sb.Append(Environment.NewLine);
            sb.Append($"Control Window Length: {csvDelimiter} {config.SaccadeMoveFinderConfig.ControlWindowLength}");
            sb.Append(Environment.NewLine);
            sb.Append($"Control Amplitude Divider: {csvDelimiter} {config.SaccadeMoveFinderConfig.ControlAmpDivider}");
            sb.Append(Environment.NewLine);
            sb.Append($"Move Search Window Length: {csvDelimiter} {config.SaccadeMoveFinderConfig.MoveSearchWindowLength}");
            sb.Append(Environment.NewLine);
            sb.Append($"Move Min.Length: {csvDelimiter} {config.SaccadeMoveFinderConfig.MinLength}");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Inhibition: {csvDelimiter} {config.SaccadeMoveFinderConfig.MinInhibition}");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Amplitude: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MinAmp}");
            sb.Append(Environment.NewLine);
            sb.Append($"Max.Amplitude: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MaxAmp}");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);

            sb.Append("AntiSacade Search Configuration");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Latency: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MinLatency}");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Duration: {csvDelimiter}  {config.AntiSaccadeMoveFinderConfig.MinDuration}");
            sb.Append(Environment.NewLine);
            sb.Append($"Control Window Length: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.ControlWindowLength}");
            sb.Append(Environment.NewLine);
            sb.Append($"Control Amplitude Divider: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.ControlAmpDivider}");
            sb.Append(Environment.NewLine);
            sb.Append($"Move Search Window Length: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MoveSearchWindowLength}");
            sb.Append(Environment.NewLine);
            sb.Append($"Move Min.Length: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MinLength}");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Inhibition: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MinInhibition}");
            sb.Append(Environment.NewLine);
            sb.Append($"Min.Amplitude: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MinAmp}");
            sb.Append(Environment.NewLine);
            sb.Append($"Max.Amplitude: {csvDelimiter} {config.AntiSaccadeMoveFinderConfig.MaxAmp}");
            sb.Append(Environment.NewLine);

            if (filtersConfig.FilterByButterworth)
            {
                sb.Append(Environment.NewLine);
                sb.Append($"Filter Butterworth Settings:");
                sb.Append(Environment.NewLine);
                sb.Append($"Pass Type: {csvDelimiter} {filtersConfig.ButterworthPassType}");
                sb.Append(Environment.NewLine);
                sb.Append($"Frequency: {csvDelimiter} {filtersConfig.ButterworthFrequency}");
                sb.Append(Environment.NewLine);
                sb.Append($"Resonance: {csvDelimiter} {filtersConfig.ButterworthResonance}");
                sb.Append(Environment.NewLine);
                sb.Append($"SampleRate: {csvDelimiter} {filtersConfig.ButterworthSampleRate}");
                sb.Append(Environment.NewLine);
            }

            if (filtersConfig.FilterBySavitzkyGolay)
            {
                sb.Append(Environment.NewLine);
                sb.Append($"Filter Savitzky-Golay Settings:");
                sb.Append(Environment.NewLine);
                sb.Append($"Number Of Points: {csvDelimiter} {filtersConfig.SavitzkyGolayNumberOfPoints}");
                sb.Append(Environment.NewLine);
                sb.Append($"Derivative Order: {csvDelimiter} {filtersConfig.SavitzkyGolayDerivativeOrder}");
                sb.Append(Environment.NewLine);
                sb.Append($"Polynominal Order: {csvDelimiter} {filtersConfig.SavitzkyGolayPolynominalOrder}");
                sb.Append(Environment.NewLine);
            }

            if (saccadeCalculations?.Count > 0)
            {
                var saccStats = GetStatsForCollection(saccadeCalculations);
                sb.Append(Environment.NewLine);
                sb.Append("Saccade Statistics");
                sb.Append(Environment.NewLine);
                sb.Append(saccStats);
            }

            if (antiSaccadeCalculations?.Count > 0)
            {
                var antiSaccStats = GetStatsForCollection(antiSaccadeCalculations);
                sb.Append(Environment.NewLine);
                sb.Append("AntiSaccade Statistics");
                sb.Append(Environment.NewLine);
                sb.Append(antiSaccStats);
            }
            return(sb.ToString());
        }