Power@145bpm chart

Hi there, at the Activity Power tab I can see a parameter called “Power@145bpm” related to that activity. I am looking for a way to plot these data in a graph. However I can’t see this parameter in the list of items displayed at the fitness tab where you can make your own charts. Am I overlooking something or is there another way to get to see this parameter over a longer time. My assumption is that it will give another insight to the fitness development. I lover the efficiency, power/HR and power/HRZ2 options for example. Keen hearing any insight. Cheers Gijs

I’m not sure there’s a standard option to do this.

You can create a custom activity field that averages your power for each instance where your heart rate is 145 bpm (excluding zeroes, or above some threshold). You can plot this custom activity field on the Fitness page.

Downside to this way is that it works for every instance, for example you are doing sprints at 500w and your heart rate rises from 120 to 160. It passes 145 and it will record 500w at 145 bpm for that single instance. So when there’s a lot of variation of power and/or heart rate it tends to be skewed.

The power@145 on the activity power page works with blocks of 30 seconds if I recall correctly, that makes it a lot less prone to variations. This is something that should be possible to work into a custom activity field as well by looking at the preceding values as well. Unfortunately my Python knowledge isn’t sufficient to implement this.

Maybe somebody else can shed a light on this?

1 Like

Thanks Thijs. Never thought of a custom activity field. Wil dive into that and see what’s possible that makes sense. Like your comprehensive answer! Cheers Gijs.

I’m working on a number of Z2 custom fields and the code could do what you want with some small modifications. I don’t know how familiar you are with the JS scripts, so shoot your questions if needed. I will try to help but I’m also a ‘beginner’.
This is the code I have now:

// Only activities Run or Virtual Run ,
// not tagged with ignore HR and/or Pace
// With mimnimal 900 points (15 min) in defined range
hr_target = 118
hr_range = 5
hr_min = hr_target - hr_range
hr_max = hr_target + hr_range
gap_target = 570
gap_range = 60
gap_min = 1000 / (gap_target + gap_range)
gap_max = 1000 / (gap_target - gap_range)
pwr_target = 115
pwr_range = 15
pwr_min = pwr_target - pwr_range
pwr_max = pwr_target + pwr_range
valid = 900
if ((activity.type == “Run”
|| activity.type == “VirtualRun”)
&& !activity.icu_ignore_hr
&& !activity.ignore_velocity)
{
// get data streams
hrStr = streams.get(“fixed_heartrate”).data
velStr = streams.get(“ga_velocity”).data
pwrStr = streams.get(“fixed_watts”).data
count = 0
rEFF = 0
rFIT = 0
rTECH = 0
rPwr = 0
rGap = 0
// iterate over data streams
for (let i = 0; i < velStr.length; i++)
{
hr = hrStr[i]
gap = velStr[i]
pwr = pwrStr[i]
// verify if point is in range for HR, gap and power
if(hr >= hr_min && hr <= hr_max && gap >= gap_min && gap <= gap_max && pwr >= pwr_min && pwr <= pwr_max)
{
// count number of points in Green Zone
count++
// acumulates metric points
rFIT = rFIT + (pwr / hr)
rTECH = rTECH + 60 * (gap / pwr)
rPwr = rPwr + pwr
rGap = rGap + gap
}
}
}
if (count >= valid)
{
// rEFF = (rFIT /count) * (rTECH / count)
// rFIT = rFIT / count
// rTECH = rTECH / count
rPwr = rPwr / count
// rGap = 1000 / rGap
}

Some info: the script looks for datapoints in the activity where HR, GAP and Power are within a certain range. It accumulates the results for the different parameters and returns the avg.
You need to set the targets for HR, GAP and Power to values that ‘go together’ or nothing will be processed. Or you set a big range.
The reason I’m doing it this way, is that this will avoid most of the anomalies from glitches, sudden spikes and HR lag (especially at the start and end of HIT intervals)
Once the fields are ready, I will share all of them. Should be later this week.

  • Running Efficiency in meter/beat
  • Running Fitness in watt/beat
  • Running Technique in meter/watt
  • Running Power in watt
  • Running GAP in min/km
  • Running cadence in spm
2 Likes

All my Custom fields for Z2-Running are now public. The script can easily be adapted if you want the same parameters for other zones. If you create one or more Fitness charts with these parameters, following up on your performance becomes visible and you can see which of the parameters is evolving/stagnating/deteriorating. Here’s a screenshot of my (poor) running ( better call it slow jogging :wink: ) abilities that I have been working on for the last 12 weeks.

Finally after over 10 weeks, I see that all my work below AeT starts to deliver. Running technique suddenly got better and I don’t know if it maybe has to do with a long Power Hike I did around that date. Hiked for a little under 5 hours at sub 10 min pace over 30.5 km. I do notice that I jog more fluently since then.

2 Likes

It seems you hardcoded the values for Z2. Any reason you are not using the zones used in settings which you could maybe get from this? Server side data model for scripts

Yes, because I use MAF zone for Z2 running. The script has plenty of comments and is easy to read/modify to your personal liking.
Most people have zone setups where Power/HR/Pace are far from matching. The technique used in these scripts, would not return much results if using the standard zones.
This is the beginning part of the script that you should adapt to your personal matching zones:

// Only activities Run or Virtual Run ,
// not tagged with ignore HR and/or Pace
// With mimnimal 900 points (15 min) in defined range
//
hr_target = 119
hr_range = 5
hr_min = hr_target - hr_range
hr_max = hr_target + hr_range
//
gap_target = 520 // GAP in sec/km
gap_range = 60 // GAP range in sec/km
gap_min = 1000 / (gap_target + gap_range) // converts sec/km to m/sec
gap_max = 1000 / (gap_target - gap_range) // converts sec/km to m/sec
//
pwr_target = 130
pwr_range = 15
pwr_min = pwr_target - pwr_range
pwr_max = pwr_target + pwr_range
//
valid = 900 // Sets the threshold of valid datapoints to return a result

1 Like