From ae0e0650e88486ddb9b568304082fcf7125706ce Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 13 Feb 2018 08:18:17 +0100 Subject: [PATCH] TSS calculation now always includes rest strokes --- rowers/dataprep.py | 6 +++--- rowers/plannedsessions.py | 2 +- rowers/views.py | 40 +++++++++++++++------------------------ 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 1fc6236d..4ff0fe18 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -2217,7 +2217,7 @@ def dataprep(rowdatadf, id=0, bands=True, barchart=True, otwpower=True, def workout_trimp(workout): r = workout.user df,row = getrowdata_db(id=workout.id) - df = clean_df_stats(df) + df = clean_df_stats(df,workstrokesonly=False) if df.empty: df,row = getrowdata_db(id=workout.id) df = clean_df_stats(df,workstrokesonly=False) @@ -2229,7 +2229,7 @@ def workout_trimp(workout): def workout_rscore(w): r = w.user df,row = getrowdata_db(id=w.id) - df = clean_df_stats(df) + df = clean_df_stats(df,workstrokesonly=False) if df.empty: df,row = getrowdata_db(id=w.id) df = clean_df_stats(df,workstrokesonly=False) @@ -2249,4 +2249,4 @@ def workout_rscore(w): else: tss = 0 - return tss + return tss,normp diff --git a/rowers/plannedsessions.py b/rowers/plannedsessions.py index 5b840167..8e2c337e 100644 --- a/rowers/plannedsessions.py +++ b/rowers/plannedsessions.py @@ -96,7 +96,7 @@ def get_session_metrics(ps): distancev += w.distance durationv += timefield_to_seconds_duration(w.duration) trimpv += dataprep.workout_trimp(w) - rscorev += dataprep.workout_rscore(w) + rscorev += dataprep.workout_rscore(w)[0] ratio,statusv = is_session_complete_ws(ws,ps) completedatev = ws[0].date.strftime('%Y-%b-%d') diff --git a/rowers/views.py b/rowers/views.py index bf8685b9..c714c382 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -7468,24 +7468,15 @@ def workout_stats_view(request,id=0,message="",successmessage=""): otherstats = {} # Normalized power & TSS - duration = datadf['time'].max()-datadf['time'].min() - duration /= 1.0e3 - pwr4 = datadf['power']**(4.0) - normp = (pwr4.mean())**(0.25) - if not np.isnan(normp): - ftp = float(r.ftp) - if w.workouttype in ('water','coastal'): - ftp = ftp*(100.-r.otwslack)/100. - - intensityfactor = normp/float(ftp) - tss = 100.*((duration*normp*intensityfactor)/(3600.*ftp)) + tss,normp = dataprep.workout_rscore(w) - if not np.isnan(tss): - otherstats['tss'] = { - 'verbose_name':'rScore', - 'value':int(tss), - 'unit':'' - } + + if not np.isnan(tss) and tss != 0: + otherstats['tss'] = { + 'verbose_name':'rScore', + 'value':int(tss), + 'unit':'' + } if not np.isnan(normp): otherstats['np'] = { @@ -7521,14 +7512,13 @@ def workout_stats_view(request,id=0,message="",successmessage=""): pass # TRIMP - if datadf['hr'].mean() > 0 and r.sex != 'not specified': - trimp = metrics.calc_trimp(datadf,r.sex,r.max,r.rest) - trimp = int(trimp) - otherstats['trimp'] = { - 'verbose_name': 'TRIMP', - 'value': trimp, - 'unit': '' - } + trimp = dataprep.workout_trimp(w) + + otherstats['trimp'] = { + 'verbose_name': 'TRIMP', + 'value': trimp, + 'unit': '' + } return render(request, 'workoutstats.html',