Source code for crikit.measurement.tests.test_peakfind

"""
Testing for Hilbert transform method

Using the math relation a^2 / (a^2 + x^2) (Lorentz/Cauchy) has an 
analytical Hilbert transform: x^2 / (a^2 + x^2)
"""

import numpy as np
from numpy.testing import assert_allclose

from crikit.measurement.peakfind import PeakFinder

[docs]def test_peakfind(): x = np.linspace(0,100,1000) A = np.array([80, 100]) Omega = np.array([30, 50]) Sigma = np.array([3, 4]) y = np.zeros(x.shape) for a, o, s in zip(A, Omega, Sigma): y += a*np.exp(-(x-o)**2/(2*s**2)) noise_sigma = 0.001 noise = noise_sigma*np.random.randn(*x.shape) y_noisy = y + noise pkfind = PeakFinder(noise_sigma=noise_sigma, cwt_width=50, n_noise_tests=1000, cutoff_d1=None, cutoff_d2=None, verbose=False) print('\n====================================\n') pkfind.calculate(y, x=x, recalc_cutoff=True, method='fft') assert_allclose(np.array(Omega), pkfind.centers, rtol=0.01) assert_allclose(np.array(A), pkfind.amps, rtol=0.01) assert_allclose(np.array(Sigma), pkfind.sigmas, rtol=0.1) assert_allclose(np.array([False, False]), pkfind.shoulder) print('\nActual Center: {}'.format(Omega)) print('Calculated Centers: {}\n'.format(['{:.2f}'.format(x) for x in pkfind.centers])) print('\nActual Amplitudes: {}'.format(A)) print('Calculated Amplitudes: {}\n'.format(['{:.2f}'.format(x) for x in pkfind.amps])) print('\nActual Widths: {}'.format(Sigma)) print('Calculated Widths: {}\n'.format(['{:.2f}'.format(x) for x in pkfind.sigmas])) print('Is Shoulder: {}\n'.format(pkfind.shoulder))
if __name__ == '__main__': test_peakfind()