updating rolling spm data
This commit is contained in:
@@ -810,7 +810,7 @@ def fetchcp_new(rower, workouts):
|
||||
|
||||
|
||||
|
||||
def update_rolling_cp(r, types, mode='water', dosend=False):
|
||||
def update_rolling_cp(r, types, mode='water', metric='power', dosend=False):
|
||||
firstdate = tz.now()-datetime.timedelta(days=r.cprange)
|
||||
workouts = Workout.objects.filter(
|
||||
date__gte=firstdate,
|
||||
@@ -820,10 +820,17 @@ def update_rolling_cp(r, types, mode='water', dosend=False):
|
||||
|
||||
delta, cp, cr, avgpower, workoutnames, urls = fetchcp_new(r, workouts)
|
||||
|
||||
powerdf = pl.DataFrame({
|
||||
'Delta': delta,
|
||||
'CP': cp,
|
||||
})
|
||||
if metric == 'power':
|
||||
powerdf = pl.DataFrame({
|
||||
'Delta': delta,
|
||||
'CP': cp,
|
||||
})
|
||||
else:
|
||||
powerdf = pl.DataFrame({
|
||||
'Delta': delta,
|
||||
'CP': cr,
|
||||
})
|
||||
|
||||
|
||||
powerdf = powerdf.filter(pl.col("CP")>0)
|
||||
powerdf = powerdf.fill_nan(None).drop_nulls().sort(["Delta", "CP"])
|
||||
@@ -831,6 +838,8 @@ def update_rolling_cp(r, types, mode='water', dosend=False):
|
||||
|
||||
if powerdf.is_empty():
|
||||
return False
|
||||
|
||||
|
||||
|
||||
res2 = datautils.cpfit(powerdf)
|
||||
p1 = res2[0]
|
||||
@@ -840,7 +849,7 @@ def update_rolling_cp(r, types, mode='water', dosend=False):
|
||||
pwr += p1[1]/(1+hourseconds/p1[3])
|
||||
|
||||
if len(powerdf) != 0:
|
||||
if mode == 'water':
|
||||
if mode == 'water' and metric == 'power':
|
||||
r.p0 = p1[0]
|
||||
r.p1 = p1[1]
|
||||
r.p2 = p1[2]
|
||||
@@ -849,8 +858,14 @@ def update_rolling_cp(r, types, mode='water', dosend=False):
|
||||
r.save()
|
||||
if dosend and pwr-5 > r.ftp*(100.-r.otwslack)/100. and r.getemailnotifications and not r.emailbounced:
|
||||
_ = myqueue(queuehigh, handle_sendemail_newftp,r,pwr,'water')
|
||||
|
||||
else:
|
||||
elif mode == 'water' and metric == 'spm':
|
||||
r.r0 = p1[0]
|
||||
r.r1 = p1[1]
|
||||
r.r2 = p1[2]
|
||||
r.r3 = p1[3]
|
||||
r.crratio = res2[3]
|
||||
r.save()
|
||||
elif mode == 'erg' and metric == 'power':
|
||||
r.ep0 = p1[0]
|
||||
r.ep1 = p1[1]
|
||||
r.ep2 = p1[2]
|
||||
@@ -859,14 +874,23 @@ def update_rolling_cp(r, types, mode='water', dosend=False):
|
||||
r.save()
|
||||
if dosend and pwr-5 > r.ftp and r.getemailnotifications and not r.emailbounced:
|
||||
_ = myqueue(queuehigh, handle_sendemail_newftp,r,pwr,'water')
|
||||
elif mode == 'erg' and metric == 'spm':
|
||||
r.er0 = p1[0]
|
||||
r.er1 = p1[1]
|
||||
r.er2 = p1[2]
|
||||
r.er3 = p1[3]
|
||||
r.ecrratio = res2[3]
|
||||
r.save()
|
||||
|
||||
|
||||
return True
|
||||
return False
|
||||
|
||||
def initiate_cp(r):
|
||||
_ = update_rolling_cp(r, otwtypes, 'water')
|
||||
_ = update_rolling_cp(r, otetypes, 'erg')
|
||||
_ = update_rolling_cp(r, otwtypes, mode='water', metric='power')
|
||||
_ = update_rolling_cp(r, otetypes, mode='erg', metric='power')
|
||||
_ = update_rolling_cp(r, otwtypes, mode='water', metric='spm')
|
||||
_ = update_rolling_cp(r, otetypes, mode='erg', metric='spm')
|
||||
|
||||
def split_workout(r, parent, splitsecond, splitmode):
|
||||
data, row = getrowdata_db(id=parent.id)
|
||||
@@ -1077,7 +1101,8 @@ def checkbreakthrough(w, r):
|
||||
try:
|
||||
res, btvalues, res2 = utils.isbreakthrough(
|
||||
delta, cpvalues, r.p0, r.p1, r.p2, r.p3, r.cpratio)
|
||||
_ = update_rolling_cp(r, otwtypes, 'water')
|
||||
_ = update_rolling_cp(r, otwtypes, mode='water')
|
||||
_ = update_rolling_cp(r, otwtypes, mode='water', metric='spm')
|
||||
except ValueError:
|
||||
res = 0
|
||||
res2 = 0
|
||||
@@ -1086,7 +1111,8 @@ def checkbreakthrough(w, r):
|
||||
try:
|
||||
res, btvalues, res2 = utils.isbreakthrough(
|
||||
delta, cpvalues, r.ep0, r.ep1, r.ep2, r.ep3, r.ecpratio)
|
||||
_ = update_rolling_cp(r, otetypes, 'erg')
|
||||
_ = update_rolling_cp(r, otetypes, mode='erg')
|
||||
_ = update_rolling_cp(r, otetypes, mode='erg', metric='spm')
|
||||
except ValueError:
|
||||
res = 0
|
||||
res2 = 0
|
||||
|
||||
Reference in New Issue
Block a user