FAQ RUNNING & SWIMMING - GoldenCheetah/GoldenCheetah GitHub Wiki

RUNNING & SWIMMING

GoldenCheetah started as a cycling centered application but, in recent versions, a growing subset of the features are also available for Running and Swimming. This section addresses the particularities and frequently asked questions related to use GoldenCheetah for multisport training analysis.

How are runs and swims identified?

By default activities are considered rides, the value of the Sport metadata tag set to "Run", "Swim" or the translated equivalents is used to identify runs and swims and it is set automatically on import, but it can be changed in the Activities > Details tab. The presence of running specific data s.t. Run Cadence, Vertical Oscillation or Ground Contact Time also is used to identify an activity as a run when Sport tag is not set; in a similar way the presence of SWIM XDATA is used to identify swims.

Sport specific training zones for Heart Rate, Pace and Power can be defined as explained in Athlete’s Training Zones

Charts in Activities View involving several activities, s.t. CP chart, are automatically filtered for the sport of the selected activity; while in Trends View you have to use a sport filter.

How to add manual runs and swims with time and distance data?

Using the menu Activity > Manual Activity you can set the sport to Run or Swim and this action will enable the Lap Editor button, click on that button and you will be able to enter repetitions, times and distances for your intervals, this will generate automatically the corresponding laps with second by second speed data so all speed dependent metrics are computed.

How to import activity data for best results?

If possible you should try to import the original file generated by your device (.fit for Garmin, .sml for Suunto, .hrm for Polar, etc.) to avoid data loss on conversions, additionally you need to enable Garmin Smart Recording on General settings using a Threshold higher than the longest gap in recording (the 25s default value is ok for runs and laps swims but a higher value s.t. 90s can be necessary for open water swims).

Note: GoldenCheetah has tools to detect and help to fix data anomalies, but it doesn't "massage" the data without user intervention, this is by design.

What do the fields on SWIM tab at the Editor mean and how they can be used?

The SWIM tab at the Editor holds the length-by-length data when provided by the imported file, fields are: Type (0-Rest, 1-Free, 2-back, 3-breast, 4-fly, 5-drill, 6-mixed), Duration in seconds and Strokes counted for the arm with the watch. To use these fields on Activity chart you can add a User Data curve with a formula s.t. XDATA("SWIM", "STROKES", repeat), a similar formula can also be used in Custom Metrics.
There are several builtin metrics and more charts available for download from the cloud (View > Download Charts) using this information.

How to fix runs and swims?

For runs and open water swims you can use the Editor you check for anomalies, if there are gaps in recording they can be fixed using the Edit > Fix Gaps in Recording tool with a stop parameter longer than the longest gap which is not an intentional pause (for OWS a large number s.t. 90 may be necessary). If the speed data channel is missing or bogus you can regenerate it from time and distance using the Edit > Fix Speed from Distance tool, playing with the moving average parameter for smoothing when it is too jumpy. If the altitude data channel is missing or bogus you can regenerate it using the Edit > Fix Elevation errors tool.
For lap swimming files the Editor SWIM tab allows to review and correct your length by length data, once you finish this task you can regenerate the second by second speed, distance and cadence data using the Edit > Fix Lap Swim from Length Data tool, which also allows to change the Pool length if necessary. Pool Length is stored as a Metadata Tag. You can also fix errors in your swim data using Swimming Watch Tools

Is there support for Running Power?

Yes, you can import Running Power from a device generating any of the supported formats, alternatively you can generate power data for your runs from altitude and speed data plus your weight and height using the Edit > Estimate Running Power tool.

All the tools available for cycling power are also available for running power, including automatic model estimates, except for cycling specific metrics s.t. BikeStress or BikeScore. You can define separate Power Zones for Running with their own CP/W'/AeTP/etc. as explained in Athlete’s Training Zones

How can I use GC with Stryd?

When you import a FIT file with Stryd data, GoldenCheetah stores Stryd specific series as XData, which can be found by selecting an Activity and navigating to Data > Raw Data > Developer. There you will see columns such as Leg Spring Stiffness, Form Power, Air Power, and so on. Stryd data series matching one of the standard Garmin series will be automatically mapped to these, provided the standard series are not present in the FIT file; this mapping gets registered in the Data > Extra > Data Info field.

For Garmin watch users with native power, Stryd Power data can be copied and pasted into the main Power column, which will either be empty or contain Garmin's native power data, depending on your watch settings. To copy Stryd Power data, go to Data > Raw Data > Developer, click on the POWER-2 column heading to select all the Stryd Power data, right-click and Copy. Then, go to Data > Raw Data > Basic Data, click on the Power column heading, right-click, Clear Contents, and Paste the Stryd data. Finally, click the save icon. Now, GC is using Stryd Power data. Alternatively, there is a Python script that can be used.

Run Cadence, Vertical Oscillation and Ground Contact Time (GCT) in Data > Raw Data > Basic Data will come from Stryd, unless you use a Garmin Running Dynamics sensor.

GC has built in run metrics which will calculate the relevant running data (e.g. Average Running Cadence, Average Ground Contact Time, Average Vertical Oscillation). However, Average Step Length, Average Stance Time Percent and Average Vertical Ratio calculations are not currently available from Stryd data. Custom User Metrics could be written to calculate these.

To make full use of the Stryd data in the Developer section of the data, you need to create or download User Metrics. A collection of ready-made Metrics and Charts are available to download for Stryd users. Go to Options > Metrics > Download and search in the Curated collection of metrics for 'Stryd'. Download the metrics you want to make use of.

To display the data in the Activity 'Performance' chart, select an Activity, click on the + icon top-right of the screen, select Download Chart and search for 'Stryd' in the Curated collection. Similarly, an Overview chart that corresponds to the Stryd User Metrics is also available to modify for your use. Note that for the Performance and Overview charts to work, you must first download and install the User Metrics which the charts draw upon.

Stryd's auto Critical Power modelling is based on GoldenCheetah's 'Extended' model and you should find that your auto CP in the Stryd PowerCentre is the same as the estimated CP in GC.

How to deal with multisport activities?

Once imported you need to split multisport activities for analysis, for that purpose you can create intervals for each component and then use the Activity > Split Activity tool selecting the corresponding intervals so new activities are created for each component. The Sport tag will need to be manually set for each activity and, in some cases, the Running Cadence needs to be cut and pasted to Cadence in the editor when converting from Running to Cycling for the activity to be recognized as a ride, non-relevant columns for each activity can be eliminated using remove column at the Editor.

Update: In v3.6 multisport activities are automatically split in its component sports plus transitions on import.

Are GoldenCheetah PMCs multisport?

GC includes several PMCs by default, those based on TriScore/TRIMPs/SessionRPE are multisport unless you filter them by a specific sport, while Skiba (based on BikeScore) and Coggan (based on TSS/BikeStress) are Bike only. Additionally it is possible to build PMCs based on other metrics, including user defined ones.

What is TriScore and why is its value zero or so high for some activities?

TriScore metric is computed based on sport as: BikeScore for Cycling, GOVSS for Running and SwimScore for swimming, with a fallback to TRIMP Zonal Points. It depends on CP/CV so you need to have Power/Pace zones defined for the date for the activity: the From data for some of your zones should be anterior to the date of the activity: zero values when there is Power/Speed data are usually due to the lack of Power/Pace zones defined for the data of the activity.
TriScore also depends on the Power/Speed data channel: too high values are normally caused for spikes on Power/Speed data, see above how to fix this.

How can I choose pace units for running and swimming?

Pace units for Running and Swimming can be defined independently of the metric/imperial setting, there is a checkbox in the corresponding Pace Zones tab to choose from min/km or min/mile for running and min/100m or min/100yd for swimming. Beware these settings are global to all your athletes: when you change them for one of your athletes they change for all of them.

Currently Metrics Trends, R and Python charts use the general metric/imperial setting instead of sport specific pace units settings and formulas can be used for user defined conversions.

How to override CV for specific activities?

The CV setting can be overridden in the same way as the CP setting, for example if you have a swimming session using a wetsuit you can raise your CV value to account for the speed increase in that session. CV values are in km/h. Defaults can be used to automate the override process.

How can I see pace in Activity charts?

Hovering the cursor over the speed curve you can see the instantaneous pace in your preferred units. Alternatively it is possible to add a Pace curve as User Data using a formula s.t. 60/SPEED to see min/km but the formatting will be decimal.

How can I see pace and distance in CV charts?

Hovering the cursor over the curves you can see the pace and distance in your preferred units.

Why are CV/D'/etc. N/A in CV chart model?

The most common cause is you don't have activities longer enough for the search intervals configured for the selected model, check search intervals in the chart options model tab and adjust according to your data or select a model which can work for shorter durations.

How can I set CV for running and swimming?

For running you can use your recent track or road race results from 1500 to half-marathon as input for Tools > VDOT and TPace Calculator to compute TPace as an estimate for CV, alternatively you can do shorter (s.t. 1500) and longer (s.t. 3000-5000) time trials and use them as inputs for Tools > CP and W' Estimator to obtain CV and D' estimates, the average pace for a longer time trial (not a race) around ~30' it's another possibility.
For swimming Tools > CP and W' Estimator can be used with shorter (s.t. 200m) and longer (s.t. 400m) tests or the average pace for a longer time trial of around 30' (known as T30) which can be standarized to 1500m, 2000m or 3000m according to the level of the swimmer.

How can I track my best times on predetermined distances?

There are predefined metrics to track best times on standard distances for swimming, cycling and running s.t. Best 1500m, Best 10km and Best 40km. They can be added to Bests to be shown in Summary or added to Overview in v3.6, plotted in Trend or R/Python charts. If you want to track your times on other distances s.t. 1 mile, 10 miles, etc. the function besttime(km) can be used in Trend and overview charts, and to define custom metrics for that purpose. For example Best 1 mile can be defined as a Low type User Metric with the following formula and time checked for mm:ss format:

{
    # only calculate for runs containing speed
    relevant { isRun and Data contains "S"; }

    # calculate metric value at end
    value { besttime(1.609); }
}