Esempio n. 1
0
 def __init__(self, globalDict=dict()):
     self._globalDict = globalDict
     self._line = ExpressionValue(name="line",
                                  globalDict=globalDict,
                                  value=Q(0.0))
     self._lineValue = self._line.value
     self._lineGain = ExpressionValue(name="lineGain",
                                      globalDict=globalDict,
                                      value=Q(1.0))
     self._globalGain = ExpressionValue(name="globalGain",
                                        globalDict=globalDict,
                                        value=Q(1.0))
     self._line.valueChanged.connect(self.onLineExpressionChanged)
     self._lineGain.valueChanged.connect(self.onLineExpressionChanged)
     self._globalGain.valueChanged.connect(self.onLineExpressionChanged)
Esempio n. 2
0
 def __init__(self,
              device,
              deviceName,
              channelName,
              globalDict,
              settings=None,
              outputUnit=''):
     #def __init__(self, device, deviceName, channelName, globalDict, settings=dict(), outputUnit=''):
     super(OutputChannel, self).__init__()
     self.device = device
     self.deviceName = deviceName
     self.channelName = channelName
     self.globalDict = globalDict
     self.expressionValue = ExpressionValue(self.name, self.globalDict,
                                            None)
     self.settings = settings if settings is not None else InstrumentSettings(
     )
     self.savedValue = None
     self.decimation = StaticDecimation()
     self.persistence = DBPersist()
     self.outputUnit = outputUnit
     self.setDefaults()
     self.expressionValue.string = self.settings.strValue
     self.expressionValue.value = self.settings.targetValue
     self.expressionValue.valueChanged.connect(self.onExpressionUpdate)
Esempio n. 3
0
 def __init__(self,
              name='Count 0',
              states=None,
              minValue=0,
              maxValue=Q(0),
              globalDict=None):
     super().__init__()
     self.name = name
     self.states = sorted(list(states)) if states is not None else list()
     self.minValue = minValue if isinstance(
         minValue, ExpressionValue) else ExpressionValue(
             name=name, globalDict=globalDict, value=minValue)
     self.maxValue = maxValue if isinstance(
         maxValue, ExpressionValue) else ExpressionValue(
             name=name, globalDict=globalDict, value=maxValue)
     self.minValue.valueChanged.connect(self.onValueChanged)
     self.maxValue.valueChanged.connect(self.onValueChanged)
Esempio n. 4
0
 def insertRow(self, position=0, index=QtCore.QModelIndex()):
     self.exprList.append(ExpressionValue(None, self.globalDict))
     self.dataChanged.emit(QtCore.QModelIndex(), QtCore.QModelIndex())
     self.layoutChanged.emit()
     exprlen = len(self.exprList)
     self.exprList[exprlen - 1].valueChanged.connect(
         partial(self.valueChanged, exprlen - 1),
         QtCore.Qt.UniqueConnection)
     return range(exprlen - 1, exprlen)
Esempio n. 5
0
 def __init__(self, name="", path=None, gain=0, globalDict=None):
     self.name = name
     self.path = path
     self.gain = gain if isinstance(gain,
                                    ExpressionValue) else ExpressionValue(
                                        name, globalDict, gain)
     self._updateGainValue()
     self._solution = None
     self.solutionPath = None
     self.solutionHash = hash(None)
     self.gain.valueChanged.connect(self._updateGainValue)
Esempio n. 6
0
 def __setstate__(self, state):
     state.setdefault('_globalDict', dict())
     state.pop('line', None)
     self.__dict__ = state
     if not isinstance(self._line, ExpressionValue):
         self._line = ExpressionValue(name="line",
                                      globalDict=self._globalDict,
                                      value=Q(self._line))
     if not isinstance(self._lineGain, ExpressionValue):
         self._lineGain = ExpressionValue(name='lineGain',
                                          globalDict=self._globalDict,
                                          value=Q(self._lineGain))
     if not isinstance(self._globalGain, ExpressionValue):
         self._globalGain = ExpressionValue(name='globalGain',
                                            globalDict=self._globalDict,
                                            value=Q(self._globalGain))
     self._lineValue = self._line.value
     self._line.valueChanged.connect(self.onLineExpressionChanged)
     self._lineGain.valueChanged.connect(self.onLineExpressionChanged)
     self._globalGain.valueChanged.connect(self.onLineExpressionChanged)
Esempio n. 7
0
 def __init__(self, globalDict):
     super().__init__()
     self.globalDict = globalDict
     self.exprList = [ExpressionValue(None, self.globalDict)]
     self.dataLookup = {
         (QtCore.Qt.DisplayRole):
         lambda index: self.exprList[index.row()].string if index.column(
         ) == 0 else self.displayGain(self.exprList[index.row()].value),
         (QtCore.Qt.EditRole):
         lambda index: self.exprList[index.row()].string if index.column()
         == 0 else self.displayGain(self.exprList[index.row()].value)
     }
     self.headerDataLookup = ['Expression', 'Value']
Esempio n. 8
0
 def __init__(self,
              adjType=None,
              name='',
              value=None,
              states=None,
              globalDict=None):
     self.adjType = adjType if adjType is not None else AdjustType.Shutter
     if isinstance(name, list):
         self._name = name
     else:
         self._name = [None, None, None, None]
         self.name = name
     self.states = sorted(list(states)) if states is not None else list()
     if isinstance(value, list):
         self._value = value
     else:
         self._value = [
             None, True,
             ExpressionValue(globalDict=globalDict), None
         ]  # Unused, Shutter value, Global value, Voltage_node value
         if value is not None:
             self.value = value
Esempio n. 9
0
    def setupUi(self, parent):
        super(UserFunctionsEditor, self).setupUi(parent)
        self.tableModel = EvalTableModel(self.globalDict)
        self.tableView.setModel(self.tableModel)
        self.tableView.setSortingEnabled(True)  # triggers sorting
        self.delegate = MagnitudeSpinBoxDelegate(self.globalDict)
        self.tableView.setItemDelegateForColumn(1, self.delegate)
        self.addEvalRow.clicked.connect(self.onAddRow)
        self.removeEvalRow.clicked.connect(self.onRemoveRow)

        #initialize default options
        self.optionsWindow = OptionsWindow(self.config,
                                           'UserFunctionsEditorOptions')
        self.optionsWindow.setupUi(self.optionsWindow)
        self.actionOptions.triggered.connect(self.onOpenOptions)
        self.optionsWindow.OptionsChangedSignal.connect(self.updateOptions)
        self.updateOptions()
        if self.optionsWindow.defaultExpand:
            onExpandOrCollapse(self.fileTreeWidget, True, True)

        #hot keys for copy/past and sorting
        self.filter = KeyListFilter(
            [QtCore.Qt.Key_PageUp, QtCore.Qt.Key_PageDown])
        self.filter.keyPressed.connect(self.onReorder)
        self.tableView.installEventFilter(self.filter)
        QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Copy), self,
                            self.copy_to_clipboard)
        QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Paste), self,
                            self.paste_from_clipboard)

        #setup editor
        self.textEdit = PulseProgramSourceEdit()
        self.textEdit.setupUi(self.textEdit,
                              extraKeywords1=[],
                              extraKeywords2=[])
        self.textEdit.textEdit.currentLineMarkerNum = 9
        self.textEdit.textEdit.markerDefine(
            QsciScintilla.Background,
            self.textEdit.textEdit.currentLineMarkerNum
        )  #This is a marker that highlights the background
        self.textEdit.textEdit.setMarkerBackgroundColor(
            QtGui.QColor(0xd0, 0xff, 0xd0),
            self.textEdit.textEdit.currentLineMarkerNum)
        self.textEdit.setPlainText(self.script.code)
        self.splitterVertical.insertWidget(0, self.textEdit)

        #load recent files, also checks if data was saved correctly and if files still exist
        savedfiles = self.config.get(self.configname + '.recentFiles',
                                     OrderedList())
        self.initRecentFiles(savedfiles)
        self.initComboBox()

        self.tableModel.exprList = self.config.get(
            self.configname + '.evalstr',
            [ExpressionValue(None, self.globalDict)])
        if not isinstance(self.tableModel.exprList, list) or not isinstance(
                self.tableModel.exprList[0], ExpressionValue):
            self.tableModel.exprList = [ExpressionValue(None, self.globalDict)]
        self.tableModel.dataChanged.emit(QtCore.QModelIndex(),
                                         QtCore.QModelIndex())
        self.tableModel.layoutChanged.emit()
        self.tableModel.connectAllExprVals()

        #load last opened file
        self.script.fullname = self.config.get(
            self.configname + '.script.fullname', '')
        self.initLoad()

        #connect buttons
        self.actionOpen.triggered.connect(self.onLoad)
        self.actionSave.triggered.connect(self.onSave)
        self.actionNew.triggered.connect(self.onNew)

        self.setWindowTitle(self.configname)
        self.setWindowIcon(QtGui.QIcon(":/latex/icons/FuncIcon2.png"))
        self.statusLabel.setText("")
        self.tableModel.updateData()
 def testdeepcopy(self):
     expr = ExpressionValue(name='Count 3', value=Q(12, 'kHz'), globalDict=globalDict)
     c = copy.deepcopy(expr)
     self.assertEqual(expr, c)
     c.value = Q(123, 'MHz')
     c.string = '123 MHz'
 def testPickle(self):
     expr = ExpressionValue(name='Count 3', value=Q(12, 'kHz'))
     pickled = pickle.dumps(expr)
     unpickled = pickle.loads(pickled)
     self.assertEqual(expr, unpickled)
Esempio n. 12
0
 def __init__(self, globalDict=None):
     self._globalDict = None
     self._voltage = ExpressionValue(None, self._globalDict)
     self.enabled = False
     self.name = ""
     self.resetAfterPP = False
Esempio n. 13
0
    def setupUi(self, parent):
        super(UserFunctionsEditor, self).setupUi(parent)
        self.configname = 'UserFunctionsEditor'
        self.fileTreeWidget.setHeaderLabels(['User Function Files'])
        self.populateTree()

        self.tableModel = EvalTableModel(self.globalDict)
        self.tableView.setModel(self.tableModel)
        self.tableView.setSortingEnabled(True)  # triggers sorting
        self.delegate = MagnitudeSpinBoxDelegate(self.globalDict)
        self.tableView.setItemDelegateForColumn(1, self.delegate)
        self.addEvalRow.clicked.connect(self.onAddRow)
        self.removeEvalRow.clicked.connect(self.onRemoveRow)

        #hot keys for copy/past and sorting
        self.filter = KeyListFilter(
            [QtCore.Qt.Key_PageUp, QtCore.Qt.Key_PageDown])
        self.filter.keyPressed.connect(self.onReorder)
        self.tableView.installEventFilter(self.filter)
        QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Copy), self,
                            self.copy_to_clipboard)
        QtWidgets.QShortcut(QtGui.QKeySequence(QtGui.QKeySequence.Paste), self,
                            self.paste_from_clipboard)

        #setup editor
        self.textEdit = PulseProgramSourceEdit()
        self.textEdit.setupUi(self.textEdit,
                              extraKeywords1=[],
                              extraKeywords2=[])
        self.textEdit.textEdit.currentLineMarkerNum = 9
        self.textEdit.textEdit.markerDefine(
            QsciScintilla.Background,
            self.textEdit.textEdit.currentLineMarkerNum
        )  #This is a marker that highlights the background
        self.textEdit.textEdit.setMarkerBackgroundColor(
            QtGui.QColor(0xd0, 0xff, 0xd0),
            self.textEdit.textEdit.currentLineMarkerNum)
        self.textEdit.setPlainText(self.script.code)
        self.splitterVertical.insertWidget(0, self.textEdit)

        #load file
        self.script.fullname = self.config.get(
            self.configname + '.script.fullname', '')
        self.tableModel.exprList = self.config.get(
            self.configname + '.evalstr',
            [ExpressionValue(None, self.globalDict)])
        if not isinstance(self.tableModel.exprList, list) or not isinstance(
                self.tableModel.exprList[0], ExpressionValue):
            self.tableModel.exprList = [ExpressionValue(None, self.globalDict)]
        self.tableModel.dataChanged.emit(QtCore.QModelIndex(),
                                         QtCore.QModelIndex())
        self.tableModel.layoutChanged.emit()
        self.tableModel.connectAllExprVals()
        if self.script.fullname != '' and os.path.exists(self.script.fullname):
            with open(self.script.fullname, "r") as f:
                self.script.code = f.read()
        else:
            self.script.code = ''

        #setup filename combo box
        self.recentFiles = self.config.get(self.configname + '.recentFiles',
                                           dict())
        self.recentFiles = {
            k: v
            for k, v in self.recentFiles.items() if os.path.exists(v)
        }  #removes files from dict if file paths no longer exist
        self.filenameComboBox.setInsertPolicy(1)
        self.filenameComboBox.setMaxCount(10)
        self.filenameComboBox.addItems([
            shortname for shortname, fullname in list(self.recentFiles.items())
            if os.path.exists(fullname)
        ])
        self.filenameComboBox.currentIndexChanged[str].connect(
            self.onFilenameChange)
        self.removeCurrent.clicked.connect(self.onRemoveCurrent)
        self.filenameComboBox.setValidator(QtGui.QRegExpValidator(
        ))  #verifies that files typed into combo box can be used
        self.updateValidator()

        #connect buttons
        self.actionOpen.triggered.connect(self.onLoad)
        self.actionSave.triggered.connect(self.onSave)
        self.actionNew.triggered.connect(self.onNew)

        self.fileTreeWidget.itemDoubleClicked.connect(self.onDoubleClick)
        self.loadFile(self.script.fullname)

        self.expandTree = QtWidgets.QAction("Expand All", self)
        self.collapseTree = QtWidgets.QAction("Collapse All", self)
        self.expandChild = QtWidgets.QAction("Expand Selected", self)
        self.collapseChild = QtWidgets.QAction("Collapse Selected", self)
        self.expandTree.triggered.connect(
            partial(self.onExpandOrCollapse, True, True))
        self.collapseTree.triggered.connect(
            partial(self.onExpandOrCollapse, True, False))
        self.expandChild.triggered.connect(
            partial(self.onExpandOrCollapse, False, True))
        self.collapseChild.triggered.connect(
            partial(self.onExpandOrCollapse, False, False))
        self.fileTreeWidget.addAction(self.expandTree)
        self.fileTreeWidget.addAction(self.collapseTree)
        self.fileTreeWidget.addAction(self.expandChild)
        self.fileTreeWidget.addAction(self.collapseChild)

        self.fileTreeWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)

        self.setWindowTitle(self.configname)
        self.setWindowIcon(QtGui.QIcon(":/latex/icons/FuncIcon2.png"))
        self.statusLabel.setText("")
        self.tableModel.updateData()