Merge branch 'release/v3.33'
This commit is contained in:
@@ -425,13 +425,6 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower',
|
||||
powerperc=powerperc,powerzones=r.powerzones)
|
||||
row = rdata(f2,rower=rr)
|
||||
|
||||
isbreakthrough = False
|
||||
if workouttype == 'water':
|
||||
delta,cpvalues,avgpower = datautils.getsinglecp(row.df)
|
||||
res,btvalues = utils.isbreakthrough(delta,cpvalues,r.p0,r.p1,r.p2,r.p3,r.cpratio)
|
||||
if res:
|
||||
isbreakthrough = True
|
||||
res = datautils.updatecp(delta,cpvalues,r)
|
||||
|
||||
dtavg = row.df['TimeStamp (sec)'].diff().mean()
|
||||
|
||||
@@ -590,6 +583,21 @@ def save_workout_database(f2,r,dosmooth=True,workouttype='rower',
|
||||
|
||||
w.save()
|
||||
|
||||
isbreakthrough = False
|
||||
if workouttype == 'water':
|
||||
df = getsmallrowdata_db(['power','workoutid','time'],ids=[w.id])
|
||||
# delta,cpvalues,avgpower = datautils.getsinglecp(row.df)
|
||||
thesecs = totaltime
|
||||
maxt = 1.05*thesecs
|
||||
logarr = datautils.getlogarr(maxt)
|
||||
dfgrouped = df.groupby(['workoutid'])
|
||||
delta,cpvalues,avgpower = datautils.getcp(dfgrouped,logarr)
|
||||
|
||||
res,btvalues = utils.isbreakthrough(delta,cpvalues,r.p0,r.p1,r.p2,r.p3,r.cpratio)
|
||||
if res:
|
||||
isbreakthrough = True
|
||||
res = datautils.updatecp(delta,cpvalues,r)
|
||||
|
||||
# submit email task to send email about breakthrough workout
|
||||
if isbreakthrough:
|
||||
a_messages.info(r.user,'It looks like you have a new breakthrough workout')
|
||||
|
||||
@@ -463,35 +463,14 @@ def testdata(time,distance,pace,spm):
|
||||
|
||||
|
||||
def getsmallrowdata_db(columns,ids=[]):
|
||||
prepmultipledata(ids)
|
||||
|
||||
data = read_cols_df_sql(ids,columns)
|
||||
|
||||
return data
|
||||
|
||||
|
||||
def prepmultipledata(ids,verbose=False,debug=True):
|
||||
query = sa.text('SELECT DISTINCT workoutid FROM strokedata')
|
||||
if debug:
|
||||
engine = create_engine(database_url_debug, echo=False)
|
||||
else:
|
||||
engine = create_engine(database_url, echo=False)
|
||||
|
||||
|
||||
with engine.connect() as conn, conn.begin():
|
||||
res = conn.execute(query)
|
||||
res = list(itertools.chain.from_iterable(res.fetchall()))
|
||||
conn.close()
|
||||
engine.dispose()
|
||||
|
||||
res = list(set(ids)-set(res))
|
||||
for id in res:
|
||||
rowdata,row = getrowdata(id=id)
|
||||
if verbose:
|
||||
print id
|
||||
if rowdata:
|
||||
data = dataprep(rowdata.df,id=id,bands=True,barchart=True,otwpower=True)
|
||||
return res
|
||||
|
||||
def read_cols_df_sql(ids,columns,debug=True):
|
||||
columns = list(columns)+['distance','spm']
|
||||
columns = [x for x in columns if x != 'None']
|
||||
|
||||
@@ -118,6 +118,8 @@ def getcp(dfgrouped,logarr):
|
||||
ww = group['power'].copy()
|
||||
|
||||
tmax = tt.max()
|
||||
|
||||
|
||||
if tmax > 500000:
|
||||
newlen = int(tmax/2000.)
|
||||
else:
|
||||
@@ -143,6 +145,7 @@ def getcp(dfgrouped,logarr):
|
||||
cpw = []
|
||||
for i in xrange(length-2):
|
||||
deltat,wmax = getmaxwattinterval(tt,ww,i)
|
||||
|
||||
if not np.isnan(deltat) and not np.isnan(wmax):
|
||||
dt.append(deltat)
|
||||
cpw.append(wmax)
|
||||
@@ -164,6 +167,18 @@ def getcp(dfgrouped,logarr):
|
||||
|
||||
delta = pd.Series(delta,name='Delta')
|
||||
cpvalue = pd.Series(cpvalue,name='CP')
|
||||
|
||||
|
||||
cpdf = pd.DataFrame({
|
||||
'delta':delta,
|
||||
'cpvalue':cpvalue
|
||||
})
|
||||
|
||||
cpdf.dropna(axis=0, how='any',inplace=True)
|
||||
|
||||
delta = cpdf['delta']
|
||||
cpvalue = cpdf['cpvalue']
|
||||
|
||||
return delta,cpvalue,avgpower
|
||||
|
||||
def getmaxwattinterval(tt,ww,i):
|
||||
|
||||
@@ -621,7 +621,7 @@ def interactive_otwcpchart(powerdf,promember=0):
|
||||
|
||||
thesecs = powerdf['Delta']
|
||||
theavpower = powerdf['CP']
|
||||
|
||||
|
||||
p1,fitt,fitpower,ratio = datautils.cpfit(powerdf)
|
||||
|
||||
message = ""
|
||||
|
||||
@@ -26,6 +26,7 @@ from utils import serialize_list,deserialize_list
|
||||
|
||||
from rowers.dataprepnodjango import update_strokedata
|
||||
from rowers.dataprepnodjango import new_workout_from_file
|
||||
from rowers.dataprepnodjango import getsmallrowdata_db
|
||||
|
||||
from django.core.mail import send_mail, BadHeaderError,EmailMessage
|
||||
|
||||
@@ -245,7 +246,20 @@ def handle_otwsetpower(f1,boattype,weightvalue,
|
||||
rowdata.write_csv(f1,gzip=True)
|
||||
update_strokedata(workoutid,rowdata.df,debug=debug)
|
||||
|
||||
delta,cpvalues,avgpower = datautils.getsinglecp(rowdata.df)
|
||||
totaltime = rowdata.df['TimeStamp (sec)'].max()-rowdata.df['TimeStamp (sec)'].min()
|
||||
try:
|
||||
totaltime = totaltime+rowdata.df.ix[0,' ElapsedTime (sec)']
|
||||
except KeyError:
|
||||
pass
|
||||
df = getsmallrowdata_db(['power','workoutid','time'],ids=[workoutid])
|
||||
thesecs = totaltime
|
||||
maxt = 1.05*thesecs
|
||||
logarr = datautils.getlogarr(maxt)
|
||||
dfgrouped = df.groupby(['workoutid'])
|
||||
delta,cpvalues,avgpower = datautils.getcp(dfgrouped,logarr)
|
||||
|
||||
|
||||
#delta,cpvalues,avgpower = datautils.getsinglecp(rowdata.df)
|
||||
res,btvalues = utils.isbreakthrough(delta,cpvalues,ps[0],ps[1],ps[2],ps[3],ratio)
|
||||
if res:
|
||||
handle_sendemail_breakthrough(workoutid,email,
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
||||
<a class="button blue small" href="/rowers/team-compare-select/team/0/">Multi Compare</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Multi Compare</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
|
||||
@@ -77,11 +77,14 @@ def geo_distance(lat1,lon1,lat2,lon2):
|
||||
|
||||
|
||||
def isbreakthrough(delta,cpvalues,p0,p1,p2,p3,ratio):
|
||||
pwr = p0/(1+delta/p2)
|
||||
pwr += p1/(1+delta/p3)
|
||||
pwr = abs(p0)/(1+(delta/abs(p2)))
|
||||
pwr += abs(p1)/(1+(delta/abs(p3)))
|
||||
|
||||
pwr *= ratio
|
||||
|
||||
delta = delta.values
|
||||
cpvalues = cpvalues.values
|
||||
|
||||
res = np.sum(cpvalues>pwr)
|
||||
|
||||
btdf = pd.DataFrame(
|
||||
@@ -92,6 +95,7 @@ def isbreakthrough(delta,cpvalues,p0,p1,p2,p3,ratio):
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
btdf.sort_values('delta',axis=0,inplace=True)
|
||||
|
||||
|
||||
|
||||
@@ -2926,22 +2926,22 @@ def otwrankings_view(request,theuser=0,
|
||||
|
||||
|
||||
if len(thesecs) != 0:
|
||||
maxt = 2*pd.Series(thesecs).max()
|
||||
maxt = 1.05*pd.Series(thesecs).max()
|
||||
else:
|
||||
maxt = 1000.
|
||||
|
||||
|
||||
|
||||
logarr = datautils.getlogarr(maxt)
|
||||
|
||||
|
||||
dfgrouped = df.groupby(['workoutid'])
|
||||
delta,cpvalue,avgpower = datautils.getcp(dfgrouped,logarr)
|
||||
|
||||
|
||||
powerdf = pd.DataFrame({
|
||||
'Delta':delta,
|
||||
'CP':cpvalue,
|
||||
})
|
||||
|
||||
|
||||
|
||||
powerdf = powerdf[powerdf['CP']>0]
|
||||
powerdf.dropna(axis=0,inplace=True)
|
||||
|
||||
BIN
rowsanda_107501
BIN
rowsanda_107501
Binary file not shown.
Reference in New Issue
Block a user