Training Stress Score (TSS) is a single number that captures how hard a workout was relative to your threshold, adjusted for duration. It's the currency of the Performance Management Chart. The problem: TSS was defined for cycling with a power meter. For running, swimming, indoor rowing, or any activity without power, you need an equivalent. pacelore computes three variants — power TSS, hrTSS, and rTSS — and picks the most appropriate one per activity.

Power TSS

The original Coggan/Allen formulation:

TSS = (duration_sec × NP × IF) / (FTP × 3600) × 100

Where:

  • duration_sec: total activity duration in seconds
  • NP: Normalized Power (the 4th-power moving average — full explainer)
  • IF: Intensity Factor = NP / FTP
  • FTP: Functional Threshold Power in watts

Expanding: TSS = duration_sec × NP² / (FTP² × 3600) × 100. An IF of 1.0 (riding at exactly FTP) for exactly one hour produces a TSS of 100 by definition. This is the calibration point.

Power TSS is accurate when power data is available and the athlete's FTP is current. It's the default for cycling activities with a power meter.

hrTSS

The heart rate-based TSS uses the Coggan formula adapted for HR:

hrTSS = duration_hours × (avgHRR / thresholdHRR)² × 100

Where:

  • avgHRR: average Heart Rate Reserve = (avgHR - restingHR) / (maxHR - restingHR)
  • thresholdHRR: Heart Rate Reserve at threshold. Default: 0.83 (derived from typical lactate threshold occurring at ~83% HRR)

Concretely, if an athlete has restingHR = 45, maxHR = 185, and rides for 2 hours at an average HR of 155:

avgHRR = (155 - 45) / (185 - 45) = 110 / 140 = 0.786
thresholdHRR = 0.83
hrTSS = 2 × (0.786 / 0.83)² × 100
      = 2 × (0.947)² × 100
      = 2 × 0.897 × 100
      = 179.4

The squaring of the HRR ratio — like the squaring in power TSS — reflects the nonlinear physiological cost of higher intensities. Riding at 110% threshold HR is more than 10% harder than riding at 100% threshold HR.

hrTSS has a known limitation: heart rate lags effort by 20–60 seconds, and it's affected by temperature, fatigue, caffeine, and hydration. It underestimates TSS for short high-intensity efforts (HR hasn't caught up) and overestimates for long easy efforts in heat. Use it when power is unavailable and accept ~15–20% error on individual sessions.

rTSS

Running TSS uses pace as the intensity metric, normalized for hills via Grade-Adjusted Pace:

rTSS = (duration_sec × NGP × IF) / (thresholdPace × 3600) × 100

Where:

  • NGP: Normalized Graded Pace — the pace-equivalent of Normalized Power, using a rolling average of Grade-Adjusted Pace raised to the 4th power
  • IF: NGP / thresholdPace
  • thresholdPace: the athlete's threshold running pace in m/s (from their 1-hour race pace or critical velocity estimate)

Running pace is measured in m/s internally (converting for display). A threshold pace of 4:30/km = 3.70 m/s. An rTSS of 100 corresponds to running at exactly threshold pace for one hour — the same calibration as power TSS.

Priority order in pacelore

When computing TSS for an activity, pacelore checks in this order:

  1. Power TSS — if the activity has power data at 1Hz and the athlete has a valid FTP set. Required: power data density ≥ 80% of activity duration.
  2. rTSS — if the sport is running or trail_running, the activity has GPS data (for GAP computation), and the athlete has a threshold pace set.
  3. hrTSS — fallback for any activity with heart rate data and athlete restingHR/maxHR configured.
  4. None — if no usable data is available. The activity has a note in the dashboard that TSS couldn't be computed.

This priority order means a cycling activity with both a power meter and HR monitor uses power TSS. A trail run with GPS and HR but no power uses rTSS. A swim with only HR uses hrTSS.

Mixing TSS types in the PMC

The Performance Management Chart sums daily TSS across all activities. Mixing power TSS, rTSS, and hrTSS in the same PMC is a known approximation. The different methods aren't perfectly calibrated to each other — a 100-point hrTSS ride isn't identical to a 100-point power TSS ride in terms of actual physiological cost.

In practice, for athletes training in one primary discipline, the mix is minimal and the error is acceptable. For multi-sport athletes (triathletes), the cross-sport TSS comparison is inherently noisy regardless of the computation method. The PMC gives directional accuracy — whether training load is rising or falling — even when the absolute values are approximate.