diff --git a/rowers/datautils.py b/rowers/datautils.py index 5d853157..5aba0141 100644 --- a/rowers/datautils.py +++ b/rowers/datautils.py @@ -107,7 +107,104 @@ def getsinglecp(df): return delta,cpvalue,avgpower +def getcp_new(dfgrouped,logarr): + delta = [] + cpvalue = [] + avgpower = {} + + for id, group in dfgrouped: + tt = group['time'].copy() + + ww = group['power'].copy() + + try: + avgpower[id] = int(ww.mean()) + except ValueError: + avgpower[id] = '---' + + tmax = tt.max() + + if tmax > 500000: + newlen = int(tmax/2000.) + newt = np.arange(newlen)*tmax/float(newlen) + deltat = newt[1]-newt[0] + else: + newt = np.arange(0,tmax,10.) + deltat = 10. + + ww = griddata(tt.values, + ww.values, + newt,method='linear', + rescale=True) + + tt = pd.Series(newt) + ww = pd.Series(ww) + + G = pd.Series(ww.cumsum()) + G = pd.concat([pd.Series([0]),G]) + + h = np.mgrid[0:len(tt)+1:1,0:len(tt)+1:1] + + distances = pd.DataFrame(h[1]-h[0]) + + ones = 1+np.zeros(len(G)) + + Ghor = np.outer(ones,G) + Gver = np.outer(G,ones) + + Gdif = Ghor - Gver + + Gdif = np.tril(Gdif.T).T + + Gdif = pd.DataFrame(Gdif) + + F = Gdif/distances + + F.fillna(inplace=True,method='ffill',axis=1) + F.fillna(inplace=True,value=0) + + restime = [] + power = [] + + for i in np.arange(0,len(tt)+1,1): + restime.append(deltat*i) + cp = np.diag(F,i).max() + power.append(cp) + + power[0] = power[1] + + 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 + }) + + df.dropna(axis=0, how='any',inplace=True) + df = df.sort_values(['delta','cp'], ascending=[1, 0]) + df = df.drop_duplicates(subset='Delta', keep='first') + + delta = df['delta'] + cpvalue = df['cpvalue'] + + return delta,cpvalue,avgpower + + def getcp(dfgrouped,logarr): delta = [] cpvalue = [] @@ -165,7 +262,9 @@ def getcp(dfgrouped,logarr): cpvalue.append(cpv) for d in logarr: delta.append(d) - + + + delta = pd.Series(delta,name='Delta') cpvalue = pd.Series(cpvalue,name='CP') diff --git a/rowers/views.py b/rowers/views.py index a6cda5e9..1b98e8a9 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -4013,8 +4013,11 @@ def otwrankings_view(request,theuser=0, remove_asynctask(request,task['id']) elif 'fail' in task['status'].lower(): runningjob = 0 - remove_asynctask(request,task[id]) - messages.error(request,'Oh, your task failed') + try: + remove_asynctask(request,task[id]) + messages.error(request,'Oh, your task failed') + except KeyError: + pass elif 'started' in task['status'].lower(): messages.info(request,'Busy updating CP chart data') runningjob = 1 @@ -4273,8 +4276,11 @@ def oterankings_view(request,theuser=0, remove_asynctask(request,task['id']) elif 'fail' in task['status'].lower(): runningjob = 0 - remove_asynctask(request,task[id]) - messages.error(request,'Oh, your task failed') + try: + remove_asynctask(request,task[id]) + messages.error(request,'Oh, your task failed') + except KeyError: + pass elif 'started' in task['status'].lower(): messages.info(request,'Busy updating CP chart data') runningjob = 1