public void LoadData(IMouseDataExtendedResult data) { StartFrame = 0; KeyValuePair <int, ISingleFrameExtendedResults> kvp = data.Results.FirstOrDefault(x => x.Value.HeadPoints == null); if (kvp.Equals(default(KeyValuePair <int, ISingleFrameExtendedResults>))) { EndFrame = data.Results.Count; } else { EndFrame = kvp.Key; } RepeatSmooths = 1; Data = data; MaxVelocity = data.MaxSpeed; MaxCentroidVelocity = data.MaxCentroidSpeed; MaxAngularVelocity = data.MaxAngularVelocty; AverageVelocity = data.AverageVelocity; AverageCentroidVelocity = data.AverageCentroidVelocity; AverageAngularVelocity = data.AverageAngularVelocity; DistanceTravelled = data.DistanceTravelled; CentroidDistanceTravelled = data.CentroidDistanceTravelled; OriginalFrameRate = data.FrameRate; UnitsToMm = data.UnitsToMilimeters; StatGenerator stat = new StatGenerator(); stat.StartFrame = StartFrame; stat.EndFrame = EndFrame; stat.SmoothingFunction = SelectedSmoothingFunction; stat.UseDft = UseDft; stat.SmoothRepeats = RepeatSmooths; stat.Generate(data.Results, OriginalFrameRate); IWhiskerAverageAngles angles = new WhiskerAverageAngles(); angles.StartFrame = 0; angles.EndFrame = data.Results.Count - 1; var allAngles = angles.GetWhiskerAngles(data.Results); LoadData(allAngles[0], allAngles[1]); LeftWhiskerAmplitude = stat.LeftWhiskerAmplitude; RightWhiskerAmplitude = stat.RightWhiskerAmplitude; LeftWhiskerAvgAngularVelocity = stat.LeftAverageAngularVelocity; RightWhiskerAvgAngularVelocity = stat.RightAverageAngularVelocity; LeftWhiskerAvgProtractionVelocity = stat.LeftAverageProtractionVelocity; RightWhiskerAvgProtractionVelocity = stat.RightAverageProtractionVelocity; LeftWhiskerAvgRetractionVelocity = stat.LeftAverageRetractionVelocity; RightWhiskerAvgRetractionVelocity = stat.RightAverageRetractionVelocity; LeftWhiskerFrequency = stat.LeftWhiskerFrequency; RightWhiskerFrequency = stat.RightWhiskerFrequnecy; LeftWhiskerMeanOffset = stat.LeftMeanOffset; RightWhiskerMeanOffset = stat.RightMeanOffset; UpdateSmoothing(); }
public double[][] Generate(Dictionary <int, ISingleFrameExtendedResults> results, double frameRate, bool onlyForInteracting = false) { //Get signal IWhiskerAverageAngles angles = new WhiskerAverageAngles(); angles.StartFrame = StartFrame; angles.EndFrame = EndFrame; var allAngles = angles.GetWhiskerAngles(results, onlyForInteracting); if (allAngles == null || !allAngles.Any() || (allAngles[0].Count == 0 && allAngles[1].Count == 0)) { return(null); } LeftSignal = allAngles[0].Select(x => x.Value).ToArray(); RightSignal = allAngles[1].Select(x => x.Value).ToArray(); double[] leftSignal = LeftSignal; double[] rightSignal = RightSignal; if (SmoothingFunction != null) { for (int i = 0; i < SmoothRepeats; i++) { leftSignal = SmoothingFunction.Smooth(leftSignal); rightSignal = SmoothingFunction.Smooth(rightSignal); } } LeftSignal = leftSignal; RightSignal = rightSignal; IFrequency frequency = new Frequency(); frequency.UseDft = false; frequency.Signal = LeftSignal; frequency.FrameRate = frameRate; frequency.UseDft = UseDft; double[] leftZeroed, rightZeroed; double lefFequency = frequency.GetFrequency(out leftZeroed); frequency.Signal = RightSignal; double rightFrequency = frequency.GetFrequency(out rightZeroed); Console.WriteLine($"Left Freq: {lefFequency}, Right freq: {rightFrequency}"); LeftWhiskerFrequency = lefFequency; RightWhiskerFrequnecy = rightFrequency; //Get amplitude Amplitude amp = new Amplitude(); LeftWhiskerAmplitude = amp.GetMaxAmpitude(LeftSignal); RightWhiskerAmplitude = amp.GetMaxAmpitude(RightSignal); //Get mean offset MeanOffset offSet = new MeanOffset(); LeftMeanOffset = offSet.GetMeanOffset(LeftSignal); RightMeanOffset = offSet.GetMeanOffset(RightSignal); SingleWhiskerProtractionRetraction proRetLeft = new SingleWhiskerProtractionRetraction(); SingleWhiskerProtractionRetraction proRetRight = new SingleWhiskerProtractionRetraction(); proRetLeft.FrameRate = 500; proRetRight.FrameRate = 500; proRetLeft.AngleSignal = LeftSignal; proRetRight.AngleSignal = RightSignal; LeftAverageAngularVelocity = proRetLeft.MeanAngularVelocity; LeftAverageProtractionVelocity = proRetLeft.MeanProtractionVelocity; LeftAverageRetractionVelocity = proRetLeft.MeanRetractionVelocity; RightAverageAngularVelocity = proRetRight.MeanAngularVelocity; RightAverageProtractionVelocity = proRetRight.MeanProtractionVelocity; RightAverageRetractionVelocity = proRetRight.MeanRetractionVelocity; return(new double[][] { leftZeroed, rightZeroed }); }