Ejemplo n.º 1
0
    def _execute_lumen_degas(self, controller, pattern):
        from pychron.core.pid import PID
        from pychron.core.ui.gui import invoke_in_main_thread
        from pychron.lasers.pattern.mv_viewer import MVViewer
        from pychron.graph.stream_graph import StreamStackedGraph
        from pychron.mv.mv_image import MVImage

        lm = self.laser_manager
        sm = lm.stage_manager

        g = StreamStackedGraph()

        img = MVImage()

        img.setup_images(2, sm.get_frame_size())

        mvviewer = MVViewer(graph=g, image=img)
        mvviewer.edit_traits()
        # g.edit_traits()

        g.new_plot(xtitle='Time', ytitle='Lumens')
        g.new_series()

        g.new_plot(xtitle='Time', ytitle='Error')
        g.new_series(plotid=1)

        g.new_plot(xtitle='Time', ytitle='Power')
        g.new_series(plotid=2)

        duration = pattern.duration
        lumens = pattern.lumens
        dt = pattern.period
        st = time.time()

        pid = PID()

        def update(c, e, o, cs, ss):
            g.record(c, plotid=0)
            g.record(e, plotid=1)
            g.record(o, plotid=2)

            img.set_image(cs, 0)
            img.set_image(ss, 1)

        while self._alive:

            if duration and time.time() - st > duration:
                break

            with PeriodCTX(dt):
                csrc, src, cl = sm.get_brightness()

                err = lumens - cl
                out = pid.get_value(err, dt)
                lm.set_laser_power(out)
                invoke_in_main_thread(update, (cl, err, out, csrc, src))
Ejemplo n.º 2
0
    def _execute_lumen_degas(self, controller, pattern):
        from pychron.core.pid import PID
        from pychron.core.ui.gui import invoke_in_main_thread
        from pychron.lasers.pattern.mv_viewer import MVViewer
        from pychron.graph.stream_graph import StreamStackedGraph
        from pychron.mv.mv_image import MVImage

        lm = self.laser_manager
        sm = lm.stage_manager

        g = StreamStackedGraph()

        img = MVImage()

        img.setup_images(2, sm.get_frame_size())

        mvviewer = MVViewer(graph=g, image=img)
        mvviewer.edit_traits()
        # g.edit_traits()

        g.new_plot(xtitle='Time', ytitle='Lumens')
        g.new_series()

        g.new_plot(xtitle='Time', ytitle='Error')
        g.new_series(plotid=1)

        g.new_plot(xtitle='Time', ytitle='Power')
        g.new_series(plotid=2)

        duration = pattern.duration
        lumens = pattern.lumens
        dt = pattern.period
        st = time.time()

        pid = PID()

        def update(c, e, o, cs, ss):
            g.record(c, plotid=0)
            g.record(e, plotid=1)
            g.record(o, plotid=2)

            img.set_image(cs, 0)
            img.set_image(ss, 1)

        while self._alive:

            if duration and time.time() - st > duration:
                break

            with PeriodCTX(dt):
                csrc, src, cl = sm.get_brightness()

                err = lumens - cl
                out = pid.get_value(err, dt)
                lm.set_laser_power(out)
                invoke_in_main_thread(update, (cl, err, out, csrc, src))
Ejemplo n.º 3
0
    def degas(self, lumens, duration):
        """
            degas for duration trying to maintain
            lumens
        """
        if self.laser_manager:
            self.laser_manager.fiber_light.power_off()

        g = self._make_graph(lumens, duration)
        if self._testing:
            self._test_graph = g
        else:
            self.laser_manager.auxilary_graph = g.plotcontainer

        cw, ch = 2 * self.crop_width * self.pxpermm, 2 * self.crop_height * self.pxpermm

        # if not cw % 5 == 0:
        #     cw += cw % 5
        # if not ch % 5 == 0:
        #     ch += ch % 5
        #
        # cw, ch = 200, 200

        im = MVImage()
        im.setup_images(1, (cw, ch))
        if self._testing:
            self._test_image = im
        else:
            self.view_image(im)

        self._detector = LumenDetector()
        dt = self._period

        pid = self.pid
        st = time.time()
        i = 0
        while 1:
            ct = time.time()
            tt = ct - st
            if not self.isAlive():
                break

            cl = self._get_current_lumens(im, cw, ch)

            err = lumens - cl
            out = pid.get_value(err, dt)
            g.add_data(((tt, out), (tt, err), (tt, cl)))

            self._set_power(out, i)

            if tt > duration:
                break
            et = time.time() - ct
            time.sleep(max(0, dt - et))

            i += 1
            if i > 1e6:
                i = 0

        if self.laser_manager:
            self.laser_manager.fiber_light.power_on()

        self.executing = False
Ejemplo n.º 4
0
    def degas(self, lumens, duration):
        """
            degas for duration trying to maintain
            lumens
        """
        if self.laser_manager:
            self.laser_manager.fiber_light.power_off()

        g = self._make_graph(lumens, duration)
        if self._testing:
            self._test_graph = g
        else:
            self.laser_manager.auxilary_graph = g.plotcontainer

        cw, ch = 2 * self.crop_width * self.pxpermm, 2 * self.crop_height * self.pxpermm

        # if not cw % 5 == 0:
        #     cw += cw % 5
        # if not ch % 5 == 0:
        #     ch += ch % 5
        #
        # cw, ch = 200, 200

        im = MVImage()
        im.setup_images(1, (cw, ch))
        if self._testing:
            self._test_image = im
        else:
            self.view_image(im)

        self._detector = LumenDetector()
        dt = self._period

        pid = self.pid
        st = time.time()
        i = 0
        while 1:
            ct = time.time()
            tt = ct - st
            if not self.isAlive():
                break

            cl = self._get_current_lumens(im, cw, ch)

            err = lumens - cl
            out = pid.get_value(err, dt)
            g.add_data(((tt, out), (tt, err), (tt, cl)))

            self._set_power(out, i)

            if tt > duration:
                break
            et = time.time() - ct
            time.sleep(max(0, dt - et))

            i += 1
            if i > 1e6:
                i = 0

        if self.laser_manager:
            self.laser_manager.fiber_light.power_on()

        self.executing = False
Ejemplo n.º 5
0
    def degas(self, lumens, duration):
        '''
            degas for duration trying to maintain
            lumens
        '''
        if self.laser_manager:
            self.laser_manager.fiber_light.power_off()

        g = self._make_graph(lumens, duration)
        if self._testing:
            self._test_graph = g
        else:
            self.laser_manager.auxilary_graph = g.plotcontainer

        cw, ch = 2 * self.crop_width * self.pxpermm, 2 * self.crop_height * self.pxpermm
        #         print cw, ch
        if not cw % 5 == 0:
            cw += cw % 5
        if not ch % 5 == 0:
            ch += ch % 5

        cw, ch = 200, 200
        #         im = self.new_image(
        # #                             frame=zeros((ch, cw)),
        #                             title='Luminosity', view_id='lumens')
        im = MVImage()
        im.setup_images(1, (cw, ch))
        if self._testing:
            self._test_image = im
        else:
            self.view_image(im)

        self._detector = LumenDetector()
        dt = self._period

        pid = self.pid
        st = time.time()
        i = 0
        while 1:
            ct = time.time()
            tt = ct - st
            if not self.isAlive():
                break

            cl = self._get_current_lumens(im, cw, ch)

            err = lumens - cl
            out = pid.get_value(err, dt)
            #             err = random.random()
            g.add_data(((tt, out), (tt, err), (tt, cl)))
            #             g.redraw()
            #             if i % 5 == 0:
            self._set_power(out, i)

            if tt > duration:
                break
            et = time.time() - ct
            time.sleep(max(0, dt - et))

            i += 1
            if i > 1e6:
                i = 0

        if self.laser_manager:
            self.laser_manager.fiber_light.power_on()

        self.executing = False