diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index eb06995d..e725c7c4 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -408,55 +408,85 @@ def interactive_forcecurve(theworkouts,workstrokesonly=True,plottype='scatter'): # quick linear regression # peakforce = slope*peakforceangle + intercept - slope, intercept, r,p,stderr = linregress(rowdata['peakforceangle'],rowdata['peakforce']) + try: + slope, intercept, r,p,stderr = linregress(rowdata['peakforceangle'],rowdata['peakforce']) + except KeyError: + slope = 0 + intercept = 0 - covariancematrix = np.cov(rowdata['peakforceangle'],y=rowdata['peakforce']) - eig_vals, eig_vecs = np.linalg.eig(covariancematrix) + 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() + a = rowdata['peakforceangle']-rowdata['peakforceangle'].median() + F = rowdata['peakforce']-rowdata['peakforce'].median() - Rinv = eig_vecs - R = np.linalg.inv(Rinv) + 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 + 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) + 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() + 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() + 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: + 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 @@ -578,8 +608,6 @@ def interactive_forcecurve(theworkouts,workstrokesonly=True,plottype='scatter'): ] - hull2575 = ConvexHull(points2575) - angles2575 = [] forces2575 = [] @@ -711,21 +739,25 @@ def interactive_forcecurve(theworkouts,workstrokesonly=True,plottype='scatter'): multilinedatax = [] multilinedatay = [] for i in range(len(rowdata)): - 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] + 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] + y = [ + 0, + thresholdforce, + rowdata['peakforce'].values[i], + thresholdforce, + 0] + except KeyError: + x = [0,0] + y = [0,0] multilinedatax.append(x) multilinedatay.append(y)