Private
Public Access
1
0

adding external yaml for rowing metrics

This commit is contained in:
2024-11-26 21:13:46 +01:00
parent 029dddd1db
commit b85636a373
2 changed files with 296 additions and 327 deletions

View File

@@ -1,7 +1,7 @@
from rowers.utils import lbstoN
import numpy as np
import yaml
import pandas as pd
from scipy import optimize
from django.utils import timezone
@@ -44,335 +44,16 @@ nometrics = [
'cum_dist.1'
]
rowingmetrics = (
('time', {
'numtype': 'float',
'null': True,
'verbose_name': 'Time',
'ax_min': 0,
'ax_max': 1e5,
'mode': 'both',
'type': 'basic',
'group': 'basic',
'maysmooth': False,
'sigfigs': -1}),
('hr', {
'numtype': 'integer',
'null': True,
'verbose_name': 'Heart Rate (bpm)',
'ax_min': 100,
'ax_max': 200,
'mode': 'both',
'type': 'basic',
'maysmooth': False,
'group': 'athlete',
'sigfigs': 0, }),
('pace', {
'numtype': 'float',
'null': True,
'verbose_name': 'Pace (/500m)',
'ax_min': 1.0e3*210,
'ax_max': 1.0e3*75,
'mode': 'both',
'type': 'basic',
'sigfigs': 1,
'maysmooth': True,
'group': 'basic'}),
('velo', {
'numtype': 'float',
'null': True,
'verbose_name': 'Boat Speed (m/s)',
'ax_min': 0,
'ax_max': 8,
'default': 0,
'mode': 'both',
'sigfigs': 1,
'maysmooth': True,
'type': 'pro',
'group': 'basic'}),
# ('powerhr',{
# 'numtype':'float',
# 'null':True,
# 'verbose_name': 'Power Heart Rate Efficiency (J/beat)',
# 'ax_min':0,
# 'ax_max':300,
# 'mode':'both',
# 'type':'pro',
# 'group':'athlete'}),
('spm', {
'numtype': 'float',
'null': True,
'verbose_name': 'Stroke Rate (spm)',
'ax_min': 15,
'ax_max': 45,
'mode': 'both',
'sigfigs': 1,
'type': 'basic',
'maysmooth': True,
'group': 'basic'}),
('driveenergy', {
'numtype': 'float',
'null': True,
'verbose_name': 'Work Per Stroke (J)',
'ax_min': 0,
'ax_max': 1000,
'mode': 'both',
'sigfigs': 0,
'type': 'pro',
'maysmooth': True,
'group': 'forcepower'}),
('power', {
'numtype': 'float',
'null': True,
'verbose_name': 'Power (W)',
'ax_min': 0,
'ax_max': 600,
'mode': 'both',
'sigfigs': 0,
'type': 'basic',
'maysmooth': True,
'group': 'forcepower'}),
('averageforce', {
'numtype': 'float',
'null': True,
'verbose_name': 'Average Drive Force (N)',
'ax_min': 0,
'ax_max': 1200,
'mode': 'both',
'sigfigs': 0,
'maysmooth': True,
'type': 'pro',
'group': 'forcepower'}),
('peakforce', {
'numtype': 'float',
'null': True,
'verbose_name': 'Peak Drive Force (N)',
'ax_min': 0,
'ax_max': 1500,
'sigfigs': 0,
'mode': 'both',
'maysmooth': True,
'type': 'pro',
'group': 'forcepower'}),
('drivelength', {
'numtype': 'float',
'null': True,
'verbose_name': 'Drive Length (m)',
'ax_min': 0,
'ax_max': 2.5,
'mode': 'rower',
'sigfigs': 2,
'maysmooth': False,
'type': 'pro',
'group': 'stroke'}),
('forceratio', {
'numtype': 'float',
'null': True,
'verbose_name': 'Average/Peak Force Ratio',
'ax_min': 0,
'ax_max': 1,
'sigfigs': 2,
'maysmooth': True,
'mode': 'both',
'type': 'pro',
'group': 'forcepower'}),
('distance', {
'numtype': 'float',
'null': True,
'verbose_name': 'Interval Distance (m)',
'ax_min': 0,
'ax_max': 1e5,
'sigfigs': 0,
'mode': 'both',
'maysmooth': False,
'type': 'basic',
'group': 'basic'}),
('cumdist', {
'numtype': 'float',
'null': True,
'verbose_name': 'Cumulative Distance (m)',
'ax_min': 0,
'ax_max': 1e5,
'mode': 'both',
'sigfigs': 0,
'maysmooth': False,
'type': 'basic',
'group': 'basic'}),
('drivespeed', {
'numtype': 'float',
'null': True,
'verbose_name': 'Drive Speed (m/s)',
'ax_min': 0,
'ax_max': 4,
'default': 0,
'sigfigs': 2,
'maysmooth': True,
'mode': 'both',
'type': 'pro',
'group': 'stroke'}),
('catch', {
'numtype': 'float',
'null': True,
'verbose_name': 'Catch Angle (degrees)',
'ax_min': -40,
'ax_max': -75,
'default': 0,
'sigfigs': 0,
'mode': 'water',
'maysmooth': True,
'type': 'pro',
'group': 'stroke'}),
('slip', {
'numtype': 'float',
'null': True,
'verbose_name': 'Slip (degrees)',
'ax_min': 0,
'ax_max': 20,
'default': 0,
'sigfigs': 1,
'maysmooth': True,
'mode': 'water',
'type': 'pro',
'group': 'stroke'}),
('finish', {
'numtype': 'float',
'null': True,
'verbose_name': 'Finish Angle (degrees)',
'ax_min': 20,
'ax_max': 55,
'default': 0,
'sigfigs': 0,
'maysmooth': True,
'mode': 'water',
'type': 'pro',
'group': 'stroke'}),
('wash', {
'numtype': 'float',
'null': True,
'verbose_name': 'Wash (degrees)',
'ax_min': 0,
'ax_max': 30,
'default': 0,
'sigfigs': 1,
'maysmooth': True,
'mode': 'water',
'type': 'pro',
'group': 'stroke'}),
('peakforceangle', {
'numtype': 'float',
'null': True,
'verbose_name': 'Peak Force Angle',
'ax_min': -50,
'ax_max': 50,
'default': 0,
'sigfigs': 0,
'maysmooth': True,
'mode': 'water',
'type': 'pro',
'group': 'stroke'}),
('totalangle', {
'numtype': 'float',
'null': True,
'verbose_name': 'Drive Length (deg)',
'ax_min': 40,
'ax_max': 140,
'default': 0,
'sigfigs': 0,
'maysmooth': True,
'mode': 'water',
'type': 'pro',
'group': 'stroke'}),
('check_factor', {
'numtype': 'float',
'null': True,
'verbose_name': 'Check Factor',
'ax_min': 0,
'ax_max': 100,
'default': 0,
'sigfigs': 1,
'maysmooth': True,
'mode': 'water',
'type': 'pro',
'group': 'stroke'}),
('effectiveangle', {
'numtype': 'float',
'null': True,
'verbose_name': 'Effective Drive Length (deg)',
'ax_min': 40,
'ax_max': 140,
'default': 0,
'sigfigs': 0,
'mode': 'water',
'maysmooth': True,
'type': 'pro',
'group': 'stroke'}),
('rhythm', {
'numtype': 'float',
'null': True,
'verbose_name': 'Stroke Rhythm',
'ax_min': 20,
'ax_max': 55,
'default': 1.0,
'sigfigs': 0,
'mode': 'erg',
'maysmooth': True,
'type': 'pro',
'group': 'stroke'}),
('efficiency', {
'numtype': 'float',
'null': True,
'verbose_name': 'OTW Efficiency (%)',
'ax_min': 0,
'ax_max': 110,
'default': 0,
'sigfigs': 0,
'mode': 'water',
'maysmooth': True,
'type': 'pro',
'group': 'forcepower'}),
('distanceperstroke', {
'numtype': 'float',
'null': True,
'verbose_name': 'Distance per Stroke (m)',
'ax_min': 0,
'ax_max': 15,
'default': 0,
'sigfigs': 1,
'maysmooth': True,
'mode': 'both',
'type': 'basic',
'group': 'basic'}),
with open("rowingmetrics.yaml", "r") as file:
td = yaml.safe_load(file)
rowingmetrics = tuple(
(key, value)
for key, value in td.items()
)
metricsdicts = {}
for key, dict in rowingmetrics:
metricsdicts[key] = dict

288
rowingmetrics.yaml Normal file
View File

@@ -0,0 +1,288 @@
time:
numtype: float
'null': true
verbose_name: Time
ax_min: 0
ax_max: 100000.0
mode: both
type: basic
group: basic
maysmooth: false
sigfigs: -1
hr:
numtype: integer
'null': true
verbose_name: Heart Rate (bpm)
ax_min: 100
ax_max: 200
mode: both
type: basic
maysmooth: false
group: athlete
sigfigs: 0
pace:
numtype: float
'null': true
verbose_name: Pace (/500m)
ax_min: 210000.0
ax_max: 75000.0
mode: both
type: basic
sigfigs: 1
maysmooth: true
group: basic
velo:
numtype: float
'null': true
verbose_name: Boat Speed (m/s)
ax_min: 0
ax_max: 8
default: 0
mode: both
sigfigs: 1
maysmooth: true
type: pro
group: basic
spm:
numtype: float
'null': true
verbose_name: Stroke Rate (spm)
ax_min: 15
ax_max: 45
mode: both
sigfigs: 1
type: basic
maysmooth: true
group: basic
driveenergy:
numtype: float
'null': true
verbose_name: Work Per Stroke (J)
ax_min: 0
ax_max: 1000
mode: both
sigfigs: 0
type: pro
maysmooth: true
group: forcepower
power:
numtype: float
'null': true
verbose_name: Power (W)
ax_min: 0
ax_max: 600
mode: both
sigfigs: 0
type: basic
maysmooth: true
group: forcepower
averageforce:
numtype: float
'null': true
verbose_name: Average Drive Force (N)
ax_min: 0
ax_max: 1200
mode: both
sigfigs: 0
maysmooth: true
type: pro
group: forcepower
peakforce:
numtype: float
'null': true
verbose_name: Peak Drive Force (N)
ax_min: 0
ax_max: 1500
sigfigs: 0
mode: both
maysmooth: true
type: pro
group: forcepower
drivelength:
numtype: float
'null': true
verbose_name: Drive Length (m)
ax_min: 0
ax_max: 2.5
mode: rower
sigfigs: 2
maysmooth: false
type: pro
group: stroke
forceratio:
numtype: float
'null': true
verbose_name: Average/Peak Force Ratio
ax_min: 0
ax_max: 1
sigfigs: 2
maysmooth: true
mode: both
type: pro
group: forcepower
distance:
numtype: float
'null': true
verbose_name: Interval Distance (m)
ax_min: 0
ax_max: 100000.0
sigfigs: 0
mode: both
maysmooth: false
type: basic
group: basic
cumdist:
numtype: float
'null': true
verbose_name: Cumulative Distance (m)
ax_min: 0
ax_max: 100000.0
mode: both
sigfigs: 0
maysmooth: false
type: basic
group: basic
drivespeed:
numtype: float
'null': true
verbose_name: Drive Speed (m/s)
ax_min: 0
ax_max: 4
default: 0
sigfigs: 2
maysmooth: true
mode: both
type: pro
group: stroke
catch:
numtype: float
'null': true
verbose_name: Catch Angle (degrees)
ax_min: -40
ax_max: -75
default: 0
sigfigs: 0
mode: water
maysmooth: true
type: pro
group: stroke
slip:
numtype: float
'null': true
verbose_name: Slip (degrees)
ax_min: 0
ax_max: 20
default: 0
sigfigs: 1
maysmooth: true
mode: water
type: pro
group: stroke
finish:
numtype: float
'null': true
verbose_name: Finish Angle (degrees)
ax_min: 20
ax_max: 55
default: 0
sigfigs: 0
maysmooth: true
mode: water
type: pro
group: stroke
wash:
numtype: float
'null': true
verbose_name: Wash (degrees)
ax_min: 0
ax_max: 30
default: 0
sigfigs: 1
maysmooth: true
mode: water
type: pro
group: stroke
peakforceangle:
numtype: float
'null': true
verbose_name: Peak Force Angle
ax_min: -50
ax_max: 50
default: 0
sigfigs: 0
maysmooth: true
mode: water
type: pro
group: stroke
totalangle:
numtype: float
'null': true
verbose_name: Drive Length (deg)
ax_min: 40
ax_max: 140
default: 0
sigfigs: 0
maysmooth: true
mode: water
type: pro
group: stroke
check_factor:
numtype: float
'null': true
verbose_name: Check Factor
ax_min: 0
ax_max: 100
default: 0
sigfigs: 1
maysmooth: true
mode: water
type: pro
group: stroke
effectiveangle:
numtype: float
'null': true
verbose_name: Effective Drive Length (deg)
ax_min: 40
ax_max: 140
default: 0
sigfigs: 0
mode: water
maysmooth: true
type: pro
group: stroke
rhythm:
numtype: float
'null': true
verbose_name: Stroke Rhythm
ax_min: 20
ax_max: 55
default: 1.0
sigfigs: 0
mode: erg
maysmooth: true
type: pro
group: stroke
efficiency:
numtype: float
'null': true
verbose_name: OTW Efficiency (%)
ax_min: 0
ax_max: 110
default: 0
sigfigs: 0
mode: water
maysmooth: true
type: pro
group: forcepower
distanceperstroke:
numtype: float
'null': true
verbose_name: Distance per Stroke (m)
ax_min: 0
ax_max: 15
default: 0
sigfigs: 1
maysmooth: true
mode: both
type: basic
group: basic