70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
import math
|
|
|
|
from mathutils import fit_polynomial, PolynomialFunction
|
|
from plotutils import plot_line, plot_function
|
|
import org.apache.commons.math3.stat.correlation.PearsonsCorrelation as PearsonsCorrelation
|
|
|
|
if get_context().source == CommandSource.ui:
|
|
dx = "SINEG01-MSOL130:X"
|
|
dy = "SINEG01-MSOL130:Y"
|
|
interval = 0.20
|
|
window = 40
|
|
p = plot(None)[0]
|
|
|
|
for s in p.getAllSeries():
|
|
p.removeSeries(s)
|
|
|
|
p.addSeries(LinePlotSeries("Data"))
|
|
if isinstance(dx, basestring):
|
|
dx = Channel(dx) if get_device(dx) is None else get_device(dx)
|
|
if isinstance(dy, basestring):
|
|
dy = Channel(dy) if get_device(dy) is None else get_device(dy)
|
|
|
|
sd=p.getSeries(0)
|
|
sd.setLinesVisible(False)
|
|
sd.setPointSize(4)
|
|
|
|
if globals().has_key("marker")
|
|
p.removeMarker(marker)
|
|
|
|
marker=None
|
|
|
|
while(True):
|
|
#Sample and plot data
|
|
x=dx.read()
|
|
y=dy.read()
|
|
sd.appendData(x, y)
|
|
if len(sd.x) > window:
|
|
#Remove First Element
|
|
sd.token.remove(0)
|
|
ax = sd.x
|
|
ay = sd.y
|
|
if len(ax)>2:
|
|
x1, x2 = min(ax), max(ax)
|
|
res = (x2-x1)/100
|
|
if x1!=x2:
|
|
#Display correlation
|
|
corr= PearsonsCorrelation().correlation(to_array(ax,'d'), to_array(ay,'d'))
|
|
s = "Correlation=" + str(round(corr,4))
|
|
#print s
|
|
if marker is not None:
|
|
p.removeMarker(marker)
|
|
marker = p.addMarker(x2+res, p.AxisId.X, s, p.getBackground())
|
|
marker.setLabelPaint(Color.BLACK)
|
|
|
|
#Calculate, print and plot linear fit
|
|
pars_lin = (a0,a1) = fit_polynomial(ay, ax, 1)
|
|
#print "Fit lin a1:" , a1, " a0:",a0
|
|
y1 = poly(x1, pars_lin)
|
|
y2 = poly(x2, pars_lin)
|
|
plot_line(p, x1, y1, x2, y2, width = 2, color = Color.BLUE, name = "Fit Linear")
|
|
|
|
#Calculate, print and plot quadratic fit
|
|
pars_quad = (a0,a1,a2) = fit_polynomial(ay, ax, 2)
|
|
#print "Fit quad a2:" , a2, "a1:" , a1, " a0:",a0
|
|
fitted_quad_function = PolynomialFunction(pars_quad)
|
|
ax = frange(x1, x2, res, True)
|
|
plot_function(p, fitted_quad_function, "Fit Quadratic", ax, color=Color.GREEN)
|
|
|
|
time.sleep(interval)
|
|
|