Skip to content

Commit c4f3b48

Browse files
authored
ULTRA add epoch_delta to pset (IMAP-Science-Operations-Center#2355)
* add epoch delta var
1 parent ce361be commit c4f3b48

6 files changed

Lines changed: 46 additions & 24 deletions

File tree

imap_processing/cdf/config/imap_ultra_l1c_variable_attrs.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,18 @@ shcoarse:
172172
# TODO: come back to format
173173
UNITS: seconds
174174

175+
epoch_delta:
176+
<<: *default
177+
CATDESC: Number of nanoseconds in spacecraft pointing covered by this pointing set product
178+
FIELDNAM: epoch delta
179+
UNITS: ns
180+
VAR_TYPE: support_data
181+
DISPLAY_TYPE: no_plot
182+
TIME_SCALE: Terrestrial Time
183+
SCALE_TYPE: linear
184+
FORMAT: I20
185+
dtype: int64
186+
175187
energy_bin_delta:
176188
<<: *default_float32
177189
CATDESC: Difference between the energy bin edges.

imap_processing/tests/ultra/unit/test_ultra_l1c_pset_bins.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,10 @@ def test_get_spacecraft_exposure_times(
302302
params,
303303
pixels_below_threshold,
304304
boundary_sf,
305-
data_start_time,
306-
data_start_time,
305+
(
306+
data_start_time,
307+
data_start_time,
308+
),
307309
pix,
308310
)
309311
np.testing.assert_array_equal(exposure_pointing.shape, (24, pix))

imap_processing/ultra/l1c/helio_pset.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,17 +128,16 @@ def calculate_helio_pset(
128128
healpix = np.arange(n_pix)
129129

130130
# Get midpoint timestamp for pointing.
131-
pointing_start, pointing_stop = get_pointing_times(
132-
et_to_met(species_dataset["event_times"].data[0])
131+
pointing_range_met = get_pointing_times(
132+
et_to_met(species_dataset["event_times"].mean())
133133
)
134134
logger.info("Calculating spacecraft exposure times with deadtime correction.")
135135
exposure_time, deadtime_ratios = get_spacecraft_exposure_times(
136136
rates_dataset,
137137
params_dataset,
138138
pixels_below_scattering,
139139
boundary_scale_factors,
140-
pointing_start,
141-
pointing_stop,
140+
pointing_range_met,
142141
n_pix=n_pix,
143142
)
144143
logger.info("Calculating spun efficiencies and geometric function.")
@@ -164,7 +163,7 @@ def calculate_helio_pset(
164163
nside=nside,
165164
)
166165

167-
mid_time = ttj2000ns_to_et(met_to_ttj2000ns((pointing_start + pointing_stop) / 2))
166+
mid_time = ttj2000ns_to_et(met_to_ttj2000ns((np.sum(pointing_range_met)) / 2))
168167

169168
logger.info("Adjusting data for helio frame.")
170169
exposure_time, _efficiency, geometric_function = get_helio_adjusted_data(
@@ -191,9 +190,13 @@ def calculate_helio_pset(
191190
helio_pset_quality_flags,
192191
nside=nside,
193192
)
194-
pointing_start = met_to_ttj2000ns(pointing_start)
193+
# Convert pointing start and end time to ttj2000ns
194+
pointing_range_ns = met_to_ttj2000ns(pointing_range_met)
195195
# Epoch should be the start of the pointing
196-
pset_dict["epoch"] = np.atleast_1d(pointing_start).astype(np.int64)
196+
pset_dict["epoch"] = np.atleast_1d(pointing_range_ns[0]).astype(np.int64)
197+
pset_dict["epoch_delta"] = np.atleast_1d(np.diff(pointing_range_ns)).astype(
198+
np.int64
199+
)
197200
pset_dict["counts"] = counts[np.newaxis, ...]
198201
pset_dict["latitude"] = latitude[np.newaxis, ...]
199202
pset_dict["longitude"] = longitude[np.newaxis, ...]

imap_processing/ultra/l1c/spacecraft_pset.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ def calculate_spacecraft_pset(
138138
sensitivity = efficiencies * geometric_function
139139

140140
# Get the start and stop times of the pointing period
141-
pointing_start, pointing_stop = get_pointing_times(
142-
float(et_to_met(species_dataset["event_times"].data[0]))
141+
pointing_range_met = get_pointing_times(
142+
float(et_to_met(species_dataset["event_times"].mean()))
143143
)
144144
# Calculate exposure times
145145
logger.info("Calculating spacecraft exposure times with deadtime correction.")
@@ -148,8 +148,7 @@ def calculate_spacecraft_pset(
148148
params_dataset,
149149
pixels_below_scattering,
150150
boundary_scale_factors,
151-
pointing_start,
152-
pointing_stop,
151+
pointing_range_met,
153152
n_pix=n_pix,
154153
)
155154
logger.info("Calculating background rates.")
@@ -179,10 +178,13 @@ def calculate_spacecraft_pset(
179178
spacecraft_pset_quality_flags,
180179
nside=nside,
181180
)
182-
# Convert pointing start time to ttj2000ns
183-
pointing_start = met_to_ttj2000ns(pointing_start)
181+
# Convert pointing start and end time to ttj2000ns
182+
pointing_range_ns = met_to_ttj2000ns(pointing_range_met)
184183
# Epoch should be the start of the pointing
185-
pset_dict["epoch"] = np.atleast_1d(pointing_start).astype(np.int64)
184+
pset_dict["epoch"] = np.atleast_1d(pointing_range_ns[0]).astype(np.int64)
185+
pset_dict["epoch_delta"] = np.atleast_1d(np.diff(pointing_range_ns)).astype(
186+
np.int64
187+
)
186188
pset_dict["counts"] = counts[np.newaxis, ...]
187189
pset_dict["latitude"] = latitude[np.newaxis, ...]
188190
pset_dict["longitude"] = longitude[np.newaxis, ...]

imap_processing/ultra/l1c/ultra_l1c_pset_bins.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,7 @@ def get_spacecraft_exposure_times(
415415
params_dataset: xr.Dataset,
416416
pixels_below_scattering: list[list],
417417
boundary_scale_factors: NDArray,
418-
pointing_start_met: float,
419-
pointing_stop_met: float,
418+
pointing_range_met: tuple[float, float],
420419
n_pix: int,
421420
) -> tuple[NDArray, NDArray]:
422421
"""
@@ -435,10 +434,8 @@ def get_spacecraft_exposure_times(
435434
below the FWHM scattering threshold.
436435
boundary_scale_factors : np.ndarray
437436
Boundary scale factors for each pixel at each spin phase.
438-
pointing_start_met : float
439-
Start time of the pointing period in mission elapsed time.
440-
pointing_stop_met : float
441-
Stop time of the pointing period in mission elapsed time.
437+
pointing_range_met : tuple
438+
Start and stop time of the pointing period in mission elapsed time.
442439
n_pix : int
443440
Number of HEALPix pixels.
444441
@@ -465,8 +462,8 @@ def get_spacecraft_exposure_times(
465462
spin_data = get_spin_data()
466463
# Filter for spins only in pointing
467464
spin_data = spin_data[
468-
(spin_data["spin_start_met"] >= pointing_start_met)
469-
& (spin_data["spin_start_met"] <= pointing_stop_met)
465+
(spin_data["spin_start_met"] >= pointing_range_met[0])
466+
& (spin_data["spin_start_met"] <= pointing_range_met[1])
470467
]
471468
# Get only valid spin data
472469
valid_mask = (spin_data["spin_phase_valid"].values == 1) & (

imap_processing/ultra/utils/ultra_l1_utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,12 @@ def create_dataset( # noqa: PLR0912
102102
"spin_phase_step",
103103
]:
104104
continue
105+
elif key == "epoch_delta":
106+
dataset[key] = xr.DataArray(
107+
data,
108+
dims=["epoch"],
109+
attrs=cdf_manager.get_variable_attributes(key, check_schema=False),
110+
)
105111
elif key in velocity_keys:
106112
dataset[key] = xr.DataArray(
107113
data,

0 commit comments

Comments
 (0)