Esempio n. 1
0
    def set_sound_source(self, x_in: QLineEdit, y_in: QLineEdit,
                         z_in: QLineEdit):
        """
        Validates then set the location of the sound source in the model.
        """
        if self.app.model_loaded:
            x, y, z = 0, 0, 0
            validator = QDoubleValidator()
            x_state, _, _ = validator.validate(x_in.text(), 0)
            y_state, _, _ = validator.validate(y_in.text(), 0)
            z_state, _, _ = validator.validate(z_in.text(), 0)

            if x_state == QValidator.Acceptable:
                x = float(x_in.text())
            else:
                x_in.setText("0.0")

            if y_state == QValidator.Acceptable:
                y = float(y_in.text())
            else:
                y_in.setText("0.0")

            if z_state == QValidator.Acceptable:
                z = float(z_in.text())
            else:
                z_in.setText("0.0")
            self.update_sound_source.emit(x, y, z)
Esempio n. 2
0
    def validator(self):
        url_validate = QRegExpValidator(QRegExp(r'^.*[.amazon.in].*$'))
        price_validate = QDoubleValidator(bottom=0, decimals=0)
        email_validate = QRegExpValidator(
            QRegExp(r'^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$'))

        again = ""
        self.url = self.txtUrl.toPlainText()
        self.p = self.txtPrice.toPlainText()
        self.usr_email = self.txtEmail.toPlainText()

        if url_validate.validate(self.url, 0)[0] != QValidator.Acceptable:
            print(url_validate.validate(self.url, 0))
            again = again + "URL : url must be of www.amazon.in\n"
            self.txtUrl.clear()

        if price_validate.validate(self.p, 4)[0] != QValidator.Acceptable:
            print(price_validate.validate(self.p, 4))
            again = again + "Price : It must be Number without , and .\n"
            self.txtPrice.clear()

        if email_validate.validate(self.usr_email,
                                   0)[0] != QValidator.Acceptable:
            print(email_validate.validate(self.usr_email, 0))
            again = again + "Email : Please enter right email\n"
            self.txtEmail.clear()
        return again
Esempio n. 3
0
class MarkerDialog(QDialog):
    def __init__(self, parent, *args):
        super(MarkerDialog, self).__init__(parent, *args)
        self.mainwin = parent
        self.setWindowTitle('Add Marker')

        self.label_editline = QLineEdit()
        self.label_editline.setMinimumWidth(150)
        self.value_lineedit = QLineEdit()
        self.value_lineedit.setMinimumWidth(150)
        self.validator = QDoubleValidator()
        self.value_lineedit.setValidator(self.validator)
        ok_and_cancel = QDialogButtonBox.Ok | QDialogButtonBox.Cancel
        self.button_box = QDialogButtonBox(ok_and_cancel)

        def check():
            log.info('Checking for already existing marker labels')
            ok_button = self.button_box.button(QDialogButtonBox.Ok)
            name = self.label_editline.text()
            existing_markers = [
                k for k, v in
                self.mainwin.current_document.profile.markers.items()
            ]
            valid_name = bool(name) and (name not in existing_markers)
            valid_value = self.validator.validate(
                self.value_lineedit.text(), 0)[0] == QValidator.Acceptable
            ok_button.setEnabled(valid_name and valid_value)

        self.label_editline.textChanged.connect(check)
        self.value_lineedit.textChanged.connect(check)

        self.button_box.rejected.connect(self.reject)
        self.button_box.accepted.connect(self.accept)

        form_layout = QFormLayout()
        form_layout.addRow('Label:', self.label_editline)
        form_layout.addRow('Value:', self.value_lineedit)

        main_layout = QVBoxLayout()
        main_layout.addLayout(form_layout)
        main_layout.addWidget(self.button_box)
        self.setLayout(main_layout)

    def getMarker(self, default_value, default_label='label'):
        self.value_lineedit.setText(str(default_value))
        # We need setting to '' first, cause when we just setting  default_label
        # again, no textChanged signal is emitted and therefore no check for
        # already existing marker labels is skipped!
        self.label_editline.setText('')
        self.label_editline.setText(default_label)
        self.label_editline.setFocus()
        self.label_editline.selectAll()
        result = self.exec()
        if result == QDialog.Accepted:
            name = self.label_editline.text()
            value = float(self.value_lineedit.text())
            return name, value
        return None, None
Esempio n. 4
0
 def validating_floatz4_4percent(self):
     validating_rule = QDoubleValidator(-1, 1, 5)
     #   print(validating_rule.validate(self.Loop.text(), 14))
     if validating_rule.validate(self.Z4_4Input.text(), 14)[0] == QValidator.Acceptable:
         self.Z4_4Input.setFocus()
     else:
         self.Z4_4Input.setText("")
         print('Value for Z(4,-4) needs to be in (-1,1)! This input will be set to 0 if you do not'
               ' change it.')
Esempio n. 5
0
    def validate(self, input_value, pos):

        if input_value in ('', '.', '-'):
            return QValidator.Intermediate, input_value, pos

        state, value, pos = QDoubleValidator.validate(self, input_value, pos)

        if state != QValidator.Acceptable:
            return QValidator.Invalid, value, pos

        return QValidator.Acceptable, value, pos
Esempio n. 6
0
    def validateVoltages(self):
        maxV = 100
        minV = -100
        try:
            validateStartVoltage = QDoubleValidator(
                float(self.minVText.text()), float(self.maxVText.text()), 6,
                self.startVText)
            validateMaxVoltage = QDoubleValidator(float(self.minVText.text()),
                                                  maxV, 6, self.maxVText)
            validateMinVoltage = QDoubleValidator(minV,
                                                  float(self.maxVText.text()),
                                                  6, self.minVText)
        except:
            pass

        if validateStartVoltage.validate(self.startVText.text(),1)[0] != 2 or \
            validateMaxVoltage.validate(self.maxVText.text(),1)[0] != 2 or \
            validateMinVoltage.validate(self.minVText.text(),1)[0] != 2:
            msg = "Sweep voltages (including Start) need to be \n between Vmin and Vmax"+\
                "\n\nPlease change Voltages in the Acquisition panel"
            reply = QMessageBox.question(self, 'Critical', msg, QMessageBox.Ok)
            self.show()
Esempio n. 7
0
    class CsvValidator(QValidator):
        stateChanged = QtCore.pyqtSignal(QValidator.State)

        def __init__(self):
            super().__init__()
            self.doubleValidator = QDoubleValidator()
            self.state = QValidator.Acceptable

        def validate(self, inp: str, pos: int):
            oldState = self.state
            for i in inp.split(','):
                ret = self.doubleValidator.validate(i, pos)
                if ret[0] == QValidator.Intermediate:
                    self.state = ret[0]
                    if self.state != oldState:
                        self.stateChanged.emit(self.state)
                    return self.state, inp, pos
                elif ret[0] == QValidator.Invalid:
                    return ret
            self.state = QValidator.Acceptable
            if self.state != oldState: self.stateChanged.emit(self.state)
            return self.state, inp, pos
Esempio n. 8
0
class Energy_Widget(QWidget):
    """
    """
    energyChanging = pyqtSignal(float)
    energyChanged = pyqtSignal(int)

    def __init__(self, parent=None):
        """
        """
        QWidget.__init__(self, parent)
        loadUi('UI_Forms/Energy_Widget.ui', self)
        self.tabWidget.setTabText(0, 'Xtal Plot')
        self.tabWidget.setTabText(1, 'Mirror Plot')
        self.loadPVs()
        self.init_validation()
        self.xtalMinChanged()
        self.xtalMaxChanged()
        self.mirrorMinChanged()
        self.mirrorMaxChanged()
        self.xtalStepsChanged()
        self.mirrorStepsChanged()
        self.stoppedTracking = False
        self.init_signals()
        self.undulatorStartPV = epics.PV(BYTES2STR("ID15:Start.VAL"))
        self.undulatorStopPV = epics.PV(BYTES2STR("ID15:Start.VAL"))
        self.scaler_15IDC_PV = epics.PV(BYTES2STR("15IDC:scaler1.CNT"))
        self.scaler_15IDD_PV = epics.PV(BYTES2STR("15IDD:vsc:c0.CNT"))
        self.countTime_15IDC_PV = epics.PV(BYTES2STR("15IDC:scaler1.TP"))
        self.countTime_15IDD_PV = epics.PV(BYTES2STR("15IDD:vsc:c0.TP"))
        self.xiaShutter_PV = epics.PV(BYTES2STR("15IDD:2openXIAShutter"))
        self.countTime_15IDC_PV.put(1)
        self.countTime_15IDD_PV.put(1)
        self.getUndulatorOffset()
        self.undulatorChanging = False
        if self.feedbackComboBox.pv.value == 1:
            # self.feedback_enabled=True
            # self.feedback_disable=False
            QMessageBox.warning(
                self, 'Feedback Warning',
                'Please switch off the feedback before start energy tracking',
                QMessageBox.Ok)
        # else:
        #     self.feedback_enabled=False
        #     self.feedback_disabled=True

    def getUndulatorOffset(self):
        self.undulatorOffset = self.undulatorEnergyLineEdit.pv.value - self.energyLineEdit.pv.value
        self.undulatorOffsetLineEdit.setText('%.4f' % self.undulatorOffset)

    def init_validation(self):
        self.dbleValidator = QDoubleValidator()
        self.intValidator = QIntValidator()
        self.xtalMinLineEdit.setValidator(self.dbleValidator)
        self.xtalMaxLineEdit.setValidator(self.dbleValidator)
        self.mirrorMinLineEdit.setValidator(self.dbleValidator)
        self.mirrorMaxLineEdit.setValidator(self.dbleValidator)
        self.xtalStepsLineEdit.setValidator(self.intValidator)
        self.mirrorStepsLineEdit.setValidator(self.intValidator)
        self.undulatorOffsetLineEdit.setValidator(self.dbleValidator)

    def init_signals(self):
        self.undulatorStartPushButton.clicked.connect(self.startUndulator)
        self.undulatorStopPushButton.clicked.connect(self.stopUndulator)
        self.undulatorOffsetLineEdit.returnPressed.connect(self.offsetChanged)
        self.getUndulatorOffsetPushButton.clicked.connect(
            self.getUndulatorOffset)
        self.startTrackingPushButton.clicked.connect(self.track_undulator)
        self.stopTrackingPushButton.clicked.connect(self.untrack_undulator)
        self.xtalScanPushButton.clicked.connect(self.scan_xtal)
        self.mirrorScanPushButton.clicked.connect(self.scan_mirror)
        self.xtalMinLineEdit.returnPressed.connect(self.xtalMinChanged)
        self.xtalMaxLineEdit.returnPressed.connect(self.xtalMaxChanged)
        self.mirrorMinLineEdit.returnPressed.connect(self.mirrorMinChanged)
        self.mirrorMaxLineEdit.returnPressed.connect(self.mirrorMaxChanged)
        self.xtalStepsLineEdit.returnPressed.connect(self.xtalStepsChanged)
        self.mirrorStepsLineEdit.returnPressed.connect(self.mirrorStepsChanged)

    def loadPVs(self):
        #        pass
        self.feedbackComboBox.setPV("15IDA:pid_mono_1.FBON")
        self.shutterComboBox.setPV("15IDD:2openXIAShutter")
        self.monBCountsLabel.setPV("15IDC:scaler1.S2", type=int)
        self.monPCountsLabel.setPV("15IDC:scaler1.S3", type=int)
        self.monDCountsLabel.setPV("15IDD:vsc:c0.S8", type=int)
        self.pdCountsLabel.setPV("15IDD:vsc:c0.S4", type=int)
        self.energyRDBKLabel.setPV("15IDA:BraggERdbkAO", prec=4)
        self.lambdaRDBKLabel.setPV("15IDA:BraggLambdaRdbkAO", prec=5)
        self.braggRDBKLabel.setPV("15IDA:BraggThetaRdbkAO", prec=5)
        self.energyLineEdit.setPV("15IDA:BraggEAO.VAL", prec=4)
        self.lambdaLineEdit.setPV("15IDA:BraggLambdaAO.VAL", prec=5)
        self.braggLineEdit.setPV("15IDA:BraggThetaAO.VAL", prec=5)
        self.monoModeComboBox.setPV("15IDA:KohzuModeBO.VAL")
        self.monoStatusLabel.setPV("15IDA:KohzuMoving", type=str)
        self.undulatorHarmonicLineEdit.setPV("ID15:HarmonicValue", type=int)
        self.undulatorGapLineEdit.setPV("ID15:GapSet.VAL", prec=3)
        self.undulatorGapLabel.setPV("ID15:Gap.VAL", prec=3, type=float)
        self.undulatorEnergyLineEdit.setPV("ID15:EnergySet.VAL", prec=4)
        self.undulatorEnergyLabel.setPV("ID15:Energy.VAL", prec=4, type=float)
        self.undulatorStatusLabel.setPV("ID15:Busy.VAL", type=str)
        self.mirrorDACLineEdit.setPV("15IDA:DAC1_2.VAL", prec=4)
        self.xtalDACLineEdit.setPV("15IDA:DAC1_4.VAL", prec=4)

    def startUndulator(self):
        self.undulatorStartPV.put(1)

    def stopUndulator(self):
        self.undulatorStopPV.put(1)

    def offsetChanged(self):
        if self.dbleValidator.validate(self.undulatorOffsetLineEdit.text(),
                                       0)[0] == self.dbleValidator.Acceptable:
            self.undulatorOffset = float(self.undulatorOffsetLineEdit.text())
        else:
            QMessageBox.warning(self, 'Value Error',
                                "Please enter floating point numbers only",
                                QMessageBox.Ok)

    def xtalMinChanged(self):
        if self.dbleValidator.validate(self.xtalMinLineEdit.text(),
                                       0)[0] == self.dbleValidator.Acceptable:
            self.xtalMin = float(self.xtalMinLineEdit.text())
        else:
            QMessageBox.warning(self, 'Value Error',
                                "Please enter floating point numbers only",
                                QMessageBox.Ok)

    def xtalMaxChanged(self):
        if self.dbleValidator.validate(self.xtalMaxLineEdit.text(),
                                       0)[0] == self.dbleValidator.Acceptable:
            self.xtalMax = float(self.xtalMaxLineEdit.text())
        else:
            QMessageBox.warning(self, 'Value Error',
                                "Please enter floating point numbers only",
                                QMessageBox.Ok)

    def mirrorMinChanged(self):
        if self.dbleValidator.validate(self.mirrorMinLineEdit.text(),
                                       0)[0] == self.dbleValidator.Acceptable:
            self.mirrorMin = float(self.mirrorMinLineEdit.text())
        else:
            QMessageBox.warning(self, 'Value Error',
                                "Please enter floating point numbers only",
                                QMessageBox.Ok)

    def mirrorMaxChanged(self):
        if self.dbleValidator.validate(self.mirrorMaxLineEdit.text(),
                                       0)[0] == self.dbleValidator.Acceptable:
            self.mirrorMax = float(self.mirrorMaxLineEdit.text())
        else:
            QMessageBox.warning(self, 'Value Error',
                                "Please enter floating point numbers only",
                                QMessageBox.Ok)

    def xtalStepsChanged(self):
        if self.intValidator.validate(self.xtalStepsLineEdit.text(),
                                      0)[0] == self.intValidator.Acceptable:
            self.xtalSteps = int(self.xtalStepsLineEdit.text())
        else:
            QMessageBox.warning(self, 'Value Error',
                                "Please enter integer value only")

    def mirrorStepsChanged(self):
        if self.intValidator.validate(self.mirrorStepsLineEdit.text(),
                                      0)[0] == self.intValidator.Acceptable:
            self.mirrorSteps = int(self.xtalStepsLineEdit.text())
        else:
            QMessageBox.warning(self, 'Value Error',
                                "Please enter integer value only")

    def track_undulator(self):
        self.stoppedTracking = False
        self.enable_widgets(enable=False)
        try:
            self.braggLineEdit.pvChanged.disconnect(self.changeUndulatorEnergy)
        except:
            pass
        self.braggLineEdit.pvChanged.connect(self.changeUndulatorEnergy)

    def untrack_undulator(self):
        self.enable_widgets(enable=True)
        self.stoppedTracking = True
        try:
            self.braggLineEdit.pvChanged.disconnect(self.changeUndulatorEnergy)
        except:
            pass

    def changeUndulatorEnergy(self):
        # self.feedback_OFF()
        # print("Feedback Disabled")
        print('Changing Undulator')
        self.undulatorChanging = True
        self.undulatorEnergyLineEdit.pv.put(self.energyLineEdit.pv.value +
                                            self.undulatorOffset)
        self.startUndulator()
        while epics.caget(BYTES2STR("15IDA:KohzuMoving")) == 1:
            QTest.qWait(10)
        print('Undulator Changed')
        self.wait_for_stablization(detector='MonB')
        #print("Undulator change stablized")
        if self.trackXtalCheckBox.isChecked():
            print("Scanning 2nd Xtal...")
            self.scan_xtal()
        if self.trackMirrorCheckBox.isChecked():
            print("Scanning 2nd Mirror...")
            self.scan_mirror()
        self.undulatorChanging = False
        # self.feeback_ON()
        # print("Feedback Enabled")

    def scan_xtal(self):
        # if self.feedback_enabled:
        #     print("Feedback Disabled")
        #     self.feedback_OFF()
        self.stoppedTracking = False
        self.scan(dac='xtal')
        # print("Feedback Enabled")
        # self.feeback_ON()

    def scan_mirror(self):
        self.stoppedTracking = False
        self.scan(dac='mirror')

    def scan(self, dac='xtal', save=True):
        self.countTime_15IDC_PV.put(1)
        self.countTime_15IDD_PV.put(1)
        if dac == 'xtal':
            xold = self.xtalDACLineEdit.pv.value
            xmin = xold + self.xtalMin
            xmax = xold + self.xtalMax
            steps = self.xtalSteps
            yaxis = self.xtalDetectorComboBox.currentText()
            self.xtalPlotTab.setXLabel(dac)
            self.xtalPlotTab.setYLabel(yaxis)
        else:
            xold = self.mirrorDACLineEdit.pv.value
            xmin = xold + self.mirrorMin
            xmax = xold + self.mirrorMax
            steps = self.mirrorSteps
            yaxis = self.mirrorDetectorComboBox.currentText()
            self.mirrorPlotTab.setXLabel(dac)
            self.mirrorPlotTab.setYLabel(yaxis)
        data = {}
        data[dac] = np.linspace(xmin, xmax, steps)
        data['MonB'] = np.array([])
        data['MonP'] = np.array([])
        data['MonD'] = np.array([])
        # data['Readback'] = np.array([])
        data['PD'] = np.array([])
        self.auto_count_off()
        if dac == 'xtal':
            self.xtalDACLineEdit.pv.put(data[dac][0], wait=True)
        else:
            self.mirrorDACLineEdit.pv.put(data[dac][0], wait=True)
        #print('val=%.4f I m waiting' % val)
        #t=time.time()
        QTest.qWait(1000)
        #print(time.time()-t)

        for i, val in enumerate(data[dac][1:]):
            if not self.stoppedTracking:
                self.trigger_scalers()
                data['MonB'] = np.append(data['MonB'],
                                         self.monBCountsLabel.pv.value)
                data['MonP'] = np.append(data['MonP'],
                                         self.monPCountsLabel.pv.value)
                data['MonD'] = np.append(data['MonD'],
                                         self.monDCountsLabel.pv.value)
                data['PD'] = np.append(data['PD'], self.pdCountsLabel.pv.value)
                # data['Readback'] = np.append(data['Readback'], float(epics.caget(BYTES2STR("15IDA:pid_mono_1.CVAL"))))
                if dac == 'xtal':
                    self.tabWidget.setCurrentIndex(0)
                    self.xtalPlotTab.add_data(data[dac][:i + 1],
                                              data[yaxis],
                                              name=dac + '-' + yaxis)
                else:
                    self.tabWidget.setCurrentIndex(1)
                    self.mirrorPlotTab.add_data(data[dac][:i + 1],
                                                data[yaxis],
                                                name=dac + '-' + yaxis)
                if dac == 'xtal':
                    self.xtalDACLineEdit.pv.put(val, wait=True)
                else:
                    self.mirrorDACLineEdit.pv.put(val, wait=True)
                QTest.qWait(100)
            else:
                break
        if not self.stoppedTracking:
            maxval = data[dac][data[yaxis].argmax()]
            # self.readbackvalue=data['Readback'][data[yaxis].argmax()]
            if dac == 'xtal':
                # offset of -0.06 is added because we find the
                # peak position obtained from scan is -0.06 from the real peak position
                print('Moving to Maximum %.4f' % (maxval - 0.06))
                self.xtalDACLineEdit.pv.put(
                    maxval -
                    0.06)  #Moving DAC to the maximum xtalintensity value
            else:
                print('Moving to Maximum %.4f' % maxval)
                self.mirrorDACLineEdit.pv.put(
                    maxval)  # Moving DAC to the maximum mirror intensity value
        else:
            print('Moving to old value')
            if dac == 'xtal':
                self.xtalDACLineEdit.pv.put(
                    xold)  #Moving DAC to the known old value
            else:
                self.mirrorDACLineEdit.pv.put(
                    xold)  # Moving DAC to the known old value
        self.auto_count_on()

    def wait_for_stablization(self, detector='MonB'):
        self.auto_count_off()
        self.countTime_15IDC_PV.put(1)
        self.countTime_15IDD_PV.put(1)
        if detector == 'MonB':
            self.trigger_scalers()
            for i in range(10):
                QTest.qWait(1000)
                counts = 0
                monbCounts = self.monBCountsLabel.pv.value
                while np.abs(counts - monbCounts) > np.sqrt(
                        monbCounts) and not self.stoppedTracking:
                    QTest.qWait(100)
                    print(np.abs(counts - monbCounts), np.sqrt(monbCounts))
                    counts = copy.copy(monbCounts)
                    self.trigger_scalers()
                    monbCounts = self.monBCountsLabel.pv.value
        elif detector == 'MonP':
            self.trigger_scalers()
            counts = 0
            monpCounts = self.monPCountsLabel.pv.value
            while np.abs(counts - monpCounts) > np.sqrt(
                    monpCounts) and not self.stoppedTracking:
                QTest.qWait(1000)
                counts = copy.copy(monpCounts)
                self.trigger_scalers()
                monpCounts = self.monPCountsLabel.pv.value
        elif detector == 'MonD':
            self.trigger_scalers()
            counts = 0
            mondCounts = self.monDCountsLabel.pv.value
            while np.abs(counts - mondCounts) > np.sqrt(
                    mondCounts) and not self.stoppedTracking:
                QTest.qWait(1000)
                counts = copy.copy(mondCounts)
                self.trigger_scalers()
                mondCounts = self.monDCountsLabel.pv.value
        elif detector == 'PD':
            self.trigger_scalers()
            counts = 0
            pdCounts = self.pdCountsLabel.pv.value
            while np.abs(counts - pdCounts) > np.sqrt(pdCounts):
                QTest.qWait(1000)
                counts = copy.copy(pdCounts)
                self.trigger_scalers()
                pdCounts = self.pdCountsLabel.pv.value
        self.auto_count_on()

    # def feeback_ON(self):
    #     epics.caput(BYTES2STR("15IDA:pid_mono_1.INP"),"15IDA:pid_mono_1_incalc.D", wait=True)
    #     sfb=float(epics.caget(BYTES2STR("15IDA:pid_mono_1_incalc.INPC")))
    #     sf=96.0*sfb/self.readbackvalue
    #     print(self.readbackvalue,sfb)
    #     epics.caput(BYTES2STR("15IDA:pid_mono_1_incalc.INPC"), '%.3f'%sf, wait=True)
    #     epics.caput(BYTES2STR("15IDA:pid_mono_1.FBON"), 1, wait=True)
    #     self.feedback_enabled=True
    #     self.feedback_disabled=False
    #
    # def feedback_OFF(self):
    #     epics.caput(BYTES2STR("15IDA:pid_mono_1.FBON"), 0)
    #     self.feedback_disabled=True
    #     self.feedback_enabled=False

    def auto_count_on(self):
        epics.caput(BYTES2STR("15IDC:scaler1.CONT"),
                    1)  # setting autocount on for 15IDC scaler
        epics.caput(BYTES2STR("15IDD:vsc:c0.CONT"),
                    1)  # setting autocount on for 15IDD scaler

    def auto_count_off(self):
        epics.caput(BYTES2STR("15IDC:scaler1.CONT"),
                    0)  # setting autocount off for 15IDC scaler
        epics.caput(BYTES2STR("15IDD:vsc:c0.CONT"),
                    0)  # setting autocount off for 15IDD scaler

    def trigger_scalers(self):
        self.xiaShutter_PV.put(0)
        QTest.qWait(100)
        self.trigger_15IDC_scaler()
        self.trigger_15IDD_scaler()
        QTest.qWait(10)
        while self.scaler_15IDD_PV.value == 1 or self.scaler_15IDC_PV.value == 1:
            QTest.qWait(10)
        self.xiaShutter_PV.put(1)

    def trigger_15IDC_scaler(self):
        self.scaler_15IDC_PV.put(
            1, wait=False)  # Start counting for 1 sec with 15IDC counter

    def trigger_15IDD_scaler(self):
        self.scaler_15IDD_PV.put(
            1, wait=False)  # Start counting for 1 sec with 15IDD counter

    def enable_widgets(self, enable=True):
        self.feedbackComboBox.setEnabled(enable)
        self.energyLineEdit.setEnabled(enable)
        self.lambdaLineEdit.setEnabled(enable)
        self.braggLineEdit.setEnabled(enable)
        self.undulatorEnergyLineEdit.setEnabled(enable)
        self.undulatorGapLineEdit.setEnabled(enable)
        self.undulatorHarmonicLineEdit.setEnabled(enable)
        self.undulatorStartPushButton.setEnabled(enable)
        self.undulatorStopPushButton.setEnabled(enable)
        self.xtalDACLineEdit.setEnabled(enable)
        self.xtalMinLineEdit.setEnabled(enable)
        self.xtalMaxLineEdit.setEnabled(enable)
        self.xtalStepsLineEdit.setEnabled(enable)
        self.xtalScanPushButton.setEnabled(enable)
        self.mirrorDACLineEdit.setEnabled(enable)
        self.mirrorMinLineEdit.setEnabled(enable)
        self.mirrorMaxLineEdit.setEnabled(enable)
        self.mirrorStepsLineEdit.setEnabled(enable)
        self.mirrorScanPushButton.setEnabled(enable)
        self.startTrackingPushButton.setEnabled(enable)
        self.stopTrackingPushButton.setEnabled(not enable)
Esempio n. 9
0
def test_DoubleValidatorStrict(text, range, result):
    validator = QDoubleValidator()
    if range is not None:
        validator.setRange(range[0], range[1], 5)
    assert validator.validate(text, 0)[0] == result, "Validation failed"