Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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