def make_sequential_flowchart(clsList, inputData=None): nNodes = len(clsList) nodelib = fclib.NodeLibrary() for cls in clsList: cls.debug = True nodelib.addNodeType(cls, [('Basic')]) fc = Flowchart(terminals={ 'dataIn': { 'io': 'in' }, 'dataOut': { 'io': 'out' } }) fc.library = nodelib nodes = [] for cls in clsList: nodes.append(fc.createNode(cls.nodeName)) fc.connectTerminals(fc['dataIn'], nodes[0]['dataIn']) for i in range(nNodes - 1): fc.connectTerminals(nodes[i]['dataOut'], nodes[i + 1]['dataIn']) fc.connectTerminals(nodes[nNodes - 1]['dataOut'], fc['dataOut']) if inputData is not None: fc.setInput(dataIn=inputData) return nodes, fc
def autoplot(makeUI: bool = True, log: bool = False, inputData: Union[None, DataDictBase] = None): """ Sets up a simple flowchart consisting of a data selector, an xy-axes selector, and creates a GUI together with an autoplot widget. returns the flowchart object and the dialog widget """ nodelib = fclib.NodeLibrary() nodelib.addNodeType(DataSelector, [('Basic')]) nodelib.addNodeType(DataGridder, [('Basic')]) nodelib.addNodeType(XYAxesSelector, [('Basic')]) nodelib.addNodeType(PlotNode, [('Plot')]) fc = Flowchart(terminals={ 'dataIn': { 'io': 'in' }, 'dataOut': { 'io': 'out' } }) fc.library = nodelib datasel = fc.createNode('DataSelector') grid = fc.createNode('Gridder') xysel = fc.createNode('XYAxesSelector') plot = fc.createNode('Plot') fc.connectTerminals(fc['dataIn'], datasel['dataIn']) fc.connectTerminals(datasel['dataOut'], grid['dataIn']) fc.connectTerminals(grid['dataOut'], xysel['dataIn']) fc.connectTerminals(xysel['dataOut'], fc['dataOut']) fc.connectTerminals(xysel['dataOut'], plot['dataIn']) # Setting up the GUI window area = DockArea() layout = QtGui.QVBoxLayout() layout.addWidget(area) win = QtGui.QDialog() win.setLayout(layout) win.setWindowTitle('Plottr | Autoplot') # data selector dataselDock = Dock('Data Selector', size=(250, 100)) dataselDock.addWidget(datasel.ui) area.addDock(dataselDock) # grid gridDock = Dock('Grid', size=(250, 80)) gridDock.addWidget(grid.ui) area.addDock(gridDock, 'bottom') # xy selector xyselDock = Dock('XY Axes Selector', size=(250, 100)) xyselDock.addWidget(xysel.ui) area.addDock(xyselDock, 'bottom') # log if log: logDock = Dock('Log', size=(250, 100)) logDock.addWidget(plottrlog.setupLogging(makeDialog=False)) area.addDock(logDock, 'bottom', xyselDock) # plot widget plotWidget = AutoPlot() plot.setPlotWidget(plotWidget) plotDock = Dock('Plot', size=(500, 300)) plotDock.addWidget(plotWidget) area.addDock(plotDock, 'right') win.show() if inputData is not None: fc.setInput(dataIn=inputData) return fc, win
def autoplotQcodesDataset( makeUI: bool = True, log: bool = False, pathAndId: Union[Tuple[str, int], None] = None ) -> (Flowchart, QCAutoPlotMainWindow): """ Sets up a simple flowchart consisting of a data selector, an xy-axes selector, and creates a GUI together with an autoplot widget. returns the flowchart object and the mainwindow widget """ nodelib = fclib.NodeLibrary() nodelib.addNodeType(QCodesDSLoader, [('Input')]) nodelib.addNodeType(DataSelector, [('Basic')]) nodelib.addNodeType(DataGridder, [('Basic')]) nodelib.addNodeType(XYAxesSelector, [('Basic')]) nodelib.addNodeType(PlotNode, [('Plot')]) fc = Flowchart(terminals={ 'dataIn': { 'io': 'in' }, 'dataOut': { 'io': 'out' } }) fc.library = nodelib loader = fc.createNode('QCodesDSLoader') datasel = fc.createNode('DataSelector') grid = fc.createNode('Gridder') xysel = fc.createNode('XYAxesSelector') plot = fc.createNode('Plot') fc.connectTerminals(fc['dataIn'], loader['dataIn']) fc.connectTerminals(loader['dataOut'], datasel['dataIn']) fc.connectTerminals(datasel['dataOut'], grid['dataIn']) fc.connectTerminals(grid['dataOut'], xysel['dataIn']) fc.connectTerminals(xysel['dataOut'], fc['dataOut']) fc.connectTerminals(xysel['dataOut'], plot['dataIn']) ### Setting up the GUI window ### Docks area = DockArea() # data selector dataselDock = Dock('Data Selector', size=(250, 100)) dataselDock.addWidget(datasel.ui) area.addDock(dataselDock) # grid gridDock = Dock('Grid', size=(250, 80)) gridDock.addWidget(grid.ui) area.addDock(gridDock, 'bottom') # xy selector xyselDock = Dock('XY Axes Selector', size=(250, 100)) xyselDock.addWidget(xysel.ui) area.addDock(xyselDock, 'bottom') # log if log: logDock = Dock('Log', size=(250, 100)) logDock.addWidget(plottrlog.setupLogging(makeDialog=False)) area.addDock(logDock, 'bottom', xyselDock) # plot widget plotWidget = AutoPlot() plot.setPlotWidget(plotWidget) plotDock = Dock('Plot', size=(500, 300)) plotDock.addWidget(plotWidget) area.addDock(plotDock, 'right') win = QCAutoPlotMainWindow(fc=fc, pathAndId=pathAndId) win.setCentralWidget(area) win.show() return fc, win