diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 5ce1a5d6..57f34316 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -210,6 +210,12 @@ def clean_df_stats(datadf,workstrokesonly=True,ignorehr=True, datadf.loc[mask,'pace'] = np.nan except KeyError: pass + + try: + mask = datadf['efficiency'] < 0. + datadf.loc[mask,'efficiency'] = np.nan + except KeyError: + pass try: mask = datadf['pace']/1000. < 60. @@ -1423,6 +1429,14 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, totalangle = savgol_filter(totalangle,windowsize,3) effectiveangle = savgol_filter(effectiveangle,windowsize,3) + velo = 500./p + + ergpw = 2.8*velo**3 + efficiency = 100.*ergpw/power + + efficiency = efficiency.replace([-np.inf,np.inf],np.nan) + efficiency.fillna(method='ffill') + data['wash'] = wash data['catch'] = catch data['slip'] = slip @@ -1432,6 +1446,7 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, data['drivelength'] = drivelength data['totalangle'] = totalangle data['effectiveangle'] = effectiveangle + data['efficiency'] = efficiency if otwpower: try: diff --git a/rowers/metrics.py b/rowers/metrics.py index 4fb00b02..c65cbcc0 100644 --- a/rowers/metrics.py +++ b/rowers/metrics.py @@ -22,6 +22,7 @@ axes = ( ('totalangle', 'Drive Length (deg)',40,140,'pro'), ('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'), ('rhythm', 'Stroke Rhythm (%)',20,55,'pro'), + ('efficiency', 'OTW efficiency (%)',0,110,'pro'), ('None', 'None',0,1,'basic'), ) diff --git a/rowers/models.py b/rowers/models.py index 9bb87132..e880ca24 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -536,6 +536,7 @@ class StrokeData(models.Model): rhythm = models.FloatField(default=1.0,null=True,verbose_name='Rhythm') totalangle = models.FloatField(default=0.0,null=True,verbose_name='Total Stroke Length (deg)') effectiveangle = models.FloatField(default=0.0,null=True,verbose_name='Effective Stroke Length (deg)') + efficiency = models.FloatField(default=-1,null=True,verbose_name='OTW Efficiency') # A wrapper around the png files class GraphImage(models.Model): diff --git a/rowers/views.py b/rowers/views.py index fc671f05..cab19bb5 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5618,7 +5618,7 @@ def workout_flexchart3_view(request,*args,**kwargs): axchoicespro.pop('totalangle') axchoicespro.pop('effectiveangle') axchoicespro.pop('peakforceangle') - + axchoicespro.pop('efficiency') return render(request, 'flexchart3otw.html',