diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 16babd4a..727eaae3 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -430,6 +430,7 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower', delta,cpvalues,avgpower = datautils.getsinglecp(row.df) if utils.isbreakthrough(delta,cpvalues,r.p0,r.p1,r.p2,r.p3): isbreakthrough = True + res = datautils.updatecp(delta,cpvalues,r) dtavg = row.df['TimeStamp (sec)'].diff().mean() diff --git a/rowers/datautils.py b/rowers/datautils.py index c67b7082..7c1d9136 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -3,6 +3,35 @@ import numpy as np from scipy.interpolate import griddata from scipy import optimize +def updatecp(delta,cpvalues,r): + cp2 = r.p0/(1+delta/r.p2) + cp2 += r.p1/(1+delta/r.p3) + + delta = delta.append(delta) + cp = cpvalues.append(cp2) + + powerdf = pd.DataFrame({ + 'Delta':delta, + 'CP':cp, + }) + + powerdf.dropna(axis=0,inplace=True) + powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True) + powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True) + + + res = cpfit(powerdf) + p1 = res[0] + + r.p0 = p1[0] + r.p1 = p1[1] + r.p2 = p1[2] + r.p3 = p1[3] + + r.save() + + return 1 + def cpfit(powerdf): # Fit the data to thee parameter CP model fitfunc = lambda pars,x: abs(pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))