def test_relative_peak_width_updates_distributions(self):
        generator = BraggPeakEventGenerator(['5.431 5.431 5.431', 'F d -3 m', 'Si 0 0 0 1.0 0.01'], 3.0, 4.0,
                                            MockTOFFactorCalculator([2500.]))

        with patch.object(generator, '_update_distributions_and_weights') as mock_method:
            generator.relative_peak_width = 4.0
            self.assertEquals(generator.relative_peak_width, 4.0)

        self.assertEqual(mock_method.call_count, 1,
                         '_update_distributions_and_weights has been called the wrong number of times when setting relative_peak_width: {}'.format(
                             mock_method.call_count))
    def test_get_events(self):
        generator = BraggPeakEventGenerator(['5.431 5.431 5.431', 'F d -3 m', 'Si 0 0 0 1.0 0.01'], 3.0, 4.0,
                                            MockTOFFactorCalculator([2500.]))

        generator.relative_peak_width = 0.0001

        # Generates events only for one peak, and only for one detector.
        events = generator.get_events(10)

        # All events should have the same detector id
        self.assertTrue(np.all(events['detector_id'] == 0))

        # The TOFs should correspond to d values of roughly 5.431 / sqrt(3)
        delta_d_values = np.fabs((events['tof'] / 2500. * np.sqrt(3)) - 5.431)
        self.assertTrue(np.all(delta_d_values < 2e-3))