57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import numpy as np
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.skip("volatile")
|
|
def test_compute_scmos_offset_and_variance_map():
|
|
from navigate.model.analysis.camera import compute_scmos_offset_and_variance_map
|
|
|
|
mu, sig = 100 * np.random.rand() + 1, 100 * np.random.rand() + 1
|
|
im = sig * np.random.randn(256, 256, 256) + mu
|
|
|
|
offset, variance = compute_scmos_offset_and_variance_map(im)
|
|
|
|
print(mu, sig)
|
|
# TODO: 1 is a bit high?
|
|
np.testing.assert_allclose(offset, mu, rtol=1)
|
|
np.testing.assert_allclose(variance, sig * sig, rtol=1)
|
|
|
|
|
|
@pytest.mark.parametrize("local", [True, False])
|
|
def test_compute_flatfield_map(local):
|
|
from navigate.model.analysis.camera import compute_flatfield_map
|
|
|
|
image = np.ones((256, 256))
|
|
offset = np.zeros((256, 256))
|
|
ffmap = compute_flatfield_map(image, offset, local)
|
|
|
|
np.testing.assert_allclose(ffmap, 0.5)
|
|
|
|
|
|
def test_compute_noise_sigma():
|
|
from navigate.model.analysis.camera import compute_noise_sigma
|
|
|
|
Fn = np.random.rand()
|
|
qe = np.random.rand()
|
|
S = np.random.rand(256, 256)
|
|
Ib = np.random.rand()
|
|
Nr = np.random.rand()
|
|
M = np.random.rand()
|
|
sigma = compute_noise_sigma(Fn=Fn, qe=qe, S=S, Ib=Ib, Nr=Nr, M=M)
|
|
sigma_true = np.sqrt(Fn * Fn * qe * (S + Ib) + (Nr / M) ** 2)
|
|
|
|
np.testing.assert_allclose(sigma, sigma_true)
|
|
|
|
|
|
def test_compute_signal_to_noise():
|
|
from navigate.model.analysis.camera import compute_signal_to_noise
|
|
|
|
A = np.random.rand() * 100 + 10
|
|
image = A * np.ones((256, 256))
|
|
offset = np.zeros((256, 256))
|
|
variance = 3 * A * A * np.ones((256, 256))
|
|
|
|
snr = compute_signal_to_noise(image, offset, variance)
|
|
|
|
np.testing.assert_allclose(snr, 0.5, rtol=0.2)
|