Ejemplo n.º 1
0
    def processed_data(cls, tid, shape, *,
                       gen='random',
                       dtype=config['SOURCE_PROC_IMAGE_DTYPE'],
                       roi_histogram=False,
                       histogram=False,
                       correlation=False,
                       binning=False,
                       **kwargs):

        processed = ProcessedData(tid)
        imgs = cls._gen_images(gen, shape, dtype)
        processed.image = ImageData.from_array(imgs, **kwargs)

        if roi_histogram:
            pass

        if histogram:
            hist = processed.hist
            hist.hist = np.arange(10)
            hist.bin_centers = np.arange(10) / 100.
            hist.mean, hist.median, hist.std = 1., 0, 0.1

        if correlation:
            pass

        if binning:
            pass

        return processed
Ejemplo n.º 2
0
    def testGeneral(self):
        # ---------------------
        # pulse-resolved data
        # ---------------------

        data = ProcessedData(1234)

        self.assertEqual(1234, data.tid)
        self.assertEqual(0, data.n_pulses)

        data.image = ImageData.from_array(np.zeros((1, 2, 2)))
        self.assertEqual(1, data.n_pulses)

        data = ProcessedData(1235)
        data.image = ImageData.from_array(np.zeros((3, 2, 2)))
        self.assertEqual(3, data.n_pulses)

        # ---------------------
        # train-resolved data
        # ---------------------

        data = ProcessedData(1236)
        data.image = ImageData.from_array(np.zeros((2, 2)))

        self.assertEqual(1236, data.tid)
        self.assertEqual(1, data.n_pulses)
Ejemplo n.º 3
0
    def testBin1dHist(self):
        from extra_foam.gui.windows.binning_w import Bin1dHist

        widget = Bin1dHist()
        widget._data = ProcessedData(1)

        widget.refresh()
Ejemplo n.º 4
0
    def testBulletinView(self):
        processed = ProcessedData(1357)

        processed.image = ImageData.from_array(np.ones((10, 4, 4), np.float32))
        processed.image.dark_count = 99
        processed.image.n_dark_pulses = 10
        processed.pidx.mask([1, 3, 5, 6])
        self.gui._queue.append(processed)
        self.image_tool.updateWidgetsF()

        view = self.image_tool._bulletin_view
        self.assertEqual(1357, int(view._latest_tid.intValue()))
        self.assertEqual(10, int(view._n_total_pulses.intValue()))
        self.assertEqual(6, int(view._n_kept_pulses.intValue()))
        self.assertEqual(99, int(view._dark_train_counter.intValue()))
        self.assertEqual(10, int(view._n_dark_pulses.intValue()))
Ejemplo n.º 5
0
    def testGeneral(self):
        from extra_foam.gui.windows.correlation_w import CorrelationPlot

        for i in range(2):
            widget = CorrelationPlot(0)
            widget._data = ProcessedData(1)
            widget.refresh()
Ejemplo n.º 6
0
    def processed_data(cls,
                       tid,
                       shape,
                       *,
                       gen='random',
                       dtype=config['SOURCE_PROC_IMAGE_DTYPE'],
                       roi_histogram=False,
                       histogram=False,
                       correlation=False,
                       binning=False,
                       **kwargs):

        processed = ProcessedData(tid)
        imgs = cls._gen_images(gen, shape, dtype)
        processed.image = ImageData.from_array(imgs, **kwargs)

        if roi_histogram:
            pass

        if histogram:
            hist = processed.hist
            hist.hist = np.arange(10)
            hist.bin_centers = np.arange(10) / 100.
            hist.mean, hist.median, hist.std = 1., 0, 0.1

        if correlation:
            corr_resolution = 2
            for i in range(2):
                corr = processed.corr[i]
                if i == 0:
                    data = SimplePairSequence()
                else:
                    data = OneWayAccuPairSequence(corr_resolution)

                for j in range(5):
                    data.append((j, 5 * j))

                corr.x, corr.y = data.data()
                corr.source = f"abc - {i}"
                corr.resolution = 0 if i == 0 else corr_resolution

        if binning:
            pass

        return processed
Ejemplo n.º 7
0
    def testHeatmap1D(self):
        from extra_foam.gui.windows.binning_w import Bin1dHeatmap

        widget = Bin1dHeatmap()
        widget._data = ProcessedData(1)

        # test "Auto level" reset
        widget._auto_level = True
        widget.refresh()
        self.assertFalse(widget._auto_level)
Ejemplo n.º 8
0
    def testHeatmap2D(self):
        from extra_foam.gui.windows.binning_w import Bin2dHeatmap

        for is_count in [False, True]:
            widget = Bin2dHeatmap(count=is_count)
            widget._data = ProcessedData(1)

            # test "Auto level" reset
            widget._auto_level = True
            widget.refresh()
            self.assertFalse(widget._auto_level)
Ejemplo n.º 9
0
    def testBulletinView(self):
        processed = ProcessedData(1357)

        processed.image = ImageData.from_array(np.ones((10, 4, 4), np.float32))
        processed.image.dark_count = 99
        processed.image.n_dark_pulses = 10
        processed.pidx.mask([1, 3, 5, 6])
        self.gui._queue.append(processed)
        self.image_tool.updateWidgetsF()

        view = self.image_tool._bulletin_view
        self.assertEqual(1357, int(view._displayed_tid.intValue()))
        self.assertEqual(10, int(view._n_total_pulses.intValue()))
        self.assertEqual(6, int(view._n_kept_pulses.intValue()))
        self.assertEqual(99, int(view._dark_train_counter.intValue()))
        self.assertEqual(10, int(view._n_dark_pulses.intValue()))

        with patch.object(view._mon, "reset_process_count") as reset:
            view._reset_process_count_btn.clicked.emit()
            reset.assert_called_once()
Ejemplo n.º 10
0
    def testFomHist(self):
        from extra_foam.gui.windows.histogram_w import FomHist

        widget = FomHist()

        # empty data
        widget._data = ProcessedData(1)
        widget.refresh()

        # non-empty data
        widget._data = self.processed_data(1001, (4, 2, 2), histogram=True)
        widget.refresh()
Ejemplo n.º 11
0
    def testPoiRoiHist(self):
        from extra_foam.gui.windows.pulse_of_interest_w import PoiRoiHist

        widget = PoiRoiHist(0)

        # empty data
        data = ProcessedData(1)
        widget.updateF(data)

        # non-empty data
        data = self.processed_data(1001, (4, 2, 2), histogram=True)
        widget.updateF(data)
Ejemplo n.º 12
0
    def _get_data(self, pulse_resolved=True):
        processed = ProcessedData(1001)

        if pulse_resolved:
            processed.pulse.roi.roi1.fom = [
                10, 20, 30, 40, 20, 30, 20, 10, 40, 10
            ]
        else:
            processed.roi.roi1.fom = 10

        data = {'tid': 1001, 'processed': processed, 'raw': dict()}
        return data, processed
Ejemplo n.º 13
0
    def testCorrectedView(self):
        from extra_foam.gui.image_tool.corrected_view import CorrectedView

        # pulse-resolved

        view = CorrectedView(pulse_resolved=True, parent=self.gui)
        # empty data
        data = ProcessedData(1)
        view._corrected.updateF(data)
        view._roi_hist.updateF(data)
        # non-empty data
        data = self.processed_data(1001, (2, 2), roi_histogram=True)
        view._roi_hist.updateF(data)

        # train-resolved

        view = CorrectedView(pulse_resolved=False, parent=self.gui)
        # empty data
        data = ProcessedData(1)
        view._roi_hist.updateF(data)
        # non-empty data
        data = self.processed_data(1001, (2, 2), roi_histogram=True)
        view._roi_hist.updateF(data)
Ejemplo n.º 14
0
    def testCorrectedView(self):

        # pulse-resolved

        view = CorrectedView(pulse_resolved=True, parent=self.gui)

        # empty data
        data = ProcessedData(1)
        view.updateF(data, True)

        # non-empty data
        data = self.processed_data(1001, (2, 2), roi_histogram=True)
        view.updateF(data, True)

        # train-resolved

        view = CorrectedView(pulse_resolved=False, parent=self.gui)
        # empty data
        data = ProcessedData(1)
        view.updateF(data, True)

        # non-empty data
        data = self.processed_data(1001, (2, 2), roi_histogram=True)
        view.updateF(data, True)
Ejemplo n.º 15
0
    def testAzimuthalIntegrationView(self):

        # pulse-resolved

        view = AzimuthalInteg1dView(pulse_resolved=True, parent=self.gui)
        # empty data
        data = ProcessedData(1)
        view.updateF(data, True)

        # non-empty data
        data = self.processed_data(1001, (2, 2))
        data.ai.x = np.arange(10)
        data.ai.y = np.arange(10)
        view.updateF(data, True)
        data.ai.peaks = np.arange(10)
        with patch.object(view._azimuthal_integ_1d_curve,
                          "setAnnotationList") as mocked:
            view._azimuthal_integ_1d_curve.updateF(data)
            mocked.assert_called_once()
Ejemplo n.º 16
0
    def testRoiImageView(self):
        widget = RoiImageView(1)
        widget.setImage = MagicMock()
        processed = ProcessedData(1)
        processed.image.masked_mean = np.ones((3, 3))

        # invalid ROI rect
        self.assertListEqual(RectRoiGeom.INVALID, list(processed.roi.geom1.geometry))
        widget.updateF(processed)
        widget.setImage.assert_not_called()

        # invalid ROI rect
        processed.roi.geom1.geometry = [0, 0, -1, 0]
        widget.updateF(processed)
        widget.setImage.assert_not_called()

        # valid ROI rect
        processed.roi.geom1.geometry = [0, 0, 2, 2]
        widget.updateF(processed)
        widget.setImage.assert_called_once()
Ejemplo n.º 17
0
    def testPoiImageView(self):
        from extra_foam.gui.windows.pulse_of_interest_w import PoiImageView

        widget = PoiImageView(0)
        data = ProcessedData(1)
        widget.updateF(data)
Ejemplo n.º 18
0
    def data_with_assembled(cls, tid, shape, *,
                            src_type=DataSource.BRIDGE,
                            dtype=config['SOURCE_PROC_IMAGE_DTYPE'],
                            gen='random',
                            slicer=None,
                            with_xgm=False,
                            with_digitizer=False,
                            **kwargs):
        imgs = cls._gen_images(gen, shape, dtype)

        processed = ProcessedData(tid)

        processed.image = ImageData.from_array(imgs, **kwargs)

        if imgs.ndim == 2:
            slicer = None
        else:
            slicer = slice(None, None) if slicer is None else slicer

        src_list = [('Foo', 'oof'), ('Bar', 'rab'), ('karaboFAI', 'extra_foam')]
        src_name, key_name = random.choice(src_list)

        catalog = SourceCatalog()
        ctg = 'ABCD'
        src = f'{src_name} {key_name}'
        catalog.add_item(SourceItem(ctg, src_name, [], key_name, slicer, None))
        catalog._main_detector = src

        n_pulses = processed.n_pulses

        if with_xgm:
            # generate XGM data
            processed.pulse.xgm.intensity = np.random.rand(n_pulses)
            processed.xgm.intensity = random.random()
            processed.xgm.x = random.random()
            processed.xgm.y = random.random()

        if with_digitizer:
            # generate digitizer data
            digitizer = processed.pulse.digitizer
            digitizer.ch_normalizer = 'B'
            for ch in digitizer:
                digitizer[ch].pulse_integral = np.random.rand(n_pulses)

        data = {
            'processed': processed,
            'catalog': catalog,
            'meta': {
                src: {
                    'timestamp.tid': tid,
                    'source_type': src_type,
                }
            },
            'raw': {
                src: dict()
            },
            'assembled': {
                'data': imgs,
            }
        }
        if imgs.ndim == 2:
            data['assembled']['sliced'] = imgs
        else:
            data['assembled']['sliced'] = imgs[slicer]

        return data, processed
Ejemplo n.º 19
0
    def testPumpProbeImageView(self):
        from extra_foam.gui.windows.pump_probe_w import PumpProbeImageView

        widget = PumpProbeImageView()
        data = ProcessedData(1)
        widget.updateF(data)
Ejemplo n.º 20
0
    def testPumpProbeVFomPlot(self):
        from extra_foam.gui.windows.pump_probe_w import PumpProbeVFomPlot

        widget = PumpProbeVFomPlot()
        data = ProcessedData(1)
        widget.updateF(data)
Ejemplo n.º 21
0
    def testInTrainFomPlot(self):
        from extra_foam.gui.windows.histogram_w import InTrainFomPlot

        widget = InTrainFomPlot()
        data = ProcessedData(1)
        widget.updateF(data)
Ejemplo n.º 22
0
    def testPumpProbeFomPlot(self):
        from extra_foam.gui.windows.pump_probe_w import PumpProbeFomPlot

        widget = PumpProbeFomPlot()
        widget._data = ProcessedData(1)
        widget.refresh()