From ddd5528294e7b55273a23ed97db3406ee9c871df Mon Sep 17 00:00:00 2001 From: Damien Date: Sat, 17 Dec 2011 18:08:53 +0100 Subject: [PATCH] Add ResponseIndex and EfficiencyFactor modified: src/BikeScore.cpp modified: src/Coggan.cpp modified: src/DBAccess.cpp --- src/BikeScore.cpp | 40 ++++++++++++++++++++++++++++++++++++++-- src/Coggan.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/DBAccess.cpp | 4 +++- 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/src/BikeScore.cpp b/src/BikeScore.cpp index 181a12629..1a55a1d02 100644 --- a/src/BikeScore.cpp +++ b/src/BikeScore.cpp @@ -205,7 +205,39 @@ class BikeScore : public RideMetric { RideMetric *clone() const { return new BikeScore(*this); } }; -static bool addAllFour() { +class ResponseIndex : public RideMetric { + double ri; + + public: + + ResponseIndex() : ri(0.0) + { + setSymbol("skiba_response_index"); + setName(tr("Response Index")); + setType(RideMetric::Average); + setMetricUnits(tr("")); + setImperialUnits(tr("")); + setPrecision(3); + } + + void compute(const RideFile *, const Zones *, int, + const HrZones *, int, + const QHash &deps, + const MainWindow *) { + assert(deps.contains("skiba_xpower")); + assert(deps.contains("average_hr")); + XPower *xp = dynamic_cast(deps.value("skiba_xpower")); + assert(xp); + RideMetric *ah = dynamic_cast(deps.value("average_hr")); + assert(ah); + ri = xp->value(true) / ah->value(true); + + setValue(ri); + } + RideMetric *clone() const { return new ResponseIndex(*this); } +}; + +static bool addAllFive() { RideMetricFactory::instance().addMetric(XPower()); QVector deps; deps.append("skiba_xpower"); @@ -216,8 +248,12 @@ static bool addAllFour() { deps.append("skiba_xpower"); deps.append("average_power"); RideMetricFactory::instance().addMetric(VariabilityIndex(), &deps); + deps.clear(); + deps.append("skiba_xpower"); + deps.append("average_hr"); + RideMetricFactory::instance().addMetric(ResponseIndex(), &deps); return true; } -static bool allFourAdded = addAllFour(); +static bool allFiveAdded = addAllFive(); diff --git a/src/Coggan.cpp b/src/Coggan.cpp index 5b387b042..91fa1942a 100644 --- a/src/Coggan.cpp +++ b/src/Coggan.cpp @@ -185,6 +185,38 @@ class TSS : public RideMetric { RideMetric *clone() const { return new TSS(*this); } }; +class EfficiencyFactor : public RideMetric { + double ef; + + public: + + EfficiencyFactor() : ef(0.0) + { + setSymbol("friel_efficiency_factor"); + setName(tr("EF")); + setType(RideMetric::Average); + setMetricUnits(tr("")); + setImperialUnits(tr("")); + setPrecision(3); + } + + void compute(const RideFile *, const Zones *, int, + const HrZones *, int, + const QHash &deps, + const MainWindow *) { + assert(deps.contains("coggan_np")); + assert(deps.contains("average_hr")); + NP *np = dynamic_cast(deps.value("coggan_np")); + assert(np); + RideMetric *ah = dynamic_cast(deps.value("average_hr")); + assert(ah); + ef = np->value(true) / ah->value(true); + + setValue(ef); + } + RideMetric *clone() const { return new EfficiencyFactor(*this); } +}; + static bool addAllCoggan() { RideMetricFactory::instance().addMetric(NP()); QVector deps; @@ -196,6 +228,10 @@ static bool addAllCoggan() { deps.append("coggan_np"); deps.append("average_power"); RideMetricFactory::instance().addMetric(VI(), &deps); + deps.clear(); + deps.append("coggan_np"); + deps.append("average_hr"); + RideMetricFactory::instance().addMetric(EfficiencyFactor(), &deps); return true; } diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp index 10806dc6a..d36c5e0ec 100644 --- a/src/DBAccess.cpp +++ b/src/DBAccess.cpp @@ -44,12 +44,14 @@ // Revision History // Rev Date Who What Changed +//----------------------------------------------------------------------- // 29 5th Sep 2011 Mark Liversedge Added color to the ride fields // 30 8th Sep 2011 Mark Liversedge Metadata 'data' field for data present string // 31 22 Nov 2011 Mark Liversedge Added Average WPK metric // 32 9th Dec 2011 Damien Grauser Temperature data flag (metadata field 'Data') +// 33 17 Dec 2011 Damien Grauser Added ResponseIndex and EfficiencyFactor -static int DBSchemaVersion = 32; +static int DBSchemaVersion = 33; DBAccess::DBAccess(MainWindow* main, QDir home) : main(main), home(home) {