public EyeMoveCalculation CalculateSaccadeParams(EyeMove saccadePosition, EyeMoveTypes eyeMoveType) { var frameCount = Math.Abs(saccadePosition.EyeEndIndex - saccadePosition.EyeStartIndex); //+ 1; var duration = frameCount / this.trackerFrequency; var spotEyeIndexDiff = Math.Abs(saccadePosition.EyeStartIndex - saccadePosition.SpotMove.SpotStartIndex); var latency = (spotEyeIndexDiff / this.trackerFrequency); double[] saccadeCoords; if (eyeCoords.Length > 1) { saccadeCoords = eyeCoords.Skip(saccadePosition.EyeStartIndex).Take(Math.Abs(saccadePosition.EyeEndIndex - saccadePosition.EyeStartIndex) + 1).ToArray(); } else { saccadeCoords = eyeCoords; } var spotLenght = (saccadePosition.SpotMove.SpotEndIndex - saccadePosition.SpotMove.SpotStartIndex); var spotMove = spotCoords.Skip(saccadePosition.SpotMove.SpotStartIndex).Take(spotLenght).ToArray(); var eyeMoveDistancesOnScreen = CountOnScreenDistance(saccadeCoords); var multipiedDistanceOnScreen = eyeMoveDistancesOnScreen.Sum(); var spotMoveDistanceOnScreen = CountOnScreenDistance(spotMove).Sum(); var tangens = multipiedDistanceOnScreen / this.distanceFromScreen; var ampInRadians = Math.Atan(tangens); var amplitude = Math.Round(RadianToDegree(ampInRadians)); var maxEyeDistance = eyeMoveDistancesOnScreen.Max(); var movePrecentage = (maxEyeDistance / multipiedDistanceOnScreen) * 100; var maxAmpPercentage = (amplitude / 100) * movePrecentage; var maxVelocity = maxAmpPercentage / 0.016; /* 0.016 = one frame*/ var velocity = amplitude / duration; var gain = multipiedDistanceOnScreen / spotMoveDistanceOnScreen; return(new EyeMoveCalculation { EyeMove = saccadePosition, LatencyFrameCount = Convert.ToInt32(spotEyeIndexDiff), DurationFrameCount = Convert.ToInt32(frameCount), Latency = Math.Round(latency, 3), Duration = Math.Round(duration, 3), Distance = Math.Round(multipiedDistanceOnScreen, 3), Amplitude = amplitude, AvgVelocity = Math.Round(velocity, 0), MaxVelocity = Math.Round(maxVelocity, 0), Gain = Math.Round(gain, 2) }); }
public static EyeMove GetSaccadePositionItem(int id, int saccadeStartIndex, int saccadeEndIndex, EyeMove prevoiusSaccadeItem, ResultData results) { var eyeMove = new EyeMove { Id = id, IsStartFound = prevoiusSaccadeItem.IsStartFound, EyeStartIndex = saccadeStartIndex, EyeStartTime = results.TimeDeltas[saccadeStartIndex], EyeStartCoord = results.EyeCoords[saccadeStartIndex], IsEndFound = prevoiusSaccadeItem.IsEndFound, EyeEndIndex = saccadeEndIndex, EyeEndTime = results.TimeDeltas[saccadeEndIndex], EyeEndCoord = results.EyeCoords[saccadeEndIndex], SpotMove = prevoiusSaccadeItem.SpotMove }; eyeMove = EyeMoveSearchToolBox.CountTestValuesForEyeMove(eyeMove, results); return(eyeMove); }