Some simple tools for working with parsed Sensospot data.
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.
 
 

151 lines
3.5 KiB

import pytest
CSV_FULL_DATA = """
spot time background signal overflow
1 100 1 100 FALSE
1 10 2 200 FALSE
1 1 3 300 FALSE
2 100 4 400 TRUE
2 10 5 500 FALSE
2 1 6 600 FALSE
3 100 7 700 TRUE
3 10 8 800 TRUE
3 1 9 900 FALSE
4 100 10 1000 TRUE
4 10 11 1100 TRUE
4 1 12 1200 TRUE
"""
CSV_ONE_TIME_DATA = """
spot time background signal overflow
1 100 1 100 TRUE
2 100 2 200 FALSE
3 100 3 300 TRUE
"""
CSV_HDR_DATA = """
spot time background signal overflow
1 100 1 100 FALSE
2 10 5 500 FALSE
3 1 9 900 FALSE
4 1 12 1200 TRUE
"""
CSV_NORMALIZED_HDR_DATA = """
spot time background signal overflow n.background n.signal
1 100 1 100 FALSE 2 200
2 10 5 500 FALSE 100 1000
3 1 9 900 FALSE 1800 180000
4 1 12 1200 TRUE 2400 240000
"""
def csv_to_data_frame(text):
import io
import pandas
buffer = io.StringIO(text.strip())
return pandas.read_csv(buffer, sep="\t")
@pytest.fixture()
def full_source_data():
return csv_to_data_frame(CSV_FULL_DATA)
@pytest.fixture()
def one_time_source_data():
return csv_to_data_frame(CSV_ONE_TIME_DATA)
@pytest.fixture()
def hdr_data():
return csv_to_data_frame(CSV_HDR_DATA)
@pytest.fixture()
def hdr_normalized_data():
return csv_to_data_frame(CSV_HDR_DATA)
def test_select_hdr_data_full_data(full_source_data, hdr_data):
"""select the hdr data from a data frame with multiple exposure times"""
from sensospot_tools.hdr import select_hdr_data
result = select_hdr_data(
data=full_source_data,
spot_id_columns="spot",
time_column="time",
overflow_column="overflow",
)
for column in hdr_data.columns:
assert list(result[column]) == list(hdr_data[column])
def test_select_hdr_data_one_time(one_time_source_data):
"""select the hdr data from a data frame with only one exposure time"""
from sensospot_tools.hdr import select_hdr_data
result = select_hdr_data(
data=one_time_source_data,
spot_id_columns="spot",
time_column="time",
overflow_column="overflow",
)
for column in one_time_source_data.columns:
assert list(result[column]) == list(one_time_source_data[column])
def test_select_hdr_raises_error_on_wrong_column(one_time_source_data):
from sensospot_tools.hdr import select_hdr_data
with pytest.raises(KeyError):
select_hdr_data(
data=one_time_source_data,
spot_id_columns="spot",
time_column="time",
overflow_column="UNKNOWN",
)
def test_normalize(hdr_data, hdr_normalized_data):
from sensospot_tools.hdr import normalize
result = normalize(
hdr_data,
normalized_time=200,
time_column="time",
value_columns=["background", "signal"],
template="n.{}",
)
for column in hdr_normalized_data.columns:
assert list(result[column]) == list(hdr_normalized_data[column])
def test_normalize_raises_error_on_wrong_column(hdr_data):
from sensospot_tools.hdr import normalize
with pytest.raises(KeyError):
normalize(
hdr_data,
normalized_time=200,
time_column="time",
value_columns=["UNKONWN", "signal"],
)
def test_normalize_raises_error_no_templae_string(hdr_data):
from sensospot_tools.hdr import normalize
with pytest.raises(ValueError): # noqa: PT011
normalize(
hdr_data,
normalized_time=200,
time_column="time",
value_columns="signal",
template="NO TEMPLATE",
)