Private
Public Access
1
0

Merge branch 'release/v14.25' into master

This commit is contained in:
Sander Roosendaal
2020-10-28 17:53:11 +01:00
4 changed files with 49 additions and 1623 deletions

1452
powers.csv

File diff suppressed because it is too large Load Diff

View File

@@ -1080,6 +1080,47 @@ def setcp(workout,background=False):
return pd.DataFrame({'delta':[],'cp':[]}),pd.Series(),pd.Series()
def update_rolling_cp(r,types,mode='water'):
firstdate = datetime.date.today()-datetime.timedelta(days=r.cprange)
workouts = Workout.objects.filter(
date__gte=firstdate,
workouttype__in=types,
user = r
)
delta, cp, avgpower, workoutnames = fetchcp_new(r,workouts)
powerdf = pd.DataFrame({
'Delta':delta,
'CP':cp,
})
powerdf = powerdf[powerdf['CP']>0]
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)
res2 = datautils.cpfit(powerdf)
if len(powerdf) != 0:
if mode == 'water':
p1 = res2[0]
r.p0 = p1[0]
r.p1 = p1[1]
r.p2 = p1[2]
r.p3 = p1[3]
r.cpratio = res2[3]
r.save()
else:
p1 = res2[0]
r.ep0 = p1[0]
r.ep1 = p1[1]
r.ep2 = p1[2]
r.ep3 = p1[3]
r.ecpratio = res2[3]
r.save()
return True
return False
def fetchcp(rower,theworkouts,table='cpdata'):
# get all power data from database (plus workoutid)
@@ -1504,75 +1545,17 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
if workouttype in otwtypes:
res, btvalues, res2 = utils.isbreakthrough(
delta, cpvalues, r.p0, r.p1, r.p2, r.p3, r.cpratio)
cprange = r.cprange
firstdate = datetime.date.today()-datetime.timedelta(days=cprange)
workouts = Workout.objects.filter(
date__gte=firstdate,
workouttype__in=otwtypes,
user = w.user,
)
dd,cpcp,avgpower,workoutnames = fetchcp_new(r,workouts)
powerdf = pd.DataFrame({
'Delta':dd,
'CP':cpcp,
})
powerdf = powerdf[powerdf['CP']>0]
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)
res2 = datautils.cpfit(powerdf)
if len(powerdf) != 0:
p1 = res2[0]
r.p0 = p1[0]
r.p1 = p1[1]
r.p2 = p1[2]
r.p3 = p1[3]
r.cpratio = res2[3]
r.save()
success = update_rolling_cp(r,otwtypes,'water')
elif workouttype in otetypes:
res, btvalues, res2 = utils.isbreakthrough(
delta, cpvalues, r.ep0, r.ep1, r.ep2, r.ep3, r.ecpratio)
cprange = r.cprange
firstdate = datetime.date.today()-datetime.timedelta(days=cprange)
workouts = Workout.objects.filter(
date__gte=firstdate,
workouttype__in=otetypes,
user = w.user,
)
dd,cpcp,avgpower,workoutnames = fetchcp_new(r,workouts)
powerdf = pd.DataFrame({
'Delta':dd,
'CP':cpcp,
})
powerdf = powerdf[powerdf['CP']>0]
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)
res2 = datautils.cpfit(powerdf)
if len(powerdf) != 0:
res = datautils.cpfit(powerdf)
p1 = res2[0]
r.ep0 = p1[0]
r.ep1 = p1[1]
r.ep2 = p1[2]
r.ep3 = p1[3]
r.ecpratio = res2[3]
r.save()
success = update_rolling_cp(r,otetypes,'erg')
else:
res = 0
res2 = 0
if res:
isbreakthrough = True
res = datautils.updatecp(delta, cpvalues, r,workouttype=workouttype)
if res2 and not isbreakthrough:
ishard = True
@@ -2506,62 +2489,8 @@ def read_cols_df_sql_old(ids, columns, convertnewtons=True):
return df,extracols
def initiate_cp(r):
firstdate = datetime.date.today()-datetime.timedelta(days=r.cprange)
workouts = Workout.objects.filter(
date__gte=firstdate,
workouttype__in = otwtypes,
user = r,
)
dd,cpcp,avgpower,workoutnames = fetchcp_new(r,workouts)
powerdf = pd.DataFrame({
'Delta':dd,
'CP':cpcp,
})
powerdf = powerdf[powerdf['CP']>0]
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)
res2 = datautils.cpfit(powerdf)
if len(powerdf) != 0:
p1 = res2[0]
r.p0 = p1[0]
r.p1 = p1[1]
r.p2 = p1[2]
r.p3 = p1[3]
r.cpratio = res2[3]
r.save()
workouts = Workout.objects.filter(
date__gte = firstdate,
workouttype__in = otetypes,
user = r,
)
dd,cpcp,avgpower,workoutnames = fetchcp_new(r,workouts)
powerdf = pd.DataFrame({
'Delta':dd,
'CP':cpcp,
})
powerdf = powerdf[powerdf['CP']>0]
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)
res2 = datautils.cpfit(powerdf)
if len(powerdf) != 0:
res = datautils.cpfit(powerdf)
p1 = res2[0]
r.ep0 = p1[0]
r.ep1 = p1[1]
r.ep2 = p1[2]
r.ep3 = p1[3]
r.ecpratio = res2[3]
r.save()
success = update_rolling_cp(r,otwtypes,'water')
success = update_rolling_cp(r,otetypes,'erg')
# Read stroke data from the DB for a Workout ID. Returns a pandas dataframe
def read_df_sql(id):

View File

@@ -273,6 +273,7 @@ def isbreakthrough(delta,cpvalues,p0,p1,p2,p3,ratio):
cpvalues = cpvalues.values.astype(int)
pwr = pwr.astype(int)
res = np.sum(cpvalues>pwr)
res2 = np.sum(cpvalues>pwr2)
@@ -289,7 +290,7 @@ def isbreakthrough(delta,cpvalues,p0,p1,p2,p3,ratio):
btdf.sort_values('delta',axis=0,inplace=True)
return res>1,btdf,res2>1
return res>=1,btdf,res2>=1
def myqueue(queue,function,*args,**kwargs):

View File

@@ -566,60 +566,8 @@ def rower_prefs_view(request,userid=0,message=""):
r.cprange = cprange
r.save()
messages.info(request,'Updated CP range value')
firstdate = datetime.date.today()-datetime.timedelta(days=cprange)
workouts = Workout.objects.filter(
date__gte=datetime.date.today()-datetime.timedelta(days=cprange),
workouttype__in=mytypes.otwtypes,
user = r,
)
dd,cpcp,avgpower,workoutnames = dataprep.fetchcp_new(r,workouts)
powerdf = pd.DataFrame({
'Delta':dd,
'CP':cpcp,
})
powerdf = powerdf[powerdf['CP']>0]
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)
res2 = datautils.cpfit(powerdf)
if len(powerdf) != 0:
p1 = res2[0]
r.p0 = p1[0]
r.p1 = p1[1]
r.p2 = p1[2]
r.p3 = p1[3]
r.cpratio = res2[3]
r.save()
workouts = Workout.objects.filter(
date__gte=datetime.date.today()-datetime.timedelta(days=cprange),
workouttype__in=mytypes.otetypes,
user = r,
)
dd,cpcp,avgpower,workoutnames = dataprep.fetchcp_new(r,workouts)
powerdf = pd.DataFrame({
'Delta':dd,
'CP':cpcp,
})
powerdf = powerdf[powerdf['CP']>0]
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)
res2 = datautils.cpfit(powerdf)
if len(powerdf) != 0:
p1 = res2[0]
r.ep0 = p1[0]
r.ep1 = p1[1]
r.ep2 = p1[2]
r.ep3 = p1[3]
r.ecpratio = res2[3]
r.save()
success = dataprep.update_rolling_cp(r,mytypes.otwtypes,'water')
success = dataprep.update_rolling_cp(r,mytypes.otetypes,'erg')
return render(request, 'rower_preferences.html',
{