... create folder structure for existing and new athletes
... upgrade existing athlete to new structure when opening / incl.
logging and error handling
... convert any "Downloaded" file to .JSON directly - store source file
in /downloads
... convert any "Imported" file to .JSON directly - store source file in
/imports
... introduce new "home" Folder structure object representing the
previous flat-folder
... adjust relevant QDir home - access to use the sub-folder method of
the new object
Note: the new structure is not yet active ! - everything is written to
the main folder still
To Do:
... add upgrade procedure for existing folder content to merge to the
new folders
.. metrics for time in zone
.. summary on ride summary
Still need to add to cache, histograms and allow editing
of custom zones in a sensible manner (currently edited in kph/mph)
Dave Waterworth has fixed my implementation of W'bal to
remove my "optimisations" and fix the math.
The W'bal is now computed in a single pass and is just
as fast as the differential form from Andy Froncioni but
has the benefit that is still uses Tau.
Many thanks to Dave, and I'll write this up shortly.
... 2 new metrics (estimates) mainly relevant for MTB or Race bike steep
passes
... a) Time Carrying = moving < 8kph, gaining height, no power, no
cadence
... b) Elevation Gain carring = same criteria, but adding up the
elevation gain
Since there is a certain level of error, the metrics is named as "Est".
.. previously we have computed below cp work as only that
work when power was at or below CP
.. since we want to track energy from CP and W' it makes more
sense to make below CP work include all work not from W' stores.
.. when averaging lr balance, pedal smoothness etc we now
ignore values when cadence is zero.
.. the zero values are not meaningful and skew the average to
render them almost useless !
.. don't rely upon ZDATA metadata, instead we add
a new 'present' field that contains the Data meta value
.. navigator defaults columns when they're all messed up
.. summary isn't so noisy when providing progress updates
.. needed symbol name to be unique as 'Weight' clashed with the
normal ride metadata field.
.. we now add _m to the fieldname to generate a symbol name for
measures.
Fixes#862
Using Andy Froncioni's modification to the original
formula that removes the need for Tau and also lets
the exponentials drop out.
Massive speed improvement!
.. by checking the ride file CRC before recomputing
either the metrics or the ridefilecache.
.. this means that users that routinely copy or backup
or use dropbox to keep things in sync won't see any
unneccessary metric computations.
.. metric of the aerobic-ness of a ride based upon the
ratio of a-TISS to an-TISS.
.. bear in mind the curves for a/an TISS are being looked
at as we speak !
Added a few new training stress metrics whilst discussing
and working on a multicomponent view of training stress.
This is all a wip falling out of discussions around stress
metrics beyond the old TSS/BikeScore models.
For now this just includes;
1. Aerobic Training Impact Scoring System on PM/PMC
2. Work (Kj) above/below CP on PM/PMC
3. Aerobic TISS on the Ride Plot
There is lots more to come; specifically around Anaerobic TISS,
looking again at polarised training and personalised training stress
based upon the individual's CP model.
.. need to think about what we're trying to achieve with this
but for assessing TT efforts we can see how far away from
a constant load the ride was.
Its just computed as average power as a percentage of max power.
.. the calculation assumed 1s recording (or was just wrong)
joules are now calculated properly, this is especially
important for SRM recordings of 0.5s samples
You can now compare seasons / date ranges across or between
athletes on the LTM charts.
This is only shown on the stack chart as we need one chart
per data series - in a similar vein to the AllPlot chart.
There are some tidy ups left to do over the next few days;
- Data table needs updating to support compare mode
- Event markers need to be shown and in the right color
- PMC curve data is slow, needs some kind of optimisation
- The tooltip is missing and needs to be put back
- Ensure the new stack frame looks correct when using a
dark plot background (or anything other than white)
- Consider how to handle zooming when there is only one
data series and hence only one chart for compare
For maximum W' capacity expended i.e. Min W'bal
expressed as a percentage of W'.
So if W' is 20 kJ and W'bal is 2kJ then 18 kJ
have been expended, which when expressed as a
percentage of W' (18/20 %) would be;
Max W' Exp of 90%
I also cleaned up a few extra instances of WPrime
being created when calculatinf metrics which was
not a big deal for the Metric refresh but would make
interval metrics painful.
.. don't rely on WPrime to compute it, its pretty simple
to compute as long as CP is set
.. add to the summary totals so always there to compare
against the total work
The final part (and one of the reasons) for the mainwindow
refactoring -- we now support tabbed athletes rather than
having a new mainwindow for each athlete opened.
Context is saved/restored and there are new functions for
opening and closing tabs and windows of tabs.
The tabbar itself is fugly -- the next few days will spend
some time looking at making it prettier on Linux/Win and
more native on Mac (see MMTabBar).
.. let the user choose metadata texts to filter
by value in the sidebar.
Note there are issues;
1. the value lists are not updated automatically when
rides are updated or imported and values are added
or removed.
2. it only works with shorttext metadata fields, we might
choose to add numeric etc later.
3. it would be nice to get an indication of how many
activities contain the value and maybe even sort
by count.
Looks at the max and min (non-zero) power values and
uses the difference between them to calculate a fatigue
index as a percentage.
i.e.
FI = (maxP - minP) / maxP * 100.00;
This is really only useful for targetted intervals as for
most riding there will always be a period of time where
the rider coasts or takes it easy.
We may look to improve it by smoothing or comparing to the
average power instead of minimum power.
Fixup crashes and major issues created by porting
to QT5. These have included;
* Fix CP plot log scale
* AllPlot axes and tooltip
* DBAccess prepare/bind bug
* LTMSettings crash
* LTMWindow zoomer/picker crash
* LTMPlot axes hack
There are still issues remaining but we can start
working through them at leisure -- the product now
builds and runs.
Added an average aPower metric.
I also and found and fixed a couple of bugs along the way;
* intervals create a ridefile and need to explicitly call
recalculateDerivedMetrics()
* the aPower calculation was using the calculated vo2max
percentage the wrong way around (!)