Esempio n. 1
0
    def test_peak_fitting(self):
        # first, a simple case
        params, residual = peaks.findAllPeaks(
            self.x,
            self.one_gauss,
        )
        np.testing.assert_allclose(params,
                                   self.one_gauss_params,
                                   atol=self.std / 2)
        params, residual = peaks.findAllPeaks(
            self.x, self.one_gauss, peak_find_method=PEAK_FINDING_DERIVATIVE)
        np.testing.assert_allclose(params,
                                   self.one_gauss_params,
                                   atol=self.std / 2)

        params, residual = peaks.findAllPeaks(self.x, self.two_gauss)
        np.testing.assert_allclose(params,
                                   self.two_gauss_params,
                                   atol=self.std / 2)
        params, residual = peaks.findAllPeaks(
            self.x, self.two_gauss, peak_find_method=PEAK_FINDING_DERIVATIVE)
        np.testing.assert_allclose(params,
                                   self.two_gauss_params,
                                   atol=self.std / 2)
        params, residual = peaks.findAllPeaks(self.x,
                                              self.noisy_two_gauss,
                                              rt_peak=None,
                                              filter=True,
                                              max_peaks=30,
                                              bigauss_fit=True,
                                              snr=1)
        np.testing.assert_allclose(params[1::4],
                                   self.two_gauss_params[1::3],
                                   atol=self.std / 2)
Esempio n. 2
0
    def test_segmenty_negatives(self):
        # Regression where a mostly positive dataset with negatives led to -inf values in the data array
        # due to np.max(segment_y) being 0 since all data was negative
        with open(os.path.join(self.data_dir, "peak_data.pickle"),
                  "rb") as peak_file:
            data = pickle.load(peak_file, encoding="latin1")

        x, y = data["invalid_operands"]
        params, res = peaks.findAllPeaks(
            x,
            y,
            max_peaks=-1,
            bigauss_fit=True,
            peak_find_method=PEAK_FINDING_DERIVATIVE,
        )
        means = params[1::4]
        desired = np.array([
            0.13515435795212014,
            0.33,
            1.474992882679938,
            1.799090776628427,
            2.1804381077669395,
            2.6350000000000002,
            3.227084689771589,
            3.617021549048893,
            4.903333333333333,
            5.296162908137783,
            5.8366172292356175,
        ])
        np.testing.assert_allclose(means, desired=desired, atol=0.1)
Esempio n. 3
0
 def test_experimental(self):
     # Experimental data
     x, y = self.peak_data["offset_fit"]
     params, residual = peaks.findAllPeaks(x,
                                           y,
                                           bigauss_fit=True,
                                           filter=True)
     np.testing.assert_allclose(
         params,
         np.array([
             13219262.587656807,
             46.821340819991505,
             0.06523272363478014,
             0.18374422913588656,
             3347200.309180678,
             47.497,
             0.6166821402545103,
             0.3817876338966981,
             1880722.1582992678,
             48.14756707645761,
             0.17537885391522443,
             0.4846763157315077,
             1473766.5256005626,
             49.52607160264086,
             0.020199999999999108,
             0.22250905781532157,
         ]),
         # The rtol is 1e-7, so we really don't care about the atol
         atol=20,
     )
Esempio n. 4
0
    def test_max_peaks_with_rt_peak_regression(self):
        with open(os.path.join(self.data_dir, 'peak_data.pickle'), 'rb') as peak_file:
            data = pickle.load(peak_file, encoding='latin1') if six.PY3 else pickle.load(peak_file)

        x, y = data['max_peaks_rt-peak-regression']
        params, residual = peaks.findAllPeaks(x, y, max_peaks=1, rt_peak=360, fit_mode=PEAK_FIT_MODE_FAST)
        np.testing.assert_allclose(params[1], desired=365.78, atol=0.1)
Esempio n. 5
0
 def test_peak_fitting(self):
     # first, a simple case
     params, residual = peaks.findAllPeaks(self.x, self.one_gauss,)
     np.testing.assert_allclose(params, self.one_gauss_params, atol=self.std/2)
     params, residual = peaks.findAllPeaks(self.x, self.two_gauss)
     # print(self.two_gauss, ',',peaks.gauss_ndim(self.x, params))
     np.testing.assert_allclose(params, self.two_gauss_params, atol=self.std/2)
     failures = 0
     for i in range(10):
         self.noisy_two_gauss = self.two_gauss + np.random.normal(0, 0.05, size=len(self.two_gauss))
         params, residual = peaks.findAllPeaks(self.x, self.noisy_two_gauss, rt_peak=-1, filter=True, max_peaks=30, bigauss_fit=True)
         # we compare just the means here because the amplitude and variance can change too much due to the noise for reliable testing, but manual
         # inspect reveals the fits to be accurate
         try:
             np.testing.assert_allclose(params[1::4], self.two_gauss_params[1::3], atol=self.std/2)
         except AssertionError:
             failures += 1
     self.assertLess(failures, 3)
Esempio n. 6
0
    def test_max_peaks(self):
        # Regression where relative-max is reporting 2 peaks when max_peaks is set to 1. This occurred
        # because we enforced max_peaks for each peak width when using the relative-max setting. Thus,
        # the max peak for each peak width was combined to the final peak report. The update was to
        # pick the peak_width with the lowest BIC.
        with open(os.path.join(self.data_dir, 'peak_data.pickle'), 'rb') as peak_file:
            data = pickle.load(peak_file, encoding='latin1') if six.PY3 else pickle.load(peak_file)

        x, y = data['max_peaks_relative-max']
        params, residual = peaks.findAllPeaks(x, y, max_peaks=1, peak_find_method=PEAK_FINDING_REL_MAX, fit_mode=PEAK_FIT_MODE_FAST)
        self.assertEqual(len(params), 3)
Esempio n. 7
0
    def test_max_peaks_with_rt_peak_regression(self):
        with open(os.path.join(self.data_dir, "peak_data.pickle"),
                  "rb") as peak_file:
            data = pickle.load(peak_file, encoding="latin1")

        x, y = data["max_peaks_rt-peak-regression"]
        params, residual = peaks.findAllPeaks(x,
                                              y,
                                              max_peaks=1,
                                              rt_peak=360,
                                              fit_mode=PEAK_FIT_MODE_FAST)
        np.testing.assert_allclose(params[1], desired=365.78, atol=0.1)
Esempio n. 8
0
    def test_fit_baseline_derivative(self):
        with open(os.path.join(self.data_dir, "peak_data.pickle"),
                  "rb") as peak_file:
            data = pickle.load(peak_file, encoding="latin1")

        x, y = data["max_peaks_rt-peak-regression"]
        params, residual = peaks.findAllPeaks(
            x,
            y,
            max_peaks=1,
            fit_baseline=True,
            rt_peak=328,
            peak_find_method="derivative",
            fit_mode=PEAK_FIT_MODE_FAST,
        )
        np.testing.assert_allclose(params[:3],
                                   desired=np.array([1320.60, 330.15, 4.22]),
                                   atol=10)
Esempio n. 9
0
    def test_baseline_correction_derivative(self):
        with open(os.path.join(self.data_dir, 'peak_data.pickle'), 'rb') as peak_file:
            data = pickle.load(peak_file, encoding='latin1') if six.PY3 else pickle.load(peak_file)

        x, y = data['max_peaks_rt-peak-regression']
        params, residual = peaks.findAllPeaks(
            x,
            y,
            max_peaks=1,
            baseline_correction=True,
            rt_peak=328,
            peak_find_method='derivative',
            fit_mode=PEAK_FIT_MODE_FAST,
        )
        np.testing.assert_allclose(
            params[:3],
            desired=np.array([1320.60, 330.15, 4.22]),
            atol=10
        )
Esempio n. 10
0
 def test_returns_with_bad_data(self):
     params, residual = peaks.findAllPeaks(np.array([1, 2, 3, 4, 5, 6]),
                                           np.array([0, 0, 0, 0, 0, 0]))
     self.assertEqual(len(params), 0)
     self.assertEqual(residual, np.inf)