diff --git a/rowers/datautils.py b/rowers/datautils.py index 283b7ed4..824a3278 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -26,7 +26,7 @@ def updatecp(delta,cpvalues,r): 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] @@ -45,7 +45,7 @@ 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]))) errfunc = lambda pars,x,y: fitfunc(pars,x)-y - + p1 = p0 @@ -58,7 +58,7 @@ def cpfit(powerdf): except: factor = fitfunc(p0,thesecs.mean())/theavpower.mean() p1 = [p0[0]/factor,p0[1]/factor,p0[2],p0[3]] - + else: factor = fitfunc(p0,thesecs.mean())/theavpower.mean() p1 = [p0[0]/factor,p0[1]/factor,p0[2],p0[3]] @@ -82,7 +82,7 @@ def cpfit(powerdf): dd = fitpoints-theavpower ddmin = dd.min() frac = abs(ddmin)/fitpoints.mean() - + ratio = fitpoints.mean()/fitpoints0.mean() return p1,fitt,fitpower,ratio @@ -90,8 +90,15 @@ def cpfit(powerdf): def getlogarr(maxt): maxlog10 = np.log10(maxt-5) logarr = np.arange(50)*maxlog10/50. - logarr = [5+int(10.**(la)) for la in logarr] - logarr = pd.Series(logarr) + res = [] + for la in logarr: + try: + v = 5+int(10.**(la)) + except ValueError: + v = 0 + res.append(v) + + logarr = pd.Series(res) logarr.drop_duplicates(keep='first',inplace=True) logarr = logarr.values @@ -111,9 +118,9 @@ def getsinglecp(df): 'time':1000*(df['TimeStamp (sec)']-df.loc[:,'TimeStamp (sec)'].iloc[0]), 'power':df[' Power (watts)'] }) - + dfnew['workoutid'] = 0 - + dfgrouped = dfnew.groupby(['workoutid']) delta,cpvalue,avgpower = getcp(dfgrouped,logarr) @@ -124,7 +131,7 @@ def getcp_new(dfgrouped,logarr): cpvalue = [] avgpower = {} - + for id, group in dfgrouped: tt = group['time'].copy() @@ -149,7 +156,7 @@ def getcp_new(dfgrouped,logarr): ww.values, newt,method='linear', rescale=True) - + tt = pd.Series(newt) ww = pd.Series(ww) @@ -178,7 +185,7 @@ def getcp_new(dfgrouped,logarr): restime = [] power = [] - + for i in np.arange(0,len(tt)+1,1): restime.append(deltat*i) cp = np.diag(F,i).max() @@ -189,19 +196,19 @@ def getcp_new(dfgrouped,logarr): restime = np.array(restime) power = np.array(power) - + #power[0] = power[1] - + cpvalues = griddata(restime,power, logarr,method='linear', fill_value=0) - + for cpv in cpvalues: cpvalue.append(cpv) for d in logarr: delta.append(d) - + df = pd.DataFrame({ 'delta':delta, 'cpvalue':cpvalue @@ -215,8 +222,8 @@ def getcp_new(dfgrouped,logarr): cpvalue = df['cpvalue'] return delta,cpvalue,avgpower - - + + def getcp(dfgrouped,logarr): delta = [] cpvalue = [] @@ -228,7 +235,7 @@ def getcp(dfgrouped,logarr): ww = group['power'].copy() # Remove data where PM is repeating final power value - # of an interval during the rest + # of an interval during the rest rolling_std = ww.rolling(window=4).std() deltas = tt.diff() @@ -240,7 +247,7 @@ def getcp(dfgrouped,logarr): tmax = tt.max() - + if tmax > 500000: newlen = int(tmax/2000.) else: @@ -255,7 +262,7 @@ def getcp(dfgrouped,logarr): tt = pd.Series(newt) ww = pd.Series(ww) - + try: avgpower[id] = int(ww.mean()) except ValueError: @@ -272,7 +279,7 @@ def getcp(dfgrouped,logarr): cpw.append(wmax) - + dt = pd.Series(dt) cpw = pd.Series(cpw) if len(dt)>2: @@ -286,12 +293,12 @@ def getcp(dfgrouped,logarr): for d in logarr: delta.append(d) - - + + delta = pd.Series(delta,name='Delta') cpvalue = pd.Series(cpvalue,name='CP') - + cpdf = pd.DataFrame({ 'delta':delta, 'cpvalue':cpvalue @@ -332,4 +339,3 @@ def getmaxwattinterval(tt,ww,i): deltat = 0 return deltat,wmax - diff --git a/rowers/tasks.py b/rowers/tasks.py index 405434d4..d9ca397a 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -30,6 +30,7 @@ import datetime import pytz import iso8601 +from json.decoder import JSONDecodeError from matplotlib.backends.backend_agg import FigureCanvas #from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas @@ -2028,7 +2029,10 @@ def handle_makeplot(f1, f2, t, hrdata, plotnr, imagename, elif (plotnr == 2): fig1 = row.get_metersplot_erg(t,pacerange=oterange,**kwargs) elif (plotnr == 3): - t += ' - Heart Rate Distribution' + try: + t += ' - Heart Rate Distribution' + except TypeError: + t = 'Heart Rate Distribution' fig1 = row.get_piechart(t,**kwargs) elif (plotnr == 4): if haspower: