Incorrect pool swim interval data

Hi there. Absolutely love your platform! So much flexibility and data, yet incredibly user friendly!

I understand the swim feature is under development, but still wanted to note there are huge discrepancies between my 25m pool swim intervals on Strava and Intervals. If this is easily solved via settings somewhere, please let me know as I haven’t found it myself.

I’ve attached screenshots from two recent indoor 25m pool swims, doing warmup at varying speeds and lengths and then main sets (between 100-300m intervals). The original data is from a Coros Pace 2 directly uploaded to Strava. My watch records active and rest time separately, as can be seen on the Strava intervals quite clearly. The total swim work time and distance on Intervals are correct. Total intensity and load also feel in the right zones, so not too worried on how this affects my overall training load and fatigue, just a data nerding thing.

Any suggestions on what to do with this?

Thanks a million!






Unfortunately the stream data from Strava has movement in the “rest” laps. The highlighted cells below show velocity inside lap 2 which is why it ends up being approx 10m long in Intervals.

I think the laps displayed by Strava are “real” laps from the device. Intervals.icu maps the laps back to the underlying data so it can build intervals for them.

If you can get a fit file from your Coros watch you can try uploading that and see if it is better.

@Piet_van_Vliet Just want to followup on this old thread for all those that search and find it like me. I ran into this same issue and did as @david suggested and uploaded the .fit file directly into intervals.icu instead of relying on my strava connection and it fixed it this. Now the lap and pace data are correct.

1 Like

Thanks! I just recently started swimming again and giving up my TP subscription to go all in on ICU because I genuinely like the interface and customization much better. Just like to preface all of the following with that I’m still figuring stuff out, so this is more of a summary of discrepancies than a final verdict.
The swim calculations are still off. First, even when I upload the (Coros Pace 2) .fit files, the total activity time appears to be vastly underestimated (see example) and the average swim pace vastly overestimated (even if this is a total time versus work time issue, the TP calculated average appears more in line with the paces of individual intervals than the ICU calculated average). The individual interval times appear mostly correct though (with just some recovery recognized as work, which I’d think would actually add to total time, not subtract from it). Second, there are also still discrepancies in how load is calculated between my TP and ICU. I noticed that in my settings, the TP calculation shows a 96-102% z4 range around my 1.40 threshold, whereas ICU shows a 95-100% range, so that maybe affects it. Third, when files were uploaded to Strava and from there to ICU, the ICU TSS was 150% that of TP sTSS (based on the last 13 pool swims). When I uploaded the .fit files directly to ICU (just the last 3 pool swims), ICU TSS increased from 145% of TP sTSS to 190% TP sTSS. I will admit TP sTSS has always felt a little too low, but the ICU TSS seems way too high IMHO. Maybe I can artificially tweak this by setting my ICU threshold to 1.35 or something. Not sure what to do.

Intervals.icu displays the moving time of activities (47m55s) and not elapsed time (1h11). The pace is moving time / distance which is approx 93s per 100m in this case.

Supposedly Intervals.icu calculates swim TSS in the same way as TP:

tss = 1;
if (moving_time <= 0) return;;
double mins = moving_time / 60.0;
double metersPerMin = distance / mins;
double metersPerMinFtp = threshold_pace * 60.0;
intensity = metersPerMin / metersPerMinFtp;
if (intensity >= 2.0) return; // probably dodgy moving time
double hours = moving_time / 3600.0;
tss = (int)(intensity * intensity * intensity * hours * 100.0 + 0.5);

Note that threshold_pace is in meters/second.

You could use load from HR instead? This comes out at 51 for that swim.

Thanks! The average pace (93s/100m) is way faster than I actually went though. The majority of my intervals (200-400m or warm up) was well into the 1.40-1.50’s, with only a couple 50m sprints between 1.30-1.35. Seems very unlikely my overall pace would have been 1.33/100m.

I could use HR as my watch actually seems capable of recording that properly, but that would have the same drawbacks as using HR for running/cycling. Probably even worse, since for our pool swims we do a lot of short/medium intervals where my HR doesn’t even have time to go up by much, so would vastly underestimate the actual effort I’m putting in. I did notice in the meantime that, for the example shown, the IF on TP is much lower (0.73) compared to ICU (0.91). So when using IF to correct sTSS, 0.91x0.91x0.91=0.75 will of course give much higher final TSS than 0.73x0.73x0.73=0.38. In fact, 0.75/0.38=197%, which is close (albeit not exact) to the 190% higher TSS in ICU compared to TP for my last three swims. For the other two swims, the TP/ICU IFs are 0.76/0.84 and 0.75/0.91. So maybe this is where those differences are coming from?

Ultimately, I mostly care about using TSS to prevent overtraining (as my fitness feeling generally supercedes what my body can actually handle), so if I can just figure out something that a) reflects what I can manage long-term and b) helps to somewhat estimate similar TSS when exchanging a swim with a bike effort for example, then that’s all that matters for me in the end.

The laps that the intervals have been generated from include not moving time and I think that is why the pace seems slower. You can see that in the first 200m interval here:

I think TP is probably including the not moving time in the pace calc which would throw off the intensity numbers. The doc says not but it is quite old:

“2. Determine time to cover total distance (not including rest periods)”

@david I’ve been having the same problem. And yes today I traced the problem using the streams ‘csv’ file which shows what might be interpreted as ‘not moving’ times for each flip turn (or open turn). These are the time I am spending turning and gliding. The ‘moving’ time returns as soon as I start to stroke. An example…

|time|cadence|heartrate|distance|velocity_smooth|

|21|29|98|22.86|1.42875|
|22|0|101|22.86|0|
|23|0|104|22.86|0|
|24|0|107|22.86|0|
|25|0|110|22.86|0|
|26|0|111|22.86|0|
|27|0|111|22.86|0|
|28|28|112|24.003|1.143|

My actual moving time including flip and glid for the session is 2241s whereas ICU’s moving time is 1996s. So the ICU load ends up being 90 vs. 71 for what I would consider to be the more appropriate moving time. (The other way to look at this is that those holes in the stream, from a velocity accuracy point of view, result in times which would need to be paired with the length of the pool minus the turning glide length.)

Perhaps you might consider calculating moving time, and therefore IF & Load from the interval data or perhaps provide the option to do so. Example…

And let me also say how wonderful and fantastic your platform is. So many heartfelt thanks to you my good and fine sir. :slight_smile: :smiley:

So calculate moving time for pool swims using the total elapsed time of all the work intervals? That would work for your file with those “not moving” gaps between each length. The lengths in the file are each a bit short which is making the gaps. Piet van Vliet’s swims don’t have those gaps.

I noticed that the laps in your file end in the middle of a length a lot of the time. Is that correct?

Beginning to much better understand my data here. Thanks! With the risk of side tracking this discussion (just let me know if you prefer I start a separate one), but if I understand it correctly, recovery is not considered for the calculation of IF on ICU, whereas it does seem to be on TP. For my biking and running, I either softly pedal or jog, so I’m almost never not moving, and I presume ICU would take that into account for IF. For swims, I do short standing rests between intense intervals (20-30") and slow swims in between sets (e.g. 50-100m easy). For the within set recovery, this means that it does not matter for ICU IF if I recover 10 seconds or 30 seconds, since it only considers moving time. However, a 10 vs 30 second recovery between intervals does definitely affect how fast I can swim during those intervals. So I would think the recovery times should be considered part of the overall IF calculation. Please let me know if I’m understanding the calculations incorrectly of course.

1 Like

For cycling, running etc. Intervals.icu only considers moving time for the TSS calculation. Otherwise a 30 minute coffee stop in the middle of a ride will increase the TSS and I don’t think that makes a lot of sense.

But maybe it would be better to do it differently for swims? Do your laps include rest time?

What you could do now is use the ATL/CTL factors in /settings to generally reduce swim TSS:

Ha. Maybe I should just have coffee breaks during the swim too. Maybe in the summer. At the beach. :slight_smile:

My watch records workout and recovery separately, which appears accurately reflected in my direct fit file uploads. But I do swim mostly in 25m pools, so there’s a lot of flipping and turning that is then not counted as work. TP also states that recovery and flip turns are not reflected in their calculations. I am neither a sports or data scientist, but would argue that excluding flip turns is not reflective of the actual effort. Even though I’m not moving horizontally, I’m still ‘working’ and thus flips should count as part of the interval pace IMHO. Only when I hit my watch button does my interval end (even though flips come with other variables like turning and push off speed, which affect interval time too).

With regard to recovery (or a coffee break) affecting overall TSS: in my mind, more recovery = lower overall intensity, whereas less recovery = higher overall intensity, even if my pace will likely be lower with shorter recovery between intervals. Since including recovery time for TSS would artificially inflate TSS, my feeling is that with TSS based on work (including flips) and IF based on work+recovery, TSS x IF could then be used to correct for the difference between for example 10 x 25m with 10" recovery vs 10 x 25m with 40" recovery (as long as recovery is non-moving of course). I realize this is not how IF is officially calculated though.

For now, I’ve set my ICU swim threshold at 1:35 (which normally hovers around 1:40 based on CSS) and that seems to yield TSS and IF that fits my RPE.

Unrelated to exact calculations: an additional problem for me specifically may be that whereas I can out sprint some of my fellow swim mates on 25-50m intervals, I can barely keep up during 400m intervals (worse technique and lactate clearance probably). So maybe the load and IF of my swims will simply always depend more on my work out type than whether its calculations properly reflect sTSS.

Really appreciate the discussion by the way. It’s helping a lot with future interpretation of TSS.

1 Like