Part of session
Result verification
Verified: 0/5 • matching: 0 • drifted: 0 • not checked: 5
Vector alert 0 Vector warn 0 Vector ok 0 Vector unknown 0
Track: Grenchen
Baseline: #179
Top: #179
Baseline guidance (aero best practice)
Goal: a stable reference run for comparisons (position/helmet/wheels), not the “best-looking” outlier.
Prefer: QC A/green, high included distance, low rejection %, few unstable laps, and solid straight coverage.
Avoid: low straight time, many unstable laps, power dropouts/spikes, or runs that needed heavy manual selection unless you’re deliberately isolating a clean segment.
Rule of thumb: pick the top Best10 run you’d be comfortable publishing as a reference; if A-only has none, choose the cleanest B and document why.
Client report
Baseline vs Best10, power @35–55, time savings (40/90/180 km), and top 10 runs.
Uses current Ref speed.
Workflow
Next action
Review QC and replay consistency, then finalize when evidence is stable.
  • Analyze once more to persist provenance, then run replay check.
Replay consistency
Run Analyze first, then check replay consistency.
No cached replay diagnostics yet.
Vector diagnostics appear after replay check.
Threshold bands appear after replay check.
idle
Editable
Saved status:
Publish / Push to client
Generates a signed client link (no DB write). Includes report + PDF/CSV + photo access.
Open
Open in dashboard
Opens the dashboard HTML report view (requires being logged into the dashboard).
Page guide (optional)
Result: CdA/Crr and power summary.
Ride chart: choose analysis range.
Laps: include/exclude and recompute.
Run details: setup, tires, notes, photos.
Signal quality
How clean and consistent the ride data is — affects how much you can trust the result.
green grade A 2026-05-07 14:39:25
Included: 6349.99 m • 27 laps
Included lap flags: green=21, yellow=1, red=5, none=0 • avg confidence 0.70
Track segments covered: 4/4
Signal quality breakdown
These are the main factors behind QC confidence and rejection. Thresholds are heuristic; use them to guide selection + data cleanup.
Driver Value Status Notes / quick fixes
Confidence score 0.85 good Low confidence often correlates with low straight time, unstable pacing, or many rejected samples.
Samples excluded 5% good If high: tighten selection, exclude bad laps, and re-run QC/analyze.
Inconsistent laps 6 (22%) high If unstable: check pacing, sensor dropouts, and avoid corners/traffic in the selection.
Straight time (effective) 121 s good If low: widen selection to include more straights, or capture more clean laps.
Straight coverage 1559 m good More straight distance generally improves confidence and stability.
Corner coverage 4791 m Turns often bias CdA high; heavy corner time can hurt quality unless handled explicitly.
Included distance/laps 6350 m • 27 laps If low: widen selection or include more clean laps.
Solver samples used 525 (S 122, C 403) If low: exclusions/selection/steady-gate may have removed too much data.
Sample interval 1.00 s (IQR 0.00s) ok Irregular or low sample rate can reduce confidence and increase quantization artifacts.
Missing samples speed 0.0% power 0.2% good Dropouts often explain unstable laps and high rejection.
Quantization step power ~7 W speed ~0.050 m/s watch Large steps can create “blocky” data and inflate residuals.
Try: increase recording rate, disable device smoothing, and verify the source sensor (power meter vs trainer) isn’t heavily filtered.
If power step is big: check whether the device is rounding/averaging power (e.g., 3s/10s display smoothing shouldn’t affect recording, but some devices do).
If speed step is big: prefer wheel-speed sensor over GPS speed (especially indoors/velodrome).
Data quality lap flags dropouts 0 · spikes 0 · outliers 3 bad Dropouts/spikes/outliers can sink confidence even if the lap “looks fine.” Consider excluding those laps.
Segment coverage 4/4 full Missing segments can reduce stability/coverage. Aim for clean laps across the full track when possible.
Aerodynamic result
Drag coefficient (CdA) and rolling resistance solved from your selected ride data, with modelled power at common race speeds.
Definitions (what these numbers mean)
Field Meaning
Drag (CdA) Average of per-sample instantaneous CdA values computed from a power-balance model with fixed Crr (and drivetrain loss). Uses only samples that pass exclusions (and optional steady gate). Units: m².
Drag — straights / corners Same CdA computation as “CdA total”, but averaged over samples labeled straight vs corner by the track segmentation. Useful to spot corner artifacts vs stable straights.
Rolling resistance (Crr) Rolling resistance coefficient held constant during the solve. It may come from a per-run override; otherwise a tire library/manual point is used when available. CdA is estimated while Crr stays fixed.
Uncertainty / CI95 Two different things may appear: (1) CI95 is a bootstrap interval from solver_uncertainty_v2, resampling per-lap mean instantaneous CdA (1500 resamples, 95% interval). (2) Legacy “uncertainty” is a simple spread (std dev) of instantaneous CdA samples and is not a confidence interval.
Samples used Counts from solver_sample_counts: total FIT samples, after exclusions, and the final number used by the solver (plus straight vs corner used).
Solver mode / steady gate The mode can enable a “steady gate” that discards samples with large power ramps or speed changes (dp/dt and dv/dt thresholds), strong braking, and a short ignore window after a major power change. removed_frac is the fraction removed; the gate may fall back to disabled if it would remove too much.
CdA-inst stats Diagnostics for instantaneous CdA on included samples: median plus dispersion (MAD/IQR). These are computed after masking invalid/out-of-bounds CdA values (e.g., non-finite or outside a plausible range).
Robust (straights) A diagnostics-only straight fit stored in robust_v1: confidence-weighted IRLS (Huber) regression in wheel-power space on straight-labeled samples. It does not replace the reported CdA columns.
Rejected / residual / time used Robust diagnostics: pct_rejected is mainly gating (not corners / below mins / below conf_min) and equals 1 - n_used/n_total. residual_metric is a robust residual scale (≈watts) from the straight-fit model (lower is better). straight_time_used_s summarizes how much time had non-zero fit weight.
Predicted power Modeled steady-state (flat, no wind) power at fixed speeds using the run’s solved CdA total + fixed Crr and drivetrain loss. Useful for comparing “how fast this setup feels” on a common baseline.
Reference power table Saved speed→power mapping built from the same steady-state model as Predicted power (CdA, fixed Crr, air density, mass, drivetrain loss) for consistent later comparisons.
Standard vs robust estimate comparison
The robust estimate uses only straight sections with confidence weighting — it's a diagnostic check and does not replace the reported result.
legacy robust Δ
CdA straight 0.2764 0.1558 -0.1207 (-43.7%)
Uncertainty CI95 total ± 0.0056
Straight samples used 122 118/525
Rejected
Fraction of straight candidates that end up zero-weight (≈ 1 - n_used/n_total; mostly gating)
78%
Residual metric
Robust residual scale in watts (lower is better)
80.5
Straight time used 510.0s
Straight segments used 54
Drag (CdA)
0.2795
CI95 0.2440–0.3016 (lap bootstrap, n=27)
Rolling resistance (Crr)
0.00400
Drag — straights
0.2764
Drag — corners
0.2804
Solver mode: default • drivetrain 3.0% • accel on • grade off
Samples used: 525 (straight 122, corner 403) • after exclusions 525/525
CdA-inst stats: median 0.2280 • MAD 0.0982 • IQR 0.2344 • ok 432/525
Robust (straights): 0.1558 ± 0.0056 • n=118 • diagnostics-only
Power needed at speed (watts, steady-state flat)
35 km/h
40 km/h
45 km/h
50 km/h
55 km/h
Reference speed: Ref —
Math & inputs (transparency)
Power balance (conceptual)
We fit CdA from the FIT data using a simplified steady-state balance. At a given speed v (m/s):
P_aero = 0.5 × ρ × CdA × v³
P_roll ≈ Crr × m × g × v
(plus small terms for grade/acceleration/drivetrain depending on the solver configuration)
What you’re seeing on this page
CdA/Crr above are run-averaged solver outputs; the predicted-power bars come from the solver’s reference-speed table.
Download samples CSV  |  Download samples CSV (with CdA-inst)

Ride data

Distance along the track on the X axis. Drag to highlight the section you want to analyse. Scroll with Ctrl/⌘ + mousewheel to zoom in.
(downloads selected CSV + selection JSON)
Applying a selection saves the range, re-runs the analysis, and refreshes all results below to match.
Loading chart…
Move pointer over chart for values.
Power Speed
Cadence Heart rate CdA-inst
Overlays: 3s long-dash, 10s dotted (visual only).
Lap explorer (visual only)
Selected
Tip: click a boundary line (or Alt+click anywhere) to select a lap.
Stats are computed from the raw samples for the chosen lap.
Mode Samples Duration Distance Avg speed Avg power Avg cadence
Select a lap…
Stability (diagnostic)
Select a lap to see pacing/position stability.
Uses robust CV (MAD-based) + first-half vs second-half drift. Visual-only; does not affect solver.
Lap spans (distance/time from samples)
Lap Start x End x Δx Start t End t Δt
Loading…
Lap QC
Select a lap to see QC status.
Recommended next steps

    Run details (setup, notes, tires, photos)

    Setup is stored per run (equipment/position/overrides). Tire selection + notes + photos are stored on the run. Notes/tires autosave; photos require a manual upload.
    Run setup
    Use Close to collapse the editor.
    Tires (stored on run)
    Select the run’s front/rear tire library entries. The setup editor also has “Tire front / Tire rear” fields for descriptive notes.
    Front tire
    Suggested
    Rear tire
    Suggested
    Add new tire (optional)
    If you fill these in, the tire will be added to the library and selected for this run. It will populate both front and rear if they are not set.
    Notes
    Photos
    No files chosen
    No photos attached yet.
    Notes/tires autosave. Use this to upload photos (or force a manual save).

    Revision: #1

    Engineering debug (advanced): raw run JSON
    {
      "created_at": "2026-05-07 14:39:14",
      "finalized_at": null,
      "has_tire_front_rear": true,
      "is_finalized": false,
      "notes": null,
      "revision_number": 1,
      "revision_of_run_id": null,
      "run_id": 182,
      "run_label": null,
      "session_id": 99,
      "status": "analyzed",
      "tire_front_id": null,
      "tire_front_name": null,
      "tire_id": null,
      "tire_name": null,
      "tire_rear_id": null,
      "tire_rear_name": null,
      "tires_label": null
    }
    View laps JSON
    For test data cleanup; cannot be undone.

    Analyze: Parses the uploaded file, detects laps from distance vs track lap length, classifies straight/corner segments, computes QC results (per-lap qc_flag/reasons/metrics + run summary), and computes solver outputs (avg CdA/Crr + predicted power). This may increase the number of lap rows if the file contains more laps than the FIT “lap messages” reported at upload.

    Recompute: Re-runs the QC computations using the current lap inclusion/exclusions in this run (updates per-lap qc_flag + the run summary). Use after excluding laps.

    Finalize: Locks this run permanently (immutable). After finalizing, analyze/recompute/exclude are blocked; create a revision to make changes while preserving an audit trail.

    Laps and exclusions (showing 27/27) yellow 1 red 5
    FIT lap messages: unknown Detected laps: 27 (included: 27) Data source: FIT (fit_distance_field)
    All detected laps are shown. Excluding laps changes QC; use Recompute after exclusions (Analyze recomputes QC + solver).
    Runs one recompute (faster than excluding one-by-one).
    lap_index lap_id included qc_flag qc_conf qc_reasons exclude_reason action
    0 14767 yes red 0.00 Outliers present: 0.18; Unstable signals: 0.00
    1 14768 yes red 0.11 High outlier rate: 0.21
    2 14769 yes green 0.88 Lap OK
    3 14770 yes green 0.82 Lap OK
    4 14771 yes green 0.87 Lap OK
    5 14772 yes green 0.83 Lap OK
    6 14773 yes green 0.86 Lap OK
    7 14774 yes green 0.84 Lap OK
    8 14775 yes green 0.89 Lap OK
    9 14776 yes green 0.88 Lap OK
    10 14777 yes green 0.87 Lap OK
    11 14778 yes green 0.89 Lap OK
    12 14779 yes green 0.85 Lap OK
    13 14780 yes green 0.78 Lap OK
    14 14781 yes yellow 0.68 Marginal stability: 0.68
    15 14782 yes green 0.83 Lap OK
    16 14783 yes green 0.86 Lap OK
    17 14784 yes green 0.86 Lap OK
    18 14785 yes green 0.88 Lap OK
    19 14786 yes green 0.84 Lap OK
    20 14787 yes green 0.84 Lap OK
    21 14788 yes green 0.86 Lap OK
    22 14789 yes green 0.85 Lap OK
    23 14790 yes green 0.86 Lap OK
    24 14791 yes red 0.14 Unstable signals: 0.14
    25 14792 yes red 0.00 Unstable signals: 0.00
    26 14793 yes red 0.00 Outliers present: 0.20; Unstable signals: 0.00
    Client report preview
    Auto-rendered from the same payload used by Copy. Adjust Ref speed and format to update.
    CdA trend (Best10 + baseline)
    Power bars (baseline tinted vs best solid)
    Colors represent speed (40/45/50/55).
    Baseline + Best10 (horizontal compare)
    CdA by run order (baseline + compared runs).
    Client runs summary (6)
    All saved runs for this client: Lars Teutenburg — lars@bikefiteurope.com. “Recommended” prioritizes green QC + high included meters.
    Recommended: #182 #181 #180
    run date track label QC included CdA P@45 P@50 P@55 state
    #199 2026-05-07 Aigle Velodrome (CH) — 200m yellow 2642m / 1 laps 0.2843 373W 501W 656W analyzed
    #183 2026-05-07 Grenchen green 5493m / 24 laps 0.2747 362W 485W 635W analyzed
    #182 Recommended 2026-05-07 Grenchen green 6350m / 27 laps 0.2795 367W 493W 645W analyzed
    #181 Recommended 2026-05-07 Grenchen green 6591m / 28 laps 0.2594 344W 461W 602W analyzed
    #180 Recommended 2026-05-07 Grenchen green 6074m / 26 laps 0.2511 334W 447W 585W analyzed
    #179 2026-05-07 Grenchen green 5103m / 22 laps 0.2277 307W 410W 535W analyzed

    Last API response

    (no actions yet)
    (none)