added effective drive length
This commit is contained in:
@@ -51,66 +51,36 @@ import stravastuff
|
||||
from rowers.dataprep import rdata
|
||||
import rowers.dataprep as dataprep
|
||||
|
||||
axlabels = {
|
||||
'time': 'Time',
|
||||
'distance': 'Distance (m)',
|
||||
'cumdist': 'Cumulative Distance (m)',
|
||||
'hr': 'Heart Rate (bpm)',
|
||||
'spm': 'Stroke Rate (spm)',
|
||||
'pace': 'Pace (/500m)',
|
||||
'power': 'Power (Watt)',
|
||||
'averageforce': 'Average Drive Force (lbs)',
|
||||
'drivelength': 'Drive Length (m)',
|
||||
'peakforce': 'Peak Drive Force (lbs)',
|
||||
'forceratio': 'Average/Peak Drive Force Ratio',
|
||||
'driveenergy': 'Work per Stroke (J)',
|
||||
'drivespeed': 'Drive Speed (m/s)',
|
||||
'slip': 'Slip (degrees)',
|
||||
'catch': 'Catch (degrees)',
|
||||
'finish': 'Finish (degrees)',
|
||||
'wash': 'Wash (degrees)',
|
||||
'peakforceangle': 'Peak Force Angle (degrees)',
|
||||
'rhythm': 'Stroke Rhythm (%)',
|
||||
'None': '',
|
||||
}
|
||||
axes = (
|
||||
('time','Time',0,1e5,'basic'),
|
||||
('distance', 'Distance (m)',0,1e5,'basic'),
|
||||
('cumdist', 'Cumulative Distance (m)',0,1e5,'basic'),
|
||||
('hr','Heart Rate (bpm)',100,200,'basic'),
|
||||
('spm', 'Stroke Rate (spm)',15,45,'basic'),
|
||||
('pace', 'Pace (/500m)',1.0e3*210,1.0e3*75,'basic'),
|
||||
('power', 'Power (Watt)',0,600,'basic'),
|
||||
('averageforce', 'Average Drive Force (lbs)',0,200,'pro'),
|
||||
('drivelength', 'Drive Length (m)',0.5,2.0,'pro'),
|
||||
('peakforce', 'Peak Drive Force (lbs)',0,400,'pro'),
|
||||
('forceratio', 'Average/Peak Force Ratio',0,1,'pro'),
|
||||
('driveenergy', 'Work per Stroke (J)',0,1000,'pro'),
|
||||
('drivespeed', 'Drive Speed (m/s)',0,4,'pro'),
|
||||
('slip', 'Slip (degrees)',0,20,'pro'),
|
||||
('catch', 'Catch (degrees)',-40,-75,'pro'),
|
||||
('finish', 'Finish (degrees)',20,55,'pro'),
|
||||
('wash', 'Wash (degrees)',0,30,'pro'),
|
||||
('peakforceangle', 'Peak Force Angle (degrees)',-20,20,'pro'),
|
||||
('totalangle', 'Drive Length (deg)',40,140,'pro'),
|
||||
('effectiveangle', 'Effective Drive Length (deg)',40,140,'pro'),
|
||||
('rhythm', 'Stroke Rhythm (%)',20,55,'pro'),
|
||||
('None', 'None',0,1,'basic'),
|
||||
)
|
||||
|
||||
axlabels = {ax[0]:ax[1] for ax in axes}
|
||||
|
||||
yaxminima = {
|
||||
'hr':100,
|
||||
'spm':15,
|
||||
'pace': 1.0e3*210,
|
||||
'power': 0,
|
||||
'averageforce': 0,
|
||||
'peakforce': 0,
|
||||
'forceratio':0,
|
||||
'drivelength':0.5,
|
||||
'driveenergy': 0,
|
||||
'drivespeed': 0,
|
||||
'slip': 0,
|
||||
'catch': -40,
|
||||
'finish': 20,
|
||||
'wash': 0,
|
||||
'peakforceangle': -20,
|
||||
'rhythm':20,
|
||||
}
|
||||
yaxminima = {ax[0]:ax[2] for ax in axes}
|
||||
|
||||
yaxmaxima = {
|
||||
'hr':200,
|
||||
'spm':45,
|
||||
'pace': 1.0e3*75,
|
||||
'power': 600,
|
||||
'averageforce':200,
|
||||
'peakforce':400,
|
||||
'forceratio':1,
|
||||
'drivelength':2.0,
|
||||
'driveenergy': 1000,
|
||||
'drivespeed':4,
|
||||
'slip': 15,
|
||||
'catch': -75,
|
||||
'finish': 55,
|
||||
'wash': 30,
|
||||
'peakforceangle': 20,
|
||||
'rhythm':55,
|
||||
}
|
||||
yaxmaxima = {ax[0]:ax[3] for ax in axes}
|
||||
|
||||
def tailwind(bearing,vwind,winddir):
|
||||
""" Calculates head-on head/tailwind in direction of rowing
|
||||
@@ -1731,12 +1701,15 @@ def interactive_multiple_compare_chart(ids,xparam,yparam,plottype='line',
|
||||
group = datadf[datadf['workoutid']==int(id)].copy()
|
||||
group.sort_values(by='time',ascending=True,inplace=True)
|
||||
group['x'] = group[xparam]
|
||||
group['y'] = group[yparam]
|
||||
try:
|
||||
group['y'] = group[yparam]
|
||||
except KeyError:
|
||||
group['y'] = 0.0*group['x']
|
||||
|
||||
ymean = group['y'].mean()
|
||||
ylabel = Label(x=100,y=70+20*cntr,
|
||||
x_units='screen',y_units='screen',
|
||||
text=yparam+": {ymean:6.2f}".format(ymean=ymean),
|
||||
text=axlabels[yparam]+": {ymean:6.2f}".format(ymean=ymean),
|
||||
background_fill_alpha=.7,
|
||||
text_color=color,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user