Merge branch 'release/v9.64'
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user