Private
Public Access
1
0

first test on breakthrough workouts (only on upload)

This commit is contained in:
Sander Roosendaal
2017-06-14 01:01:37 +02:00
parent e4d0e38b80
commit 4b0707b7f4
2 changed files with 48 additions and 0 deletions

View File

@@ -43,6 +43,7 @@ from sqlalchemy import create_engine
import sqlalchemy as sa import sqlalchemy as sa
import sys import sys
import utils
from utils import lbstoN from utils import lbstoN
from scipy.interpolate import griddata from scipy.interpolate import griddata
@@ -139,6 +140,34 @@ def filter_df(datadf,fieldname,value,largerthan=True):
return datadf return datadf
def getsinglecp(df):
thesecs = df['TimeStamp (sec)'].max()-df['TimeStamp (sec)'].min()
if thesecs != 0:
maxt = 2*thesecs
else:
maxt = 1000.
maxlog10 = np.log10(maxt)
logarr = np.arange(50)*maxlog10/50.
logarr = [int(10.**(la)) for la in logarr]
logarr = pd.Series(logarr)
logarr.drop_duplicates(keep='first',inplace=True)
logarr = logarr.values
dfnew = pd.DataFrame({
'time':df['TimeStamp (sec)']-df.ix[0,'TimeStamp (sec)'],
'power':df[' Power (watts)']
})
dfnew['workoutid'] = 0
dfgrouped = dfnew.groupby(['workoutid'])
delta,cpvalue,avgpower = getcp(dfgrouped,logarr)
return delta,cpvalue,avgpower
def getcp(dfgrouped,logarr): def getcp(dfgrouped,logarr):
delta = [] delta = []
cpvalue = [] cpvalue = []
@@ -488,6 +517,12 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower',
powerperc=powerperc,powerzones=r.powerzones) powerperc=powerperc,powerzones=r.powerzones)
row = rdata(f2,rower=rr) row = rdata(f2,rower=rr)
isbreakthrough = False
if workouttype == 'water':
delta,cpvalues,avgpower = getsinglecp(row.df)
if utils.isbreakthrough(delta,cpvalues,r.p0,r.p1,r.p2,r.p3):
isbreakthrough = True
dtavg = row.df['TimeStamp (sec)'].diff().mean() dtavg = row.df['TimeStamp (sec)'].diff().mean()
if dtavg < 1: if dtavg < 1:
@@ -643,6 +678,10 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower',
w.save() w.save()
# submit email task to send email about breakthrough workout
if isbreakthrough:
pass
if privacy == 'visible': if privacy == 'visible':
ts = Team.objects.filter(rower=r) ts = Team.objects.filter(rower=r)
for t in ts: for t in ts:

View File

@@ -74,3 +74,12 @@ def geo_distance(lat1,lon1,lat2,lon2):
bearing = math.degrees(tc1) bearing = math.degrees(tc1)
return [distance,bearing] return [distance,bearing]
def isbreakthrough(delta,cpvalues,p0,p1,p2,p3):
pwr = p0/(1+delta/p2)
pwr += p1/(1+delta/p3)
res = np.sum(cpvalues>pwr)
return res>1