adding cpoverlay (world class)
This commit is contained in:
@@ -3304,7 +3304,8 @@ def interactive_agegroupcpchart(age,normalized=False):
|
||||
|
||||
|
||||
def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data',
|
||||
title='',type='water'):
|
||||
title='',type='water',
|
||||
wcpower=[],wcdurations=[],cpoverlay=False):
|
||||
|
||||
powerdf = powerdf[~(powerdf == 0).any(axis=1)]
|
||||
# plot tools
|
||||
@@ -3356,6 +3357,34 @@ def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data',
|
||||
workouts = powerdf['workout']
|
||||
urls = powerdf['url']
|
||||
|
||||
# add world class
|
||||
wcpower = pd.Series(wcpower)
|
||||
wcdurations = pd.Series(wcdurations)
|
||||
|
||||
|
||||
# fitting WC data to three parameter CP model
|
||||
if len(wcdurations)>=4:
|
||||
fitfunc = lambda pars,x: pars[0]/(1+(x/pars[2])) + pars[1]/(1+(x/pars[3]))
|
||||
errfunc = lambda pars,x,y: fitfunc(pars,x)-y
|
||||
p1wc, success = optimize.leastsq(errfunc, p0[:],
|
||||
args = (wcdurations,wcpower))
|
||||
else:
|
||||
p1wc = None
|
||||
|
||||
if p1wc is not None and cpoverlay:
|
||||
fitpowerwc = fitfunc(p1wc,fitt)
|
||||
fitpowerexcellent = 0.7*fitfunc(p1wc,fitt)
|
||||
fitpowergood = 0.6*fitfunc(p1wc,fitt)
|
||||
fitpowerfair = 0.5*fitfunc(p1wc,fitt)
|
||||
fitpoweraverage = 0.4*fitfunc(p1wc,fitt)
|
||||
|
||||
else:
|
||||
fitpowerwc = 0*fitpower
|
||||
fitpowerexcellent = 0*fitpower
|
||||
fitpowergood = 0*fitpower
|
||||
fitpowerfair = 0*fitpower
|
||||
fitpoweraverage = 0*fitpower
|
||||
|
||||
|
||||
sourcecomplex = ColumnDataSource(
|
||||
data = dict(
|
||||
@@ -3364,6 +3393,11 @@ def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data',
|
||||
duration = fitt/60.,
|
||||
ftime = ftime,
|
||||
workout = workouts,
|
||||
fitpowerwc = fitpowerwc,
|
||||
fitpowerexcellent = fitpowerexcellent,
|
||||
fitpowergood = fitpowergood,
|
||||
fitpowerfair = fitpowerfair,
|
||||
fitpoweraverage = fitpoweraverage,
|
||||
url = urls,
|
||||
)
|
||||
)
|
||||
@@ -3424,6 +3458,7 @@ def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data',
|
||||
('Power (W)','@CP{int}'),
|
||||
('Power (W) upper','@CPmax{int}'),
|
||||
('Workout','@workout'),
|
||||
('World Class','@fitpowerwc{int}')
|
||||
])
|
||||
|
||||
hover.mode = 'mouse'
|
||||
@@ -3437,6 +3472,27 @@ def interactive_otwcpchart(powerdf,promember=0,rowername="",r=None,cpfit='data',
|
||||
plot.line('duration','CPmax',source=sourcecomplex,legend_label="CP Model",
|
||||
color='red')
|
||||
|
||||
if p1wc is not None:
|
||||
plot.line('duration','fitpowerwc',source=sourcecomplex,
|
||||
legend_label="World Class",
|
||||
color='darkgoldenrod',line_dash='dotted')
|
||||
|
||||
plot.line('duration','fitpowerexcellent',source=sourcecomplex,
|
||||
legend_label="90% percentile",
|
||||
color='goldenrod',line_dash='dotted')
|
||||
|
||||
plot.line('duration','fitpowergood',source=sourcecomplex,
|
||||
legend_label="75% percentile",
|
||||
color='sandybrown',line_dash='dotted')
|
||||
|
||||
plot.line('duration','fitpowerfair',source=sourcecomplex,
|
||||
legend_label="50% percentile",
|
||||
color='rosybrown',line_dash='dotted')
|
||||
|
||||
plot.line('duration','fitpoweraverage',source=sourcecomplex,
|
||||
legend_label="25% percentile",
|
||||
color='tan',line_dash='dotted')
|
||||
|
||||
script, div = components(plot)
|
||||
|
||||
return [script,div,p1,ratio,message]
|
||||
|
||||
Reference in New Issue
Block a user