Starcheck products

The mica.starcheck module provides tools to update a database of starcheck products and methods to retrieve content from that database. The mica.starcheck database inherits much of the structure of the original Sybase starcheck_database project which organized the per-obsid data into these tables:

  • starcheck_obs

  • starcheck_manvr

  • starcheck_warnings

  • starcheck_catalog

That Sybase database was updated for new obsids as they became available in the CXCDS archive and is intended to contain only records for observations in their final/observed form. When developing the mica.report system, we had a new driver to be able to track observations in the planning stages, so a new database of starcheck products, this mica.starcheck database, was developed which contains entries that include observations in released schedules that have not yet been observed. The mica.starcheck database includes all versions of observations that came out in released products and does not attempt to pre-filter on final/observed configuration on ingest. These distinctions may be useful for developers who wish to use the database directly. For most users, the included methods filter the records available in the database to return useful values.

The mica.starcheck sqlite3 database, as mentioned inherits most of the per-obsid tables, but adds to each an id sc_id that maps the entry back to a new starcheck_id table which has one record for each directory that has been ingested (each directory is assumed to have a single starcheck.txt file as the source for that entry). A new table, starcheck_pred_temp has also been added which includes the ACA CCD temperature prediction that was written directly into starcheck.txt at the time of review (when applicable).

Get catalog data

The get_starcheck_catalog and get_starcheck_catalog_at_date methods return dictionaries of the content of the starcheck database tables.

>>> from mica.starcheck import get_starcheck_catalog
>>> obsid_starcheck = get_starcheck_catalog(5438)
>>> obsid_starcheck.keys()
['status', 'warnings', 'cat', 'mp_dir', 'obs', 'manvr']
>>> obsid_starcheck['cat']
<Table masked=False length=11>
sc_id obsid obs_idx    mp_starcat_time    ...  res  halfw    pass    notes
int64 int64  int64        unicode672      ... int64 int64 unicode128 object
----- ----- ------- --------------------- ... ----- ----- ---------- ------
  941  5438       2 2005:282:18:53:05.394 ...     1    25              None
  941  5438       2 2005:282:18:53:05.394 ...     1    25              None
  941  5438       2 2005:282:18:53:05.394 ...     1    25              None
  941  5438       2 2005:282:18:53:05.394 ...     1   120       a2g2   None
  941  5438       2 2005:282:18:53:05.394 ...     1   120       a2g2   None
  941  5438       2 2005:282:18:53:05.394 ...     1   120         a3   None
  941  5438       2 2005:282:18:53:05.394 ...     1   120       a2g3   None
  941  5438       2 2005:282:18:53:05.394 ...     1   120              None
  941  5438       2 2005:282:18:53:05.394 ...     1   120         a2   None
  941  5438       2 2005:282:18:53:05.394 ...     1   120         a2   None
  941  5438       2 2005:282:18:53:05.394 ...     1   120         a3   None
>>> obsid_starcheck['cat'].colnames
['sc_id', 'obsid', 'obs_idx', 'mp_starcat_time', 'idx', 'slot', 'id', 'idnote', 'type',
'sz', 'minmag', 'mag', 'maxmag', 'yang', 'zang', 'dim', 'res', 'halfw', 'pass',
'notes']

The get_starcheck_catalog_at_date routine is designed to retrieve the catalog that would apply at the given date. “Apply” in this context isn’t quite the “onboard catalog at the time” but instead, if the given date is during NMM is the catalog that was commanded during that NMM, or if the date is in NPNT, the catalog is the catalog that was commanded in the previous NMM (that should be tracked during the NPNT interval).

get_starcheck_catalog_at_date is intended both to help with larger scale processing (to get the “right” catalog for a whole bunch of kadi dwells) and for some special cases. For example, it will get the commanded catalog during a vehicle-only period of time on the spacecraft.

>>> from mica.starcheck import get_starcheck_catalog_at_date
>>> catalog_by_date = get_starcheck_catalog_by_date('2015:174:01:25:30.068')
>>> catalog_by_date['obs']['obsid']
16689
>>> from kadi import events
>>> dwells = events.dwells.filter('2015:174:01:25:30.068', '2015:174:01:25:30.068')
>>> dwells[0].get_obsid()
17696

This is an example of a time in which the commanded obsid (COBSQID) was not updated due to SCS107, so a fetch of the catalog for obsid 17696 will not give the right star positions if one desires to calculate residuals during the dwell.