def __init__(self, dev, taskRunner): TaskGui.__init__(self, dev, taskRunner) self.ui = Ui_Form() self.ui.setupUi(self) self.dev = dev filters = self.dev.listFilters() filterList = self.generatFilterList(filters) for i in range(len(filterList)): item = self.ui.filterCombo.addItem('%s' % filterList[i][1]) item = self.ui.sequenceCombo.addItem('off') item = self.ui.sequenceCombo.addItem('list') self.ui.sequenceListEdit.hide() self.ui.sequenceCombo.currentIndexChanged.connect(self.sequenceChanged) self.ui.sequenceListEdit.editingFinished.connect(self.sequenceChanged) ## Create state group for saving/restoring state self.stateGroup = pg.WidgetGroup([ (self.ui.filterCombo, ), (self.ui.sequenceCombo, ), (self.ui.sequenceListEdit, ), ])
def __init__(self, dev, taskRunner): TaskGui.__init__(self, dev, taskRunner) daqDev = self.dev.getDAQName() self.daqUI = self.taskRunner.getDevice(daqDev) self.traces = { } ## Stores traces from a sequence to allow average plotting self.resetInpPlots = False ## Signals result handler to clear plots before adding a new one self.currentCmdPlot = None self._block_update = False # blocks plotting during state changes self.ui = Ui_Form() self.ui.setupUi(self) self.ui.splitter_2.setStretchFactor(0, 0) self.ui.splitter_2.setStretchFactor(1, 1) self.ui.splitter.setStretchFactor(0, 3) self.ui.splitter.setStretchFactor(1, 1) self.stateGroup = WidgetGroup(self) #self.ui.waveGeneratorWidget.setTimeScale(1e-3) self.ui.waveGeneratorWidget.setMeta('x', units='s', siPrefix=True, dec=True, step=0.5, minStep=1e-6) self.unitLabels = [self.ui.waveGeneratorLabel, self.ui.holdingCheck] #self.modeSignalList = self.dev.listModeSignals() self.mode = None self.setMode('I=0') self.ui.topPlotWidget.registerPlot(self.dev.name() + '.Input') self.ui.topPlotWidget.setDownsampling(ds=True, auto=True, mode='peak') self.ui.topPlotWidget.setClipToView(True) self.ui.bottomPlotWidget.registerPlot(self.dev.name() + '.Command') self.ui.bottomPlotWidget.setDownsampling(ds=True, auto=True, mode='peak') self.ui.bottomPlotWidget.setClipToView(True) self.daqChanged(self.daqUI.currentState()) self.daqUI.sigChanged.connect(self.daqChanged) self.ui.waveGeneratorWidget.sigDataChanged.connect(self.updateWaves) self.ui.waveGeneratorWidget.sigParametersChanged.connect( self.sequenceChanged) self.stateGroup.sigChanged.connect(self.uiStateChanged) self.dev.sigStateChanged.connect(self.devStateChanged) self.dev.sigHoldingChanged.connect(self.devHoldingChanged) self.uiStateChanged('', '') self.devStateChanged()
def __init__(self, dev, task): TaskGui.__init__(self, dev, task) self.ui = Ui_Form() self.ui.setupUi(self) self.nPts = 0 self.ignorePeriod = False self.ignoreRate = False self.rate = 40e3 self.updateNPts() self.updateDevList() #self.devs = [] self.ui.rateSpin.setOpts(dec=True, step=0.5, minStep=10, bounds=[1,None], siPrefix=True, suffix='Hz') self.ui.periodSpin.setOpts(dec=True, step=0.5, minStep=1e-6, bounds=[1e-6,None], siPrefix=True, suffix='s') self.ui.besselCutoffSpin.setOpts(value=20e3, dec=True, step=0.5, minStep=10, bounds=[1,None], siPrefix=True, suffix='Hz') self.ui.butterworthPassbandSpin.setOpts(value=20e3, dec=True, step=0.5, minStep=10, bounds=[1,None], siPrefix=True, suffix='Hz') self.ui.butterworthStopbandSpin.setOpts(value=40e3, dec=True, step=0.5, minStep=10, bounds=[1,None], siPrefix=True, suffix='Hz') ## important to create widget group before connecting anything else. self.stateGroup = WidgetGroup([ (self.ui.rateSpin, 'rate'), (self.ui.downsampleSpin, 'downsample'), (self.ui.triggerDevList, 'triggerDevice'), (self.ui.denoiseCombo, 'denoiseMethod'), (self.ui.denoiseThresholdSpin, 'denoiseThreshold'), (self.ui.denoiseWidthSpin, 'denoiseWidth'), (self.ui.filterCombo, 'filterMethod'), (self.ui.besselCutoffSpin, 'besselCutoff'), (self.ui.besselOrderSpin, 'besselOrder'), (self.ui.butterworthPassbandSpin, 'butterworthPassband'), (self.ui.butterworthStopbandSpin, 'butterworthStopband'), (self.ui.butterworthPassDBSpin, 'butterworthPassDB'), (self.ui.butterworthStopDBSpin, 'butterworthStopDB'), ]) self.ui.rateSpin.valueChanged.connect(self.rateChanged) self.ui.periodSpin.sigValueChanging.connect(self.updateRateSpin) self.ui.rateSpin.sigValueChanging.connect(self.updatePeriodSpin) self.task.sigTaskChanged.connect(self.taskChanged) self.ui.denoiseCombo.currentIndexChanged.connect(self.ui.denoiseStack.setCurrentIndex) self.ui.filterCombo.currentIndexChanged.connect(self.ui.filterStack.setCurrentIndex) self.ui.rateSpin.setValue(self.rate)
def __init__(self, dev, task, ownUi=True): TaskGui.__init__(self, dev, task) self.plots = weakref.WeakValueDictionary() self.channels = {} if ownUi: self.ui = Ui_Form() self.ui.setupUi(self) self.stateGroup = WidgetGroup([ (self.ui.topSplitter, 'splitter1'), (self.ui.controlSplitter, 'splitter2'), (self.ui.plotSplitter, 'splitter3'), ]) self.createChannelWidgets(self.ui.controlSplitter, self.ui.plotSplitter) self.ui.topSplitter.setStretchFactor(0, 0) self.ui.topSplitter.setStretchFactor(1, 1) else: ## If ownUi is False, then the UI is created elsewhere and createChannelWidgets must be called from there too. self.stateGroup = None
def __init__(self, dev, taskRunner): TaskGui.__init__(self, dev, taskRunner) daqDev = self.dev.getDAQName() self.daqUI = self.taskRunner.getDevice(daqDev) self.traces = {} ## Stores traces from a sequence to allow average plotting self.resetInpPlots = False ## Signals result handler to clear plots before adding a new one self.currentCmdPlot = None self.ui = Ui_Form() self.ui.setupUi(self) self.ui.splitter_2.setStretchFactor(0, 0) self.ui.splitter_2.setStretchFactor(1, 1) self.ui.splitter.setStretchFactor(0, 3) self.ui.splitter.setStretchFactor(1, 1) self.stateGroup = WidgetGroup(self) #self.ui.waveGeneratorWidget.setTimeScale(1e-3) self.ui.waveGeneratorWidget.setMeta('x', units='s', siPrefix=True, dec=True, step=0.5, minStep=1e-6) self.unitLabels = [self.ui.waveGeneratorLabel, self.ui.holdingCheck] #self.modeSignalList = self.dev.listModeSignals() self.mode = None self.setMode('I=0') self.ui.topPlotWidget.registerPlot(self.dev.name() + '.Input') self.ui.topPlotWidget.setDownsampling(ds=True, auto=True, mode='peak') self.ui.topPlotWidget.setClipToView(True) self.ui.bottomPlotWidget.registerPlot(self.dev.name() + '.Command') self.ui.bottomPlotWidget.setDownsampling(ds=True, auto=True, mode='peak') self.ui.bottomPlotWidget.setClipToView(True) self.daqChanged(self.daqUI.currentState()) self.daqUI.sigChanged.connect(self.daqChanged) self.ui.waveGeneratorWidget.sigDataChanged.connect(self.updateWaves) self.ui.waveGeneratorWidget.sigParametersChanged.connect(self.sequenceChanged) self.stateGroup.sigChanged.connect(self.uiStateChanged) self.dev.sigStateChanged.connect(self.devStateChanged) self.devStateChanged()
def __init__(self, dev, taskRunner): TaskGui.__init__(self, dev, taskRunner) self.ui = Ui_Form() self.ui.setupUi(self) dm = getManager() self.targets = None self.items = {} self.haveCalibration = True ## whether there is a calibration for the current combination of laser/optics self.currentOpticState = None self.currentCamMod = None self.programCtrls = [] self.displaySize = {} ## maps (laser,opticState) : display size ## since this setting is remembered for each objective. ## Populate module/device lists, auto-select based on device defaults self.defCam = None if 'defaultCamera' in self.dev.config: self.defCam = self.dev.config['defaultCamera'] defLaser = None if 'defaultLaser' in self.dev.config: defLaser = self.dev.config['defaultLaser'] self.ui.cameraCombo.setTypes(['cameraModule']) self.ui.laserCombo.setTypes(['laser']) self.positionCtrlGroup = PositionCtrlGroup() self.positionCtrlGroup.sigAddNewRequested.connect(self.addPositionCtrl) self.ui.itemTree.setParameters(self.positionCtrlGroup, showTop=False) self.positionCtrlGroup.sigChildRemoved.connect(self.positionCtrlRemoved) self.programCtrlGroup = ProgramCtrlGroup() self.programCtrlGroup.sigAddNewRequested.connect(self.addProgramCtrl) self.ui.programTree.setParameters(self.programCtrlGroup, showTop=False) self.programCtrlGroup.sigChildRemoved.connect(self.programCtrlRemoved) ## Set up SpinBoxes self.ui.minTimeSpin.setOpts(dec=True, step=1, minStep=1e-3, siPrefix=True, suffix='s', bounds=[0, 50]) self.ui.minDistSpin.setOpts(dec=True, step=1, minStep=1e-6, siPrefix=True, suffix='m', bounds=[0, 10e-3]) self.ui.sizeSpin.setOpts(dec=True, step=1, minStep=1e-6, siPrefix=True, suffix='m', bounds=[1e-9, 1e-3]) ## Create state group for saving/restoring state self.stateGroup = pg.WidgetGroup([ (self.ui.cameraCombo,), (self.ui.laserCombo,), (self.ui.minTimeSpin, 'minTime'), (self.ui.minDistSpin, 'minDist'), (self.ui.simulateShutterCheck, 'simulateShutter'), (self.ui.sizeSpin, 'spotSize'), ]) self.stateGroup.setState({'minTime': 10, 'minDist': 500e-6, 'sizeSpin':100e-6}) self.tdPlot = self.ui.tdPlotWidget.plotItem self.tdPlot.setLabel('bottom', text="Distance", units='m') self.tdPlot.setLabel('left', text="Wait time", units='s') ## Note we use lambda functions for all these clicks to strip out the arg sent with the signal self.ui.hideCheck.toggled.connect(self.showInterface) self.ui.hideMarkerBtn.clicked.connect(self.hideSpotMarker) self.ui.cameraCombo.currentIndexChanged.connect(self.camModChanged) self.ui.laserCombo.currentIndexChanged.connect(self.laserDevChanged) self.ui.sizeFromCalibrationRadio.toggled.connect(self.updateSpotSizes) self.ui.sizeSpin.valueChanged.connect(self.sizeSpinEdited) self.ui.minTimeSpin.valueChanged.connect(self.sequenceChanged) self.ui.minDistSpin.valueChanged.connect(self.sequenceChanged) self.ui.recomputeBtn.clicked.connect(self.recomputeClicked) self.ui.loadConfigBtn.clicked.connect(self.loadConfiguration) self.dev.sigGlobalSubdeviceChanged.connect(self.opticStateChanged) self.testTarget = TargetPoint(name="Test", ptSize=100e-6) self.testTarget.setPen(QtGui.QPen(QtGui.QColor(255, 200, 200))) self.spotMarker = TargetPoint(name="Last", ptSize=100e-6, movable=False) self.spotMarker.setPen(pg.mkPen(color=(255,255,255), width = 2)) self.spotMarker.hide() self.updateSpotSizes() self.camModChanged() self.updateTDPlot() #self.ui.simulateShutterCheck.setChecked(False) if 'offVoltage' not in self.dev.config: ## we don't have a voltage for virtual shuttering self.ui.simulateShutterCheck.setChecked(False) self.ui.simulateShutterCheck.setEnabled(False)
def __init__(self, dev, taskRunner): TaskGui.__init__(self, dev, taskRunner) self.ui = Ui_Form() self.ui.setupUi(self) self.nPts = 0 self.ignorePeriod = False self.ignoreRate = False self.rate = 40e3 self._block_update = False # use to block signal emission during bulk updates self.updateNPts() self.updateDevList() self.ui.rateSpin.setOpts(dec=True, step=0.5, minStep=10, bounds=[1, None], siPrefix=True, suffix='Hz') self.ui.periodSpin.setOpts(dec=True, step=0.5, minStep=1e-6, bounds=[1e-6, None], siPrefix=True, suffix='s') self.ui.besselCutoffSpin.setOpts(value=20e3, dec=True, step=0.5, minStep=10, bounds=[1, None], siPrefix=True, suffix='Hz') self.ui.butterworthPassbandSpin.setOpts(value=20e3, dec=True, step=0.5, minStep=10, bounds=[1, None], siPrefix=True, suffix='Hz') self.ui.butterworthStopbandSpin.setOpts(value=40e3, dec=True, step=0.5, minStep=10, bounds=[1, None], siPrefix=True, suffix='Hz') ## important to create widget group before connecting anything else. self.stateGroup = WidgetGroup([ (self.ui.rateSpin, 'rate'), (self.ui.downsampleSpin, 'downsample'), (self.ui.triggerDevList, 'triggerDevice'), (self.ui.denoiseCombo, 'denoiseMethod'), (self.ui.denoiseThresholdSpin, 'denoiseThreshold'), (self.ui.denoiseWidthSpin, 'denoiseWidth'), (self.ui.filterCombo, 'filterMethod'), (self.ui.besselCutoffSpin, 'besselCutoff'), (self.ui.besselOrderSpin, 'besselOrder'), (self.ui.besselBidirCheck, 'besselBidirectional'), (self.ui.butterworthPassbandSpin, 'butterworthPassband'), (self.ui.butterworthStopbandSpin, 'butterworthStopband'), (self.ui.butterworthPassDBSpin, 'butterworthPassDB'), (self.ui.butterworthStopDBSpin, 'butterworthStopDB'), (self.ui.butterworthBidirCheck, 'butterworthBidirectional'), ]) self.ui.periodSpin.sigValueChanging.connect(self.updateRateSpin) self.ui.rateSpin.sigValueChanging.connect(self.updatePeriodSpin) self.taskRunner.sigTaskChanged.connect(self.taskChanged) self.ui.denoiseCombo.currentIndexChanged.connect( self.updateDenoiseCtrl) self.ui.filterCombo.currentIndexChanged.connect(self.updateFilterCtrl) self.ui.rateSpin.setValue(self.rate) self.stateGroup.sigChanged.connect(self.stateChanged) self.updateDenoiseCtrl() self.updateFilterCtrl()
def __init__(self, dev, taskRunner): TaskGui.__init__(self, dev, taskRunner) self.ui = Ui_Form() self.ui.setupUi(self) dm = getManager() self.targets = None self.items = {} self.haveCalibration = True ## whether there is a calibration for the current combination of laser/optics self.currentOpticState = None self.currentCamMod = None self.displaySize = {} ## maps (laser,opticState) : display size ## since this setting is remembered for each objective. # Make sure DQ appears in this task daqName = dev.getDaqName() taskRunner.getDevice(daqName) ## Populate module/device lists, auto-select based on device defaults self.defCam = None if 'defaultCamera' in self.dev.config: self.defCam = self.dev.config['defaultCamera'] defLaser = None if 'defaultLaser' in self.dev.config: defLaser = self.dev.config['defaultLaser'] daqDev = dev.getDaqName() self.daqUI = taskRunner.getDevice(daqDev) self.ui.cameraCombo.setTypes(['cameraModule']) self.ui.laserCombo.setTypes(['laser']) self.positionCtrlGroup = PositionCtrlGroup() self.positionCtrlGroup.sigAddNewRequested.connect(self.addPositionCtrl) self.ui.itemTree.setParameters(self.positionCtrlGroup, showTop=False) self.positionCtrlGroup.sigChildRemoved.connect(self.positionCtrlRemoved) self.ui.spotSequenceGroup.setCollapsed(True) self.ui.spotDisplayGroup.setCollapsed(True) self.scanProgram = ScanProgram() self.scanProgram.setDevices(scanner=self.dev) self.ui.programTree.setParameters(self.scanProgram.ctrlParameter(), showTop=False) ## Set up SpinBoxes self.ui.minTimeSpin.setOpts(dec=True, step=1, minStep=1e-3, siPrefix=True, suffix='s', bounds=[0, 50]) self.ui.minDistSpin.setOpts(dec=True, step=1, minStep=1e-6, siPrefix=True, suffix='m', bounds=[0, 10e-3]) self.ui.sizeSpin.setOpts(dec=True, step=1, minStep=1e-6, siPrefix=True, suffix='m', bounds=[1e-9, 1e-3]) ## Create state group for saving/restoring state self.stateGroup = pg.WidgetGroup([ (self.ui.cameraCombo,), (self.ui.laserCombo,), (self.ui.minTimeSpin, 'minTime'), (self.ui.minDistSpin, 'minDist'), (self.ui.simulateShutterCheck, 'simulateShutter'), (self.ui.sizeSpin, 'spotSize'), (self.ui.enablePosCtrlCheck, 'enablePosCtrl'), (self.ui.enableScanProgCheck, 'enableScanProg'), ]) self.stateGroup.setState({'minTime': 10, 'minDist': 500e-6, 'sizeSpin':100e-6}) self.tdPlot = self.ui.tdPlotWidget.plotItem self.tdPlot.setLabel('bottom', text="Distance", units='m') self.tdPlot.setLabel('left', text="Wait time", units='s') self.ui.scanProgramSplitter.setSizes([600, 100]) self.ui.programTimeline.setDownsampling(True) ## Note we use lambda functions for all these clicks to strip out the arg sent with the signal self.ui.showPosCtrlCheck.toggled.connect(self.showPosCtrls) self.ui.cameraCombo.currentIndexChanged.connect(self.camModChanged) self.ui.laserCombo.currentIndexChanged.connect(self.laserDevChanged) self.ui.sizeFromCalibrationRadio.toggled.connect(self.updateSpotSizes) self.ui.sizeSpin.valueChanged.connect(self.sizeSpinEdited) self.ui.minTimeSpin.valueChanged.connect(self.sequenceChanged) self.ui.minDistSpin.valueChanged.connect(self.sequenceChanged) self.ui.recomputeBtn.clicked.connect(self.recomputeClicked) self.ui.loadConfigBtn.clicked.connect(self.loadConfiguration) self.ui.previewBtn.toggled.connect(self.previewProgram) self.ui.enablePosCtrlCheck.toggled.connect(self.enablePosCtrlToggled) self.ui.enableScanProgCheck.toggled.connect(self.enableScanProgToggled) self.ui.showLastSpotCheck.toggled.connect(self.showLastSpotToggled) self.ui.programPreviewSlider.valueChanged.connect(self.previewRateChanged) self.dev.sigGlobalSubdeviceChanged.connect(self.opticStateChanged) self.testTarget = TargetPoint(name="Test", ptSize=100e-6) self.testTarget.setPen(Qt.QPen(Qt.QColor(255, 200, 200))) self.spotMarker = TargetPoint(name="Last", ptSize=100e-6, movable=False) self.spotMarker.setPen(pg.mkPen(color=(255,255,255), width = 2)) self.spotMarker.hide() self.laserDevChanged() # also updates spot sizes self.camModChanged() self.updateTDPlot() #self.ui.simulateShutterCheck.setChecked(False) if 'offVoltage' not in self.dev.config: ## we don't have a voltage for virtual shuttering self.ui.simulateShutterCheck.setChecked(False) self.ui.simulateShutterCheck.setEnabled(False) self.daqChanged(self.daqUI.currentState()) self.daqUI.sigChanged.connect(self.daqChanged)