[chronojump] Encoder: Added Badillo2010 1RM prediction
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] Encoder: Added Badillo2010 1RM prediction
- Date: Fri, 8 Feb 2013 10:58:56 +0000 (UTC)
commit 9b837f10944586a91412a1bb02a6b2e15b0b8af9
Author: Xavier de Blas <xaviblas gmail com>
Date: Fri Feb 8 11:58:28 2013 +0100
Encoder: Added Badillo2010 1RM prediction
encoder/graph.R | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++-
src/gui/encoder.cs | 28 +++++++++++++++--------
2 files changed, 76 insertions(+), 11 deletions(-)
---
diff --git a/encoder/graph.R b/encoder/graph.R
index f995b26..43cc6d4 100644
--- a/encoder/graph.R
+++ b/encoder/graph.R
@@ -665,6 +665,59 @@ paintCrossVariables <- function (paf, varX, varY, option, isAlone, title) {
mtext(varY, side=4, line=3, col=colBalls)
}
}
+
+#propulsive!!!!
+paint1RMBadillo2010 <- function (paf, title) {
+ curvesLoad = (paf[,7]) #mass: X
+ curvesSpeed = (paf[,findPosInPaf("Speed", "mean")]) #mean speed Y
+
+ par(mar=c(5,6,3,4))
+
+ loadPercent <- seq(30,100, by=5)
+
+ #msp: mean speed propulsive
+ msp <- c(1.33, 1.235, 1.145, 1.055, 0.965, 0.88, 0.795,
+ 0.715, 0.635, 0.555, 0.475, 0.405, 0.325, 0.255, 0.185)
+ #variation <- c(0.08, 0.07, 0.06, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.04, 0.04, 0.04, 0.04, 0.03, 0.04)
+
+ #example of meanSpeedPropulsive of some curves:
+ #curvesSpeed <- c(0.60, 0.40, 1.5)
+ #curvesLoad <- c(80, 93, 25)
+
+ maxy=max(c(msp,curvesSpeed))
+ miny=min(c(msp,curvesSpeed))
+
+ loadPercentCalc=8.4326*curvesSpeed^2 - 73.501*curvesSpeed + 112.33
+ loadCalc= 100 * curvesLoad / loadPercentCalc
+
+ par(mar=c(5,5,3,4))
+
+ plot(curvesLoad,curvesSpeed, type="p",
+ main=paste(title, "1RM prediction"),
+ sub="Adapted from Gonzalez-Badillo, Sanchez-Medina (2010)",
+ xlim=c(min(curvesLoad),max(loadCalc)),
+ ylim=c(miny,maxy), xlab="", ylab="",axes=T)
+
+ mtext(side=1,line=2,"Kg")
+ mtext(side=2,line=3,"Mean speed in propulsive phase (m/s)")
+ mtext(side=4,line=2,"1RM (%)")
+
+ abline(h=msp, lty=2, col="gray")
+ mtext(side=4,at=msp, paste(" ",loadPercent), las=2)
+
+ #arrows(curvesLoad,curvesSpeed,loadCalc,0.185,code=2,col=heat.colors(100)[(100-loadPercentCalc)])
+ colors=c(rep(NA,29),rev(heat.colors(100)[0:71]))
+ arrows(curvesLoad,curvesSpeed,loadCalc,0.185,code=2,col=colors[loadPercentCalc])
+
+ closerValues = which(curvesLoad == max(curvesLoad))
+ segments(loadCalc[closerValues],0.185,loadCalc[closerValues],0,lty=3)
+
+ predicted1RM = mean(loadCalc[closerValues])
+
+ segments(predicted1RM,0.185,predicted1RM,0,lty=1)
+ mtext(side=1, at=predicted1RM, round(predicted1RM,2), cex=.8)
+}
+
find.mfrow <- function(n) {
if(n<=3) return(c(1,n))
@@ -1019,7 +1072,8 @@ doProcess <- function(options) {
#"cross.Speed,Power.Load.mean" #Speed,power are Y (left and right), 3d: Load is X.
analysisCross = unlist(strsplit(Analysis, "\\."))
if(
- Analysis == "powerBars" || analysisCross[1] == "cross" || Analysis == "curves")
+ Analysis == "powerBars" || analysisCross[1] == "cross" ||
+ Analysis == "1RMBadillo2010" || Analysis == "curves")
{
paf = data.frame()
for(i in 1:n) {
@@ -1062,6 +1116,9 @@ doProcess <- function(options) {
paintCrossVariables(paf, analysisCross[3], analysisCross[2],
analysisCross[4], "ALONE", Title)
}
+ else if(Analysis == "1RMBadillo2010") {
+ paint1RMBadillo2010(paf, Title)
+ }
else if(Analysis == "curves") {
paf=cbind(curves[,1],curves[,2]-curves[,1],rawdata.cumsum[curves[,2]]-curves[,3],paf)
colnames(paf)=c("start","width","height","meanSpeed","maxSpeed",
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index d953171..885b2f9 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -846,13 +846,19 @@ public partial class ChronoJumpWindow
if(sendAnalysis == "cross") {
string crossName = Util.FindOnArray(':',1,0,UtilGtk.ComboGetActive(combo_encoder_analyze_cross),
encoderAnalyzeCrossTranslation);
- //convert: "Force / Speed" in: "cross.Force.Speed.mean"
- string [] crossNameFull = crossName.Split(new char[] {' '});
- sendAnalysis += "." + crossNameFull[0] + "." + crossNameFull[2]; //[1]=="/"
- if(radiobutton_encoder_analyze_mean.Active)
- sendAnalysis += ".mean";
- else
- sendAnalysis += ".max";
+
+ if(crossName == "1RM Prediction") {
+ sendAnalysis = "1RMBadillo2010";
+ analysisOptions = "p";
+ } else {
+ //convert: "Force / Speed" in: "cross.Force.Speed.mean"
+ string [] crossNameFull = crossName.Split(new char[] {' '});
+ sendAnalysis += "." + crossNameFull[0] + "." + crossNameFull[2]; //[1]=="/"
+ if(radiobutton_encoder_analyze_mean.Active)
+ sendAnalysis += ".mean";
+ else
+ sendAnalysis += ".max";
+ }
}
if(radiobutton_encoder_analyze_data_user_curves.Active) {
@@ -1169,13 +1175,15 @@ public partial class ChronoJumpWindow
//create combo analyze cross (variables)
string [] comboAnalyzeCrossOptions = {
- "Speed / Load", "Force / Load", "Power / Load", "Speed,Power / Load", "Force / Speed", "Power / Speed" };
+ "Speed / Load", "Force / Load", "Power / Load", "Speed,Power / Load", "Force / Speed", "Power / Speed", "1RM Prediction"};
string [] comboAnalyzeCrossOptionsTranslated = {
Catalog.GetString("Speed / Load"), Catalog.GetString("Force / Load"),
Catalog.GetString("Power / Load"), Catalog.GetString("Speed,Power / Load"),
- Catalog.GetString("Force / Speed"), Catalog.GetString("Power / Speed") };
+ Catalog.GetString("Force / Speed"), Catalog.GetString("Power / Speed") ,
+ Catalog.GetString("1RM Prediction")
+ };
encoderAnalyzeCrossTranslation = new String [comboAnalyzeCrossOptions.Length];
- for(int j=0; j < 6 ; j++)
+ for(int j=0; j < 7 ; j++)
encoderAnalyzeCrossTranslation[j] =
comboAnalyzeCrossOptions[j] + ":" + comboAnalyzeCrossOptionsTranslated[j];
combo_encoder_analyze_cross = ComboBox.NewText ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]