Private
Public Access
1
0

updating rolling spm data

This commit is contained in:
2025-02-05 18:51:13 +01:00
parent 529cb29dd8
commit 1cb9afba6f
5 changed files with 50 additions and 15 deletions

View File

@@ -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