otw-bests somehow working
This commit is contained in:
@@ -596,6 +596,94 @@ def googlemap_chart(lat,lon,name=""):
|
||||
return [script,div]
|
||||
|
||||
|
||||
def interactive_otwcpchart(powerdf,promember=0):
|
||||
powerdf = powerdf[~(powerdf == 0).any(axis=1)]
|
||||
# plot tools
|
||||
if (promember==1):
|
||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
||||
else:
|
||||
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
|
||||
|
||||
|
||||
x_axis_type = 'log'
|
||||
y_axis_type = 'linear'
|
||||
|
||||
source = ColumnDataSource(
|
||||
data = powerdf
|
||||
)
|
||||
|
||||
# there is no Paul's law for OTW
|
||||
|
||||
# Fit the data to thee parameter CP model
|
||||
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
|
||||
|
||||
p0 = [500,350,10,8000]
|
||||
|
||||
p1 = p0
|
||||
|
||||
thesecs = powerdf['Delta']
|
||||
theavpower = powerdf['CP']
|
||||
|
||||
if len(thesecs)>=4:
|
||||
p1, success = optimize.leastsq(errfunc, p0[:], args = (thesecs,theavpower))
|
||||
else:
|
||||
factor = fitfunc(p0,thesecs.mean())/theavpower.mean()
|
||||
p1 = [p0[0]/factor,p0[1]/factor,p0[2],p0[3]]
|
||||
|
||||
|
||||
fitt = pd.Series(10**(4*np.arange(100)/100.))
|
||||
|
||||
fitpower = fitfunc(p1,fitt)
|
||||
|
||||
message = ""
|
||||
#if len(fitpower[fitpower<0]) > 0:
|
||||
# message = "CP model fit didn't give correct results"
|
||||
|
||||
|
||||
sourcecomplex = ColumnDataSource(
|
||||
data = dict(
|
||||
power = fitpower,
|
||||
duration = fitt
|
||||
)
|
||||
)
|
||||
|
||||
# making the plot
|
||||
plot = Figure(tools=TOOLS,x_axis_type=x_axis_type,
|
||||
plot_width=900,
|
||||
toolbar_location="above",
|
||||
toolbar_sticky=False)
|
||||
|
||||
# add watermark
|
||||
plot.extra_y_ranges = {"watermark": watermarkrange}
|
||||
|
||||
plot.image_url([watermarkurl],1.8*max(thesecs),watermarky,
|
||||
watermarkw,watermarkh,
|
||||
global_alpha=watermarkalpha,
|
||||
w_units='screen',
|
||||
h_units='screen',
|
||||
anchor=watermarkanchor,
|
||||
dilate=True,
|
||||
y_range_name = "watermark",
|
||||
)
|
||||
|
||||
plot.circle('Delta','CP',source=source,fill_color='red',size=15,
|
||||
legend='Power')
|
||||
plot.xaxis.axis_label = "Duration (seconds)"
|
||||
plot.yaxis.axis_label = "Power (W)"
|
||||
|
||||
plot.y_range = Range1d(0,1.5*max(theavpower))
|
||||
plot.x_range = Range1d(1,2*max(thesecs))
|
||||
plot.legend.orientation = "vertical"
|
||||
|
||||
|
||||
plot.line('duration','power',source=sourcecomplex,legend="CP Model",
|
||||
color='green')
|
||||
|
||||
script, div = components(plot)
|
||||
|
||||
return [script,div,p1,message]
|
||||
|
||||
def interactive_cpchart(thedistances,thesecs,theavpower,
|
||||
theworkouts,promember=0):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user