Merge branch 'release/v9.56'
This commit is contained in:
@@ -457,7 +457,7 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
|||||||
)
|
)
|
||||||
|
|
||||||
plot = Figure(tools=TOOLS,
|
plot = Figure(tools=TOOLS,
|
||||||
toolbar_sticky=False)
|
toolbar_sticky=False,toolbar_location="above")
|
||||||
|
|
||||||
# add watermark
|
# add watermark
|
||||||
watermarkurl = "/static/img/logo7.png"
|
watermarkurl = "/static/img/logo7.png"
|
||||||
@@ -493,49 +493,49 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
|||||||
|
|
||||||
plot.add_layout(avf)
|
plot.add_layout(avf)
|
||||||
|
|
||||||
peakflabel = Label(x=455,y=530,x_units='screen',y_units='screen',
|
peakflabel = Label(x=355,y=430,x_units='screen',y_units='screen',
|
||||||
text="Fpeak: {peakforceav:6.2f}".format(peakforceav=peakforceav),
|
text="Fpeak: {peakforceav:6.2f}".format(peakforceav=peakforceav),
|
||||||
background_fill_alpha=.7,
|
background_fill_alpha=.7,
|
||||||
background_fill_color='white',
|
background_fill_color='white',
|
||||||
text_color='blue',
|
text_color='blue',
|
||||||
)
|
)
|
||||||
|
|
||||||
avflabel = Label(x=465,y=500,x_units='screen',y_units='screen',
|
avflabel = Label(x=365,y=400,x_units='screen',y_units='screen',
|
||||||
text="Favg: {averageforceav:6.2f}".format(averageforceav=averageforceav),
|
text="Favg: {averageforceav:6.2f}".format(averageforceav=averageforceav),
|
||||||
background_fill_alpha=.7,
|
background_fill_alpha=.7,
|
||||||
background_fill_color='white',
|
background_fill_color='white',
|
||||||
text_color='blue',
|
text_color='blue',
|
||||||
)
|
)
|
||||||
|
|
||||||
catchlabel = Label(x=460,y=470,x_units='screen',y_units='screen',
|
catchlabel = Label(x=360,y=370,x_units='screen',y_units='screen',
|
||||||
text="Catch: {catchav:6.2f}".format(catchav=catchav),
|
text="Catch: {catchav:6.2f}".format(catchav=catchav),
|
||||||
background_fill_alpha=0.7,
|
background_fill_alpha=0.7,
|
||||||
background_fill_color='white',
|
background_fill_color='white',
|
||||||
text_color='red',
|
text_color='red',
|
||||||
)
|
)
|
||||||
|
|
||||||
peakforceanglelabel = Label(x=420,y=440,x_units='screen',y_units='screen',
|
peakforceanglelabel = Label(x=320,y=340,x_units='screen',y_units='screen',
|
||||||
text="Peak angle: {peakforceangleav:6.2f}".format(peakforceangleav=peakforceangleav),
|
text="Peak angle: {peakforceangleav:6.2f}".format(peakforceangleav=peakforceangleav),
|
||||||
background_fill_alpha=0.7,
|
background_fill_alpha=0.7,
|
||||||
background_fill_color='white',
|
background_fill_color='white',
|
||||||
text_color='red',
|
text_color='red',
|
||||||
)
|
)
|
||||||
|
|
||||||
finishlabel = Label(x=455,y=410,x_units='screen',y_units='screen',
|
finishlabel = Label(x=355,y=310,x_units='screen',y_units='screen',
|
||||||
text="Finish: {finishav:6.2f}".format(finishav=finishav),
|
text="Finish: {finishav:6.2f}".format(finishav=finishav),
|
||||||
background_fill_alpha=0.7,
|
background_fill_alpha=0.7,
|
||||||
background_fill_color='white',
|
background_fill_color='white',
|
||||||
text_color='red',
|
text_color='red',
|
||||||
)
|
)
|
||||||
|
|
||||||
sliplabel = Label(x=470,y=380,x_units='screen',y_units='screen',
|
sliplabel = Label(x=370,y=280,x_units='screen',y_units='screen',
|
||||||
text="Slip: {slipav:6.2f}".format(slipav=slipav),
|
text="Slip: {slipav:6.2f}".format(slipav=slipav),
|
||||||
background_fill_alpha=0.7,
|
background_fill_alpha=0.7,
|
||||||
background_fill_color='white',
|
background_fill_color='white',
|
||||||
text_color='red',
|
text_color='red',
|
||||||
)
|
)
|
||||||
|
|
||||||
washlabel = Label(x=460,y=350,x_units='screen',y_units='screen',
|
washlabel = Label(x=360,y=250,x_units='screen',y_units='screen',
|
||||||
text="Wash: {washav:6.2f}".format(washav=washav),
|
text="Wash: {washav:6.2f}".format(washav=washav),
|
||||||
background_fill_alpha=0.7,
|
background_fill_alpha=0.7,
|
||||||
background_fill_color='white',
|
background_fill_color='white',
|
||||||
@@ -646,7 +646,8 @@ def interactive_forcecurve(theworkouts,workstrokesonly=False):
|
|||||||
peakflabel.text = 'Fpeak: '+peakforceav.toFixed(2)
|
peakflabel.text = 'Fpeak: '+peakforceav.toFixed(2)
|
||||||
peakforceanglelabel.text = 'Peak angle: '+peakforceangleav.toFixed(2)
|
peakforceanglelabel.text = 'Peak angle: '+peakforceangleav.toFixed(2)
|
||||||
|
|
||||||
source.trigger('change');
|
// source.trigger('change');
|
||||||
|
source.change.emit();
|
||||||
""")
|
""")
|
||||||
|
|
||||||
slider_spm_min = Slider(start=15.0, end=55,value=15.0, step=.1,
|
slider_spm_min = Slider(start=15.0, end=55,value=15.0, step=.1,
|
||||||
@@ -2813,7 +2814,6 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
if yparam2 != 'pace' and yparam2 != 'time':
|
if yparam2 != 'pace' and yparam2 != 'time':
|
||||||
plot.add_layout(y2label)
|
plot.add_layout(y2label)
|
||||||
|
|
||||||
|
|
||||||
callback = CustomJS(args = dict(source=source,source2=source2,
|
callback = CustomJS(args = dict(source=source,source2=source2,
|
||||||
x1means=x1means,
|
x1means=x1means,
|
||||||
y1means=y1means,
|
y1means=y1means,
|
||||||
@@ -2827,11 +2827,16 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
var y1 = data['y1']
|
var y1 = data['y1']
|
||||||
var y2 = data['y2']
|
var y2 = data['y2']
|
||||||
var spm1 = data['spm']
|
var spm1 = data['spm']
|
||||||
|
|
||||||
|
var index1 = data['index']
|
||||||
|
|
||||||
var distance1 = data['distance']
|
var distance1 = data['distance']
|
||||||
|
var power1 = data['power']
|
||||||
var driveenergy1 = data['driveenergy']
|
var driveenergy1 = data['driveenergy']
|
||||||
var xname = data['xname'][0]
|
var xname = data['xname'][0]
|
||||||
var yname1 = data['yname1'][0]
|
var yname1 = data['yname1'][0]
|
||||||
var yname2 = data['yname2'][0]
|
var yname2 = data['yname2'][0]
|
||||||
|
var workoutid1 = data['workoutid'][0]
|
||||||
|
|
||||||
var minspm = minspm.value
|
var minspm = minspm.value
|
||||||
var maxspm = maxspm.value
|
var maxspm = maxspm.value
|
||||||
@@ -2846,14 +2851,18 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
data2['x1'] = []
|
data2['x1'] = []
|
||||||
data2['y1'] = []
|
data2['y1'] = []
|
||||||
data2['y2'] = []
|
data2['y2'] = []
|
||||||
data2['spm'] = []
|
data2['index'] = []
|
||||||
data2['distance'] = []
|
data2['distance'] = []
|
||||||
|
data2['power'] = []
|
||||||
data2['x1mean'] = []
|
data2['x1mean'] = []
|
||||||
data2['y1mean'] = []
|
data2['y1mean'] = []
|
||||||
data2['y2mean'] = []
|
data2['y2mean'] = []
|
||||||
data2['xvals'] = []
|
data2['driveenergy'] = []
|
||||||
data2['y1vals'] = []
|
data2['workoutid'] = []
|
||||||
data2['y2vals'] = []
|
data2['xname'] = []
|
||||||
|
data2['yname1'] = []
|
||||||
|
data2['yname2'] = []
|
||||||
|
data2['spm'] = []
|
||||||
|
|
||||||
for (i=0; i<x1.length; i++) {
|
for (i=0; i<x1.length; i++) {
|
||||||
if (spm1[i]>=minspm && spm1[i]<=maxspm) {
|
if (spm1[i]>=minspm && spm1[i]<=maxspm) {
|
||||||
@@ -2863,7 +2872,14 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
data2['y1'].push(y1[i])
|
data2['y1'].push(y1[i])
|
||||||
data2['y2'].push(y2[i])
|
data2['y2'].push(y2[i])
|
||||||
data2['spm'].push(spm1[i])
|
data2['spm'].push(spm1[i])
|
||||||
|
data2['index'].push(index1[i])
|
||||||
|
data2['driveenergy'].push(driveenergy1[i])
|
||||||
data2['distance'].push(distance1[i])
|
data2['distance'].push(distance1[i])
|
||||||
|
data2['power'].push(power1[i])
|
||||||
|
data2['workoutid'].push(workoutid1)
|
||||||
|
data2['xname'].push(xname)
|
||||||
|
data2['yname1'].push(yname1)
|
||||||
|
data2['yname2'].push(yname2)
|
||||||
|
|
||||||
xm += x1[i]
|
xm += x1[i]
|
||||||
ym1 += y1[i]
|
ym1 += y1[i]
|
||||||
@@ -2873,13 +2889,17 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
xm /= data2['x1'].length
|
xm /= data2['x1'].length
|
||||||
ym1 /= data2['x1'].length
|
ym1 /= data2['x1'].length
|
||||||
ym2 /= data2['x1'].length
|
ym2 /= data2['x1'].length
|
||||||
|
|
||||||
data2['x1mean'] = [xm,xm]
|
for (i=0; i<data2['x1'].length; i++) {
|
||||||
data2['y1mean'] = [ym1,ym1]
|
data2['x1mean'].push(xm)
|
||||||
data2['y2mean'] = [ym2,ym2]
|
data2['y1mean'].push(ym1)
|
||||||
|
data2['y2mean'].push(ym2)
|
||||||
|
}
|
||||||
|
|
||||||
x1means.location = xm
|
x1means.location = xm
|
||||||
y1means.location = ym1
|
y1means.location = ym1
|
||||||
y2means.location = ym2
|
y2means.location = ym2
|
||||||
@@ -2887,7 +2907,7 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
y2label.text = yname2+': '+(ym2).toFixed(2)
|
y2label.text = yname2+': '+(ym2).toFixed(2)
|
||||||
xlabel.text = xname+': '+(xm).toFixed(2)
|
xlabel.text = xname+': '+(xm).toFixed(2)
|
||||||
|
|
||||||
source2.trigger('change');
|
source2.change.emit();
|
||||||
""")
|
""")
|
||||||
|
|
||||||
slider_spm_min = Slider(start=15.0, end=55,value=15.0, step=.1,
|
slider_spm_min = Slider(start=15.0, end=55,value=15.0, step=.1,
|
||||||
@@ -3353,6 +3373,10 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
|
|
||||||
hover.mode = 'mouse'
|
hover.mode = 'mouse'
|
||||||
|
|
||||||
|
x1meanline = [rowdata[xparam].mean(),rowdata[xparam].mean()]
|
||||||
|
y1meanline = [rowdata[yparam1].mean(),rowdata[yparam1].mean()]
|
||||||
|
y2meanline = [rowdata[yparam2].mean(),rowdata[yparam2].mean()]
|
||||||
|
|
||||||
|
|
||||||
callback = CustomJS(args = dict(source=source,source2=source2,
|
callback = CustomJS(args = dict(source=source,source2=source2,
|
||||||
x1means=x1means,
|
x1means=x1means,
|
||||||
@@ -3370,6 +3394,8 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
var y2 = data['y2']
|
var y2 = data['y2']
|
||||||
var spm1 = data['spm']
|
var spm1 = data['spm']
|
||||||
var time1 = data['time']
|
var time1 = data['time']
|
||||||
|
var ftime1 = data['ftime']
|
||||||
|
var index1 = data['index']
|
||||||
var pace1 = data['pace']
|
var pace1 = data['pace']
|
||||||
var hr1 = data['hr']
|
var hr1 = data['hr']
|
||||||
var fpace1 = data['fpace']
|
var fpace1 = data['fpace']
|
||||||
@@ -3379,6 +3405,9 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
var xname = data['xname'][0]
|
var xname = data['xname'][0]
|
||||||
var yname1 = data['yname1'][0]
|
var yname1 = data['yname1'][0]
|
||||||
var yname2 = data['yname2'][0]
|
var yname2 = data['yname2'][0]
|
||||||
|
var workoutid1 = data['workoutid'][0]
|
||||||
|
var workoutstate1 = data['workoutstate'][0]
|
||||||
|
|
||||||
|
|
||||||
var annotation = annotation.value
|
var annotation = annotation.value
|
||||||
var minspm = minspm.value
|
var minspm = minspm.value
|
||||||
@@ -3396,17 +3425,23 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
data2['y2'] = []
|
data2['y2'] = []
|
||||||
data2['spm'] = []
|
data2['spm'] = []
|
||||||
data2['time'] = []
|
data2['time'] = []
|
||||||
|
data2['ftime'] = []
|
||||||
data2['pace'] = []
|
data2['pace'] = []
|
||||||
data2['hr'] = []
|
data2['hr'] = []
|
||||||
data2['fpace'] = []
|
data2['fpace'] = []
|
||||||
|
data2['index'] = []
|
||||||
data2['distance'] = []
|
data2['distance'] = []
|
||||||
data2['power'] = []
|
data2['power'] = []
|
||||||
data2['x1mean'] = []
|
data2['x1mean'] = []
|
||||||
data2['y1mean'] = []
|
data2['y1mean'] = []
|
||||||
data2['y2mean'] = []
|
data2['y2mean'] = []
|
||||||
data2['xvals'] = []
|
data2['driveenergy'] = []
|
||||||
data2['y1vals'] = []
|
data2['workoutid'] = []
|
||||||
data2['y2vals'] = []
|
data2['workoutstate'] = []
|
||||||
|
data2['xname'] = []
|
||||||
|
data2['yname1'] = []
|
||||||
|
data2['yname2'] = []
|
||||||
|
|
||||||
|
|
||||||
for (i=0; i<x1.length; i++) {
|
for (i=0; i<x1.length; i++) {
|
||||||
if (spm1[i]>=minspm && spm1[i]<=maxspm) {
|
if (spm1[i]>=minspm && spm1[i]<=maxspm) {
|
||||||
@@ -3417,11 +3452,20 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
data2['y2'].push(y2[i])
|
data2['y2'].push(y2[i])
|
||||||
data2['spm'].push(spm1[i])
|
data2['spm'].push(spm1[i])
|
||||||
data2['time'].push(time1[i])
|
data2['time'].push(time1[i])
|
||||||
|
data2['index'].push(index1[i])
|
||||||
|
data2['ftime'].push(ftime1[i])
|
||||||
data2['fpace'].push(fpace1[i])
|
data2['fpace'].push(fpace1[i])
|
||||||
|
data2['driveenergy'].push(driveenergy1[i])
|
||||||
data2['pace'].push(pace1[i])
|
data2['pace'].push(pace1[i])
|
||||||
data2['hr'].push(hr1[i])
|
data2['hr'].push(hr1[i])
|
||||||
data2['distance'].push(distance1[i])
|
data2['distance'].push(distance1[i])
|
||||||
data2['power'].push(power1[i])
|
data2['power'].push(power1[i])
|
||||||
|
data2['workoutid'].push(workoutid1)
|
||||||
|
data2['workoutstate'].push(workoutstate1)
|
||||||
|
data2['xname'].push(xname)
|
||||||
|
data2['yname1'].push(yname1)
|
||||||
|
data2['yname2'].push(yname2)
|
||||||
|
|
||||||
|
|
||||||
xm += x1[i]
|
xm += x1[i]
|
||||||
ym1 += y1[i]
|
ym1 += y1[i]
|
||||||
@@ -3435,9 +3479,14 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
ym1 /= data2['x1'].length
|
ym1 /= data2['x1'].length
|
||||||
ym2 /= data2['x1'].length
|
ym2 /= data2['x1'].length
|
||||||
|
|
||||||
data2['x1mean'] = [xm,xm]
|
for (i=0; i<data2['x1'].length; i++) {
|
||||||
data2['y1mean'] = [ym1,ym1]
|
data2['x1mean'].push(xm)
|
||||||
data2['y2mean'] = [ym2,ym2]
|
data2['y1mean'].push(ym1)
|
||||||
|
data2['y2mean'].push(ym2)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
x1means.location = xm
|
x1means.location = xm
|
||||||
y1means.location = ym1
|
y1means.location = ym1
|
||||||
y2means.location = ym2
|
y2means.location = ym2
|
||||||
@@ -3446,7 +3495,7 @@ def interactive_flex_chart2(id=0,promember=0,
|
|||||||
xlabel.text = xname+': '+xm.toFixed(2)
|
xlabel.text = xname+': '+xm.toFixed(2)
|
||||||
annolabel.text = annotation
|
annolabel.text = annotation
|
||||||
|
|
||||||
source2.trigger('change');
|
source2.change.emit();
|
||||||
""")
|
""")
|
||||||
|
|
||||||
annotation = TextInput(title="Type your plot notes here", value="",
|
annotation = TextInput(title="Type your plot notes here", value="",
|
||||||
@@ -3653,7 +3702,7 @@ def thumbnail_flex_chart(rowdata,id=0,promember=0,
|
|||||||
else:
|
else:
|
||||||
rowdata['yname2'] = axlabels[yparam1]
|
rowdata['yname2'] = axlabels[yparam1]
|
||||||
|
|
||||||
|
|
||||||
# prepare data
|
# prepare data
|
||||||
source = ColumnDataSource(
|
source = ColumnDataSource(
|
||||||
rowdata
|
rowdata
|
||||||
|
|||||||
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
Reference in New Issue
Block a user