[chronojump] Force sensor capture uses exercise percentBodyWeight



commit 636d79447b61cca0638db7b9fab73da085431bd7
Author: Xavier de Blas <xaviblas gmail com>
Date:   Thu Sep 5 11:42:44 2019 +0200

    Force sensor capture uses exercise percentBodyWeight

 src/forceSensor.cs            | 14 +++++++++-----
 src/gui/forceSensor.cs        | 34 +++++++++++++++++++++++-----------
 src/gui/forceSensorAnalyze.cs |  4 +++-
 3 files changed, 35 insertions(+), 17 deletions(-)
---
diff --git a/src/forceSensor.cs b/src/forceSensor.cs
index 7393bf6e..e2af47f3 100644
--- a/src/forceSensor.cs
+++ b/src/forceSensor.cs
@@ -27,8 +27,11 @@ public class ForceSensor
 {
        public enum CaptureOptions { NORMAL, ABS, INVERTED }
 
-       public static double ForceWithFlags(double force, CaptureOptions fsco)
+       public static double ForceWithCaptureOptionsAndBW (double force, CaptureOptions fsco, int 
percentBodyWeight, double personWeight)
        {
+               if(percentBodyWeight > 0 && personWeight > 0)
+                       force += 9.81 * percentBodyWeight * personWeight / 100.0;
+
                if(fsco == CaptureOptions.ABS)
                        return Math.Abs(force);
                if(fsco == CaptureOptions.INVERTED)
@@ -733,12 +736,13 @@ public class ForceSensorAnalyzeInstant
        private int graphWidth;
        private int graphHeight;
 
-       public ForceSensorAnalyzeInstant(string file, int graphWidth, int graphHeight, double start, double 
end, ForceSensor.CaptureOptions fsco)
+       public ForceSensorAnalyzeInstant(string file, int graphWidth, int graphHeight, double start, double 
end,
+                       int exercisePercentBW, double personWeight, ForceSensor.CaptureOptions fsco)
        {
                this.graphWidth = graphWidth;
                this.graphHeight = graphHeight;
 
-               readFile(file, start, end, fsco);
+               readFile(file, start, end, exercisePercentBW, personWeight, fsco);
 
                //on zoom adjust width
                if(start >= 0 || end >= 0)
@@ -752,7 +756,7 @@ public class ForceSensorAnalyzeInstant
                        fscAIPoints.Redo();
        }
 
-       private void readFile(string file, double start, double end, ForceSensor.CaptureOptions fsco)
+       private void readFile(string file, double start, double end, int exercisePercentBW, double 
personWeight, ForceSensor.CaptureOptions fsco)
        {
                fscAIPoints = new ForceSensorCapturePoints(graphWidth, graphHeight);
 
@@ -795,7 +799,7 @@ public class ForceSensorAnalyzeInstant
 
                                        int time = Convert.ToInt32(timeD);
                                        double force = Convert.ToDouble(strFull[1]);
-                                       force = ForceSensor.ForceWithFlags(force, fsco);
+                                       force = ForceSensor.ForceWithCaptureOptionsAndBW(force, fsco, 
exercisePercentBW, personWeight);
 
                                        fscAIPoints.Add(time, force);
                                        fscAIPoints.NumCaptured ++;
diff --git a/src/gui/forceSensor.cs b/src/gui/forceSensor.cs
index afa605fa..0a01c566 100644
--- a/src/gui/forceSensor.cs
+++ b/src/gui/forceSensor.cs
@@ -716,6 +716,13 @@ public partial class ChronoJumpWindow
                //printDataRow(dataRow);
        }
 
+       private ForceSensorExercise currentForceSensorExercise;
+       private void assignCurrentForceSensorExercise()
+       {
+               currentForceSensorExercise = (ForceSensorExercise) SqliteForceSensorExercise.Select (
+                                false, getExerciseIDFromAnyCombo(combo_force_sensor_exercise, 
forceSensorComboExercisesString, false), false)[0];
+       }
+
        //non GTK on this method
        private void forceSensorCaptureDo()
        {
@@ -747,14 +754,17 @@ public partial class ChronoJumpWindow
 
                Util.CreateForceSensorSessionDirIfNeeded (currentSession.UniqueID);
 
+               assignCurrentForceSensorExercise();
+
                string fileNamePre = currentPerson.Name + "_" +
-                       UtilGtk.ComboGetActive(combo_force_sensor_exercise) + "_" +
+                       Catalog.GetString(currentForceSensorExercise.Name) + "_" +
                        getLaterality() + "_" +
                        getCaptureComment() + //includes "_" if it's no empty
                        UtilDate.ToFile(DateTime.Now);
 
                ForceSensor.CaptureOptions forceSensorCaptureOption = getForceSensorCaptureOptions();
 
+
                //fileName to save the csv
                string fileName = Util.GetForceSensorSessionDir(currentSession.UniqueID) + 
Path.DirectorySeparatorChar + fileNamePre + ".csv";
 
@@ -816,19 +826,21 @@ public partial class ChronoJumpWindow
                        time -= firstTime;
 
                        LogB.Information(string.Format("time: {0}, force: {1}", time, force));
-                       //forceWithFlags have abs or inverted
-                       double forceWithFlags = ForceSensor.ForceWithFlags(force, forceSensorCaptureOption);
+                       //forceWithCaptureOptionsAndBW have abs or inverted
+                       double forceWithCaptureOptionsAndBW = ForceSensor.ForceWithCaptureOptionsAndBW(force, 
forceSensorCaptureOption,
+                                       currentForceSensorExercise.PercentBodyWeight, 
currentPersonSession.Weight);
+
                        if(forceSensorCaptureOption != ForceSensor.CaptureOptions.NORMAL)
-                               LogB.Information(string.Format("with abs or inverted flag: time: {0}, force: 
{1}", time, forceWithFlags));
+                               LogB.Information(string.Format("with abs or inverted flag: time: {0}, force: 
{1}", time, forceWithCaptureOptionsAndBW));
 
                        writer.WriteLine(time.ToString() + ";" + force.ToString()); //on file force is stored 
without flags
 
                        forceSensorValues.TimeLast = time;
-                       forceSensorValues.ForceLast = forceWithFlags;
+                       forceSensorValues.ForceLast = forceWithCaptureOptionsAndBW;
 
-                       forceSensorValues.SetMaxMinIfNeeded(forceWithFlags, time);
+                       forceSensorValues.SetMaxMinIfNeeded(forceWithCaptureOptionsAndBW, time);
 
-                       fscPoints.Add(time, forceWithFlags);
+                       fscPoints.Add(time, forceWithCaptureOptionsAndBW);
                        fscPoints.NumCaptured ++;
                        if(fscPoints.OutsideGraph())
                        {
@@ -1243,6 +1255,7 @@ LogB.Information(" re R ");
                        //when database is working the here the gui of ForceSensor.CaptureOptions will 
change, and graph will be done accordingly
                        combo_force_sensor_capture_options.Active = 0;
 
+                       assignCurrentForceSensorExercise();
                        forceSensorCopyTempAndDoGraphs();
 
                        //if drawingarea has still not shown, don't paint graph because GC screen is not 
defined
@@ -1360,7 +1373,7 @@ LogB.Information(" re R ");
                                {
                                        int time = Convert.ToInt32(strFull[0]);
                                        double force = Convert.ToDouble(strFull[1]);
-                                       force = ForceSensor.ForceWithFlags(force, fsco);
+                                       force = ForceSensor.ForceWithCaptureOptionsAndBW(force, fsco, 
currentForceSensorExercise.PercentBodyWeight, currentPersonSession.Weight);
 
                                        fscPoints.Add(time, force);
                                        fscPoints.NumCaptured ++;
@@ -1811,7 +1824,7 @@ LogB.Information(" re R ");
 
                genericWin = GenericWindow.Show(Catalog.GetString("Exercise"), false,   //don't show now
                                Catalog.GetString("Force sensor exercise:"), bigArray);
-               genericWin.LabelSpinInt = Catalog.GetString("Involved body weight") + " (%)" + "\nNote: this 
is not used on current version.";
+               genericWin.LabelSpinInt = Catalog.GetString("Involved body weight") + " (%)";
                genericWin.SetSpinRange(0, 100);
                genericWin.SetSpinValue(ex.PercentBodyWeight);
 
@@ -1861,7 +1874,7 @@ LogB.Information(" re R ");
 
                genericWin = GenericWindow.Show(Catalog.GetString("Exercise"), false,   //don't show now
                                Catalog.GetString("Write the name of the force sensor exercise:"), bigArray);
-               genericWin.LabelSpinInt = Catalog.GetString("Involved body weight") + " (%)" + "\nNote: this 
is not used on current version.";
+               genericWin.LabelSpinInt = Catalog.GetString("Involved body weight") + " (%)";
                genericWin.SetSpinRange(0, 100);
                genericWin.LabelEntry2 = Catalog.GetString("Resistance");
                genericWin.LabelEntry3 = Catalog.GetString("Description");
@@ -1955,7 +1968,6 @@ LogB.Information(" re R ");
                new DialogMessage(Constants.MessageTypes.INFO, Catalog.GetString("Exercise deleted."));
        }
 
-
        // -------------------------------- end of exercise stuff --------------------
 
        // -------------------------------- options, laterality and comment stuff -------------
diff --git a/src/gui/forceSensorAnalyze.cs b/src/gui/forceSensorAnalyze.cs
index 25ad604c..623f7662 100644
--- a/src/gui/forceSensorAnalyze.cs
+++ b/src/gui/forceSensorAnalyze.cs
@@ -549,7 +549,9 @@ public partial class ChronoJumpWindow
                                lastForceSensorFullPath,
                                force_sensor_ai_drawingarea.Allocation.Width,
                                force_sensor_ai_drawingarea.Allocation.Height,
-                               zoomA, zoomB, getForceSensorCaptureOptions());
+                               zoomA, zoomB,
+                               currentForceSensorExercise.PercentBodyWeight, currentPersonSession.Weight,
+                               getForceSensorCaptureOptions());
 
                /*
                 * position the hscales on the left to avoid loading a csv


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]