From abb0ff01669eceb7555e49b9976de5856eb0dcfb Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Sat, 18 Feb 2012 17:48:36 +0000 Subject: [PATCH] Add Minute Mile Pace metric Runners tend to measure speed in minute mile pace and this is common even if they use metric units. --- src/BasicRideMetrics.cpp | 42 ++++++++++++++++++++++++++++++++++++++++ src/DBAccess.cpp | 6 +++++- src/Units.h | 18 ++++++++--------- 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/BasicRideMetrics.cpp b/src/BasicRideMetrics.cpp index d586f979e..392e33998 100644 --- a/src/BasicRideMetrics.cpp +++ b/src/BasicRideMetrics.cpp @@ -267,6 +267,48 @@ static bool avgSpeedAdded = RideMetricFactory::instance().addMetric( AvgSpeed(), &(QVector() << "total_distance")); +////////////////////////////////////////////////////////////////////////////// +class Pace : public RideMetric { + double pace; + + public: + + Pace() : pace(0.0) + { + setSymbol("pace"); + setName(tr("Minute Mile Pace")); + setType(RideMetric::Average); + setMetricUnits(tr("min/mile")); + setImperialUnits(tr("min/mile")); + setPrecision(1); + } + + void compute(const RideFile *, const Zones *, int, + const HrZones *, int, + const QHash &deps, + const MainWindow *) { + + AvgSpeed *as = dynamic_cast(deps.value("average_speed")); + + // divide by zero or stupidly low pace + if (as->value(true) > 0.00f) pace = 60.0f / (as->value(true) * MILES_PER_KM); // kph to minutes per mile + else pace = 0; + + setValue(pace); + setCount(as->count()); + } + RideMetric *clone() const { return new Pace(*this); } +}; + +static bool addPace() +{ + QVector deps; + deps.append("average_speed"); + RideMetricFactory::instance().addMetric(Pace(), &deps); + return true; +} +static bool paceAdded = addPace(); + ////////////////////////////////////////////////////////////////////////////// struct AvgPower : public RideMetric { diff --git a/src/DBAccess.cpp b/src/DBAccess.cpp index 6ff3e8c58..f3b1cf876 100644 --- a/src/DBAccess.cpp +++ b/src/DBAccess.cpp @@ -45,6 +45,9 @@ // Revision History // Rev Date Who What Changed //----------------------------------------------------------------------- +// +// ******* Prior to version 29 no revision history was maintained ******* +// // 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 @@ -52,8 +55,9 @@ // 33 17 Dec 2011 Damien Grauser Added ResponseIndex and EfficiencyFactor // 34 15 Jan 2012 Mark Liversedge Added Average and Max Temperature and Metric->conversionSum() // 35 13 Feb 2012 Mark Liversedge Max/Avg Cadence adjusted conversion +// 36 18 Feb 2012 Mark Liversedge Added Pace (min/mile) and 250m, 500m Pace metrics -static int DBSchemaVersion = 35; +static int DBSchemaVersion = 36; DBAccess::DBAccess(MainWindow* main, QDir home) : main(main), home(home) { diff --git a/src/Units.h b/src/Units.h index 4fabf81be..33dcb116d 100644 --- a/src/Units.h +++ b/src/Units.h @@ -20,15 +20,15 @@ #define _GC_Units_h 1 #include "GoldenCheetah.h" -#define KM_PER_MILE 1.609344 -#define MILES_PER_KM 0.62137119 -#define FEET_PER_METER 3.2808399 -#define METERS_PER_FOOT 0.3047999 -#define LB_PER_KG 2.20462262 -#define KG_PER_LB 0.45359237 -#define FEET_LB_PER_NM 0.73756214837 -#define FAHRENHEIT_PER_CENTIGRADE 1.8 -#define FAHRENHEIT_ADD_CENTIGRADE 32 +#define KM_PER_MILE 1.609344f +#define MILES_PER_KM 0.62137119f +#define FEET_PER_METER 3.2808399f +#define METERS_PER_FOOT 0.3047999f +#define LB_PER_KG 2.20462262f +#define KG_PER_LB 0.45359237f +#define FEET_LB_PER_NM 0.73756214837f +#define FAHRENHEIT_PER_CENTIGRADE 1.8f +#define FAHRENHEIT_ADD_CENTIGRADE 32.0f #define GPS_COORD_TO_STRING 8 #endif // _GC_Units_h