Commit Graph

412 Commits

Author SHA1 Message Date
Ale Martinez
fa1e1d00ae Change FixLapSwim DP to preserve all previous data
Not just HR, also fixed sync issues when there are gaps in recording.
2020-07-23 16:59:13 -03:00
Alejandro Martinez
1f8bafb334 Text Cues on TrainBottom display pane (#3544)
Import Texts from Erg files in TrainerRoad format, Zwo files and
from Lap names in json files.
Display texts on TrainBottom for both, erg and slope mode, at the
corresponding time/distance for the specified duration.
Export Texts in erg, mrc and zwo formats.
Fixes #1118
Fixes #2967
Prerequisite for #2098
2020-07-16 12:55:41 -03:00
Ale Martinez
5bd48dd4f6 Change Fix Speed DP name to Fix Speed from Distance
To match the english menu option, and set kph present
when it is not, even if values have not changed.
Both were misleading to users.
2020-07-11 15:29:03 -03:00
Mark Liversedge
b91c8395c0 Revert "Fit : Decode Dev Fields"
This reverts commit 2e4fa9f406.
2020-07-10 08:51:31 +01:00
grauser
2e4fa9f406 Fit : Decode Dev Fields 2020-07-09 17:13:11 +02:00
Ale Martinez
3b2aa33c6a Run and Bike power estimators - add preconditions to description
Fixes #3528
2020-07-03 15:33:36 -03:00
Alejandro Martinez
0e3766a504 Add EPM - Ergo Planet Movie format import (#3520)
To be used as workouts and videosync with free Ergo Planet Videos
EPM files contain video sync plus geolocation information in XML format
Library of free rides: http://wiki.ergoplanet.de/myor/roadmovie-galerie

The problem is altitude set to zero in those examples, likely because it is
redundant when you resort to the EPP (Ergo Planet Program) for slope data,
but the EPP is an unpublished binary format we don't support directly.

So the workflow to use the those synchronized videos is:
1) Import the .epm file to GoldenCheetah as an activity
2) Use Fix Elevation and Fix GPS to add and smooth elevation and route data
3) Export the conditioned activity to GoldenCheetah JSON format
4) Import the .json file as Workout and VideoSync files,
   plus the .avi as media in GC Train mode using Scan Workouts and Media
5) Train using a Video Window with overlay widgets and simulated speed for
   better experience.
2020-06-23 17:11:02 -03:00
ericchristoffersen
32884b1c6a Support Custom Virtual Power Curve (#3410)
* Base work for dynamic speed power curves.

* Add test for spindown - proof templates.

* Dialog for adding virtual power curve

* Finished.

* Potential typename fix.

* Fix another typename problem.

* const typename reorder

* Missing header in clang build.

* Fix error with static init order.

* Forgot to set id for known devices.
2020-06-20 18:28:53 +01:00
Ale Martinez
e32e233d5f Add Favero Assioma Duo and several Garmin sensor ids
Fixes #3503
2020-06-18 12:34:48 -03:00
Ale Martinez
3be603a9ee Ignore additional sports in tha same session
Also removed the old logic for mulstisport sessions, now replaced
by sessionSplit.
Add Garmin Fenix 6 models
Fixes #3507
2020-06-16 20:47:01 -03:00
Ale Martinez
1c4c83af5e FitRideFile - Don't try to split when we don't have a RideFile
But to check for errors.isEmpty() is overkill, when the returned value
is not NULL, they can be warnings according to RideFileImport interpretation.
Fixes #3479
2020-06-14 15:16:29 -03:00
Ale Martinez
04b4d945fa FitRideFile - Don't call splitSessions without rideFile
To avoid crashes and since there is nothing to do.
2020-06-13 10:53:35 -03:00
Ale Martinez
74f3a213ac Don't try to split FIT files with errors
Fixes #3479
2020-06-12 19:17:39 -03:00
Ale Martinez
c1727623a8 Recognize Polar S625x srd files
Add 2 test files from S625X
Fixes #3489
2020-06-12 13:07:37 -03:00
Ale Martinez
757a01e876 Add Garmin MTB Dynamics to FitRideFile
Grit and Flow - Fixes #3488
2020-06-12 11:34:06 -03:00
Mark Liversedge
410aaf6a93 Overview Config Part 1 of 2
.. 'Add Tile' added to the overview menu - to enable users to
   choose and configure tiles to add to the dashboard.

.. ChartSpaceItems should now be registered to a new chart
   space item registry, which will eventually replace the
   current window registry

.. ChartSpaceItems need to register a method to create new
   items with default settings and provide a widget for
   configuring themselves.

.. A new config widget has been created to cover the
   overview tiles and some gui components for selecting
   metrics, metadata fields and ride series have also
   been added.

.. In part 2 we need to add the ability to configure
   existing tiles and also remove them.
2020-06-08 17:13:55 +01:00
Ale Martinez
60600948be Add Tacx NEO 2 Smart
Fixes #3484
2020-06-08 11:34:10 -03:00
Ale Martinez
3450f577d3 Add Garmin HRM-Dual
Fixes #3483
2020-06-08 11:31:54 -03:00
Ale Martinez
f24ee9be8a Reduce mimimum height of Python Fix Edit dialog
To fit in high-dpi laptops displays without too small font
2020-06-03 15:22:16 -03:00
Ale Martinez
bc13092cd2 Python Fixes - Clear context before to execute the script
Fixes #3459
2020-06-03 13:37:38 -03:00
ericchristoffersen
93ff6c36b4 FixGPS - Dont Stomp Slope (#3468)
Rely on invalidate.
Fixes #3466
2020-06-01 11:57:20 -03:00
Alejandro Martinez
f51a6a6cb1 Remove Conditional Compilation for Qt < 5.9 (#3464)
This is a clean up to remove conditional compilation for all Qt versions
older than the last known to work: Qt 5.9 with Qt WebEngine and Qt Charts.
Includes an update note to INSTALL documents.
2020-05-27 09:26:25 -03:00
ericchristoffersen
4348a6279c Issue 3373: FixGps to run on altitude alone. (#3374)
Fixes #3373
2020-05-25 19:03:26 -03:00
Eric Christoffersen
d52fb5a68f Fixes for interpolation and gpx file load
Interpolation math fixes: Slope and interpolation behave correctly when
ride point location doesnt change.
In gpx read: do not open same file twice with different read flags.
2020-05-25 13:34:27 -03:00
Mark Liversedge
7ee6ef43c1 Datafilter - bests()
.. the vectorized version of best() - returns a vector of either dates
   or peak values for given duration, usage:

   bests(SERIES, duration [,start [,stop]]) - get the peak values for
   the given duration and optional date range

   bests(date [, start [, stop]]) - get the dates of the peak values
   but no duration needed but can still proved an optional date range.
2020-05-10 09:51:29 +01:00
Mark Liversedge
7daf2fa63e DataFilter - dist()
.. get the ridefilecach distributions, precomputed distributions of the
   main data series (but not all).

.. dist(series, data|bins) - returns vectors of the series data (count
   of points for each interval) or the bins.
2020-05-09 15:59:38 +01:00
peterbrant14
0fab9b901a Fix indexing bugs in the original TTS code (#3423) 2020-04-28 17:45:21 +01:00
Ale Martinez
521b507b18 Import Location and Equipment metadata from fitlog files
Fixed #3406
2020-04-22 11:34:10 -03:00
Ale Martinez
1167cdd582 Add Edge 530 id to FitRideFile
Fixes #3404
2020-04-20 17:18:28 -03:00
Ale Martinez
7e77dd552a Include first record in exported CSV files with All Data
Fixes #3396
2020-04-13 13:29:19 -03:00
Ale Martinez
42fa49c50f Add sport field to RideItem/RideDB as primary field
Exiting isRun/isSwim are preserved and new isRide/isXtrain added.
Use them in DataFilter to provide isRide, isRun, isSwim and isXtrain
and in RideSummary for better filtering of activities in rides, runs
swims and xtrains.
Part 1 of #3280
2020-04-06 19:13:43 -03:00
Ale Martinez
b3f35597d3 Import Notes from TCX files
Fixes #3385
2020-03-29 22:41:48 -03:00
Ale Martinez
22c2cdd5d7 TcxParser - initialize for each activity to support multisession files
Fixes #3362
2020-03-29 22:30:01 -03:00
ericchristoffersen
5ec95681f2 Optimize splines and bikesim dvdt. (#3349)
* Optimize splines and bikesim dvdt.

* Trig identity

* Refactor to provide WattsForV.

* Optimize gps route smoothing, spline distance.
2020-03-11 22:15:20 +00:00
ericchristoffersen
da3e8212cf Allow TTS Files for VideoSync. (#3354)
Rewrite TTSReader Stream Merge

Add gpi reset.
2020-02-27 15:56:42 +00:00
flo
fae2b935e1 Support Multisport fit files
GoldenCheetah lacks support for splitting multisport fit files.
These files combine multiple sports recorded into a single
activity. Those sports are marked by session entries. These
session entries are parsed but ignored.

Fit files are parsed on-the-fly without caching data. This is
great in terms of memory useage but bad in terms of splitting
the activity into sessions because of the fit specification.
The specification allows session entries to appear either
grouped at the beginning of the file or at the end of the session
spread throughout the file.

We do cache the most relevant data entries along with the
session field entries. This hopefully adds as little overhead
as possible while parsing and in memory useage, but allows
us to determine if there are multiple session entries in one
file. If so, we can split the single file into multiple ones,
each representing a single sport (activity). Eg.: If a triathlon
is recorded using the multisport method it is split up into
the following activities:

 - Swim
 - Transition
 - Bike
 - Transition
 - Run

This corrects the metric calculation. Prior to this change
the parsed activity is tagged as a run activity and the whole
data - swim/bike HR, bike cadence, ... - was taken into account
for the run metrics calculation. Now only the relevant part of
the file is taken into account.

Laps as well as XData records are also split up to the files
created out of a single multisport file and are aligned in time.

It turned out that it is best to treat transitions as run.

Fixes: #3211
2020-02-19 17:45:53 -03:00
flo
5ecc2470aa Allow deep copies of XDataSeries
Doing shallow copies of Objects when explicitly declaring a copy c-tor
is very dangerous.
When the object is cloned, the second to be destroyed crashes w/ double
freeing memory or/and, even worse, dangling pointers are left around.
That in turn leads to unpredictable crashes.

There's only one thing left to say, use smart pointers wherever
possible. Or simply do not use arrays of pointers. The vector class
already get it right to alloc/free memory for objects stored in it.
2020-02-19 17:45:53 -03:00
ericchristoffersen
127166a0e9 Support for TTS files. (#3333)
Support training with Tacx TTS files:

TTS distance and gradient are honored meaning training
load should exactly match tacx. Ride altitude is recomputed
based on distance and gradient, so training work will
match The Tacx Experience and might not match reality.

When TTS file contains no location, altitude is still computed
from distance and gradient but will start from 0.

Gradient during training is interpolated from distance and
altitude so will change smoothly while summing perfectly
to the correct load.

The TTS Reader source was adapted from the WattzApp
Community Edition java source.

Highly recommended that 'Use Simulated Speed' option
is enabled when riding TTS files.

This change was only tested against a small number of
dvds that I own. I would appreciate feedback and problem
reports. I would especially appreciate anyone that can
compare this behavior against Tacx as I only tested with
my Wahoo Kickr.

Issues and Future work:

I guessed about how to set starting distance and might
have got it wrong.

TTS Files contain video synchronization data. Currently
this is ignored and rlv file must be specified. I've not
even looked at the video sync data and no idea if it is
better than the rlv.

There are data fields in the TTS that Ive not investigated
and they might contain useful info, for example a starting
altitude for rides that have no location info.

Other changes:

Fix numerical stability around zero in blinn and quadratic
solvers. Improve quadratic solver accuracy.

Fix issues with computing gradient from non-uniform
cubic splines.

RideFiles now record additional altitude accuracy.
2020-02-13 21:58:31 +00:00
Erik Botö
d1e2f38e07 Add support for VO2 measurements and VO2Master VM Pro
Add support for a generic set of VO2 measurements:

* Respiratory Frequency
* Respiratory Minute Volume aka Ventilation
* Volume O2 consumed
* Volume CO2 produced
* Tidal Volume
* FeO2 (Fraction of O2 expired)
* Respiratory Exchange Rate (calculated as VCO2/VO2)

Make the new metrics usable in TrainView, and store VO2 data as XDATA
using the same pattern as for HRV data.

Add support for VM Pro by VO2Masters

The VM Pro is a BLE device, so support is added in the BT40Device class.
Since the device requires some configuration in order to be usable, such
as the size of the "User Piece" a special configuration widget is added
and shown in a separate window when the device is connected.

This window is also used to set a number of useful settings in the
device, and to show calibration progress. There's also a detailed log of
the status messages shown, and this can also be saved to file.

Allow notifications from RealtimeControllers and devices in the
notification area of Train View. In order for devices to display
information in the notification field in TrainBottom the signals need
to added and propagated from from device level via RealtimeController
to TrainSidebar and finally TrainBottom.

Fix an issue with multiple BT40Device per actual device

Currently on MacOS there will be multiple BT40Device per actual device,
since the QBluetoothDeviceDiscoveryAgent::deviceDiscovered() signal is
emitted multiple times with e.g. updated RSSI values. Avoid this by
checking the previously created devices first.

MacOS doesn't disclose the address, so QBluetoothDeviceInfo::address()
can't be used there, instead deviceUuid() is used which is instead only
valid on MacOS.
2020-02-03 12:00:08 +00:00
ericchristoffersen
9018ad7a28 Use tangent vector to compute interpolated grade.
Use tangent vector to compute interpolated grade.
Implement correct bracket mapping for cubic spline
Case sensitive include file name.

#Fixes #3283
2020-02-02 08:26:21 +00:00
ericchristoffersen
cf5d0d1f29 Issue 3320: FixGPS: Route Smoothing and Multipass Outlier Removal (#3321)
* FixGPS: add outlier removal

* Parameterized multipass route smoothing.

* Better defaults. Fix avgSlope calcs.

* Cleanup.
2020-02-01 17:16:24 +00:00
Erik Botö
2c0eb835d4 Fix import of HRV from Fit files where single records occur (#3323)
* FitRideFile: handle single values in decodeHRV()
Currently only records of type ListValue are handled, but single
RR-intervals can also come as type SingleValue. Before such records
were silently ignored.
* FitRideFile: Unify indentation of decodeHRV()
The indentation before was a mix of tabs and spaces, which made the code
quite a challenge to read. This unifies to use 4 spaces at least
throughout the function.
* Added test file
Fixes #3297
2020-01-28 20:19:53 -03:00
ericchristoffersen
6e5fb42171 Add BSpline altitude smoothing to FixGPS. (#3310)
Fixes #3302
2020-01-27 10:57:39 -03:00
Poncho
40d03c4402 Add New Device IDs for FIT files (#3315)
add Garmin Edge 830
add Stages Cycling
Add test file for Garmin Edge 830 with Stages Cycling power meter
2020-01-26 18:52:13 -03:00
Alejandro Martinez
e64b6fb557 Allow Estimate Distance to run automatically without crash (#3313)
Fixes #3311
2020-01-25 19:48:58 -03:00
thebaron06
8a94666e91 Add the identification of Garmin HRM-Tri and Vector 3
Fixes #3306
2020-01-25 09:12:45 -03:00
Kamen Naydenov
1bf8f43f0a Add Garmin Instinct device ID (#3300)
Device information:
https://buy.garmin.com/en-US/US/p/621802/pn/010-02064-00#specs
2020-01-23 09:06:19 -03:00
ericchristoffersen
4eae552846 Fix Issue 3273: Busy Hang in FixDeriveDistance (#3275)
Fix #3273: Busy Hang in FixDeriveDistance
Init goodii to 0 so tolerate no valid points.
2019-12-28 05:17:07 -03:00
Ale Martinez
f0482bf00c Revert "Plot R-R from Xdata"
This code has problems when distance is used on x-axis (#2842)
and it is redundant since there is a general mechanism to plot
any XData series as User Data in Activitiy chart.
This reverts commit f095416c5c.
2019-12-20 18:00:30 -03:00
riccioclista
9f1187390f Python data processors (#2951)
* Initial implementation of Python data processors
* Add RideEditor to PyFIx script editor
* Enable write-access to activity data for python fixes
* Add GC.deleteActivitySample method
* Add GC.deleteSeries method
* Check for python fix for changes before close
* Build python fixes menu dynamically
* Make python fixes first class data processors
* Add GC.postProcess method
* Check GC_WANT_PYTHON and "Enable Python" setting for python fixes
* Add GC.createXDataSeries method
* Clean up ScriptContext ctor mess
* Support editing xdata series
* PDP: Implement xdata append/remove methods
2019-12-19 22:05:51 -03:00