From 2e4e6c47e026dcc249875accc41e84c51b7bbc50 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 7 Aug 2017 09:08:56 +0200 Subject: [PATCH] added add_effiency and eff calc added to otw_physics --- rowers/dataprep.py | 24 +++++++++++++++++- rowers/dataprepnodjango.py | 50 ++++++++++++++++++++++++++++++++------ 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 57f34316..cf61bbb5 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -460,7 +460,8 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower', if consistencychecks: a_messages.error(r.user,'Failed consistency check: '+key+', autocorrected') else: - a_messages.error(r.user,'Failed consistency check: '+key+', not corrected') + pass + # a_messages.error(r.user,'Failed consistency check: '+key+', not corrected') except ZeroDivisionError: pass @@ -1259,6 +1260,27 @@ def datafusion(id1,id2,columns,offset): return df +def add_efficiency(id=0): + rowdata,row = getrowdata_db(id=id,doclean=False) + power = rowdata['power'] + pace = rowdata['pace']/1.0e3 + velo = 500./pace + ergpw = 2.8*velo**3 + efficiency = 100.*ergpw/power + + efficiency = efficiency.replace([-np.inf,np.inf],np.nan) + efficiency.fillna(method='ffill') + rowdata['efficiency'] = efficiency + delete_strokedata(id) + if id != 0: + rowdata['workoutid'] = id + engine = create_engine(database_url, echo=False) + with engine.connect() as conn, conn.begin(): + rowdata.to_sql('strokedata',engine,if_exists='append',index=False) + conn.close() + engine.dispose() + return rowdata + # This is the main routine. # it reindexes, sorts, filters, and smooths the data, then # saves it to the stroke_data table in the database diff --git a/rowers/dataprepnodjango.py b/rowers/dataprepnodjango.py index 27cb5db7..baf32f87 100644 --- a/rowers/dataprepnodjango.py +++ b/rowers/dataprepnodjango.py @@ -14,16 +14,33 @@ import itertools from sqlalchemy import create_engine import sqlalchemy as sa -from rowsandall_app.settings import DATABASES +#from rowsandall_app.settings import DATABASES +from rowsandall_app.settings_dev import DATABASES from utils import lbstoN -user = DATABASES['default']['USER'] -password = DATABASES['default']['PASSWORD'] -database_name = DATABASES['default']['NAME'] -host = DATABASES['default']['HOST'] -port = DATABASES['default']['PORT'] +try: + user = DATABASES['default']['USER'] +except KeyError: + user = '' +try: + password = DATABASES['default']['PASSWORD'] +except KeyError: + password = '' + +try: + database_name = DATABASES['default']['NAME'] +except KeyError: + database_name = '' +try: + host = DATABASES['default']['HOST'] +except KeyError: + host = '' +try: + port = DATABASES['default']['PORT'] +except KeyError: + port = '' database_url = 'mysql://{user}:{password}@{host}:{port}/{database_name}'.format( user=user, @@ -563,6 +580,10 @@ def smalldataprep(therows,xparam,yparam1,yparam2): def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, empower=True,debug=True): + + if rowdatadf.empty: + return 0 + rowdatadf.set_index([range(len(rowdatadf))],inplace=True) t = rowdatadf.ix[:,'TimeStamp (sec)'] t = pd.Series(t-rowdatadf.ix[0,'TimeStamp (sec)']) @@ -576,7 +597,6 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, cumdist = rowdatadf.ix[:,'cum_dist'] power = rowdatadf.ix[:,' Power (watts)'] - averageforce = rowdatadf.ix[:,' AverageDriveForce (lbs)'] drivelength = rowdatadf.ix[:,' DriveLength (meters)'] try: @@ -590,7 +610,10 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, forceratio = forceratio.fillna(value=0) f = rowdatadf['TimeStamp (sec)'].diff().mean() - windowsize = 2*(int(10./(f)))+1 + if f != 0: + windowsize = 2*(int(10./(f)))+1 + else: + windowsize = 1 if windowsize <= 3: windowsize = 5 @@ -674,6 +697,7 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, 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 @@ -703,11 +727,21 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, ergpace[ergpace == np.inf] = 240. ergpace2 = ergpace.apply(lambda x: timedeltaconv(x)) + 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['ergpace'] = ergpace*1e3 data['nowindpace'] = nowindpace*1e3 data['equivergpower'] = equivergpower data['fergpace'] = nicepaceformat(ergpace2) data['fnowindpace'] = nicepaceformat(nowindpace2) + data['efficiency'] = efficiency data = data.replace([-np.inf,np.inf],np.nan) data = data.fillna(method='ffill')