metrics definitions in separate file
This commit is contained in:
@@ -259,7 +259,7 @@ class WorkoutMultipleCompareForm(forms.Form):
|
|||||||
workouts = forms.ModelMultipleChoiceField(queryset=Workout.objects.all(),
|
workouts = forms.ModelMultipleChoiceField(queryset=Workout.objects.all(),
|
||||||
widget=forms.CheckboxSelectMultiple())
|
widget=forms.CheckboxSelectMultiple())
|
||||||
|
|
||||||
from rowers.interactiveplots import axlabels
|
from rowers.metrics import axlabels
|
||||||
|
|
||||||
formaxlabels = axlabels.copy()
|
formaxlabels = axlabels.copy()
|
||||||
formaxlabels.pop('None')
|
formaxlabels.pop('None')
|
||||||
|
|||||||
@@ -50,36 +50,7 @@ import stravastuff
|
|||||||
from rowers.dataprep import rdata
|
from rowers.dataprep import rdata
|
||||||
import rowers.dataprep as dataprep
|
import rowers.dataprep as dataprep
|
||||||
|
|
||||||
axes = (
|
from rowers.metrics import axes,axlabels,yaxminima,yaxmaxima
|
||||||
('time','Time',0,1e5,'basic'),
|
|
||||||
('distance', 'Distance (m)',0,1e5,'basic'),
|
|
||||||
('cumdist', 'Cumulative Distance (m)',0,1e5,'basic'),
|
|
||||||
('hr','Heart Rate (bpm)',100,200,'basic'),
|
|
||||||
('spm', 'Stroke Rate (spm)',15,45,'basic'),
|
|
||||||
('pace', 'Pace (/500m)',1.0e3*210,1.0e3*75,'basic'),
|
|
||||||
('power', 'Power (Watt)',0,600,'basic'),
|
|
||||||
('averageforce', 'Average Drive Force (lbs)',0,200,'pro'),
|
|
||||||
('drivelength', 'Drive Length (m)',0.5,2.0,'pro'),
|
|
||||||
('peakforce', 'Peak Drive Force (lbs)',0,400,'pro'),
|
|
||||||
('forceratio', 'Average/Peak Force Ratio',0,1,'pro'),
|
|
||||||
('driveenergy', 'Work per Stroke (J)',0,1000,'pro'),
|
|
||||||
('drivespeed', 'Drive Speed (m/s)',0,4,'pro'),
|
|
||||||
('slip', 'Slip (degrees)',0,20,'pro'),
|
|
||||||
('catch', 'Catch (degrees)',-40,-75,'pro'),
|
|
||||||
('finish', 'Finish (degrees)',20,55,'pro'),
|
|
||||||
('wash', 'Wash (degrees)',0,30,'pro'),
|
|
||||||
('peakforceangle', 'Peak Force Angle (degrees)',-20,20,'pro'),
|
|
||||||
('totalangle', 'Drive Length (deg)',40,140,'pro'),
|
|
||||||
('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'),
|
|
||||||
('rhythm', 'Stroke Rhythm (%)',20,55,'pro'),
|
|
||||||
('None', 'None',0,1,'basic'),
|
|
||||||
)
|
|
||||||
|
|
||||||
axlabels = {ax[0]:ax[1] for ax in axes}
|
|
||||||
|
|
||||||
yaxminima = {ax[0]:ax[2] for ax in axes}
|
|
||||||
|
|
||||||
yaxmaxima = {ax[0]:ax[3] for ax in axes}
|
|
||||||
|
|
||||||
def tailwind(bearing,vwind,winddir):
|
def tailwind(bearing,vwind,winddir):
|
||||||
""" Calculates head-on head/tailwind in direction of rowing
|
""" Calculates head-on head/tailwind in direction of rowing
|
||||||
|
|||||||
30
rowers/metrics.py
Normal file
30
rowers/metrics.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
axes = (
|
||||||
|
('time','Time',0,1e5,'basic'),
|
||||||
|
('distance', 'Distance (m)',0,1e5,'basic'),
|
||||||
|
('cumdist', 'Cumulative Distance (m)',0,1e5,'basic'),
|
||||||
|
('hr','Heart Rate (bpm)',100,200,'basic'),
|
||||||
|
('spm', 'Stroke Rate (spm)',15,45,'basic'),
|
||||||
|
('pace', 'Pace (/500m)',1.0e3*210,1.0e3*75,'basic'),
|
||||||
|
('power', 'Power (Watt)',0,600,'basic'),
|
||||||
|
('averageforce', 'Average Drive Force (lbs)',0,200,'pro'),
|
||||||
|
('drivelength', 'Drive Length (m)',0.5,2.0,'pro'),
|
||||||
|
('peakforce', 'Peak Drive Force (lbs)',0,400,'pro'),
|
||||||
|
('forceratio', 'Average/Peak Force Ratio',0,1,'pro'),
|
||||||
|
('driveenergy', 'Work per Stroke (J)',0,1000,'pro'),
|
||||||
|
('drivespeed', 'Drive Speed (m/s)',0,4,'pro'),
|
||||||
|
('slip', 'Slip (degrees)',0,20,'pro'),
|
||||||
|
('catch', 'Catch (degrees)',-40,-75,'pro'),
|
||||||
|
('finish', 'Finish (degrees)',20,55,'pro'),
|
||||||
|
('wash', 'Wash (degrees)',0,30,'pro'),
|
||||||
|
('peakforceangle', 'Peak Force Angle (degrees)',-20,20,'pro'),
|
||||||
|
('totalangle', 'Drive Length (deg)',40,140,'pro'),
|
||||||
|
('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'),
|
||||||
|
('rhythm', 'Stroke Rhythm (%)',20,55,'pro'),
|
||||||
|
('None', 'None',0,1,'basic'),
|
||||||
|
)
|
||||||
|
|
||||||
|
axlabels = {ax[0]:ax[1] for ax in axes}
|
||||||
|
|
||||||
|
yaxminima = {ax[0]:ax[2] for ax in axes}
|
||||||
|
|
||||||
|
yaxmaxima = {ax[0]:ax[3] for ax in axes}
|
||||||
@@ -242,64 +242,18 @@ def auto_delete_teams_on_change(sender, instance, **kwargs):
|
|||||||
teams = Team.objects.filter(manager=instance.user)
|
teams = Team.objects.filter(manager=instance.user)
|
||||||
for team in teams:
|
for team in teams:
|
||||||
team.delete()
|
team.delete()
|
||||||
|
|
||||||
|
from rowers.metrics import axlabels
|
||||||
|
favchartlabelsx = axlabels.copy()
|
||||||
|
favchartlabelsy1 = axlabels.copy()
|
||||||
|
favchartlabelsy2 = axlabels.copy()
|
||||||
|
favchartlabelsy1.pop('None')
|
||||||
|
parchoicesy1 = list(sorted(favchartlabelsy1.items(), key = lambda x:x[1]))
|
||||||
|
parchoicesy2 = list(sorted(favchartlabelsy2.items(), key = lambda x:x[1]))
|
||||||
|
parchoicesx = list(sorted(favchartlabelsx.items(), key = lambda x:x[1]))
|
||||||
|
|
||||||
# Saving a chart as a favorite chart
|
# Saving a chart as a favorite chart
|
||||||
class FavoriteChart(models.Model):
|
class FavoriteChart(models.Model):
|
||||||
y1params = (
|
|
||||||
('hr','Heart Rate'),
|
|
||||||
('pace','Pace'),
|
|
||||||
('spm','SPM'),
|
|
||||||
('driveenergy','Work per Stroke'),
|
|
||||||
('power','Power'),
|
|
||||||
('drivelength','Drivelength'),
|
|
||||||
('averageforce','Average Force'),
|
|
||||||
('peakforce','Peak Force'),
|
|
||||||
('forceratio','Average/Peak Force Ratio'),
|
|
||||||
('drivespeed','Drive Speed'),
|
|
||||||
('wash','Wash'),
|
|
||||||
('slip','Slip'),
|
|
||||||
('catch','Catch Angle'),
|
|
||||||
('finish','Finish Angle'),
|
|
||||||
('peakforceangle','Peak Force Angle')
|
|
||||||
)
|
|
||||||
|
|
||||||
y2params = (
|
|
||||||
('hr','Heart Rate'),
|
|
||||||
('spm','SPM'),
|
|
||||||
('driveenergy','Work per Stroke'),
|
|
||||||
('power','Power'),
|
|
||||||
('drivelength','Drivelength'),
|
|
||||||
('averageforce','Average Force'),
|
|
||||||
('peakforce','Peak Force'),
|
|
||||||
('forceratio','Average/Peak Force Ratio'),
|
|
||||||
('drivespeed','Drive Speed'),
|
|
||||||
('wash','Wash'),
|
|
||||||
('slip','Slip'),
|
|
||||||
('catch','Catch Angle'),
|
|
||||||
('finish','Finish Angle'),
|
|
||||||
('peakforceangle','Peak Force Angle'),
|
|
||||||
('None','None')
|
|
||||||
)
|
|
||||||
|
|
||||||
xparams = (
|
|
||||||
('time','Time'),
|
|
||||||
('distance','Distance'),
|
|
||||||
('hr','Heart Rate'),
|
|
||||||
('spm','SPM'),
|
|
||||||
('driveenergy','Work per Stroke'),
|
|
||||||
('power','Power'),
|
|
||||||
('drivelength','Drivelength'),
|
|
||||||
('averageforce','Average Force'),
|
|
||||||
('peakforce','Peak Force'),
|
|
||||||
('forceratio','Average/Peak Force Ratio'),
|
|
||||||
('drivespeed','Drive Speed'),
|
|
||||||
('wash','Wash'),
|
|
||||||
('slip','Slip'),
|
|
||||||
('catch','Catch Angle'),
|
|
||||||
('finish','Finish Angle'),
|
|
||||||
('peakforceangle','Peak Force Angle'),
|
|
||||||
)
|
|
||||||
|
|
||||||
workouttypechoices = (
|
workouttypechoices = (
|
||||||
('ote','Erg/SkiErg'),
|
('ote','Erg/SkiErg'),
|
||||||
('otw','On The Water'),
|
('otw','On The Water'),
|
||||||
@@ -311,9 +265,9 @@ class FavoriteChart(models.Model):
|
|||||||
('scatter','Scatter Chart')
|
('scatter','Scatter Chart')
|
||||||
)
|
)
|
||||||
|
|
||||||
yparam1 = models.CharField(max_length=50,choices=y1params,verbose_name='Y1')
|
yparam1 = models.CharField(max_length=50,choices=parchoicesy1,verbose_name='Y1')
|
||||||
yparam2 = models.CharField(max_length=50,choices=y2params,verbose_name='Y2',default='None',blank=True)
|
yparam2 = models.CharField(max_length=50,choices=parchoicesy2,verbose_name='Y2',default='None',blank=True)
|
||||||
xparam = models.CharField(max_length=50,choices=xparams,verbose_name='X')
|
xparam = models.CharField(max_length=50,choices=parchoicesx,verbose_name='X')
|
||||||
plottype = models.CharField(max_length=50,choices=plottypes,
|
plottype = models.CharField(max_length=50,choices=plottypes,
|
||||||
default='line',
|
default='line',
|
||||||
verbose_name='Chart Type')
|
verbose_name='Chart Type')
|
||||||
|
|||||||
Reference in New Issue
Block a user