Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 0 additions & 50 deletions imap_processing/tests/ultra/unit/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -546,56 +546,6 @@ def ancillary_files():
}


@pytest.fixture
def deadtime_datasets():
"""Fixture to create params and rates datasets needed to calculate the spacecraft
exposure time."""
# Simulate a test rates dataset.
epoch = 200
test_l1a_rates_dataset = xr.Dataset(
{
"fifo_valid_events": (["epoch"], np.random.randint(100, 200, epoch)),
"event_active_time": (["epoch"], np.random.uniform(0, 10, epoch)),
"start_pos": (["epoch"], np.random.randint(0, 5, epoch)),
"start_rf": (["epoch"], np.random.randint(0, 5, epoch)),
"start_lf": (["epoch"], np.random.randint(0, 5, epoch)),
"coin_tn": (["epoch"], np.random.randint(0, 5, epoch)),
"coin_bn": (["epoch"], np.random.randint(0, 5, epoch)),
"stop_tn": (["epoch"], np.random.randint(0, 5, epoch)),
"stop_bn": (["epoch"], np.random.randint(0, 5, epoch)),
"shcoarse": (["epoch"], np.arange(epoch)),
"spin": (["epoch"], 127 + (np.arange(epoch) % (141 - 127))),
}
)
# Sector mode (image rates cadence = 3) happens 3 times a day (per pointing).
# each time the mode changes, it is recorded in the params packet.
# Create a test params dataset that simulates the mode changing to 3, 3 times.
modes = np.tile(np.arange(4), 3)
test_l1a_params_dataset = xr.Dataset(
{
"imageratescadence": (["epoch"], modes),
},
coords={"epoch": ("epoch", np.arange(0, epoch, epoch / len(modes)))},
)
return {"rates": test_l1a_rates_dataset, "params": test_l1a_params_dataset}


@pytest.fixture
def random_spin_data():
"""Fixture for random spin data."""
with (
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.get_spacecraft_spin_phase"
) as mock_spin_phases,
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.ttj2000ns_to_met"
) as mock_met,
):
mock_spin_phases.side_effect = lambda time: np.random.random(time.shape)
mock_met.side_effect = lambda time: time
yield


@pytest.fixture
def mock_spacecraft_pointing_lookups():
"""Test lookup tables fixture."""
Expand Down
9 changes: 2 additions & 7 deletions imap_processing/tests/ultra/unit/test_helio_pset.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

@pytest.mark.skip(reason="Long running test for validation purposes.")
def test_validate_exposure_time_and_sensitivities(
ancillary_files, deadtime_datasets, imap_ena_sim_metakernel
ancillary_files, rates_dataset, imap_ena_sim_metakernel
):
"""Validates exposure time and sensitivities for ebin 0."""
sens_filename = "SENS-IMAP_ULTRA_90-IMAP_DPS-HELIO-nside32-ebin0.csv"
Expand Down Expand Up @@ -68,10 +68,6 @@ def test_validate_exposure_time_and_sensitivities(
"imap_processing.ultra.l1c.helio_pset.get_pointing_times_from_id",
return_value=pointing_range_met,
),
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.ttj2000ns_to_met",
side_effect=lambda x: x,
),
# Mock deadtimes to be all ones
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins."
Expand All @@ -94,8 +90,7 @@ def test_validate_exposure_time_and_sensitivities(
pset = calculate_helio_pset(
l1b_de,
dataset,
deadtime_datasets["rates"],
deadtime_datasets["params"],
rates_dataset,
"imap_ultra_l1c_90sensor-heliopset",
ancillary_files,
90,
Expand Down
55 changes: 20 additions & 35 deletions imap_processing/tests/ultra/unit/test_spacecraft_pset.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@
@pytest.mark.external_test_data
@pytest.mark.external_kernel
def test_calculate_spacecraft_pset(
random_spin_data,
deadtime_datasets,
rates_dataset,
imap_ena_sim_metakernel,
use_fake_spin_data_for_time,
ancillary_files,
Expand All @@ -41,7 +40,10 @@ def test_calculate_spacecraft_pset(
"""Tests calculate_spacecraft_pset function."""
# Simulate a spin table from MET = 0 to MET = 141 * 15 seconds
use_fake_spin_data_for_time(start_met=0, end_met=141 * 15)

# Ensure rate dataset has correct time range
rates_dataset.shcoarse.data = np.linspace(
0, 141 * 15, len(rates_dataset.shcoarse.data)
)
# This is just setting up the data so that it is in the format of l1b_de_dataset.
test_path = TEST_PATH / "ultra-90_raw_event_data_shortened.csv"
df = pd.read_csv(test_path)
Expand Down Expand Up @@ -92,21 +94,14 @@ def test_calculate_spacecraft_pset(
},
attrs={"Repointing": "repoint00001"},
)
with (
mock.patch(
"imap_processing.ultra.l1c.spacecraft_pset.get_pointing_times_from_id",
return_value=(482374890.0, 482374000.0),
),
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.ttj2000ns_to_met",
side_effect=lambda x: x,
),
with mock.patch(
"imap_processing.ultra.l1c.spacecraft_pset.get_pointing_times_from_id",
return_value=(482374890.0, 482374000.0),
):
spacecraft_pset = calculate_spacecraft_pset(
test_l1b_de_dataset,
test_l1b_de_dataset, # placeholder for goodtimes_dataset
deadtime_datasets["rates"],
deadtime_datasets["params"],
rates_dataset,
"imap_ultra_l1c_45sensor-spacecraftpset",
ancillary_files,
45,
Expand All @@ -120,9 +115,8 @@ def test_calculate_spacecraft_pset(
@pytest.mark.external_test_data
@pytest.mark.external_kernel
def test_calculate_spacecraft_pset_with_cdf(
random_spin_data,
ancillary_files,
deadtime_datasets,
rates_dataset,
imap_ena_sim_metakernel,
use_fake_spin_data_for_time,
mock_spacecraft_pointing_lookups,
Expand All @@ -140,7 +134,10 @@ def test_calculate_spacecraft_pset_with_cdf(

de_dict["epoch"] = df_subset["epoch"].values
species_bin = np.full(len(df_subset), 1, dtype=np.uint8)

# Ensure rate dataset has correct time range
rates_dataset.shcoarse.data = np.linspace(
0, 141 * 15, len(rates_dataset.shcoarse.data)
)
# PosYSlit is True for left (start_type = 1)
# PosYSlit is False for right (start_type = 2)
start_type = np.where(df_subset["PosYSlit"].values, 1, 2)
Expand Down Expand Up @@ -181,21 +178,14 @@ def test_calculate_spacecraft_pset_with_cdf(
name = "imap_ultra_l1b_45sensor-de"
dataset = create_dataset(de_dict, name, "l1b")
dataset.attrs["Repointing"] = "repoint00000"
with (
mock.patch(
"imap_processing.ultra.l1c.spacecraft_pset.get_pointing_times_from_id",
return_value=(472374890.0, 582378000.0),
),
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.ttj2000ns_to_met",
side_effect=lambda x: x,
),
with mock.patch(
"imap_processing.ultra.l1c.spacecraft_pset.get_pointing_times_from_id",
return_value=(472374890.0, 582378000.0),
):
spacecraft_pset = calculate_spacecraft_pset(
dataset,
dataset, # placeholder for goodtimes_dataset
deadtime_datasets["rates"],
deadtime_datasets["params"],
rates_dataset,
"imap_ultra_l1c_45sensor-spacecraftpset",
ancillary_files,
45,
Expand All @@ -209,7 +199,7 @@ def test_calculate_spacecraft_pset_with_cdf(


@pytest.mark.skip(reason="Long running test for validation purposes.")
def test_validate_exposure_time_and_sensitivities(ancillary_files, deadtime_datasets):
def test_validate_exposure_time_and_sensitivities(ancillary_files, rates_dataset):
"""Validates exposure time and sensitivities for ebin 0."""
test_data = [
(
Expand Down Expand Up @@ -283,10 +273,6 @@ def test_validate_exposure_time_and_sensitivities(ancillary_files, deadtime_data
"imap_processing.ultra.l1c.spacecraft_pset.get_pointing_times_from_id",
return_value=pointing_range_met,
),
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.ttj2000ns_to_met",
side_effect=lambda x: x,
),
# Mock deadtimes to be all ones
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins."
Expand All @@ -309,8 +295,7 @@ def test_validate_exposure_time_and_sensitivities(ancillary_files, deadtime_data
pset = calculate_spacecraft_pset(
l1b_de,
dataset,
deadtime_datasets["rates"],
deadtime_datasets["params"],
rates_dataset,
"imap_ultra_l1c_90sensor-spacecraftpset",
ancillary_files,
90,
Expand Down
28 changes: 10 additions & 18 deletions imap_processing/tests/ultra/unit/test_ultra_l1c.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,8 @@ def test_ultra_l1c_error(mock_data_l1b_dict):
@pytest.mark.external_test_data
@pytest.mark.external_kernel
def test_calculate_spacecraft_pset_with_cdf(
random_spin_data,
ancillary_files,
deadtime_datasets,
rates_dataset,
imap_ena_sim_metakernel,
use_fake_spin_data_for_time,
mock_spacecraft_pointing_lookups,
Expand All @@ -138,7 +137,10 @@ def test_calculate_spacecraft_pset_with_cdf(
df_subset = df[df["pointing_number"] == pointing].copy()

de_dict = {}

# Ensure rate dataset has correct time range
rates_dataset.shcoarse.data = np.linspace(
0, 141 * 15, len(rates_dataset.shcoarse.data)
)
de_dict["epoch"] = df_subset["epoch"].values
species_bin = np.full(len(df_subset), 1, dtype=np.uint8)

Expand Down Expand Up @@ -184,18 +186,13 @@ def test_calculate_spacecraft_pset_with_cdf(
"imap_ultra_l1b_45sensor-de": dataset,
"imap_ultra_l1b_45sensor-extendedspin": dataset, # placeholder
"imap_ultra_l1b_45sensor-goodtimes": dataset, # placeholder
"imap_ultra_l1a_45sensor-rates": deadtime_datasets["rates"],
"imap_ultra_l1a_45sensor-params": deadtime_datasets["params"],
"imap_ultra_l1a_45sensor-rates": rates_dataset,
}
with (
mock.patch(
"imap_processing.ultra.l1c.spacecraft_pset.get_pointing_times_from_id",
return_value=(482374890.0, 482374000.0),
),
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.ttj2000ns_to_met",
side_effect=lambda x: x,
),
):
output_datasets = ultra_l1c(
data_dict, ancillary_files, "45sensor-spacecraftpset"
Expand All @@ -215,11 +212,10 @@ def test_calculate_spacecraft_pset_with_cdf(
@pytest.mark.external_test_data
@pytest.mark.external_kernel
def test_calculate_helio_pset_with_cdf(
random_spin_data,
ancillary_files,
imap_ena_sim_metakernel,
mock_helio_pointing_lookups,
deadtime_datasets,
rates_dataset,
use_fake_spin_data_for_time,
):
"""Tests ultra_l1c function with imported test data."""
Expand All @@ -230,10 +226,11 @@ def test_calculate_helio_pset_with_cdf(
)
df = pd.read_csv(TEST_PATH / "IMAP-Ultra45_r1_L1_V0_shortened.csv")

# Ensure rate dataset has correct time range
rates_dataset.shcoarse.data += 56970124
# Select a single pointing number
pointing = 0
df_subset = df[df["pointing_number"] == pointing].copy()

de_dict = {}

de_dict["epoch"] = df_subset["epoch"].values
Expand Down Expand Up @@ -283,8 +280,7 @@ def test_calculate_helio_pset_with_cdf(
"spin_number": ("epoch", np.zeros(5)),
}
), # placeholder
"imap_ultra_l1a_45sensor-rates": deadtime_datasets["rates"],
"imap_ultra_l1a_45sensor-params": deadtime_datasets["params"],
"imap_ultra_l1a_45sensor-rates": rates_dataset,
}
n_pix = hp.nside2npix(32)
mock_eff = np.ones((46, n_pix))
Expand All @@ -294,10 +290,6 @@ def test_calculate_helio_pset_with_cdf(
"imap_processing.ultra.l1c.helio_pset.get_pointing_times_from_id",
return_value=(482374890.0, 482374000.0),
),
mock.patch(
"imap_processing.ultra.l1c.ultra_l1c_pset_bins.ttj2000ns_to_met",
side_effect=lambda x: x,
),
# Mock efficiencies and geometric function to known values
mock.patch(
"imap_processing.ultra.l1c.helio_pset.get_efficiencies_and_geometric_function",
Expand Down
Loading
Loading