Source code for schedview.collect.multisim

import astropy
import astropy.time
import pandas as pd
import rubin_scheduler
from lsst.resources import ResourcePath
from rubin_sim import maf

from ..compute.visits import add_coords_tuple
from .opsim import all_visits_columns, read_opsim


[docs] def read_multiple_opsims(archive_uri: str, sim_date: str, day_obs_mjd: int): """Read results of multiple simulations for a time period from an archive. Parameters ---------- archive_uri : `str` The URI of the sim archive. sim_date : `str` The date on which the simulations to be run. day_obs_mjd : `int` The day_obs MJD of the first night for which to load visits. Returns ------- visits : `pandas.DataFrame` Data on the visits. """ sims_metadata = rubin_scheduler.sim_archive.read_archived_sim_metadata( archive_uri, latest=sim_date, num_nights=1 ) visits_list = [] for sim_uri, sim_metadata in sims_metadata.items(): first_day_obs_mjd = astropy.time.Time(sim_metadata["simulated_dates"]["first"]).mjd last_day_obs_mjd = astropy.time.Time(sim_metadata["simulated_dates"]["last"]).mjd # Make mypy happy assert isinstance(first_day_obs_mjd, float) assert isinstance(last_day_obs_mjd, float) includes_day_obs = first_day_obs_mjd <= day_obs_mjd <= last_day_obs_mjd if not includes_day_obs: continue sim_rp = ResourcePath(sim_uri).join(sim_metadata["files"]["observations"]["name"]) these_visits = read_opsim( sim_rp, constraint=f"FLOOR(observationStartMJD-0.5)={day_obs_mjd}", stackers=[ maf.stackers.TeffStacker(), maf.stackers.ObservationStartDatetime64Stacker(), maf.stackers.DayObsStacker(), maf.stackers.DayObsMJDStacker(), maf.stackers.DayObsISOStacker(), maf.stackers.OverheadStacker(), ], dbcols=all_visits_columns(), ) these_visits = add_coords_tuple(these_visits) these_visits["sim_date"] = sim_uri.split("/")[-3] these_visits["sim_index"] = int(sim_uri.split("/")[-2]) for key in [ "label", "opsim_config_branch", "opsim_config_repository", "opsim_config_script", "scheduler_version", "sim_runner_kwargs", "tags", ]: these_visits[key] = [sim_metadata[key]] * len(these_visits) visits_list.append(these_visits) visits = pd.concat(visits_list) return visits