def test_autocal_spec3(): """Test AutoCalibrator on spectrum 3.""" kernel = bq.GaussianPeakFilter(700, 50, 10) finder = bq.PeakFinder(spec3, kernel) cal = bq.AutoCalibrator(finder) cal.peakfinder.find_peaks(min_snr=3, xmin=100) assert len(cal.peakfinder.centroids) == 8 # this fit succeeds but misidentifies the lines cal.fit( [609.32, 1460.82], optional=[], gain_range=[0.1, 5.0], de_max=50.0, ) assert len(cal.fit_channels) == 2 assert np.isclose(cal.gain, 2.59, rtol=1e-2) # this fit correctly identifies the lines cal.fit( [609.32, 1460.82], optional=OPTIONAL, gain_range=[0.1, 5.0], de_max=50.0, ) assert len(cal.fit_channels) == 7 assert np.isclose(cal.gain, 2.02, rtol=1e-2)
def test_autocal_no_fit(): """Test AutoCalibrator with no valid fit found.""" kernel = bq.GaussianPeakFilter(500, 50, fwhm_at_0=10) finder = bq.PeakFinder(spec1, kernel) cal = bq.AutoCalibrator(finder) finder.find_peaks(min_snr=2, xmin=50) assert len(cal.peakfinder.centroids) == 8 with pytest.raises(bq.AutoCalibratorError): cal.fit( REQUIRED, optional=OPTIONAL, gain_range=[1, 2.0], de_max=20.0, )
def test_autocal_one_line(): """Test AutoCalibrator with one line.""" kernel = bq.GaussianPeakFilter(500, 50, fwhm_at_0=10) finder = bq.PeakFinder(spec1, kernel) cal = bq.AutoCalibrator(finder) finder.find_peaks(min_snr=8, xmin=50) assert len(cal.peakfinder.centroids) == 1 cal.fit( [1460.82], gain_range=[2.5, 4.0], de_max=20.0, ) assert len(cal.fit_channels) == 1 assert np.isclose(cal.gain, 3.01, rtol=1e-2)
def test_autocal_exceptions(): """Test AutoCalibrator exceptions.""" kernel = bq.GaussianPeakFilter(500, 50, fwhm_at_0=10) finder = bq.PeakFinder(spec1, kernel) # init error with pytest.raises(bq.AutoCalibratorError): cal = bq.AutoCalibrator(None) cal = bq.AutoCalibrator(finder) # only one peak found, but multiple energies required finder.find_peaks(min_snr=10, xmin=50) assert len(cal.peakfinder.centroids) == 1 with pytest.raises(bq.AutoCalibratorError): cal.fit( REQUIRED, gain_range=[2.5, 4.0], de_max=20.0, ) # multiple peaks found, but only one energy given finder.reset() finder.find_peaks(min_snr=1, xmin=50) assert len(cal.peakfinder.centroids) == 10 with pytest.raises(bq.AutoCalibratorError): cal.fit( [1460.82], gain_range=[2.5, 4.0], de_max=20.0, ) # more energies required than peaks found finder.reset() finder.find_peaks(min_snr=4, xmin=50) assert len(cal.peakfinder.centroids) == 4 with pytest.raises(bq.AutoCalibratorError): cal.fit( [238.63, 351.93, 609.32, 1460.82, 2614.3], gain_range=[2.5, 4.0], de_max=20.0, )
def test_autocal_spec4(): """Test AutoCalibrator on spectrum 4.""" kernel = bq.GaussianPeakFilter(2400, 120, 30) finder = bq.PeakFinder(spec4, kernel) cal = bq.AutoCalibrator(finder) cal.peakfinder.find_peaks(min_snr=3, xmin=100) assert len(cal.peakfinder.centroids) == 7 cal.fit( [356.0129, 661.657, 1460.82], optional=[911.20, 1120.294, 1620.50, 1764.49, 2118.514, 2614.3], gain_range=[0.3, 0.7], de_max=100.0, ) assert len(cal.fit_channels) == 4 assert np.isclose(cal.gain, 0.6133, rtol=1e-2)
def test_autocal_spec2(): """Test AutoCalibrator on spectrum 2.""" kernel = bq.GaussianPeakFilter(3700, 10, 5) finder = bq.PeakFinder(spec2, kernel) cal = bq.AutoCalibrator(finder) cal.peakfinder.find_peaks(min_snr=20, xmin=1000) assert len(cal.peakfinder.centroids) == 9 cal.fit( REQUIRED, optional=OPTIONAL, gain_range=[0.1, 0.6], de_max=5.0, ) assert len(cal.fit_channels) == 3 assert np.isclose(cal.gain, 0.3785, rtol=1e-2)
def test_autocal_plot(): """Test AutoCalibrator.plot.""" kernel = bq.GaussianPeakFilter(500, 50, fwhm_at_0=10) finder = bq.PeakFinder(spec1, kernel) cal = bq.AutoCalibrator(finder) finder.find_peaks(min_snr=1, xmin=50) assert len(cal.peakfinder.centroids) == 10 cal.fit( REQUIRED, optional=OPTIONAL, gain_range=[2.5, 4.0], de_max=20.0, ) plt.figure() cal.plot() plt.show()
def test_autocal_spec1(): """Test basic functionality of AutoCalibrator.""" kernel = bq.GaussianPeakFilter(500, 50, fwhm_at_0=10) finder = bq.PeakFinder(spec1, kernel) cal = bq.AutoCalibrator(finder) finder.find_peaks(min_snr=1, xmin=50) assert len(cal.peakfinder.centroids) == 10 cal.fit( REQUIRED, optional=OPTIONAL, gain_range=[2.5, 4.0], de_max=25.0, verbose=True, ) assert len(cal.fit_channels) == 7 assert np.isclose(cal.gain, 3.01, rtol=1e-2)