trimp, tss, hrtss, normv, normw pre-calculated
This commit is contained in:
@@ -39,7 +39,7 @@ from django_rq import job
|
||||
from django.utils import timezone
|
||||
from django.utils.html import strip_tags
|
||||
|
||||
from utils import deserialize_list,ewmovingaverage
|
||||
from utils import deserialize_list,ewmovingaverage,wavg
|
||||
|
||||
from rowers.dataprepnodjango import (
|
||||
update_strokedata, new_workout_from_file,
|
||||
@@ -545,6 +545,101 @@ We have updated Power and Work per Stroke data according to the instructions by
|
||||
res = email.send()
|
||||
return 1
|
||||
|
||||
@app.task
|
||||
def handle_calctrimp(id,
|
||||
csvfilename,
|
||||
ftp,
|
||||
sex,
|
||||
hrftp,
|
||||
hrmax,
|
||||
hrmin,
|
||||
debug=False, **kwargs):
|
||||
if debug:
|
||||
engine = create_engine(database_url_debug, echo=False)
|
||||
else:
|
||||
engine = create_engine(database_url, echo=False)
|
||||
|
||||
try:
|
||||
rowdata = rdata(csvfilename)
|
||||
except IOError:
|
||||
try:
|
||||
rowdata = rdata(csvfilename + '.csv')
|
||||
except IOError:
|
||||
try:
|
||||
rowdata = rdata(csvfilename + '.gz')
|
||||
except IOError:
|
||||
return 0
|
||||
|
||||
df = rowdata.df
|
||||
|
||||
df['deltat'] = df[' ElapsedTime (sec)'].diff().abs()
|
||||
duration = df['TimeStamp (sec)'].max()-df['TimeStamp (sec)'].min()
|
||||
|
||||
df[' Power (watts)'] = df[' Power (watts)'].abs()
|
||||
|
||||
df['pwr4'] = df[' Power (watts)']**(4.0)
|
||||
pwr4mean = wavg(df,'pwr4','deltat')
|
||||
pwrmean = wavg(df,' Power (watts)','deltat')
|
||||
if pwr4mean > 0:
|
||||
normp = (pwr4mean)**(0.25)
|
||||
else:
|
||||
normp = pwrmean
|
||||
|
||||
intensityfactor = pwrmean/float(ftp)
|
||||
intensityfactor = normp/float(ftp)
|
||||
tss = 100.*((duration*normp*intensityfactor)/(3600.*ftp))
|
||||
|
||||
if sex == 'male':
|
||||
f = 1.92
|
||||
else:
|
||||
f = 1.67
|
||||
|
||||
dt = df['TimeStamp (sec)'].diff()/6.e4
|
||||
|
||||
hrr = (df[' HRCur (bpm)']-hrmin)/(hrmax-hrmin)
|
||||
hrrftp = (hrftp-hrmin)/float(hrmax-hrmin)
|
||||
trimp1hr = 60*hrrftp*0.64*np.exp(f*hrrftp)
|
||||
|
||||
trimpdata = dt*hrr*0.64*np.exp(f*hrr)
|
||||
trimp = trimpdata.sum()
|
||||
|
||||
hrtss = 100*trimp/trimp1hr
|
||||
|
||||
pp = 8.0
|
||||
|
||||
df['v4'] = df[' AverageBoatSpeed (m/s)']**(pp)
|
||||
v4mean = wavg(df,'v4','deltat')
|
||||
normv = v4mean**(1./pp)
|
||||
|
||||
df['w4'] = df['driveenergy']**(pp)
|
||||
w4mean = wavg(df,'w4','deltat')
|
||||
normw = w4mean**(1./pp)
|
||||
|
||||
|
||||
if np.isnan(normv):
|
||||
normv = 500./120.
|
||||
|
||||
if np.isnan(normw):
|
||||
normw = 0
|
||||
|
||||
query = 'UPDATE rowers_workout SET rscore = {tss}, normp = {normp}, trimp={trimp}, hrtss={hrtss}, normv={normv}, normw={normw} WHERE id={id}'.format(
|
||||
tss = int(tss),
|
||||
normp = int(normp),
|
||||
trimp = int(trimp),
|
||||
hrtss = int(hrtss),
|
||||
normv=normv,
|
||||
normw=normw,
|
||||
id = id,
|
||||
)
|
||||
|
||||
with engine.connect() as conn, conn.begin():
|
||||
result = conn.execute(query)
|
||||
conn.close()
|
||||
engine.dispose()
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@app.task
|
||||
def handle_updatedps(useremail, workoutids, debug=False,**kwargs):
|
||||
for wid, f1 in workoutids:
|
||||
|
||||
Reference in New Issue
Block a user