Power Calculations for running

I am struggling to grasp the java Script on how to get it to calculate some specific power etc in WKO5 you use expressions such as if cadence I then etc. As an ultra runner I use 4 different power targets and like to see what I have averaged over a run as Such

Run Power
avg(if(filter(rgrade,{1;10},2) >= 0.00 and filter(rgrade,{1;10},2) <= 0.04 and cadence>70,power))

Hiking Power
avg(if(cadence>20 and cadence<70,power))

Run Uphill Power
avg(if(filter(rgrade,{1;10},2) >= 0.04 and cadence>70,power))

Run Downhill Power
avg(if(filter(rgrade,{1;10},2) < 0.02, runpower))

any help on how to convert to java script would be great

1 Like

I fixed your hiking power one:

{
  let cadence = streams.get("cadence").data;
  let watts = streams.get("watts").data;
  let totalPower = 0;
  let count = 0;
  for (let i = 0; i < cadence.length; i++) {
    if (cadence[i] > 20 && cadence[i] < 70) {
      totalPower += watts[i];
      count++;
    }
  }
  count > 0 ? totalPower/count : null;
}

I added “Run Power” to your custom fields:

{
  let grade = streams.get("grade_smooth").data;
  let watts = streams.get("watts").data;
  let totalPower = 0;
  let count = 0;
  for (let i = 0; i < grade.length; i++) {
    if (grade[i] >= 0 && grade[i] <= 4) {
      totalPower += watts[i];
      count++;
    }
  }
  count > 0 ? totalPower/count : null;
}

Note that the gradient is a % i.e. 4 and not 0.04.

1 Like

Amazing, thanks, it works…

i correted, because you forget de cadence in de runpowermodel.

{
  let grade = streams.get("grade_smooth").data;
  let watts = streams.get("watts").data;
  let totalPower = 0;
  let count = 0;
let cadence = streams.get("cadence").data;
  for (let i = 0; i < grade.length; i++) {
    if (grade[i] >= -2 && grade[i] <= 4 && cadence[i] > 70) {
      totalPower += watts[i];
      count++;
    }
  }
  count > 0 ? totalPower/count : null;
}
1 Like