...
Starting with the existing Firefly TAP-query UI, extend the graphical query-builder interface as follows:
- Determine whether the selected TAP service is advertising an
ivoa.ObsCore
table viaTAP_SCHEMA
. - If so, display a modified UI for the schema/table selection row of the query screen:
- Provide a radio button choice for () "Image metadata search" vs. () "General table search". When the former is selected, display a message to the effect of "Searching table 'ivoa.ObsCore' for image metadata", hide the schema/table selection UI elements, and enable the behavior in items 3 and beyond below. When the latter is selected, retain the normal TAP-search functionality, but if the schema "ivoa" and table "ivoa.ObsCore" happen to be selected, enable the behavior below anyway.
- (Extra) If a table is selected, and the table schema appears consistent with ObsCore (contains the necessary columns for the behavior below), enable the behavior below.
- Modify the rest of the UI to show that it is an "image metadata search" screen.
- Add a new collapsible subsection of the screen that provides for selection against the calibration level in the fixed list of levels defined in the ObsCore standard. Provide a checkbox or multiple-selection menu interface. Also allow for selection against the data product types defined in ObsCore, again as a checkbox or multiple-selection menu interface. Generate appropriate
WHERE
clauses for the ADQL as expressions involvingcalib_level
anddataproduct_type
. The resulting widget should also be able to generate the equivalent parameter expression for an SIAv2 query, using theCALIB
andDPTYPE
parameters. Provide for an application-level control that determines whetherdataproduct_type=="image"
is set as the default query state of this subsection.- (Extra) Query the service to determine the available values of
calib_level
anddataproduct_type
and display them in the UI, e.g., by greying out values that are not present.
- (Extra) Query the service to determine the available values of
- Add a new collapsible subsection of the screen that provides for selection against the collection name as a string. If an "ObsTAP mode" control parameter of the widget is
True
, provide options for "exactly equal" and "matches substring" queries. Generate appropriateWHERE
clauses for the ADQL as expressions involving obs_collection. The resulting widget should also be able to generate the equivalent parameter expression for an SIAv2 query, using the COLLECTION parameter, as long as the "matches substring" control is not asserted (which would be an error, as substring searches are not supported in the SIAv2 query parameters). Provide for an application to provide optional sample values to be displayed in the UI.- (Extra) Query the service to determine the list of available values for
obs_collection
, and display a list of values as a multiple-selection menu or similar interface, as an alternative to explicit text query string entry. (Extra extra) Include in this display an indication of the number of observation datasets available in each collection. Write the code in a way that facilitates adding further information of this kind in the future.
- (Extra) Query the service to determine the list of available values for
- Add a new collapsible subsection of the screen that provides for selection against the data product sub-type (which for Rubin/LSST is the Butler dataset type) as a string. Display of this subsection should be conditioned on whether the service actually has a
dataproduct_subtype
column. Provide options for "exactly equal" and "matches substring" queries. Generate appropriateWHERE
clauses for the ADQL as expressions involving obs_collection. No SIAv2 support is required. Provide for an application to provide optional sample values to be displayed in the UI.- (Extra) Query the service to determine the list of available values for
dataproduct_subtype
, and display a list of values as a multiple-selection menu or similar interface, as an alternative to explicit text query string entry. (Extra extra) Include in this display an indication of the number of observation datasets available in each collection. Write the code in a way that facilitates adding further information of this kind in the future.
- (Extra) Query the service to determine the list of available values for
- Add a new collapsible subsection of the screen that provides for selection against the wavelength coverage of the observations. Allow input of wavelengths in nanometers and microns, as well as selection of a wavelength range from a menu of filters. Make the list of filters configurable by "application" code - that is, by code that's not in core Firefly. Generate appropriate
WHERE
clauses for the ADQL as expressions involvingem_min
andem_max
, which requires conversion to meters. The resulting widget should also be able to generate the equivalent parameter expression for an SIAv2 query, using theBAND
parameter.- (Extra) Query the service to determine the minimum value of
em_min
and the maximum value ofem_max
available on the service, and display them in the UI, in nanometers if they are both less than 1500nm, otherwise in microns.
- (Extra) Query the service to determine the minimum value of
- Extend the spatial search subsection of the screen to allow for queries against the boundaries of regions, similar to those currently supported in IRSA Viewer. and in the legacy PDAC portal. The resulting widget should be able to generate appropriate
WHERE
clauses for the ADQL as expressions involvings_region
and theCONTAINS()
and/orINTERSECTS()
operators. - Extend the temporal search subsection of the screen to allow for queries against the exposure duration, expressed in seconds. Generate appropriate
WHERE
clauses for the ADQL as expressions involvingt_exptime
. The resulting widget should also be able to generate the equivalent parameter expression for an SIAv2 query, using theTIME
andEXPTIME
parameters.- (Extra) Query the service to determine the minimum value of
t_min
, the maximum value oft_max
, and the minimum and maximum values oft_exptime
available on the service, and display them in the UI.
- (Extra) Query the service to determine the minimum value of
- (Extra extra) Allow some or all of the "query the service to determine available values" features to interact with / be updated by selections made interactively. This could be accomplished by, say, doing a
SELECT DISTINCT
for tuples of calib_level, dataproduct_type, dataproduct_subtype, and obs_collection and then maintaining this table internal to the Javascript, updating the counts of available observations per value as appropriate to the currently configured query. - Include the
WHERE
clauses from all these subsections in the generated ADQL query. - Provide a version of this screen that entirely suppresses the service-selection and table-selection, allowing an application to provide a dedicated "image search" screen without distractions.
...