Prompt Processing Metrics#

The Prompt Processing pipeline publishes per-detector metrics to InfluxDB in the lsst.prompt database. These include DiaSource counts, solar system object associations, and image quality metrics for each processed visit.

The endpoints["pp"] client returned by get_clients() connects to the relevant lsst.prompt InfluxDB database. The topics related to prompt processing start with lsst.prompt.prod.

Querying prompt processing metrics directly#

Just like with any InfluxDb measurement, records can be queried directly. The primary indexes are on time, so querying records from a particular timespan generally works best. There are some additional “tags” which work like indexes for influx, but querying based on parameters outside of that set of tags is slow.

Generally prompt processing metrics are recorded per-detector. To fetch the records from a specific topic:

dia_det = endpoints["pp"].select_time_series(
    "lsst.prompt.prod.numDiaSourcesGood",
    ["visit", "detector", "numAllDiaSources", "numGoodDiaSources", "run"],
    t_start, t_end,
)

Querying for all DiaSources per visit#

diasource_visit_summaries() queries the three key prompt processing topics — numDiaSourcesGood, numSsObjects, and numDirectSsObjects — and returns an aggregated per-visit summary DataFrame:

from astropy.time import Time
from rubin_nights.pipelines_metrics import diasource_visit_summaries

t_start = Time("2025-10-24T12:00:00")
t_end = Time("2025-10-25T12:00:00")

alert_summary = diasource_visit_summaries(t_start, t_end, endpoints["pp"])

The returned DataFrame is indexed by visit_id and contains (among other values):

  • numAllDiaSources_sum / numAllDiaSources_median — sum and median across detectors.

  • nDiaDetectors_count — number of detectors that produced DiaSource results.

  • numSsObjects_sum / nSsDetectors_count — solar system alert associations.

  • numDirectSsObjects_sum / nDSsDetectors_count — direct solar system associations.

Joining with visit data#

Merge the alert summary with ConsDB visit data on visit_id to combine observing conditions with prompt processing outputs:

from rubin_nights.reference_values import SCIENCE_PROGRAMS

constraint = f"science_program in {SCIENCE_PROGRAMS}"
visits = endpoints["consdb_tap"].get_visits("lsstcam", t_start, t_end,
                                            visit_constraint=constraint)

combined = visits.merge(alert_summary, left_on="visit_id", right_index=True, how="outer")

The combined table can be used to correlate image quality metrics (e.g., fwhm_geom, cat_m5, clouds) or visit metadata (galactic_lat, ecliptic_lat) with alert production rates across a night or across a longer observing campaign.