Private
Public Access
1
0

removing unnecessary code

This commit is contained in:
2024-04-03 22:17:28 +02:00
parent 9bc107f427
commit f2d163ad92

View File

@@ -554,661 +554,6 @@ def interactive_forcecurve(theworkouts):
script, div = get_chart("/forcecurve", chart_data) script, div = get_chart("/forcecurve", chart_data)
return script, div return script, div
try:
covariancematrix = np.cov(
rowdata['peakforceangle'], y=rowdata['peakforce'])
eig_vals, eig_vecs = np.linalg.eig(covariancematrix)
a = rowdata['peakforceangle']-rowdata['peakforceangle'].median()
F = rowdata['peakforce']-rowdata['peakforce'].median()
Rinv = eig_vecs
R = np.linalg.inv(Rinv)
x = R[0, 0]*a+R[0, 1]*F
y = R[1, 0]*a+R[1, 1]*F
x05 = x.quantile(q=0.01)
x25 = x.quantile(q=0.15)
x75 = x.quantile(q=0.85)
x95 = x.quantile(q=0.99)
y05 = y.quantile(q=0.01)
y25 = y.quantile(q=0.15)
y75 = y.quantile(q=0.85)
y95 = y.quantile(q=0.99)
a25 = Rinv[0, 0]*x25 + rowdata['peakforceangle'].median()
F25 = Rinv[1, 0]*x25 + rowdata['peakforce'].median()
a25b = Rinv[0, 1]*y25 + rowdata['peakforceangle'].median()
F25b = Rinv[1, 1]*y25 + rowdata['peakforce'].median()
a75 = Rinv[0, 0]*x75 + rowdata['peakforceangle'].median()
F75 = Rinv[1, 0]*x75 + rowdata['peakforce'].median()
a75b = Rinv[0, 1]*y75 + rowdata['peakforceangle'].median()
F75b = Rinv[1, 1]*y75 + rowdata['peakforce'].median()
a05 = Rinv[0, 0]*x05 + rowdata['peakforceangle'].median()
F05 = Rinv[1, 0]*x05 + rowdata['peakforce'].median()
a05b = Rinv[0, 1]*y05 + rowdata['peakforceangle'].median()
F05b = Rinv[1, 1]*y05 + rowdata['peakforce'].median()
a95 = Rinv[0, 0]*x95 + rowdata['peakforceangle'].median()
F95 = Rinv[1, 0]*x95 + rowdata['peakforce'].median()
a95b = Rinv[0, 1]*y95 + rowdata['peakforceangle'].median()
F95b = Rinv[1, 1]*y95 + rowdata['peakforce'].median()
except KeyError: # pragma: no cover
a25 = 0
F25 = 0
a25b = 0
F25b = 0
a75 = 0
F75 = 0
a75b = 0
F75b = 0
a05 = 0
F05 = 0
a05b = 0
F05b = 0
a95 = 0
F95 = 0
a95b = 0
F95b = 0
try:
catchav = rowdata['catch'].median()
catch25 = rowdata['catch'].quantile(q=0.25)
catch75 = rowdata['catch'].quantile(q=0.75)
catch05 = rowdata['catch'].quantile(q=0.05)
catch95 = rowdata['catch'].quantile(q=0.95)
except KeyError: # pragma: no cover
catchav = 0
catch25 = 0
catch75 = 0
catch05 = 0
catch95 = 0
try:
finishav = rowdata['finish'].median()
finish25 = rowdata['finish'].quantile(q=0.25)
finish75 = rowdata['finish'].quantile(q=0.75)
finish05 = rowdata['finish'].quantile(q=0.05)
finish95 = rowdata['finish'].quantile(q=0.95)
except KeyError: # pragma: no cover
finishav = 0
finish25 = 0
finish75 = 0
finish05 = 0
finish95 = 0
try:
washav = (rowdata['finish']-rowdata['wash']).median()
wash25 = (rowdata['finish']-rowdata['wash']).quantile(q=0.25)
wash75 = (rowdata['finish']-rowdata['wash']).quantile(q=0.75)
wash05 = (rowdata['finish']-rowdata['wash']).quantile(q=0.05)
wash95 = (rowdata['finish']-rowdata['wash']).quantile(q=0.95)
except KeyError: # pragma: no cover
washav = 0
wash25 = 0
wash75 = 0
wash05 = 0
wash95 = 0
try:
slipav = (rowdata['slip']+rowdata['catch']).median()
slip25 = (rowdata['slip']+rowdata['catch']).quantile(q=0.25)
slip75 = (rowdata['slip']+rowdata['catch']).quantile(q=0.75)
slip05 = (rowdata['slip']+rowdata['catch']).quantile(q=0.05)
slip95 = (rowdata['slip']+rowdata['catch']).quantile(q=0.95)
except KeyError: # pragma: no cover
slipav = 0
slip25 = 0
slip75 = 0
slip05 = 0
slip95 = 0
try:
peakforceav = rowdata['peakforce'].median()
except KeyError: # pragma: no cover
peakforceav = 0
try:
averageforceav = rowdata['averageforce'].median()
except KeyError: # pragma: no cover
averageforceav = 0
try:
peakforceangleav = rowdata['peakforceangle'].median()
except KeyError: # pragma: no cover
peakforceangleav = 0
# thresholdforce /= 4.45 # N to lbs
thresholdforce = 100 if 'x' in boattype else 200
points2575 = [
(catch25, 0), # 0
(slip25, thresholdforce), # 1
(a75, F75), # 4
(a25b, F25b), # 9
(a25, F25), # 2
(wash75, thresholdforce), # 5
(finish75, 0), # 6
(finish25, 0), # 7
(wash25, thresholdforce), # 8
(a75b, F75b), # 3
(slip75, thresholdforce), # 10
(catch75, 0), # 11
]
points0595 = [
(catch05, 0), # 0
(slip05, thresholdforce), # 1
(a95, F95), # 4
(a05b, F05b), # 9
(a05, F05), # 2
(wash95, thresholdforce), # 5
(finish95, 0), # 6
(finish05, 0), # 7
(wash05, thresholdforce), # 8
(a95b, F95b), # 3
(slip95, thresholdforce), # 10
(catch95, 0), # 11
]
angles2575 = []
forces2575 = []
for x, y in points2575:
angles2575.append(x)
forces2575.append(y)
angles0595 = []
forces0595 = []
for x, y in points0595:
angles0595.append(x)
forces0595.append(y)
x = [catchav,
slipav,
peakforceangleav,
washav,
finishav]
y = [0, thresholdforce,
peakforceav,
thresholdforce, 0]
source = ColumnDataSource(
data=dict(
x=x,
y=y,
))
sourceslipwash = ColumnDataSource(
data=dict(
xslip=[slipav, washav],
yslip=[thresholdforce, thresholdforce]
)
)
source2 = ColumnDataSource(
rowdata
)
if plottype == 'scatter': # pragma: no cover
try:
sourcepoints = ColumnDataSource(
data=dict(
peakforceangle=rowdata['peakforceangle'],
peakforce=rowdata['peakforce']
)
)
except KeyError:
sourcepoints = ColumnDataSource(
data=dict(
peakforceangle=[],
peakforce=[]
)
)
else:
sourcepoints = ColumnDataSource(
data=dict(
peakforceangle=[],
peakforce=[]
))
sourcerange = ColumnDataSource(
data=dict(
x2575=angles2575,
y2575=forces2575,
x0595=angles0595,
y0595=forces0595,
)
)
plot = figure(tools=TOOLS,
toolbar_sticky=False, toolbar_location="above", width=800, height=600)
#plot.sizing_mode = 'stretch_both'
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
watermarky = 0.01
watermarkw = 184
watermarkh = 35
watermarkanchor = 'bottom_right'
plot.extra_y_ranges = {"watermark": watermarkrange}
plot.extra_x_ranges = {"watermark": watermarkrange}
plot.image_url([watermarkurl], watermarkx, watermarky,
watermarkw, watermarkh,
global_alpha=watermarkalpha,
w_units='screen',
h_units='screen',
anchor=watermarkanchor,
dilate=True,
x_range_name="watermark",
y_range_name="watermark",
)
avf = Span(location=averageforceav, dimension='width', line_color='blue',
line_dash=[6, 6], line_width=2)
plot.patch('x0595', 'y0595', source=sourcerange, color="red", alpha=0.05)
plot.patch('x2575', 'y2575', source=sourcerange, color="red", alpha=0.2)
plot.line('x', 'y', source=source, color="red")
plot.circle('xslip', 'yslip', source=sourceslipwash, color="red")
plot.circle('peakforceangle', 'peakforce',
source=sourcepoints, color='black', alpha=0.1)
if plottype == 'line':
multilinedatax = []
multilinedatay = []
for i in range(len(rowdata)):
try:
x = [
rowdata['catch'].values[i],
rowdata['slip'].values[i]+rowdata['catch'].values[i],
rowdata['peakforceangle'].values[i],
rowdata['finish'].values[i]-rowdata['wash'].values[i],
rowdata['finish'].values[i]
]
y = [
0,
thresholdforce,
rowdata['peakforce'].values[i],
thresholdforce,
0]
except KeyError: # pragma: no cover
x = [0, 0]
y = [0, 0]
multilinedatax.append(x)
multilinedatay.append(y)
sourcemultiline = ColumnDataSource(dict(
x=multilinedatax,
y=multilinedatay,
))
sourcemultiline2 = ColumnDataSource(dict(
x=multilinedatax,
y=multilinedatay,
))
glyph = MultiLine(xs='x', ys='y', line_color='black', line_alpha=0.05)
plot.add_glyph(sourcemultiline, glyph)
else: # pragma: no cover
sourcemultiline = ColumnDataSource(dict(
x=[], y=[]))
sourcemultiline2 = ColumnDataSource(dict(
x=[], y=[]))
plot.line('x', 'y', source=source, color="red")
plot.add_layout(avf)
peakflabel = Label(x=760, y=460, x_units='screen', y_units='screen',
text="Fpeak: {peakforceav:6.2f}".format(
peakforceav=peakforceav),
background_fill_alpha=.7,
background_fill_color='white',
text_color='blue',
)
avflabel = Label(x=770, y=430, x_units='screen', y_units='screen',
text="Favg: {averageforceav:6.2f}".format(
averageforceav=averageforceav),
background_fill_alpha=.7,
background_fill_color='white',
text_color='blue',
)
catchlabel = Label(x=765, y=400, x_units='screen', y_units='screen',
text="Catch: {catchav:6.2f}".format(catchav=catchav),
background_fill_alpha=0.7,
background_fill_color='white',
text_color='red',
)
peakforceanglelabel = Label(x=725, y=370, x_units='screen', y_units='screen',
text="Peak angle: {peakforceangleav:6.2f}".format(
peakforceangleav=peakforceangleav),
background_fill_alpha=0.7,
background_fill_color='white',
text_color='red',
)
finishlabel = Label(x=760, y=340, x_units='screen', y_units='screen',
text="Finish: {finishav:6.2f}".format(
finishav=finishav),
background_fill_alpha=0.7,
background_fill_color='white',
text_color='red',
)
sliplabel = Label(x=775, y=310, x_units='screen', y_units='screen',
text="Slip: {slipav:6.2f}".format(slipav=slipav-catchav),
background_fill_alpha=0.7,
background_fill_color='white',
text_color='red',
)
washlabel = Label(x=765, y=280, x_units='screen', y_units='screen',
text="Wash: {washav:6.2f}".format(
washav=finishav-washav),
background_fill_alpha=0.7,
background_fill_color='white',
text_color='red',
)
lengthlabel = Label(x=755, y=250, x_units='screen', y_units='screen',
text="Length: {length:6.2f}".format(
length=finishav-catchav),
background_fill_alpha=0.7,
background_fill_color='white',
text_color='green'
)
efflengthlabel = Label(x=690, y=220, x_units='screen', y_units='screen',
text="Effective Length: {length:6.2f}".format(
length=washav-slipav),
background_fill_alpha=0.7,
background_fill_color='white',
text_color='green'
)
annolabel = Label(x=50, y=450, x_units='screen', y_units='screen',
text='',
background_fill_alpha=0.7,
background_fill_color='white',
text_color='black',
)
sliderlabel = Label(x=10, y=470, x_units='screen', y_units='screen',
text='',
background_fill_alpha=0.7,
background_fill_color='white',
text_color='black', text_font_size='10pt',
)
plot.add_layout(peakflabel)
plot.add_layout(peakforceanglelabel)
plot.add_layout(avflabel)
plot.add_layout(catchlabel)
plot.add_layout(sliplabel)
plot.add_layout(washlabel)
plot.add_layout(finishlabel)
plot.add_layout(annolabel)
plot.add_layout(sliderlabel)
plot.add_layout(lengthlabel)
plot.add_layout(efflengthlabel)
plot.xaxis.axis_label = "Angle"
plot.yaxis.axis_label = "Force (N)"
try:
plot.title.text = theworkouts[0].name
except ValueError: # pragma: no cover
plot.title.text = ""
plot.title.text_font_size = "1.0em"
yrange1 = Range1d(start=0, end=900)
plot.y_range = yrange1
xrange1 = Range1d(start=yaxmaxima['catch'], end=yaxmaxima['finish'])
plot.x_range = xrange1
callback = CustomJS(args=dict(
source=source,
source2=source2,
sourceslipwash=sourceslipwash,
sourcepoints=sourcepoints,
avf=avf,
avflabel=avflabel,
catchlabel=catchlabel,
finishlabel=finishlabel,
sliplabel=sliplabel,
washlabel=washlabel,
peakflabel=peakflabel,
peakforceanglelabel=peakforceanglelabel,
annolabel=annolabel,
sliderlabel=sliderlabel,
lengthlabel=lengthlabel,
efflengthlabel=efflengthlabel,
plottype=plottype,
sourcemultiline=sourcemultiline,
sourcemultiline2=sourcemultiline2
), code="""
var data = source.data
var data2 = source2.data
var dataslipwash = sourceslipwash.data
var datapoints = sourcepoints.data
var multilines = sourcemultiline.data
var multilines2 = sourcemultiline2.data
var plottype = plottype
var multilinesx = multilines2['x']
var multilinesy = multilines2['y']
var x = data['x']
var y = data['y']
var xslip = dataslipwash['xslip']
var spm1 = data2['spm']
var distance1 = data2['distance']
var driveenergy1 = data2['driveenergy']
var thresholdforce = y[1]
var c = source2.data['catch']
var finish = data2['finish']
var slip = data2['slip']
var wash = data2['wash']
var peakforceangle = data2['peakforceangle']
var peakforce = data2['peakforce']
var averageforce = data2['averageforce']
var peakforcepoints = datapoints['peakforce']
var peakforceanglepoints = datapoints['peakforceangle']
var annotation = annotation.value
var minspm = minspm.value
var maxspm = maxspm.value
var mindist = mindist.value
var maxdist = maxdist.value
var minwork = minwork.value
var maxwork = maxwork.value
sliderlabel.text = 'SPM: '+minspm.toFixed(0)+'-'+maxspm.toFixed(0)
sliderlabel.text += ', Dist: '+mindist.toFixed(0)+'-'+maxdist.toFixed(0)
sliderlabel.text += ', WpS: '+minwork.toFixed(0)+'-'+maxwork.toFixed(0)
var catchav = 0
var finishav = 0
var slipav = 0
var washav = 0
var peakforceangleav = 0
var averageforceav = 0
var peakforceav = 0
var count = 0
datapoints['peakforceangle'] = []
datapoints['peakforce'] = []
multilines['x'] = []
multilines['y'] = []
for (var i=0; i<c.length; i++) {
if (spm1[i]>=minspm && spm1[i]<=maxspm) {
if (distance1[i]>=mindist && distance1[i]<=maxdist) {
if (driveenergy1[i]>=minwork && driveenergy1[i]<=maxwork) {
if (plottype=='scatter') {
datapoints['peakforceangle'].push(peakforceangle[i])
datapoints['peakforce'].push(peakforce[i])
}
if (plottype=='line') {
multilines['x'].push(multilinesx[i])
multilines['y'].push(multilinesy[i])
}
catchav += c[i]
finishav += finish[i]
slipav += slip[i]
washav += wash[i]
peakforceangleav += peakforceangle[i]
averageforceav += averageforce[i]
peakforceav += peakforce[i]
count += 1
}
}
}
}
catchav /= count
finishav /= count
slipav /= count
washav /= count
peakforceangleav /= count
peakforceav /= count
averageforceav /= count
data['x'] = [catchav,catchav+slipav,peakforceangleav,finishav-washav,finishav]
data['y'] = [0,thresholdforce,peakforceav,thresholdforce,0]
dataslipwash['xslip'] = [catchav+slipav,finishav-washav]
dataslipwash['yslip'] = [thresholdforce,thresholdforce]
var length = finishav-catchav
var efflength = length-slipav-washav
avf.location = averageforceav
avflabel.text = 'Favg: '+averageforceav.toFixed(2)
catchlabel.text = 'Catch: '+catchav.toFixed(2)
finishlabel.text = 'Finish: '+finishav.toFixed(2)
sliplabel.text = 'Slip: '+slipav.toFixed(2)
washlabel.text = 'Wash: '+washav.toFixed(2)
peakflabel.text = 'Fpeak: '+peakforceav.toFixed(2)
peakforceanglelabel.text = 'Peak angle: '+peakforceangleav.toFixed(2)
annolabel.text = annotation
lengthlabel.text = 'Length: '+length.toFixed(2)
efflengthlabel.text = 'Effective Length: '+efflength.toFixed(2)
// console.log(count);
// console.log(multilines['x'].length);
// console.log(multilines['y'].length);
// change DOM elements
document.getElementById("id_spm_min").value = minspm;
document.getElementById("id_spm_max").value = maxspm;
document.getElementById("id_dist_min").value = mindist;
document.getElementById("id_dist_max").value = maxdist;
document.getElementById("id_notes").value = annotation;
document.getElementById("id_work_min").value = minwork;
document.getElementById("id_work_max").value = maxwork;
// source.trigger('change');
source.change.emit();
sourceslipwash.change.emit()
sourcepoints.change.emit();
sourcemultiline.change.emit();
""")
annotation = TextInput(
width=140, title="Type your plot notes here", value="", name="annotation")
annotation.js_on_change('value', callback)
callback.args["annotation"] = annotation
slider_spm_min = Slider(width=140, start=15.0, end=55, value=15, step=.1,
title="Min SPM", name="min_spm_slider")
slider_spm_min.js_on_change('value', callback)
callback.args["minspm"] = slider_spm_min
slider_spm_max = Slider(width=140, start=15.0, end=55, value=55, step=.1,
title="Max SPM", name="max_spm_slider")
slider_spm_max.js_on_change('value', callback)
callback.args["maxspm"] = slider_spm_max
slider_work_min = Slider(width=140, start=0, end=1500, value=0, step=10,
title="Min Work per Stroke", name="min_work_slider")
slider_work_min.js_on_change('value', callback)
callback.args["minwork"] = slider_work_min
slider_work_max = Slider(width=140, start=0, end=1500, value=1500, step=10,
title="Max Work per Stroke", name="max_work_slider")
slider_work_max.js_on_change('value', callback)
callback.args["maxwork"] = slider_work_max
distmax = 100+100*int(rowdata['distance'].max()/100.)
slider_dist_min = Slider(width=140, start=0, end=distmax, value=0, step=50,
title="Min Distance", name="min_dist_slider")
slider_dist_min.js_on_change('value', callback)
callback.args["mindist"] = slider_dist_min
if dist_max == 0:
dist_max = distmax
slider_dist_max = Slider(width=140, start=0, end=distmax, value=distmax,
step=50,
title="Max Distance", name="max_dist_slider")
slider_dist_max.js_on_change('value', callback)
callback.args["maxdist"] = slider_dist_max
thesliders = layoutcolumn([annotation,
slider_spm_min,
slider_spm_max,
slider_dist_min,
slider_dist_max,
slider_work_min,
slider_work_max,
]
)
mylayout = layoutrow([thesliders, plot])
#mylayout.sizing_mode = 'stretch_both'
script, div = components(mylayout)
js_resources = INLINE.render_js()
css_resources = INLINE.render_css()
return [script, div, js_resources, css_resources]
def weightfromrecord(row,metricchoice): def weightfromrecord(row,metricchoice):
vv = row[metricchoice] vv = row[metricchoice]