Merge branch 'release/v3.12'
This commit is contained in:
@@ -44,6 +44,7 @@ import sqlalchemy as sa
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from utils import lbstoN
|
from utils import lbstoN
|
||||||
|
from scipy.interpolate import griddata
|
||||||
|
|
||||||
import django_rq
|
import django_rq
|
||||||
queue = django_rq.get_queue('default')
|
queue = django_rq.get_queue('default')
|
||||||
@@ -138,6 +139,71 @@ def filter_df(datadf,fieldname,value,largerthan=True):
|
|||||||
|
|
||||||
return datadf
|
return datadf
|
||||||
|
|
||||||
|
def getcp(dfgrouped,logarr):
|
||||||
|
delta = []
|
||||||
|
cpvalue = []
|
||||||
|
avgpower = {}
|
||||||
|
#avgpower[0] = 0
|
||||||
|
|
||||||
|
for id,group in dfgrouped:
|
||||||
|
tt = group['time'].copy()
|
||||||
|
ww = group['power'].copy()
|
||||||
|
|
||||||
|
tmax = tt.max()
|
||||||
|
newlen = int(tmax/2000.)
|
||||||
|
print newlen,len(ww)
|
||||||
|
newt = np.arange(newlen)*tmax/float(newlen)
|
||||||
|
neww = griddata(tt.values,
|
||||||
|
ww.values,
|
||||||
|
newt,method='linear',
|
||||||
|
rescale=True)
|
||||||
|
|
||||||
|
#tt = pd.Series(newt)
|
||||||
|
#ww = pd.Series(neww)
|
||||||
|
|
||||||
|
try:
|
||||||
|
avgpower[id] = int(ww.mean())
|
||||||
|
except ValueError:
|
||||||
|
avgpower[id] = '---'
|
||||||
|
if not np.isnan(ww.mean()):
|
||||||
|
length = len(ww)
|
||||||
|
dt = []
|
||||||
|
cpw = []
|
||||||
|
for i in range(length-2):
|
||||||
|
w_roll = ww.rolling(i+2).mean().dropna()
|
||||||
|
if len(w_roll):
|
||||||
|
# now goes with # data points - should be fixed seconds
|
||||||
|
indexmax = w_roll.idxmax(axis=1)
|
||||||
|
try:
|
||||||
|
t_0 = tt.ix[indexmax]
|
||||||
|
t_1 = tt.ix[indexmax-i]
|
||||||
|
deltat = 1.0e-3*(t_0-t_1)
|
||||||
|
wmax = w_roll.ix[indexmax]
|
||||||
|
if not np.isnan(deltat) and not np.isnan(wmax):
|
||||||
|
dt.append(deltat)
|
||||||
|
cpw.append(wmax)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
dt = pd.Series(dt)
|
||||||
|
cpw = pd.Series(cpw)
|
||||||
|
|
||||||
|
|
||||||
|
cpvalues = griddata(dt.values,
|
||||||
|
cpw.values,
|
||||||
|
logarr,method='linear',
|
||||||
|
rescale=True)
|
||||||
|
|
||||||
|
for cpv in cpvalues:
|
||||||
|
cpvalue.append(cpv)
|
||||||
|
for d in logarr:
|
||||||
|
delta.append(d)
|
||||||
|
|
||||||
|
delta = pd.Series(delta,name='Delta')
|
||||||
|
cpvalue = pd.Series(cpvalue,name='CP')
|
||||||
|
return delta,cpvalue,avgpower
|
||||||
|
|
||||||
def clean_df_stats(datadf,workstrokesonly=True,ignorehr=True,
|
def clean_df_stats(datadf,workstrokesonly=True,ignorehr=True,
|
||||||
ignoreadvanced=False):
|
ignoreadvanced=False):
|
||||||
# clean data remove zeros and negative values
|
# clean data remove zeros and negative values
|
||||||
|
|||||||
@@ -173,6 +173,12 @@ class Rower(models.Model):
|
|||||||
|
|
||||||
# Power Zone Data
|
# Power Zone Data
|
||||||
ftp = models.IntegerField(default=226,verbose_name="Functional Threshold Power")
|
ftp = models.IntegerField(default=226,verbose_name="Functional Threshold Power")
|
||||||
|
|
||||||
|
p0 = models.FloatField(default=1.0,verbose_name="CP p1")
|
||||||
|
p1 = models.FloatField(default=1.0,verbose_name="CP p2")
|
||||||
|
p2 = models.FloatField(default=1.0,verbose_name="CP p3")
|
||||||
|
p3 = models.FloatField(default=1.0,verbose_name="CP p4")
|
||||||
|
|
||||||
otwslack = models.IntegerField(default=0,verbose_name="OTW Power slack")
|
otwslack = models.IntegerField(default=0,verbose_name="OTW Power slack")
|
||||||
|
|
||||||
pw_ut2 = models.IntegerField(default=124,verbose_name="UT2 Power")
|
pw_ut2 = models.IntegerField(default=124,verbose_name="UT2 Power")
|
||||||
|
|||||||
@@ -2905,7 +2905,7 @@ def otwrankings_view(request,theuser=0,
|
|||||||
|
|
||||||
|
|
||||||
maxlog10 = np.log10(maxt)
|
maxlog10 = np.log10(maxt)
|
||||||
logarr = np.arange(100)*maxlog10/100.
|
logarr = np.arange(50)*maxlog10/50.
|
||||||
logarr = [int(10.**(la)) for la in logarr]
|
logarr = [int(10.**(la)) for la in logarr]
|
||||||
logarr = pd.Series(logarr)
|
logarr = pd.Series(logarr)
|
||||||
logarr.drop_duplicates(keep='first',inplace=True)
|
logarr.drop_duplicates(keep='first',inplace=True)
|
||||||
@@ -2914,56 +2914,9 @@ def otwrankings_view(request,theuser=0,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
delta = []
|
|
||||||
cpvalue = []
|
|
||||||
avgpower = {}
|
|
||||||
|
|
||||||
dfgrouped = df.groupby(['workoutid'])
|
dfgrouped = df.groupby(['workoutid'])
|
||||||
for id,group in dfgrouped:
|
delta,cpvalue,avgpower = dataprep.getcp(dfgrouped,logarr)
|
||||||
tt = group['time'].copy()
|
|
||||||
ww = group['power'].copy()
|
|
||||||
|
|
||||||
try:
|
|
||||||
avgpower[id] = int(ww.mean())
|
|
||||||
except ValueError:
|
|
||||||
avgpower[id] = '---'
|
|
||||||
if not np.isnan(ww.mean()):
|
|
||||||
length = len(ww)
|
|
||||||
dt = []
|
|
||||||
cpw = []
|
|
||||||
for i in range(length-2):
|
|
||||||
w_roll = ww.rolling(i+2).mean().dropna()
|
|
||||||
if len(w_roll):
|
|
||||||
# now goes with # data points - should be fixed seconds
|
|
||||||
indexmax = w_roll.idxmax(axis=1)
|
|
||||||
try:
|
|
||||||
t_0 = tt.ix[indexmax]
|
|
||||||
t_1 = tt.ix[indexmax-i]
|
|
||||||
deltat = 1.0e-3*(t_0-t_1)
|
|
||||||
wmax = w_roll.ix[indexmax]
|
|
||||||
if not np.isnan(deltat) and not np.isnan(wmax):
|
|
||||||
dt.append(deltat)
|
|
||||||
cpw.append(wmax)
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
dt = pd.Series(dt)
|
|
||||||
cpw = pd.Series(cpw)
|
|
||||||
|
|
||||||
|
|
||||||
cpvalues = griddata(dt.values,
|
|
||||||
cpw.values,
|
|
||||||
logarr,method='linear',
|
|
||||||
rescale=True)
|
|
||||||
|
|
||||||
for cpv in cpvalues:
|
|
||||||
cpvalue.append(cpv)
|
|
||||||
for d in logarr:
|
|
||||||
delta.append(d)
|
|
||||||
|
|
||||||
delta = pd.Series(delta,name='Delta')
|
|
||||||
cpvalue = pd.Series(cpvalue,name='CP')
|
|
||||||
|
|
||||||
powerdf = pd.DataFrame({
|
powerdf = pd.DataFrame({
|
||||||
'Delta':delta,
|
'Delta':delta,
|
||||||
@@ -2983,6 +2936,11 @@ def otwrankings_view(request,theuser=0,
|
|||||||
script = res[0]
|
script = res[0]
|
||||||
div = res[1]
|
div = res[1]
|
||||||
p1 = res[2]
|
p1 = res[2]
|
||||||
|
r.p0 = p1[0]
|
||||||
|
r.p1 = p1[1]
|
||||||
|
r.p2 = p1[2]
|
||||||
|
r.p3 = p1[3]
|
||||||
|
r.save()
|
||||||
paulslope = 1
|
paulslope = 1
|
||||||
paulintercept = 1
|
paulintercept = 1
|
||||||
message = res[3]
|
message = res[3]
|
||||||
|
|||||||
Reference in New Issue
Block a user