示例#1
0
class WaveformThreadTest(unittest.TestCase):
    # np.set_printoptions(threshold='nan')
    def setUp(self):
        self.settings = ExperimentSettings()
        self.lp = LightPulse(self.settings)

    def test_init(self, mock_waveform_thread):
        WaveformThread(
            waveform=self.lp.create_waveform(),
            Channel='ao1',
            Time=np.float64(1.011),
            input_voltage_range=10.0,
            output_voltage_range=self.settings.output_voltage_range,
            input_sample_rate=self.settings.sample_rate,
            output_sample_rate=self.settings.output_sample_rate
        )
示例#2
0
class MeasurementHandlerTest(unittest.TestCase):
    # np.set_printoptions(threshold='nan')
    def setUp(self):
        self.settings = ExperimentSettings()

        self.lp = LightPulse(self.settings)

    def test__run_thread(self, mock_waveform_thread):

        mock_waveform_thread.return_value.time = 3
        mock_waveform_thread.return_value.Read_Data = np.array([])

        handler = MeasurementHandler()
        handler.add_to_queue(self.lp.create_waveform(), self.settings)
        # handler._run_thread()

    def test_single_measurement_no_averaging(self, mock_waveform_thread):

        handler = MeasurementHandler()
        handler.add_to_queue(self.lp.create_waveform(), self.settings)
        return_tuple = (np.array([1, 2, 3, 4, 5, 6]), np.array([0, 1]))

        with patch.object(handler, '_run_thread',
                          return_value=return_tuple) as method:
            test_dataset = handler.single_measurement()
            self.assertEqual(1, method.call_count)
            np.testing.assert_array_equal(
                test_dataset,
                np.array([[0, 1, 3, 5], [1, 2, 4, 6]])
            )

        self.assertEqual(len(handler._queue), 0)

    def test_single_measurement_with_averaging(self, mock_waveform_thread):
        # setup
        settings = ExperimentSettings()
        settings.averaging = 2
        handler = MeasurementHandler()
        return_tuple = [
            (np.array([2, 3, 4, 5, 6, 7]), np.array([0, 1])),
            (np.array([3, 4, 5, 6, 7, 8]), np.array([0, 1])),
        ]

        handler.add_to_queue(self.lp.create_waveform(), settings)

        with patch.object(handler, '_run_thread', side_effect=return_tuple) as method:
            # perform
            test_dataset = handler.single_measurement()

            # assert
            self.assertEqual(2, method.call_count)
            np.testing.assert_array_equal(
                test_dataset,
                np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]])
            )

        self.assertEqual(len(handler._queue), 0)


    def test_add_to_queue(self, mock_waveform_thread):
        handler = MeasurementHandler()
        handler.add_to_queue(self.lp.create_waveform(), self.settings)
        self.assertEqual(len(handler._queue), 1)

    @log_capture()
    def test_series_measurement_empty_queue(self, mock_waveform_thread,
                                            log_checker):

        handler = MeasurementHandler()

        observed_data_list = handler.series_measurement()
        self.assertEqual(
            len(observed_data_list), 0)

        log_checker.check(
            ('root', 'INFO', 'Total: 0 measurements performed'),
        )

    @log_capture()
    def test_series_measurement_one_in_queue(self, mock_waveform_thread,
                                             log_checker):

        # setup
        handler = MeasurementHandler()
        print(handler._queue)

        handler.add_to_queue(self.lp.create_waveform(), self.settings)
        side_effect_array = [
            np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]])
        ]

        with patch.object(handler, 'single_measurement',
                          side_effect=side_effect_array) as method:
            # perform
            observed_data_list = handler.series_measurement()

        # assert
        for observed_data in observed_data_list:
            np.testing.assert_array_equal(
                observed_data,
                np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]])
            )

        log_checker.check(
            ('root', 'INFO', 'Measurement #1 complete'),
            ('root', 'INFO', 'Total: 1 measurements performed'),
        )

    @log_capture()
    def test_series_measurement_multiple_queue(self, mock_waveform_thread,
                                               log_checker):

        side_effect_array = [
            np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]),
            np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]]),
            np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]])
        ]

        handler = MeasurementHandler()

        handler.add_to_queue(self.lp.create_waveform(), self.settings)
        handler.add_to_queue(self.lp.create_waveform(), self.settings)
        handler.add_to_queue(self.lp.create_waveform(), self.settings)

        with patch.object(handler, 'single_measurement',
                          side_effect=side_effect_array) as method:
            observed_data_list = handler.series_measurement()

        for observed_data in observed_data_list:
            np.testing.assert_array_equal(
                observed_data,
                np.array([[0, 2.5, 4.5, 6.5], [1, 3.5, 5.5, 7.5]])
            )
        log_checker.check(
            ('root', 'INFO', 'Measurement #1 complete'),
            ('root', 'INFO', 'Measurement #2 complete'),
            ('root', 'INFO', 'Measurement #3 complete'),
            ('root', 'INFO', 'Total: 3 measurements performed'),
        )
示例#3
0
class LightPulseTest(unittest.TestCase):
    # np.set_printoptions(threshold='nan')
    def setUp(self):
        self.lp = LightPulse(ExperimentSettings())

    # def test_init_

    def test_can_create_pulse_array(self):

        pulse_array = self.lp.create_waveform()
        self.assertTrue(np.any(pulse_array))

        # make value
        self.assertTrue(np.any(np.amax(pulse_array) < 150.0))

        self.assertTrue(self.lp.A > 0)

        initial_offset = int(1.2)
        np.testing.assert_array_equal(np.zeros(initial_offset),
                                      pulse_array[:initial_offset])

        final_offset = int(12.0)
        np.testing.assert_array_equal(np.zeros(final_offset),
                                      pulse_array[-final_offset:])

        self.assertEqual(len(pulse_array[initial_offset:-final_offset]), 1200)

    def test_scale_to_threshold(self):
        # setup tests
        self.lp.Voltage_Threshold = 0.08152173913043478
        voltage_waveform = 6 * np.ones(10)
        test_array = np.array([
            5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174,
            5.83695652174, 5.83695652174, 5.83695652174, 5.83695652174,
            5.83695652174, 5.83695652174
        ])

        #
        scaled_array = self.lp.scale_to_threshold(voltage_waveform)

        # assertions
        np.testing.assert_almost_equal(scaled_array,
                                       test_array,
                                       decimal=11,
                                       verbose=True)

    def test_final_pulse_array_function(self):
        example_array = np.loadtxt(
            "test/data/sample_sin_waveformthread_write_data.csv")
        self.lp.Waveform = "Sin"
        pulse_array = self.lp.create_waveform()
        np.savetxt('test_sine_array', pulse_array)
        np.testing.assert_almost_equal(pulse_array, example_array)

    def test_sin_function(self):
        pulse_array = self.lp.Sin(np.linspace(0, 1, 1200), 0.5)
        t = np.linspace(0, 1, 1200)
        amp = 0.5
        pi = np.pi
        np.testing.assert_array_equal(pulse_array,
                                      -(amp) * np.abs(np.sin(pi * t / t[-1])))

    def test_square_function(self):
        pulse_array = self.lp.Square(np.linspace(0, 5, 5), -6)
        self.assertTrue(np.all(pulse_array == (6 * np.ones(5))))

    # def test_cos_function(self):
    #     pass

    def test_triangle_function(self):
        pulse_array = self.lp.Triangle(np.arange(5), -4)
        self.assertTrue(np.all(pulse_array == np.array([0, 2, 4, 2, 0])))