Compare commits

..

4 commits

Author SHA1 Message Date
François Boulogne
481f15ef7a populate git ignore 2025-06-25 11:50:10 +02:00
François Boulogne
99bbb51fc1 add gitignore 2025-06-25 11:49:20 +02:00
François Boulogne
28077e2853 add licence 2025-06-25 11:48:59 +02:00
François Boulogne
cd06da8c8b add test 2025-06-25 11:48:48 +02:00
5 changed files with 88 additions and 1 deletions

10
.gitignore vendored Normal file
View file

@ -0,0 +1,10 @@
__pycache__
.backups
optifik.egg-info
*.bak
*.pyc
.ipynb_checkpoints
.venv
build/
_build/
dist/

4
CHANGELOG.md Normal file
View file

@ -0,0 +1,4 @@
# x.x.x
First version

View file

@ -1,5 +1,7 @@
# Optifik
TODO: write a paragraph here...
This library replaces oospectro.
@ -48,3 +50,7 @@ cd docs
make html
```
## Licence
The source code is released under the GNU General Public License v3.0.
See LICENSE for details.

View file

@ -6,7 +6,7 @@ authors = [
{ name = "François Boulogne", email = "francois.boulogne@cnrs.fr" },
{ name = "Victor Ziapkoff", email = "victor.ziapkoff@universite-paris-saclay.fr" },
]
license = "GPL-3.0-or-later"
license = "GPL-3.0"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [

67
tests/test_thickness.py Normal file
View file

@ -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)