diff --git a/tests/test_thickness.py b/tests/test_thickness.py new file mode 100644 index 0000000..068b7ed --- /dev/null +++ b/tests/test_thickness.py @@ -0,0 +1,67 @@ +import pytest +import yaml +from pathlib import Path +import os.path + +import numpy as np +from numpy.testing import assert_allclose +from numpy.testing import assert_almost_equal + +from optifik.minmax import thickness_from_minmax +from optifik.analysis import smooth_intensities +from optifik.io import load_spectrum + + +def load(): + test_data_dir = Path(__file__).parent.parent / 'data' + FOLDER = test_data_dir / 'spectraLorene' / 'sample1' + + yaml_file = os.path.join(FOLDER, 'sample1.yaml') + with open(yaml_file, "r") as yaml_file: + thickness_dict = yaml.safe_load(yaml_file) + #print(thickness_dict) + data = [(os.path.join(FOLDER, fn), val) for fn, val in thickness_dict['known_thicknesses'].items()] + return data + + +def test_minmax_sample1(): + min_peak_prominence = 0.02 + min_peak_distance = 10 + skipped = ('011137.xy', + '012426.xy', + '012795.xy', + '012979.xy', + '011321.xy', #Insufficient number of data points + ) + + for path, expected in load(): + file = os.path.split(path)[-1] + if file not in skipped: + lambdas, raw_intensities = load_spectrum(path, wavelength_min=450) + smoothed_intensities = smooth_intensities(raw_intensities) + r_index = 1.33 #TODO + + prominence = 0.02 + distance = 10 + + result = thickness_from_minmax(lambdas, + smoothed_intensities, + refractive_index=r_index, + min_peak_prominence=prominence, + min_peak_distance=distance, + method='ransac', + plot=False) + + assert_allclose(result.thickness, expected, rtol=2.3e-1) + +#def test_fft_sample1(): +# for name, value in known_values.sample1['known_thicknesses'].items(): +# index = known_values.sample1['refractive_index'] +# # this method works only for large thicknesses +# if value < 3000: +# continue +# path = os.path.join('spectra', name) +# lambdas, intensities = io.load_spectrum(path, lambda_min=450) +# result = thickness_from_fft(lambdas, intensities, refractive_index=index,) +# error = 100 * np.abs(result.thickness - value) / value +# assert(error < 5)