From fc23750731ce9ec8777777ee69e5d5456f48ace3 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 8 Aug 2017 11:51:41 +0200 Subject: [PATCH] corrected work per stroke error (wasn't calculated when it could) --- rowers/dataprep.py | 7 ++- rowers/dataprepnodjango.py | 99 ++++++++++++++++++++++++++------------ rowers/views.py | 8 ++- 3 files changed, 81 insertions(+), 33 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index f5456122..c1e4684e 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1090,6 +1090,7 @@ def read_cols_df_sql(ids,columns): # drop columns that are not in offical list # axx = [ax[0] for ax in axes] axx = [f.name for f in StrokeData._meta.get_fields()] + for c in columns: if not c in axx: columns.remove(c) @@ -1118,10 +1119,12 @@ def read_cols_df_sql(ids,columns): ids = tuple(ids), )) + connection = engine.raw_connection() df = pd.read_sql_query(query,engine) - df = df.fillna(value=0) + df = df.fillna(value=0) + try: df['peakforce'] = df['peakforce']*lbstoN except KeyError: @@ -1425,7 +1428,7 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, try: driveenergy = rowdatadf.ix[:,'driveenergy'] except KeyError: - driveenergy = 0*power + driveenergy = power*60/spm else: driveenergy = data['driveenergy'] diff --git a/rowers/dataprepnodjango.py b/rowers/dataprepnodjango.py index e24580d5..e985de1c 100644 --- a/rowers/dataprepnodjango.py +++ b/rowers/dataprepnodjango.py @@ -683,32 +683,76 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, if empower: try: wash = rowdatadf.ix[:,'wash'] - catch = rowdatadf.ix[:,'catch'] - finish = rowdatadf.ix[:,'finish'] - peakforceangle = rowdatadf.ix[:,'peakforceangle'] - driveenergy = rowdatadf.ix[:,'driveenergy'] - drivelength = driveenergy/(averageforce*4.44822) - slip = rowdatadf.ix[:,'slip'] - if windowsize > 3: - wash = savgol_filter(wash,windowsize,3) - slip = savgol_filter(slip,windowsize,3) - catch = savgol_filter(catch,windowsize,3) - finish = savgol_filter(finish,windowsize,3) - peakforceangle = savgol_filter(peakforceangle,windowsize,3) - driveenergy = savgol_filter(driveenergy,windowsize,3) - drivelength = savgol_filter(drivelength,windowsize,3) - - data['wash'] = wash - data['catch'] = catch - data['slip'] = slip - data['finish'] = finish - data['peakforceangle'] = peakforceangle - data['driveenergy'] = driveenergy - data['drivelength'] = drivelength - data['peakforce'] = peakforce - data['averageforce'] = averageforce except KeyError: - pass + wash = 0*power + + try: + catch = rowdatadf.ix[:,'catch'] + except KeyError: + catch = 0*power + + try: + finish = rowdatadf.ix[:,'finish'] + except KeyError: + finish = 0*power + + try: + peakforceangle = rowdatadf.ix[:,'peakforceangle'] + except KeyError: + peakforceangle = 0*power + + + if data['driveenergy'].mean() == 0: + try: + driveenergy = rowdatadf.ix[:,'driveenergy'] + except KeyError: + driveenergy = power*60/spm + else: + driveenergy = data['driveenergy'] + + + arclength = (inboard-0.05)*(np.radians(finish)-np.radians(catch)) + if arclength.mean()>0: + drivelength = arclength + elif drivelength.mean() == 0: + drivelength = driveenergy/(averageforce*4.44822) + + try: + slip = rowdatadf.ix[:,'slip'] + except KeyError: + slip = 0*power + + totalangle = finish-catch + effectiveangle = finish-wash-catch-slip + if windowsize > 3 and windowsize