You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
249 lines
7.4 KiB
249 lines
7.4 KiB
import numpy |
|
import pandas |
|
import pytest |
|
|
|
|
|
def test_check_if_xdr_ready_ok(exposure_df): |
|
from sensospot_data.columns import ( |
|
SETTINGS_EXPOSURE_TIME, |
|
SETTINGS_EXPOSURE_CHANNEL, |
|
) |
|
from sensospot_data.dynamic_range import _check_if_xdr_ready |
|
|
|
exposure_df[SETTINGS_EXPOSURE_TIME] = 1 |
|
exposure_df[SETTINGS_EXPOSURE_CHANNEL] = 2 |
|
|
|
result = _check_if_xdr_ready(exposure_df) |
|
|
|
assert result is None |
|
|
|
|
|
@pytest.mark.parametrize(["run"], [[0], [1], [2]]) |
|
def test_check_if_xdr_ready_raises_error_missing_column(exposure_df, run): |
|
from sensospot_data.columns import ( |
|
SETTINGS_EXPOSURE_TIME, |
|
SETTINGS_EXPOSURE_CHANNEL, |
|
) |
|
from sensospot_data.dynamic_range import _check_if_xdr_ready |
|
|
|
columns = [SETTINGS_EXPOSURE_TIME, SETTINGS_EXPOSURE_CHANNEL, "X"] |
|
extra_col = columns[run] |
|
|
|
exposure_df[extra_col] = 1 |
|
|
|
with pytest.raises(ValueError): |
|
_check_if_xdr_ready(exposure_df) |
|
|
|
|
|
def test_check_if_xdr_ready_raises_error_mixed_channels(exposure_df): |
|
from sensospot_data.columns import ( |
|
META_DATA_EXPOSURE_ID, |
|
SETTINGS_EXPOSURE_TIME, |
|
SETTINGS_EXPOSURE_CHANNEL, |
|
) |
|
from sensospot_data.dynamic_range import _check_if_xdr_ready |
|
|
|
exposure_df[SETTINGS_EXPOSURE_TIME] = 1 |
|
exposure_df[SETTINGS_EXPOSURE_CHANNEL] = exposure_df[META_DATA_EXPOSURE_ID] |
|
|
|
with pytest.raises(ValueError): |
|
_check_if_xdr_ready(exposure_df) |
|
|
|
|
|
def test_check_if_xdr_ready_raises_error_non_numeric_time(exposure_df): |
|
from sensospot_data.columns import ( |
|
SETTINGS_EXPOSURE_TIME, |
|
SETTINGS_EXPOSURE_CHANNEL, |
|
) |
|
from sensospot_data.dynamic_range import _check_if_xdr_ready |
|
|
|
exposure_df[SETTINGS_EXPOSURE_TIME] = "X" |
|
exposure_df[SETTINGS_EXPOSURE_CHANNEL] = 2 |
|
|
|
with pytest.raises(ValueError): |
|
_check_if_xdr_ready(exposure_df) |
|
|
|
|
|
def test_check_if_xdr_ready_raises_error_on_nan(exposure_df): |
|
from sensospot_data.columns import ( |
|
SETTINGS_EXPOSURE_TIME, |
|
SETTINGS_EXPOSURE_CHANNEL, |
|
) |
|
from sensospot_data.dynamic_range import _check_if_xdr_ready |
|
|
|
exposure_df[SETTINGS_EXPOSURE_TIME] = numpy.nan |
|
exposure_df[SETTINGS_EXPOSURE_CHANNEL] = 2 |
|
|
|
with pytest.raises(ValueError): |
|
_check_if_xdr_ready(exposure_df) |
|
|
|
|
|
def test_check_overflow_limit_defaults(): |
|
from sensospot_data.columns import RAW_DATA_SPOT_SAT, CALC_SPOT_OVERFLOW |
|
from sensospot_data.dynamic_range import _calc_overflow_info |
|
|
|
data_frame = pandas.DataFrame(data={RAW_DATA_SPOT_SAT: [1, 2, 3]}) |
|
|
|
result = _calc_overflow_info(data_frame) |
|
|
|
assert list(result[CALC_SPOT_OVERFLOW]) == [False, False, True] |
|
|
|
|
|
def test_check_overflow_limit_custom_limit(): |
|
from sensospot_data.columns import CALC_SPOT_OVERFLOW |
|
from sensospot_data.dynamic_range import _calc_overflow_info |
|
|
|
data_frame = pandas.DataFrame(data={"X": [4, 2, 3, 4]}) |
|
|
|
result = _calc_overflow_info(data_frame, "X", 2) |
|
|
|
assert list(result[CALC_SPOT_OVERFLOW]) == [True, False, True, True] |
|
|
|
|
|
def test_reduce_overflow_multiple_times(normalization_data_frame): |
|
from sensospot_data.dynamic_range import ( |
|
PROBE_MULTI_INDEX, |
|
_reduce_overflow, |
|
_calc_overflow_info, |
|
) |
|
|
|
data_frame = _calc_overflow_info(normalization_data_frame, "Saturation", 1) |
|
result = _reduce_overflow(data_frame) |
|
|
|
sorted_results = result.sort_values(by=PROBE_MULTI_INDEX) |
|
|
|
assert list(sorted_results["Value"]) == [ |
|
1, |
|
2, |
|
3, |
|
1, |
|
10, |
|
10, |
|
10, |
|
10, |
|
100, |
|
100, |
|
100, |
|
100, |
|
] |
|
|
|
|
|
def test_reduce_overflow_only_one_exposure_time(normalization_data_frame): |
|
from sensospot_data.dynamic_range import ( |
|
SETTINGS_EXPOSURE_TIME, |
|
_reduce_overflow, |
|
_calc_overflow_info, |
|
) |
|
|
|
normalization_data_frame[SETTINGS_EXPOSURE_TIME] = 1 |
|
|
|
data_frame = _calc_overflow_info(normalization_data_frame, "Saturation", 1) |
|
result = _reduce_overflow(data_frame) |
|
|
|
assert list(result["Value"]) == list(normalization_data_frame["Value"]) |
|
|
|
|
|
def test_blend(normalization_data_frame): |
|
from sensospot_data.dynamic_range import PROBE_MULTI_INDEX, blend |
|
|
|
result = blend(normalization_data_frame, "Saturation", 1) |
|
|
|
sorted_results = result.sort_values(by=PROBE_MULTI_INDEX) |
|
|
|
assert list(sorted_results["Value"]) == [ |
|
1, |
|
2, |
|
3, |
|
1, |
|
10, |
|
10, |
|
10, |
|
10, |
|
100, |
|
100, |
|
100, |
|
100, |
|
] |
|
|
|
|
|
def test_blend_raises_error(normalization_data_frame): |
|
from sensospot_data.dynamic_range import SETTINGS_EXPOSURE_TIME, blend |
|
|
|
normalization_data_frame[SETTINGS_EXPOSURE_TIME] = "A" |
|
|
|
with pytest.raises(ValueError): |
|
blend(normalization_data_frame, "Saturation", 1) |
|
|
|
|
|
def test_normalize_values_no_param(normalization_data_frame): |
|
from sensospot_data.columns import RAW_DATA_NORMALIZATION_MAP |
|
from sensospot_data.dynamic_range import ( |
|
PROBE_MULTI_INDEX, |
|
blend, |
|
normalize_values, |
|
) |
|
|
|
reduced = blend(normalization_data_frame, "Saturation", 1) |
|
|
|
result = normalize_values(reduced) |
|
|
|
sorted_results = result.sort_values(by=PROBE_MULTI_INDEX) |
|
expected_values = [1, 4, 15, 1, 10, 10, 10, 10, 100, 100, 100, 100] |
|
|
|
for normalized_col in RAW_DATA_NORMALIZATION_MAP.values(): |
|
assert list(sorted_results[normalized_col]) == expected_values |
|
|
|
|
|
def test_normalize_values_custom_param(normalization_data_frame): |
|
from sensospot_data.columns import RAW_DATA_NORMALIZATION_MAP |
|
from sensospot_data.dynamic_range import ( |
|
PROBE_MULTI_INDEX, |
|
blend, |
|
normalize_values, |
|
) |
|
|
|
reduced = blend(normalization_data_frame, "Saturation", 1) |
|
|
|
result = normalize_values(reduced, 100) |
|
|
|
sorted_results = result.sort_values(by=PROBE_MULTI_INDEX) |
|
expected_values = [2, 8, 30, 2, 20, 20, 20, 20, 200, 200, 200, 200] |
|
|
|
for normalized_col in RAW_DATA_NORMALIZATION_MAP.values(): |
|
assert list(sorted_results[normalized_col]) == expected_values |
|
|
|
|
|
def test_normalize_values_preset_param(normalization_data_frame): |
|
from sensospot_data.columns import ( |
|
RAW_DATA_NORMALIZATION_MAP, |
|
SETTINGS_NORMALIZED_EXPOSURE_TIME, |
|
) |
|
from sensospot_data.dynamic_range import ( |
|
PROBE_MULTI_INDEX, |
|
blend, |
|
normalize_values, |
|
) |
|
|
|
reduced = blend(normalization_data_frame, "Saturation", 1) |
|
reduced[SETTINGS_NORMALIZED_EXPOSURE_TIME] = 100 |
|
|
|
result = normalize_values(reduced) |
|
|
|
sorted_results = result.sort_values(by=PROBE_MULTI_INDEX) |
|
expected_values = [2, 8, 30, 2, 20, 20, 20, 20, 200, 200, 200, 200] |
|
|
|
for normalized_col in RAW_DATA_NORMALIZATION_MAP.values(): |
|
assert list(sorted_results[normalized_col]) == expected_values |
|
|
|
|
|
def test_create_xdr(normalization_data_frame): |
|
from sensospot_data.columns import RAW_DATA_NORMALIZATION_MAP |
|
from sensospot_data.dynamic_range import PROBE_MULTI_INDEX, create_xdr |
|
|
|
result = create_xdr(normalization_data_frame, 100, "Saturation", 1) |
|
|
|
sorted_results = result.sort_values(by=PROBE_MULTI_INDEX) |
|
expected_values = [2, 8, 30, 2, 20, 20, 20, 20, 200, 200, 200, 200] |
|
|
|
for normalized_col in RAW_DATA_NORMALIZATION_MAP.values(): |
|
assert list(sorted_results[normalized_col]) == expected_values
|
|
|