mirror of
https://github.com/slsdetectorgroup/aare.git
synced 2026-10-22 09:51:57 +02:00
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
# SPDX-License-Identifier: MPL-2.0
|
|
import numpy as np
|
|
import aare
|
|
|
|
|
|
|
|
def test_gaussian_model_evaluates_and_fits_data():
|
|
x = np.linspace(-5.0, 5.0, 51)
|
|
expected = np.array([20.0, 0.5, 1.2])
|
|
model = aare.Gaussian()
|
|
|
|
y = model(x, expected)
|
|
result = model.fit(x, y)
|
|
|
|
np.testing.assert_allclose(result["par"], expected, atol=2e-3)
|
|
|
|
|
|
def test_minimizer_can_be_selected_and_fumili_fits_data():
|
|
x = np.linspace(-5.0, 5.0, 51)
|
|
expected = np.array([20.0, 0.5, 1.2])
|
|
|
|
assert aare.Gaussian().minimizer == aare.Minimizer.Migrad
|
|
|
|
model = aare.Gaussian(minimizer=aare.Minimizer.Fumili)
|
|
assert model.minimizer == aare.Minimizer.Fumili
|
|
|
|
y = model(x, expected)
|
|
result = model.fit(x, y)
|
|
np.testing.assert_allclose(result["par"], expected, atol=2e-3)
|
|
|
|
model.minimizer = aare.Minimizer.Migrad
|
|
assert model.minimizer == aare.Minimizer.Migrad
|
|
|
|
|
|
def test_fumili_and_migrad_agree_on_3d_data_with_errors():
|
|
x = np.linspace(-5.0, 5.0, 51)
|
|
expected = np.array([20.0, 0.5, 1.2])
|
|
single = aare.Gaussian()(x, expected)
|
|
y = np.tile(single, (2, 3, 1))
|
|
y_err = np.ones_like(y)
|
|
|
|
migrad = aare.Gaussian(compute_errors=True)
|
|
fumili = aare.Gaussian(compute_errors=True, minimizer=aare.Minimizer.Fumili)
|
|
|
|
with_migrad = migrad.fit(x, y, y_err, n_threads=2)
|
|
with_fumili = fumili.fit(x, y, y_err, n_threads=2)
|
|
|
|
assert with_fumili["par"].shape == (2, 3, 3)
|
|
assert with_fumili["par_err"].shape == (2, 3, 3)
|
|
for result in (with_migrad, with_fumili):
|
|
np.testing.assert_allclose(result["par"], np.broadcast_to(expected, (2, 3, 3)), atol=2e-3)
|
|
np.testing.assert_allclose(result["chi2"], 0.0, atol=1e-3)
|
|
np.testing.assert_allclose(with_fumili["par_err"], with_migrad["par_err"], rtol=2e-2)
|