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