Exemplo n.º 1
0
    def _removeInterface(self, iface):
        print("======== remove", iface)
        print(self.interfaces)
        name = None
        if isinstance(iface, CameraModuleInterface):
            for k,v in self.interfaces.items():
                if v is iface:
                    name = k
                    break
        elif isinstance(iface, str):
            name = iface
        else:
            raise TypeError("string or CameraModuleInterface argument required.")

        if name is None:
            raise ValueError("Interface %s not found." % iface)
        iface = self.interfaces.pop(name)
        if hasattr(iface, 'sigNewFrame'):
            pg.disconnect(iface.sigNewFrame, self.newFrame)
        if hasattr(iface, 'sigTransformChanged'):
            pg.disconnect(iface.sigTransformChanged, self.ifaceTransformChanged)
        dock = self.docks.pop(name, None)
        if dock is not None:
            dock.close()

        self.sigInterfaceRemoved.emit(name, iface)
Exemplo n.º 2
0
    def processFrame(self, frame):
        self.frames.append(frame)
        index = self.index

        # update index for next iteration
        self.index += 1

        # decide whether to move the stage
        finished = self.index >= self.positions.shape[0]
        if not finished:
            self.move = self.stage.moveTo(self.positions[self.index], 'slow')

        # calculate offset (while stage moves no next location)
        if index == 0:
            offset = (0, 0)
        else:
            compareIndex = max(0, index - 10)
            offset, _ = imreg_dft.translation(
                frame.getImage(), self.frames[compareIndex].getImage())
            px = self.camera.getPixelSize()
            offset = self.offsets[compareIndex] + offset.astype(
                float) * [px.x(), px.y()]
        self.offsets[index] = offset

        # finish up if there are no more positions
        if finished:
            pg.disconnect(self.camera.sigNewFrame, self.newFrame)
            self.analyze()
Exemplo n.º 3
0
 def stateChanged(self, name, value):
     if name == 'deviceCombo':
         if self.imager is not None:
             pg.disconnect(self.imager.sigNewFrame, self.newFrame)
         imager = self.selectedImager()
         if imager is not None:
             imager.sigNewFrame.connect(self.newFrame)
         self.imager = imager
     self.updateStatus()
Exemplo n.º 4
0
    def newFrame(self, frame):
        try:
            if self.move is not None and not self.move.isDone():
                # stage is still moving; discard frame
                return

            if self.framedelay is None:
                # stage has stopped; discard 2 more frames to be sure
                # we get the right image.
                self.framedelay = pg.ptime.time() + 1. / frame.info()['fps']
            elif self.framedelay < frame.info()['time']:
                # now we are ready to keep this frame.
                self.framedelay = None
                self.processFrame(frame)
        except Exception:
            pg.disconnect(self.camera.sigNewFrame, self.newFrame)
            raise
Exemplo n.º 5
0
 def setTargetToggled(self, b):
     cammod = getManager().getModule('Camera')
     self._cammod = cammod
     pips = self.selectedPipettes()
     if b is True:
         self.ui.calibrateBtn.setChecked(False)
         if len(pips) == 0:
             self.ui.setTargetBtn.setChecked(False)
             return
         # start calibration of selected pipettes
         cammod.window().getView().scene().sigMouseClicked.connect(
             self.cameraModuleClicked_setTarget)
         self._setTargetPips = pips
     else:
         # stop calibration
         pg.disconnect(cammod.window().getView().scene().sigMouseClicked,
                       self.cameraModuleClicked_setTarget)
         self._setTargetPips = []
Exemplo n.º 6
0
 def transformChanged(self):
     """
     Report that the tranform has changed, which might include the objective, or
     perhaps the stage position, etc. This needs to be obtained to re-align
     the scanner ROI
     """
     prof = pg.debug.Profiler()
     globalTr = self.scannerDev.globalTransform()
     pt1 = globalTr.map(self.currentRoi.scannerCoords[0])
     pt2 = globalTr.map(self.currentRoi.scannerCoords[1])
     diff = pt2 - pt1
     pg.disconnect(self.currentRoi.sigRegionChangeFinished, self.roiChanged)
     try:
         self.currentRoi.setState({'pos': pt1, 'size': diff, 'angle': 0})
     finally:
         self.currentRoi.sigRegionChangeFinished.connect(self.roiChanged)
     self.setScanPosFromRoi()
     if self.imagingThread.isRunning():
         self.updateImagingProtocol()
Exemplo n.º 7
0
    def devStateChanged(self, state=None):
        if state is None:
            state = self.dev.getState()

        pg.disconnect(self.state.sigChanged, self.uiStateChanged)
        try:
            if state['mode'] == 'I=0':
                self.ui.i0Radio.setChecked(True)
                self.ui.icHoldingLabel.setText('')
                self.ui.vcHoldingLabel.setText('')
            else:
                hold = self.dev.getParam('HoldingEnable')
                if hold:
                    hval = self.dev.getParam('Holding')
                    sign = '+' if hval > 0 else '-'
                    hval = abs(hval)
                else:
                    hval = 0
                    sign = '+'

                if state['mode'] == 'IC':
                    self.ui.icRadio.setChecked(True)
                    self.ui.vcHoldingLabel.setText('')
                    self.ui.icHoldingLabel.setText('%s %0.0f pA' %
                                                   (sign, hval * 1e12))
                else:
                    self.ui.vcRadio.setChecked(True)
                    self.ui.icHoldingLabel.setText('')
                    self.ui.vcHoldingLabel.setText('%s %0.0f mV' %
                                                   (sign, hval * 1e3))

            istate = self.dev.getLastState('IC')
            vstate = self.dev.getLastState('VC')
            self.ui.icHoldingSpin.setValue(istate['holding'])
            self.ui.vcHoldingSpin.setValue(vstate['holding'])

        finally:
            self.state.sigChanged.connect(self.uiStateChanged)
Exemplo n.º 8
0
    def getNextFrame(self, imager=None):
        """Return the next frame available from the imager. 

        Note: the frame may have been exposed before this method was called.
        """
        imager = self._getImager(imager)
        self.__nextFrame = None

        def newFrame(newFrame):
            self.__nextFrame = newFrame

        imager.sigNewFrame.connect(newFrame)
        try:
            start = pg.ptime.time()
            while pg.ptime.time() < start + 5.0:
                pg.QtGui.QApplication.processEvents()
                frame = self.__nextFrame
                if frame is not None:
                    self.__nextFrame = None
                    return frame
                time.sleep(0.01)
            raise RuntimeError("Did not receive frame from imager.")
        finally:
            pg.disconnect(imager.sigNewFrame, newFrame)