How to Guide - ImReady4 app, for HRV guided training

Yes I want also available for Fenix 6 !!! Is the developer here ?

Interesting stuff, and I like having another datapoint to reference.

How might I access this info in the custom stream builder? I’m getting “TypeError: cannot read property “0” from null” when trying to access icu.streams.Alpha1, though I see that populated in the fit file.

Just playing with correlations. Might not amount to anything, might prove useful (to me, anyway) or at least interesting (again, to me)

{
    let alphaOne = icu.streams.Alpha1
    let watts = icu.streams.watts
    for (let i = 0; i < data.length; i++)
    {
         data[i] = watts[i] / (alphaOne[i]/0.75)
    }
}

All streams from the Garmin IQ field AlphaHRV are already available per standard:

a1 and RR/a1 in above screenshot, same for Artifacts and respiration.

You can also add the Alpha HRV chart on the HR page:

(Bit of a long story here, sorry, writing this down here because it does affect ImReady4 results I believe, note BTW that I’m using the Python version not the Matlab one!)

On RHR data I’ve noticed something interesting and likely (?) unhelpful with Garmin data. While probably one would assume that RHR for a date is the overnight RHR for the night before that date, this isn’t always true.

In reality, it’s the lowest 30m average on that overall day. If I wake up to a high RHR but then spend the day at work at my desk, I’ll regularly see that reduce the day’s RHR by at least 1 or 2 bpm.

And more significantly, and honestly this seems like a Garmin bug maybe, as long as you go to sleep well before midnight, that’s another opportunity to replace your high RHR datapoint with a lower one, where RHR for day 1 and day 2 will both be very nice and low even if you had a tough day 0, as long as on day 1 you took it easy. (Want to go nuts on day 2 again? Won’t show up on your stats either.)

With ImReady4, this leads to images for subsequent days showing datapoints moving around. And most importantly, when you run it in the morning, it will compare that morning’s RHR against previous all-day RHRs, so a misleading baseline I’d say?

I don’t how to fix this, and of course someone may even disagree with me on whether this is truly broken… :slight_smile:

It´s simple. RHR is a spotcheck and needs to be measured and evaluated at the same moment and in the same conditions every time.
If you want it to be meaningfull, measure it first thing in the morning, right after waking up.
Dump the Garmin value. They only give you what the unknowing customer prefers.
You don´t want to know what your lowest value is over 24hr (it could actually be an artefact). And you don´t want to know what it is after sitting at a desk for multiple hours. What you want to know, is how your body responds after an effort followed by a normal night of rest and recovery. That´s something you can work with for analysis. It tells you if you returned to baseline or not.

1 Like

Yup, agreed. But do you mean you don’t trust automatic RHR measurements overnight of any kind? I’m definitely a sucker for things happening automatically (I never trust myself with any kind of routine :slight_smile:).

I wonder whether Intervals.icu could be pickier about the RHR datapoints it takes from Garmin and/or track morning RHR separately from all-day RHR…

1 Like

I don’t think that Intervals needs to be pickier. I think if the end user wants meaningful analysis they they need to take meaningful measurements. Overnight average/lowest RHR is garbage data. Measurements are not repeatable.

1 Like

Thanks for the reply. I want to play with the data, which I can’t do with someone else’ charts. And since the available charts are locked, I can’t introspect them to figure out the fields behind the charts. This is why I shared my code.

Do you have the standard charts enabled?
That probably locks the data-streams and then you can´t do ´your´ things. Only one process can access the same stream AFAIK.

With or without the standard dfa-a1 chart, I get the same results, which is not surprising, since JavaScript, like most programming languages, doesn’t care about multiple processes reading from an object(prototype, technically, with JS). Also, if that were the issue, you wouldn’t be able to have both “standard” charts at the same time (or most of my ThisVsThat charts), which works just fine.

The error message seems to indicate a stream at icu.streams.Alpha1 which is empty on an activity for which the standard charts work. This would suggest either that the standard charts are reading from a different stream, or the alpha1 stream is being treated differently from many other streams.

Had a second look on this. I was able to create custom data streams for a1, RR/a1, Artifacts and respiration without any problem. Just Add custom stream and use the dropdown to select the FIT stream.
Did you try to first build a stream and access that one iso of going straight to the FIT file contents?

I don’t think you can access the FIT data directly, you have to build an object from the data before using it in the code.

If you only want to play with Alpha1, the standard stream is named ‘dfa_a1’ so I think this

let alphaOne = icu.streams.dfa_a1

should work

1 Like

Shouldn’t you view this more like DSLR cameras vs smartphones? Yes, DSLR cameras will still make better photos than any smartphone can when you need zoom, when your subject moves around a lot, etc. But the best camera is the one you have on you all the time.

So likewise, measurements that consistently happen can’t be 100% garbage surely, and since they don’t involve fumbling around in bed in the morning trying to get your HRM on without waking up your partner, you’ll also have them consistently every night instead of maybe twice a week.

So yes, no “gold standard” data, but the consistency makes up for it pretty well. :slight_smile:

If repeatable here means you measure twice and get the same result: When I take two or three readings in a row with EliteHRV without moving around in between I see more variance between those, than I see between my nighttime readings several days in a row sometimes to be honest…

1 Like

You can use night measurements but there are a few things to consider:

  • only use an average of the full night! Spotchecks during the night are meaningless, they can be artefacts or measurements during a certain sleep stage. During REM sleep, your HR will be much higher compared to HR during deep sleep. Absolutely avoid taking the ‘lowest’ measurement number of any duration, that’s like playing on a one-arm-bandit.
  • your measurements are taking place much closer to the time of your effort and do not reflect a ‘rested’ situation that well. This is especially important if you work out late in the evening. A big part of the night will then reflect your body’s work to recover from the effort done. You will probably see more variance if you regularly have rest days were your body will be much more relaxed during the night.

If you consider these things in your analysis, the data is usable but it doesn’t make it easier.

1 Like

Repeatable means being able to follow the same routine, day in, day out. It’s not successive measurements on the same day. Only one reading should be taken on any given morning.

The night measurements can never be consistent. You don’t sleep in the same position every night and body position is hugely influential on HRV readings.

Best practice for morning readings is after you get out of bed and go to bathroom (if required). Measurement taken sitting down.

Marco Altini has great articles on this. I’ll try dig one out for you later when I get home.

Edit:
https://medium.com/@altini_marco/the-ultimate-guide-to-heart-rate-variability-hrv-part-1-70a0a392fff4

2 Likes

Thank you. icu.streams.dfa_a1 is what I was looking for.

I tried to get data into the custom fitness chart to no avail. I made a custom wellness field, turned data delivery in the script on TRUE and added the chart on the fitness page. I can manually activate the 4 different status and they show in the wellness and fitness chart. But no data transfer is happening. I started the script multiple times, repopulated it, witout error, script is working perfectly. What am I doing wrong?

What data fields are you using and where are you getting the data from (which HRV app?).

Sorry I did not specify properly, but I found the solution myself:
You also have to enter “trainingAdviceMustBeSentToIntervals = true” in the PopulateImReady4.m script and in the “ImReady4.m” script. Not only in the “config_athletes.m” script. It would be helpful to mention this as well in the top post.
Thanks for your great support in this forum, it is really asppreciated, and thx to Inigo_Tolosa for this cool tool and MedTechCD for all the explanations in this thread.

2 Likes

Hey there,
as I don’t have a Wellness Field “Training Advice” - what would be the correct settings to create it?

Thank you
Andy

You don’t need to create it, you can use a shared one.
Click on ‘Add Calendar Entry’ (the + icon), then Wellness data, Fields and then on the Looking glass.
Search for ‘advice’ and add the field.

1 Like