コード例 #1
0
 def initStage(self):
     # TODO put this in thread and show egg clock
     if self.stage is not None:
         ## Create and display the splash screen
         #splash_pix = QPixmap('icons/piController.png')
         #splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
         #splash.setMask(splash_pix.mask())
         #splash.show()
         # TODO: give choice to select stage
         pitools.startup(self.stage, stages='M-112.1DG-NEW', refmode='FNL')
         #splash.close()
         # TODO: show dialog for waiting
         self.velocityLabel.setText('Velocity: {:f}mm/s'.format(
             self.stage.qVEL()['1']))
         self.velocity.setValue(int(1000 * self.stage.qVEL()['1']))
         self.stageConnected.emit()
         self._xAxeChanged()
         self.currentPos.setText('{:.7f}'.format(self.stage.qPOS()['1']))
         self.__startCurrPosThr()
         self.stageRange = (self.stage.qTMN()['1'], self.stage.qTMX()['1'])
         self.scanStep.validator().setBottom(0)
         self.initStageBtn.setEnabled(False)
     else:
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Critical)
         msg.setText('No stage connected')
         msg.exec_()
コード例 #2
0
ファイル: FTIR.py プロジェクト: kbeyerlein/pyPumpProbe
    def saveDataHDF5(self):
        import datetime
        import h5py

        now = datetime.datetime.now().strftime('%Y%m%d-%H%M%S_FTIR')
        with h5py.File('data/{:s}.h5'.format(now)) as f:
            f.attrs['comments'] = self.fileUi.comment.text()
            f.attrs['stage'] = ''
            f.attrs['stage_settings'] = ''
            f.attrs['detector'] = ''
            f.attrs['detector_settings'] = ''

            # save time domain
            foo = self.tdWidget.calcFun.functions
            texts = [
                self.tdWidget.calcFun.itemText(i) for i in range(len(foo))
            ]
            dt = []
            for i in texts:
                dt.append(('x_{:s}'.format(i), np.float))
                dt.append(('y_{:s}'.format(i), np.float))
            dt = np.dtype(dt)
            dataTd = np.zeros(self.tdSignal.getData(foo[0][0])[0].shape[0],
                              dtype=dt)
            for i, fun in enumerate(foo):
                x, y = self.tdSignal.getData(
                    fun[0])  # [0]: fun, [1]: inverse fun
                dataTd['x_{:s}'.format(texts[i])] = x
                dataTd['y_{:s}'.format(texts[i])] = y
            dset = f.create_dataset('timeDomain', data=dataTd)
            self.tdSignal.plot.save_widget('data/{:s}_TD.png'.format(now))

            # save frequency domain
            foo = self.tdWidget.calcFun.functions
            texts = [
                self.tdWidget.calcFun.itemText(i) for i in range(len(foo))
            ]
            dt = []
            for i in texts:
                dt.append(('x_{:s}'.format(i), np.float))
                dt.append(('y_{:s}'.format(i), np.float))
            dt = np.dtype(dt)
            dataFd = np.zeros(self.fdSignal.getData(foo[0][0])[0].shape[0],
                              dtype=dt)
            for i, fun in enumerate(foo):
                x, y = self.fdSignal.getData(fun[0])
                dataFd['x_{:s}'.format(texts[i])] = x
                dataFd['y_{:s}'.format(texts[i])] = y
            #np.savetxt('data/{:s}_FD.txt'.format(now), dataFd, header=header)
            dset = f.create_dataset('frequencyDomain', data=dataFd)
            self.fdSignal.plot.save_widget('data/{:s}_FD.png'.format(now))

        # TODO: maybe put this in status bar
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText('Data saved')
        msg.exec_()
コード例 #3
0
 def connectStage(self):
     gcs = GCSDevice()
     try:
         gcs.InterfaceSetupDlg()
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Information)
         msg.setText(gcs.qIDN())
         msg.exec_()
         self.stage = gcs
         self.openStageBtn.setEnabled(False)
     except:
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Critical)
         msg.setText('Could not connect stage')
         msg.exec_()
コード例 #4
0
 def connectStage(self):
     gcs = GCSDevice(
         gcsdll="C:/Software/PI C863/PI_GCS2_DLL/PI_GCS2_DLL_x64.dll")
     try:
         gcs.InterfaceSetupDlg()
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Information)
         msg.setText(gcs.qIDN())
         msg.exec_()
         self.stage = gcs
         self.openStageBtn.setEnabled(False)
     except:
         msg = QMessageBox()
         msg.setIcon(QMessageBox.Critical)
         msg.setText('Could not connect stage')
         msg.exec_()
コード例 #5
0
ファイル: greatEyes.py プロジェクト: BenMoon/LabSoft
    def __openCam(self):
        self.camera = greatEyes()
        if not self.camera.connected:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Critical)
            msg.setText('Sorry, could not connect to camera :(\n' + 
                    self.camera.status)
            msg.exec_()
            return
        self.openCamBtn.setText('Connected')
        self.message.emit('Camera connected')
        self.openCamBtn.setStyleSheet('QPushButton {color: green;}')

        self.readoutSpeedCombo.setEnabled(True)
        self.exposureTimeSpin.setEnabled(True)
        self.binningXCombo.setEnabled(False)
        self.binningYCombo.setEnabled(False)
        self.temperatureSpin.setEnabled(True)
        self.updateInterSpin.setEnabled(True)

        self.openCamBtn.setEnabled(False)
        self.startAquBtn.setEnabled(True) 
コード例 #6
0
ファイル: FTIR.py プロジェクト: BenMoon/LabSoft
    def saveData(self):
        import datetime
        now = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')

        # save time domain
        foo = self.tdWidget.calcFun.functions
        texts = [self.tdWidget.calcFun.itemText(i) for i in range(len(foo))]
        tmp = ['td_x_{:s},td_y_{:s}'.format(i, i) for i in texts] 
        header = ','.join(tmp)
        dataTd = np.zeros((self.tdSignal.getData(foo[0][0])[0].shape[0],
                          2*len(foo)))
        for i, fun in enumerate(foo):
            x, y =  self.tdSignal.getData(fun[0])# [0]: fun, [1]: inverse fun
            dataTd[:,2*i] = x
            dataTd[:,2*i+1] = y
        np.savetxt('data/{:s}_TD.txt'.format(now), dataTd, header=header)
        self.tdSignal.plot.save_widget('data/{:s}_TD.png'.format(now))
        
        # save frequency domain
        foo = self.fdWidget.calcFun.functions
        texts = [self.fdWidget.calcFun.itemText(i) for i in range(len(foo))]
        tmp = ['fd_x_{:s},fd_y_{:s}'.format(i, i) for i in texts] 
        header += ','.join(tmp)
        dataFd = np.zeros((self.fdSignal.getData(foo[0][0])[0].shape[0],
                          2*len(foo)))
        for fun in foo:
            x, y = self.fdSignal.getData(fun[0])
            dataFd[:,2*i] = x
            dataFd[:,2*i+1] = y
        np.savetxt('data/{:s}_FD.txt'.format(now), dataFd, header=header)
        self.fdSignal.plot.save_widget('data/{:s}_FD.png'.format(now))

        # TODO: maybe put this in status bar
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText('Data saved')
        msg.exec_()
コード例 #7
0
ファイル: tiepie.py プロジェクト: kbeyerlein/pyPumpProbe
    def openDev(self):
        # search for devices
        libtiepie.device_list.update()
        # try to open an oscilloscope with block measurement support
        for item in libtiepie.device_list:
            if item.can_open(libtiepie.DEVICETYPE_OSCILLOSCOPE):
                self.scp = item.open_oscilloscope()
                if self.scp.measure_modes & libtiepie.MM_BLOCK:
                    break
                else:
                    self.scp = None
        # init UI
        #print(self.scp.name, 'found')
        if self.scp is not None:
            # Set measure mode:
            self.scp.measure_mode = libtiepie.MM_BLOCK

            # Set sample frequency:
            self.scp.sample_frequency = 1e6  # 1 MHz

            # Set record length:
            self.scp.record_length = 10000  # 10000 samples

            # Set pre sample ratio:
            self.scp.pre_sample_ratio = 0  # 0 %

            # Set trigger timeout:
            self.scp.trigger_time_out = 100e-3  # 100 ms

            # Enable channel 1 for measurement
            # http://api.tiepie.com/libtiepie/0.5/group__scp__ch__enabled.html
            self.scp.channels[
                0].enabled = True  # by default all channels are enabled
            self.scp.range = 0.2
            self.scp.coupling = libtiepie.CK_DCV  # DC Volt

            # Disable all channel trigger sources
            for ch in self.scp.channels:
                ch.trigger.enabled = False
            # Setup channel trigger on 1
            ch = self.scp.channels[0]
            ch.trigger.enabled = True
            ch.trigger.kind = libtiepie.TK_RISINGEDGE
            ch.trigger.levels[0] = 0.5  # 50%
            ch.trigger.hystereses[0] = 0.05  # 5%

            # update UI
            # channel
            self.measCh.addItems(
                ['Ch{:d}'.format(i) for i in range(self.scp.channels.count)])
            self.chSens.addItems(
                ['{:.1f} V'.format(i) for i in self.scp.channels[0].ranges])
            self.frequency.setValidator(
                QIntValidator(1, 1e-3 * self.scp.sample_frequency_max))
            self.frequency.setText('{:d}'.format(
                int(self.scp.sample_frequency * 1e-3)))
            self.recordLen.setValidator(
                QIntValidator(1, self.scp.record_length_max))
            self.recordLen.setText('{:d}'.format(self.scp.record_length))
            # trigger
            self.triggCh.addItems(
                ['Ch{:d}'.format(i) for i in range(self.scp.channels.count)])
            # TODO: doen't work in module anymore!!
            #self.triggLevel.setText(str(ch.trigger.levels[0]))
            #self.hystereses.setText(str(ch.trigger.hystereses[0]))
            self.triggKind.addItems([
                '{:s}'.format(i) for i in libtiepie.trigger_kind_str(
                    ch.trigger.kinds).split(', ')
            ])

            self.openDevBtn.setEnabled(False)

            # tell the world that the scope is connected
            self.xAxeChanged.emit(
                0, 1 / int(self.frequency.text()) * 1e-3 *
                int(self.recordLen.text()))
            self.yAxeChanged.emit(-1 * self.scp.range, self.scp.range)
            self.triggLevelChanged.emit(ch.trigger.levels[0] * 2 *
                                        self.scp.range - self.scp.range)
            self.scpConnected.emit()

        else:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Critical)
            msg.setText('No supported device found')
            msg.exec_()