2012-03-02 02:55:32 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2012-04-05 02:20:21 +00:00
|
|
|
"""
|
|
|
|
This example demonstrates a very basic use of flowcharts: filter data,
|
|
|
|
displaying both the input and output of the filter. The behavior of
|
|
|
|
he filter can be reprogrammed by the user.
|
|
|
|
|
|
|
|
Basic steps are:
|
|
|
|
- create a flowchart and two plots
|
|
|
|
- input noisy data to the flowchart
|
|
|
|
- flowchart connects data to the first plot, where it is displayed
|
|
|
|
- add a gaussian filter to lowpass the data, then display it in the second plot.
|
|
|
|
"""
|
2012-04-05 01:03:31 +00:00
|
|
|
import initExample ## Add path to library (just for examples; you do not need this)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
from pyqtgraph.flowchart import Flowchart
|
2012-04-05 01:59:37 +00:00
|
|
|
from pyqtgraph.Qt import QtGui, QtCore
|
2012-04-05 01:03:31 +00:00
|
|
|
import pyqtgraph as pg
|
|
|
|
import numpy as np
|
2012-03-02 02:55:32 +00:00
|
|
|
|
|
|
|
app = QtGui.QApplication([])
|
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
|
|
|
|
win = QtGui.QMainWindow()
|
|
|
|
cw = QtGui.QWidget()
|
|
|
|
win.setCentralWidget(cw)
|
|
|
|
layout = QtGui.QGridLayout()
|
|
|
|
cw.setLayout(layout)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
|
|
|
fc = Flowchart(terminals={
|
|
|
|
'dataIn': {'io': 'in'},
|
|
|
|
'dataOut': {'io': 'out'}
|
|
|
|
})
|
|
|
|
w = fc.widget()
|
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
layout.addWidget(fc.widget(), 0, 0, 2, 1)
|
|
|
|
|
|
|
|
pw1 = pg.PlotWidget()
|
|
|
|
pw2 = pg.PlotWidget()
|
|
|
|
layout.addWidget(pw1, 0, 1)
|
|
|
|
layout.addWidget(pw2, 1, 1)
|
|
|
|
|
|
|
|
win.show()
|
|
|
|
|
|
|
|
|
|
|
|
data = np.random.normal(size=1000)
|
|
|
|
data[200:300] += 1
|
|
|
|
data += np.sin(np.linspace(0, 100, 1000))
|
2012-03-02 02:55:32 +00:00
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
fc.setInput(dataIn=data)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
pw1Node = fc.createNode('PlotWidget', pos=(0, -150))
|
|
|
|
pw1Node.setPlot(pw1)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
pw2Node = fc.createNode('PlotWidget', pos=(150, -150))
|
|
|
|
pw2Node.setPlot(pw2)
|
|
|
|
|
|
|
|
fNode = fc.createNode('GaussianFilter', pos=(0, 0))
|
2012-04-05 02:20:21 +00:00
|
|
|
fNode.ctrls['sigma'].setValue(5)
|
2012-04-05 01:03:31 +00:00
|
|
|
fc.connectTerminals(fc.dataIn, fNode.In)
|
|
|
|
fc.connectTerminals(fc.dataIn, pw1Node.In)
|
|
|
|
fc.connectTerminals(fNode.Out, pw2Node.In)
|
|
|
|
fc.connectTerminals(fNode.Out, fc.dataOut)
|
|
|
|
|
|
|
|
|
|
|
|
#n1 = fc.createNode('Add', pos=(0,-80))
|
|
|
|
#n2 = fc.createNode('Subtract', pos=(140,-10))
|
|
|
|
#n3 = fc.createNode('Abs', pos=(0, 80))
|
|
|
|
#n4 = fc.createNode('Add', pos=(140,100))
|
|
|
|
|
|
|
|
#fc.connectTerminals(fc.dataIn, n1.A)
|
|
|
|
#fc.connectTerminals(fc.dataIn, n1.B)
|
|
|
|
#fc.connectTerminals(fc.dataIn, n2.A)
|
|
|
|
#fc.connectTerminals(n1.Out, n4.A)
|
|
|
|
#fc.connectTerminals(n1.Out, n2.B)
|
|
|
|
#fc.connectTerminals(n2.Out, n3.In)
|
|
|
|
#fc.connectTerminals(n3.Out, n4.B)
|
|
|
|
#fc.connectTerminals(n4.Out, fc.dataOut)
|
|
|
|
|
|
|
|
|
|
|
|
#def process(**kargs):
|
|
|
|
#return fc.process(**kargs)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
#print process(dataIn=7)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
#fc.setInput(dataIn=3)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
#s = fc.saveState()
|
|
|
|
#fc.clear()
|
2012-03-02 02:55:32 +00:00
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
#fc.restoreState(s)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
#fc.setInput(dataIn=3)
|
2012-03-02 02:55:32 +00:00
|
|
|
|
|
|
|
|
2012-04-05 01:03:31 +00:00
|
|
|
## Start Qt event loop unless running in interactive mode or using pyside.
|
|
|
|
import sys
|
|
|
|
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
|
2012-03-02 02:55:32 +00:00
|
|
|
app.exec_()
|