Source code for jwql.utils.mast_utils

"""Various utility functions for interacting with MAST

Authors
-------

    - Bryan Hilbert

Use
---

    This module can be imported as such:

    >>> import mast_utils
    results = mast_utils.mast_query('nircam', 'NRCA1_FULL', 'NRC_DARK', 53005.1, 53005.2)

 """

from jwql.jwql_monitors import monitor_mast
from jwql.utils.constants import JWST_DATAPRODUCTS, JWST_INSTRUMENT_NAMES_MIXEDCASE


[docs]def mast_query(instrument, templates, start_date, end_date, aperture=None, detector=None, filter_name=None, pupil=None, grating=None, readpattern=None, lamp=None): """Use ``astroquery`` to search MAST for data for given observation templates over a given time range Parameters ---------- instrument : str Instrument name (e.g. ``nircam``) templates : str or list Single, or list of, templates for the query (e.g. ``NRC_DARK``, ``MIR_FLATMRS``) start_date : float Starting date for the search in MJD end_date : float Ending date for the search in MJD aperture : str Detector aperture to search for (e.g. ``NRCA1_FULL``) detector : str Detector name (e.g. ``MIRIMAGE``) filter_name : str Fitler element (e.g. ``F200W``) pupil : str Pupil element (e.g. ``F323N``) grating : str Grating element (e.g. ``MIRROR``) readpattern : str Detector read out pattern (e.g. ``NISRAPID``) lamp : str Lamp name (e.g. ``LINE2``) Returns ------- query_results : list List of dictionaries containing the query results """ # If a single template name is input as a string, put it in a list if isinstance(templates, str): templates = [templates] # Make sure instrument is correct case instrument = JWST_INSTRUMENT_NAMES_MIXEDCASE[instrument.lower()] # monitor_mast.instrument_inventory does not allow list inputs to # the added_filters input (or at least if you do provide a list, then # it becomes a nested list when it sends the query to MAST. The # nested list is subsequently ignored by MAST.) # So query once for each flat template, and combine outputs into a # single list. query_results = [] for template_name in templates: # Create dictionary of parameters to add parameters = {"date_obs_mjd": {"min": start_date, "max": end_date}, "exp_type": template_name} if detector is not None: parameters["detector"] = detector if aperture is not None: parameters["apername"] = aperture if filter_name is not None: parameters["filter"] = filter_name if pupil is not None: parameters["pupil"] = pupil if grating is not None: parameters["grating"] = grating if readpattern is not None: parameters["readpatt"] = readpattern if lamp is not None: parameters["lamp"] = lamp query = monitor_mast.instrument_inventory(instrument, dataproduct=JWST_DATAPRODUCTS, add_filters=parameters, return_data=True, caom=False) if len(query['data']) > 0: query_results.extend(query['data']) return query_results
[docs]def mast_query_miri(detector, aperture, templates, start_date, end_date): """Use ``astroquery`` to search MAST for data for given observation templates over a given time range for MIRI. MIRI is different than the other instruments in that (to find full frame flats and darks at least) you need to use the detector name rather than the aperture name. There is no full frame aperture name for the MRS detectors. Parameters ---------- detector : str Name of the detector to search for. One of ``MIRIMAGE``, ``MIRIFULONG``, ``MIRIFUSHORT``. aperture : str Aperture name on the detector (e.g. ``MIRIM_FULL``) templates : str or list Single, or list of, templates for the query (e.g. ``NRC_DARK``, ``MIR_FLATMRS``) start_date : float Starting date for the search in MJD end_date : float Ending date for the search in MJD Returns ------- query_results : list List of dictionaries containing the query results """ # If a single template name is input as a string, put it in a list if isinstance(templates, str): templates = [templates] instrument = 'MIRI' # monitor_mast.instrument_inventory does not allow list inputs to # the added_filters input (or at least if you do provide a list, then # it becomes a nested list when it sends the query to MAST. The # nested list is subsequently ignored by MAST.) # So query once for each flat template, and combine outputs into a # single list. query_results = [] for template_name in templates: # Create dictionary of parameters to add if aperture.lower() != 'none': parameters = {"date_obs_mjd": {"min": start_date, "max": end_date}, "detector": detector, "apername": aperture, "exp_type": template_name} else: parameters = {"date_obs_mjd": {"min": start_date, "max": end_date}, "detector": detector, "exp_type": template_name} query = monitor_mast.instrument_inventory(instrument, dataproduct=JWST_DATAPRODUCTS, add_filters=parameters, return_data=True, caom=False) if len(query['data']) > 0: query_results.extend(query['data']) return query_results