Beispiel #1
0
def test_RectScanParameter():
    p = RectScanParameter()
    p.system.defaultState['sampleRate'][0] = 1e4
    p.system.defaultState['sampleRate'][2] = 'fixed'
    p.system.defaultState['downsample'][0] = 1
    p.system.defaultState['downsample'][2] = 'fixed'
    p.system.defaultState['p0'][0] = np.array([0, 0])
    p.system.defaultState['p0'][2] = 'fixed'
    p.system.defaultState['p1'][0] = np.array([150e-6, 0])
    p.system.defaultState['p1'][2] = 'fixed'
    p.system.defaultState['p2'][0] = np.array([0, -100e-6])
    p.system.defaultState['p2'][2] = 'fixed'
    p.system.defaultState['numFrames'][0] = 1
    p.updateSystem()
    w = ParameterTree()
    w.setParameters(p)
    w.show()
    return p, w
Beispiel #2
0
    def __init__(self, *args):
        AnalysisModule.__init__(self, *args)
        self.layout = Qt.QGridLayout()
        self.setLayout(self.layout)
        self.splitter = Qt.QSplitter()
        self.layout.addWidget(self.splitter)
        self.ptree = ParameterTree()
        self.splitter.addWidget(self.ptree)
        self.imageView = pg.ImageView()
        self.splitter.addWidget(self.imageView)
        
        self.params = Parameter(name='imager', children=[
            dict(name='scanner', type='interface', interfaceTypes=['scanner']),
            dict(name='detectors', type='group', addText="Add detector.."),
            dict(name='decomb', type='float', readonly=False, value=20e-6, suffix='s', siPrefix=True, bounds=[0, 1e-3], step=1e-6, decimals=5, children=[
                dict(name='auto', type='action'),
                dict(name='subpixel', type='bool', value=False),
                ]),
            dict(name='downsample', type='int', value=1, suffix='x', bounds=[1,None]),
            dict(name='display', type='bool', value=True),
            dict(name='scanProgram', type='list', values=[]),
            dict(name='Objective', type='str', value='Unknown', readonly=True),
            dict(name='Filter', type='str', value='Unknown', readonly=True),
            ])
        self.ptree.setParameters(self.params, showTop=False)
        self.params.sigTreeStateChanged.connect(self.update)
        self.params.child('detectors').sigAddNew.connect(self.addDetectorClicked)
        self.params.child('decomb', 'auto').sigActivated.connect(self.autoDecomb)

        self.man = getManager()
        self.scannerDev = self.man.getDevice(self.params['scanner'])
        # find first scope device that is parent of scanner
        dev = self.scannerDev
        while dev is not None and not isinstance(dev, Microscope):
            dev = dev.parentDevice()
        self.scopeDev = dev
                
        self.lastFrame = None
        # self.SUF = SUFA.ScannerUtilities()
        # self.ui.alphaSlider.valueChanged.connect(self.imageAlphaAdjust)        
        self.img = pg.ImageItem()  ## image shown in camera module
        self.img.setLookupTable(self.imageView.ui.histogram.getLookupTable)  # image fetches LUT from the ImageView
        self.imageView.ui.histogram.sigLevelsChanged.connect(self._updateCamModImage)
        self.imageView.imageItem.setAutoDownsample(True)
Beispiel #3
0
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(336, 439)
        Form.setMinimumSize(QtCore.QSize(0, 100))
        self.verticalLayout_5 = QtGui.QVBoxLayout(Form)
        self.verticalLayout_5.setSpacing(0)
        self.verticalLayout_5.setMargin(0)
        self.verticalLayout_5.setObjectName(_fromUtf8("verticalLayout_5"))
        self.frame = QtGui.QFrame(Form)
        self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtGui.QFrame.Raised)
        self.frame.setObjectName(_fromUtf8("frame"))
        self.verticalLayout_4 = QtGui.QVBoxLayout(self.frame)
        self.verticalLayout_4.setSpacing(0)
        self.verticalLayout_4.setMargin(0)
        self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4"))
        self.splitter = QtGui.QSplitter(self.frame)
        self.splitter.setOrientation(QtCore.Qt.Vertical)
        self.splitter.setChildrenCollapsible(False)
        self.splitter.setObjectName(_fromUtf8("splitter"))
        self.stack = QtGui.QStackedWidget(self.splitter)
        self.stack.setObjectName(_fromUtf8("stack"))
        self.page = QtGui.QWidget()
        self.page.setObjectName(_fromUtf8("page"))
        self.verticalLayout_3 = QtGui.QVBoxLayout(self.page)
        self.verticalLayout_3.setSpacing(0)
        self.verticalLayout_3.setMargin(0)
        self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3"))
        self.stimulusTree = ParameterTree(self.page)
        self.stimulusTree.setHeaderHidden(True)
        self.stimulusTree.setObjectName(_fromUtf8("stimulusTree"))
        self.stimulusTree.headerItem().setText(0, _fromUtf8("1"))
        self.verticalLayout_3.addWidget(self.stimulusTree)
        self.stack.addWidget(self.page)
        self.page_3 = QtGui.QWidget()
        self.page_3.setObjectName(_fromUtf8("page_3"))
        self.gridLayout = QtGui.QGridLayout(self.page_3)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        spacerItem = QtGui.QSpacerItem(20, 76, QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem, 0, 1, 1, 1)
        self.label = QtGui.QLabel(self.page_3)
        self.label.setTextFormat(QtCore.Qt.AutoText)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setWordWrap(True)
        self.label.setObjectName(_fromUtf8("label"))
        self.gridLayout.addWidget(self.label, 1, 0, 1, 3)
        spacerItem1 = QtGui.QSpacerItem(93, 78, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 2, 0, 2, 1)
        self.forceAdvancedBtn = QtGui.QPushButton(self.page_3)
        self.forceAdvancedBtn.setObjectName(_fromUtf8("forceAdvancedBtn"))
        self.gridLayout.addWidget(self.forceAdvancedBtn, 2, 1, 1, 1)
        spacerItem2 = QtGui.QSpacerItem(92, 78, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem2, 2, 2, 2, 1)
        self.forceSimpleBtn = QtGui.QPushButton(self.page_3)
        self.forceSimpleBtn.setObjectName(_fromUtf8("forceSimpleBtn"))
        self.gridLayout.addWidget(self.forceSimpleBtn, 3, 1, 1, 1)
        spacerItem3 = QtGui.QSpacerItem(20, 75, QtGui.QSizePolicy.Minimum,
                                        QtGui.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem3, 4, 1, 1, 1)
        self.stack.addWidget(self.page_3)
        self.page_4 = QtGui.QWidget()
        self.page_4.setObjectName(_fromUtf8("page_4"))
        self.verticalLayout = QtGui.QVBoxLayout(self.page_4)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setMargin(0)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.splitter_2 = QtGui.QSplitter(self.page_4)
        self.splitter_2.setOrientation(QtCore.Qt.Vertical)
        self.splitter_2.setChildrenCollapsible(False)
        self.splitter_2.setObjectName(_fromUtf8("splitter_2"))
        self.functionText = QtGui.QTextEdit(self.splitter_2)
        self.functionText.setMinimumSize(QtCore.QSize(0, 15))
        self.functionText.setObjectName(_fromUtf8("functionText"))
        self.seqTree = ParameterTree(self.splitter_2)
        self.seqTree.setObjectName(_fromUtf8("seqTree"))
        self.seqTree.headerItem().setText(0, _fromUtf8("1"))
        self.seqTree.header().setVisible(False)
        self.verticalLayout.addWidget(self.splitter_2)
        self.stack.addWidget(self.page_4)
        self.page_2 = QtGui.QWidget()
        self.page_2.setObjectName(_fromUtf8("page_2"))
        self.verticalLayout_2 = QtGui.QVBoxLayout(self.page_2)
        self.verticalLayout_2.setMargin(0)
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
        self.textBrowser = QtGui.QTextBrowser(self.page_2)
        self.textBrowser.setObjectName(_fromUtf8("textBrowser"))
        self.verticalLayout_2.addWidget(self.textBrowser)
        self.stack.addWidget(self.page_2)
        self.errorText = QtGui.QTextBrowser(self.splitter)
        self.errorText.setMinimumSize(QtCore.QSize(0, 15))
        self.errorText.setObjectName(_fromUtf8("errorText"))
        self.verticalLayout_4.addWidget(self.splitter)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.advancedBtn = QtGui.QPushButton(self.frame)
        self.advancedBtn.setCheckable(True)
        self.advancedBtn.setObjectName(_fromUtf8("advancedBtn"))
        self.horizontalLayout.addWidget(self.advancedBtn)
        self.errorBtn = QtGui.QToolButton(self.frame)
        self.errorBtn.setEnabled(True)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.errorBtn.sizePolicy().hasHeightForWidth())
        self.errorBtn.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.errorBtn.setFont(font)
        self.errorBtn.setCheckable(True)
        self.errorBtn.setObjectName(_fromUtf8("errorBtn"))
        self.horizontalLayout.addWidget(self.errorBtn)
        self.helpBtn = QtGui.QToolButton(self.frame)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.helpBtn.sizePolicy().hasHeightForWidth())
        self.helpBtn.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.helpBtn.setFont(font)
        self.helpBtn.setCheckable(True)
        self.helpBtn.setObjectName(_fromUtf8("helpBtn"))
        self.horizontalLayout.addWidget(self.helpBtn)
        spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem4)
        self.updateBtn = QtGui.QPushButton(self.frame)
        self.updateBtn.setObjectName(_fromUtf8("updateBtn"))
        self.horizontalLayout.addWidget(self.updateBtn)
        self.autoUpdateCheck = QtGui.QCheckBox(self.frame)
        self.autoUpdateCheck.setObjectName(_fromUtf8("autoUpdateCheck"))
        self.horizontalLayout.addWidget(self.autoUpdateCheck)
        self.verticalLayout_4.addLayout(self.horizontalLayout)
        self.verticalLayout_5.addWidget(self.frame)

        self.retranslateUi(Form)
        self.stack.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(Form)
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(840, 504)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(4)
        sizePolicy.setVerticalStretch(1)
        sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
        Form.setSizePolicy(sizePolicy)
        self.gridLayout_4 = QtWidgets.QGridLayout(Form)
        self.gridLayout_4.setContentsMargins(3, 3, 3, 3)
        self.gridLayout_4.setHorizontalSpacing(9)
        self.gridLayout_4.setVerticalSpacing(2)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
        self.gridLayout.setObjectName("gridLayout")
        self.cameraCombo = InterfaceCombo(Form)
        self.cameraCombo.setObjectName("cameraCombo")
        self.gridLayout.addWidget(self.cameraCombo, 0, 1, 1, 1)
        self.loadConfigBtn = QtWidgets.QPushButton(Form)
        self.loadConfigBtn.setObjectName("loadConfigBtn")
        self.gridLayout.addWidget(self.loadConfigBtn, 6, 0, 1, 2)
        self.label = QtWidgets.QLabel(Form)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.laserCombo = InterfaceCombo(Form)
        self.laserCombo.setObjectName("laserCombo")
        self.gridLayout.addWidget(self.laserCombo, 1, 1, 1, 1)
        self.simulateShutterCheck = QtWidgets.QCheckBox(Form)
        self.simulateShutterCheck.setObjectName("simulateShutterCheck")
        self.gridLayout.addWidget(self.simulateShutterCheck, 2, 0, 1, 2)
        self.enablePosCtrlCheck = QtWidgets.QCheckBox(Form)
        self.enablePosCtrlCheck.setChecked(True)
        self.enablePosCtrlCheck.setObjectName("enablePosCtrlCheck")
        self.gridLayout.addWidget(self.enablePosCtrlCheck, 3, 0, 1, 2)
        self.enableScanProgCheck = QtWidgets.QCheckBox(Form)
        self.enableScanProgCheck.setChecked(True)
        self.enableScanProgCheck.setObjectName("enableScanProgCheck")
        self.gridLayout.addWidget(self.enableScanProgCheck, 4, 0, 1, 2)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem, 5, 0, 1, 1)
        self.gridLayout_4.addLayout(self.gridLayout, 0, 0, 2, 1)
        self.positionCtrlGroup = QtWidgets.QGroupBox(Form)
        self.positionCtrlGroup.setCheckable(False)
        self.positionCtrlGroup.setChecked(False)
        self.positionCtrlGroup.setObjectName("positionCtrlGroup")
        self.gridLayout_5 = QtWidgets.QGridLayout(self.positionCtrlGroup)
        self.gridLayout_5.setContentsMargins(5, 5, 5, 5)
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.showPosCtrlCheck = QtWidgets.QCheckBox(self.positionCtrlGroup)
        self.showPosCtrlCheck.setEnabled(True)
        self.showPosCtrlCheck.setChecked(True)
        self.showPosCtrlCheck.setObjectName("showPosCtrlCheck")
        self.gridLayout_5.addWidget(self.showPosCtrlCheck, 1, 0, 1, 1)
        self.spotDisplayGroup = GroupBox(self.positionCtrlGroup)
        self.spotDisplayGroup.setObjectName("spotDisplayGroup")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.spotDisplayGroup)
        self.gridLayout_2.setContentsMargins(3, 3, 3, 3)
        self.gridLayout_2.setSpacing(0)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.sizeFromCalibrationRadio = QtWidgets.QRadioButton(self.spotDisplayGroup)
        self.sizeFromCalibrationRadio.setChecked(True)
        self.sizeFromCalibrationRadio.setObjectName("sizeFromCalibrationRadio")
        self.gridLayout_2.addWidget(self.sizeFromCalibrationRadio, 0, 0, 1, 2)
        self.sizeCustomRadio = QtWidgets.QRadioButton(self.spotDisplayGroup)
        self.sizeCustomRadio.setObjectName("sizeCustomRadio")
        self.gridLayout_2.addWidget(self.sizeCustomRadio, 1, 0, 1, 1)
        self.sizeSpin = SpinBox(self.spotDisplayGroup)
        self.sizeSpin.setSuffix("")
        self.sizeSpin.setMinimum(0.0)
        self.sizeSpin.setMaximum(100000.0)
        self.sizeSpin.setSingleStep(1e-06)
        self.sizeSpin.setProperty("value", 0.0)
        self.sizeSpin.setObjectName("sizeSpin")
        self.gridLayout_2.addWidget(self.sizeSpin, 1, 1, 1, 1)
        self.showLastSpotCheck = QtWidgets.QCheckBox(self.spotDisplayGroup)
        self.showLastSpotCheck.setObjectName("showLastSpotCheck")
        self.gridLayout_2.addWidget(self.showLastSpotCheck, 2, 0, 1, 1)
        self.gridLayout_5.addWidget(self.spotDisplayGroup, 3, 0, 1, 1)
        self.spotSequenceGroup = GroupBox(self.positionCtrlGroup)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.spotSequenceGroup.sizePolicy().hasHeightForWidth())
        self.spotSequenceGroup.setSizePolicy(sizePolicy)
        self.spotSequenceGroup.setObjectName("spotSequenceGroup")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.spotSequenceGroup)
        self.gridLayout_3.setContentsMargins(3, 3, 3, 3)
        self.gridLayout_3.setSpacing(3)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.minTimeSpin = SpinBox(self.spotSequenceGroup)
        self.minTimeSpin.setSuffix("")
        self.minTimeSpin.setDecimals(2)
        self.minTimeSpin.setMaximum(1000000.0)
        self.minTimeSpin.setObjectName("minTimeSpin")
        self.gridLayout_3.addWidget(self.minTimeSpin, 1, 1, 1, 1)
        self.timeLabel = QtWidgets.QLabel(self.spotSequenceGroup)
        self.timeLabel.setObjectName("timeLabel")
        self.gridLayout_3.addWidget(self.timeLabel, 4, 0, 1, 2)
        self.minDistSpin = SpinBox(self.spotSequenceGroup)
        self.minDistSpin.setSuffix("")
        self.minDistSpin.setMaximum(1000000.0)
        self.minDistSpin.setObjectName("minDistSpin")
        self.gridLayout_3.addWidget(self.minDistSpin, 2, 1, 1, 1)
        self.label_3 = QtWidgets.QLabel(self.spotSequenceGroup)
        self.label_3.setObjectName("label_3")
        self.gridLayout_3.addWidget(self.label_3, 1, 0, 1, 1)
        self.recomputeBtn = QtWidgets.QPushButton(self.spotSequenceGroup)
        self.recomputeBtn.setObjectName("recomputeBtn")
        self.gridLayout_3.addWidget(self.recomputeBtn, 5, 0, 1, 2)
        self.label_4 = QtWidgets.QLabel(self.spotSequenceGroup)
        self.label_4.setObjectName("label_4")
        self.gridLayout_3.addWidget(self.label_4, 2, 0, 1, 1)
        self.tdPlotWidget = PlotWidget(self.spotSequenceGroup)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.tdPlotWidget.sizePolicy().hasHeightForWidth())
        self.tdPlotWidget.setSizePolicy(sizePolicy)
        self.tdPlotWidget.setMinimumSize(Qt.QSize(0, 100))
        self.tdPlotWidget.setMaximumSize(Qt.QSize(16777215, 100))
        self.tdPlotWidget.setObjectName("tdPlotWidget")
        self.gridLayout_3.addWidget(self.tdPlotWidget, 0, 0, 1, 2)
        self.gridLayout_5.addWidget(self.spotSequenceGroup, 2, 0, 1, 1)
        self.itemTree = ParameterTree(self.positionCtrlGroup)
        self.itemTree.setObjectName("itemTree")
        self.itemTree.headerItem().setText(0, "1")
        self.itemTree.header().setVisible(False)
        self.gridLayout_5.addWidget(self.itemTree, 0, 0, 1, 1)
        self.gridLayout_4.addWidget(self.positionCtrlGroup, 0, 1, 2, 1)
        self.scanProgramGroup = QtWidgets.QGroupBox(Form)
        self.scanProgramGroup.setCheckable(False)
        self.scanProgramGroup.setChecked(False)
        self.scanProgramGroup.setObjectName("scanProgramGroup")
        self.gridLayout_6 = QtWidgets.QGridLayout(self.scanProgramGroup)
        self.gridLayout_6.setContentsMargins(5, 5, 5, 5)
        self.gridLayout_6.setObjectName("gridLayout_6")
        self.gridLayout_9 = QtWidgets.QGridLayout()
        self.gridLayout_9.setObjectName("gridLayout_9")
        self.previewBtn = QtWidgets.QPushButton(self.scanProgramGroup)
        self.previewBtn.setCheckable(True)
        self.previewBtn.setObjectName("previewBtn")
        self.gridLayout_9.addWidget(self.previewBtn, 1, 0, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_9.addItem(spacerItem1, 1, 1, 1, 1)
        self.programPreviewSlider = QtWidgets.QSlider(self.scanProgramGroup)
        self.programPreviewSlider.setMaximum(999)
        self.programPreviewSlider.setProperty("value", 666)
        self.programPreviewSlider.setOrientation(Qt.Qt.Horizontal)
        self.programPreviewSlider.setTickPosition(QtWidgets.QSlider.TicksBelow)
        self.programPreviewSlider.setTickInterval(333)
        self.programPreviewSlider.setObjectName("programPreviewSlider")
        self.gridLayout_9.addWidget(self.programPreviewSlider, 1, 2, 1, 1)
        self.gridLayout_6.addLayout(self.gridLayout_9, 1, 0, 1, 1)
        self.scanProgramSplitter = QtWidgets.QSplitter(self.scanProgramGroup)
        self.scanProgramSplitter.setOrientation(Qt.Qt.Vertical)
        self.scanProgramSplitter.setObjectName("scanProgramSplitter")
        self.programTree = ParameterTree(self.scanProgramSplitter)
        self.programTree.setObjectName("programTree")
        self.programTree.headerItem().setText(0, "1")
        self.programTree.header().setVisible(False)
        self.programTimeline = PlotWidget(self.scanProgramSplitter)
        self.programTimeline.setObjectName("programTimeline")
        self.gridLayout_6.addWidget(self.scanProgramSplitter, 0, 0, 1, 1)
        self.gridLayout_4.addWidget(self.scanProgramGroup, 1, 2, 1, 1)

        self.retranslateUi(Form)
        Qt.QMetaObject.connectSlotsByName(Form)