mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-02-13 08:08:42 +00:00
Add PeakPowerHr metric (average HR during peak power)
This commit is contained in:
@@ -40,7 +40,7 @@
|
||||
// DB Schema Version - YOU MUST UPDATE THIS IF THE SCHEMA VERSION CHANGES!!!
|
||||
// Schema version will change if a) the default metadata.xml is updated
|
||||
// or b) new metrics are added / old changed
|
||||
static int DBSchemaVersion = 15;
|
||||
static int DBSchemaVersion = 16;
|
||||
|
||||
DBAccess::DBAccess(MainWindow* main, QDir home) : main(main), home(home)
|
||||
{
|
||||
|
||||
@@ -286,6 +286,164 @@ class PeakPower30m : public PeakPower {
|
||||
RideMetric *clone() const { return new PeakPower30m(*this); }
|
||||
};
|
||||
|
||||
class PeakPowerHr : public RideMetric {
|
||||
Q_DECLARE_TR_FUNCTIONS(PeakPowerHr)
|
||||
|
||||
double hr;
|
||||
double secs;
|
||||
|
||||
public:
|
||||
|
||||
PeakPowerHr() : hr(0.0), secs(0.0)
|
||||
{
|
||||
setType(RideMetric::Peak);
|
||||
}
|
||||
void setSecs(double secs) { this->secs=secs; }
|
||||
void compute(const RideFile *ride, const Zones *, int, const HrZones *, int,
|
||||
const QHash<QString,RideMetric*> &) {
|
||||
QList<BestIntervalDialog::BestInterval> results;
|
||||
BestIntervalDialog::findBests(ride, secs, 1, results);
|
||||
if (results.count() > 0) {
|
||||
double start = results.first().start;
|
||||
double stop = results.first().stop;
|
||||
int points = 0;
|
||||
|
||||
foreach(const RideFilePoint *point, ride->dataPoints()) {
|
||||
if (point->secs >= start && point->secs < stop) {
|
||||
hr = point->hr + (points>0?hr/points:0);
|
||||
points++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setValue(hr);
|
||||
}
|
||||
RideMetric *clone() const { return new PeakPowerHr(*this); }
|
||||
};
|
||||
|
||||
class PeakPowerHr1m : public PeakPowerHr {
|
||||
Q_DECLARE_TR_FUNCTIONS(PeakPowerHr1m)
|
||||
|
||||
public:
|
||||
PeakPowerHr1m()
|
||||
{
|
||||
setSecs(60);
|
||||
setSymbol("1m_critical_power_hr");
|
||||
#ifdef ENABLE_METRICS_TRANSLATION
|
||||
setInternalName("1 min Peak Power HR");
|
||||
}
|
||||
void initialize () {
|
||||
#endif
|
||||
setName(tr("1 min Peak Power HR"));
|
||||
setMetricUnits(tr("bpm"));
|
||||
setImperialUnits(tr("bpm"));
|
||||
}
|
||||
RideMetric *clone() const { return new PeakPowerHr1m(*this); }
|
||||
};
|
||||
|
||||
class PeakPowerHr5m : public PeakPowerHr {
|
||||
Q_DECLARE_TR_FUNCTIONS(PeakPowerHr5m)
|
||||
|
||||
public:
|
||||
PeakPowerHr5m()
|
||||
{
|
||||
setSecs(300);
|
||||
setSymbol("5m_critical_power_hr");
|
||||
#ifdef ENABLE_METRICS_TRANSLATION
|
||||
setInternalName("5 min Peak Power HR");
|
||||
}
|
||||
void initialize () {
|
||||
#endif
|
||||
setName(tr("5 min Peak Power HR"));
|
||||
setMetricUnits(tr("bpm"));
|
||||
setImperialUnits(tr("bpm"));
|
||||
}
|
||||
RideMetric *clone() const { return new PeakPowerHr5m(*this); }
|
||||
};
|
||||
|
||||
class PeakPowerHr10m : public PeakPowerHr {
|
||||
Q_DECLARE_TR_FUNCTIONS(PeakPowerHr10m)
|
||||
|
||||
public:
|
||||
PeakPowerHr10m()
|
||||
{
|
||||
setSecs(600);
|
||||
setSymbol("10m_critical_power_hr");
|
||||
#ifdef ENABLE_METRICS_TRANSLATION
|
||||
setInternalName("10 min Peak Power HR");
|
||||
}
|
||||
void initialize () {
|
||||
#endif
|
||||
setName(tr("10 min Peak Power HR"));
|
||||
setMetricUnits(tr("bpm"));
|
||||
setImperialUnits(tr("bpm"));
|
||||
}
|
||||
RideMetric *clone() const { return new PeakPowerHr10m(*this); }
|
||||
};
|
||||
|
||||
class PeakPowerHr20m : public PeakPowerHr {
|
||||
Q_DECLARE_TR_FUNCTIONS(PeakPowerHr20m)
|
||||
|
||||
public:
|
||||
PeakPowerHr20m()
|
||||
{
|
||||
setSecs(1200);
|
||||
setSymbol("20m_critical_power_hr");
|
||||
#ifdef ENABLE_METRICS_TRANSLATION
|
||||
setInternalName("20 min Peak Power HR");
|
||||
}
|
||||
void initialize () {
|
||||
#endif
|
||||
setName(tr("20 min Peak Power HR"));
|
||||
setMetricUnits(tr("bpm"));
|
||||
setImperialUnits(tr("bpm"));
|
||||
}
|
||||
RideMetric *clone() const { return new PeakPowerHr20m(*this); }
|
||||
};
|
||||
|
||||
class PeakPowerHr30m : public PeakPowerHr {
|
||||
Q_DECLARE_TR_FUNCTIONS(PeakPowerHr30m)
|
||||
|
||||
public:
|
||||
PeakPowerHr30m()
|
||||
{
|
||||
setSecs(1800);
|
||||
setSymbol("30m_critical_power_hr");
|
||||
#ifdef ENABLE_METRICS_TRANSLATION
|
||||
setInternalName("30 min Peak Power HR");
|
||||
}
|
||||
void initialize () {
|
||||
#endif
|
||||
setName(tr("30 min Peak Power HR"));
|
||||
setMetricUnits(tr("bpm"));
|
||||
setImperialUnits(tr("bpm"));
|
||||
}
|
||||
RideMetric *clone() const { return new PeakPowerHr30m(*this); }
|
||||
};
|
||||
|
||||
|
||||
class PeakPowerHr60m : public PeakPowerHr {
|
||||
Q_DECLARE_TR_FUNCTIONS(PeakPowerHr60m)
|
||||
|
||||
public:
|
||||
PeakPowerHr60m()
|
||||
{
|
||||
setSecs(3600);
|
||||
setSymbol("60m_critical_power_hr");
|
||||
#ifdef ENABLE_METRICS_TRANSLATION
|
||||
setInternalName("60 min Peak Power HR");
|
||||
}
|
||||
void initialize () {
|
||||
#endif
|
||||
setName(tr("60 min Peak Power HR"));
|
||||
setMetricUnits(tr("bpm"));
|
||||
setImperialUnits(tr("bpm"));
|
||||
}
|
||||
RideMetric *clone() const { return new PeakPowerHr60m(*this); }
|
||||
};
|
||||
|
||||
|
||||
|
||||
static bool addAllPeaks() {
|
||||
RideMetricFactory::instance().addMetric(PeakPower1s());
|
||||
RideMetricFactory::instance().addMetric(PeakPower5s());
|
||||
@@ -299,6 +457,13 @@ static bool addAllPeaks() {
|
||||
RideMetricFactory::instance().addMetric(PeakPower20m());
|
||||
RideMetricFactory::instance().addMetric(PeakPower30m());
|
||||
RideMetricFactory::instance().addMetric(CriticalPower());
|
||||
|
||||
RideMetricFactory::instance().addMetric(PeakPowerHr1m());
|
||||
RideMetricFactory::instance().addMetric(PeakPowerHr5m());
|
||||
RideMetricFactory::instance().addMetric(PeakPowerHr10m());
|
||||
RideMetricFactory::instance().addMetric(PeakPowerHr20m());
|
||||
RideMetricFactory::instance().addMetric(PeakPowerHr30m());
|
||||
RideMetricFactory::instance().addMetric(PeakPowerHr60m());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user