diff --git a/browser/ppdb.md b/browser/ppdb.md new file mode 100644 index 00000000..c05a0c06 --- /dev/null +++ b/browser/ppdb.md @@ -0,0 +1,7 @@ +--- +layout: schema +title: Prompt Processing Database +schema: ppdb +sort-index: 15 +--- +{{ site.data[page.schema].description }} diff --git a/python/generate-mock-ppdb-data.ipynb b/python/generate-mock-ppdb-data.ipynb new file mode 100644 index 00000000..598f8be5 --- /dev/null +++ b/python/generate-mock-ppdb-data.ipynb @@ -0,0 +1,2577 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d981cbc1-c3a6-44f1-b78b-cc00e2e033c4", + "metadata": {}, + "source": [ + "# Generate mock PPDB/SSO data for PPDB tests\n", + "\n", + "Author: Mario Juric " + ] + }, + { + "cell_type": "markdown", + "id": "4bc679dc-8287-4f93-bb93-db268b6f2a51", + "metadata": {}, + "source": [ + "This notebook generates mock data for the following tables:\n", + "```\n", + "DiaSource\n", + "NearbySSO\n", + "SSSource\n", + "SSObject\n", + "mpc_orbits\n", + "```\n", + "\n", + "To validate the assumptions for the \"next generation\" SSSource table, and enable bulk import tests.\n", + "\n", + "The schemas for these tables are accurate, generated from `ppdb.yaml` using:\n", + "\n", + "```\n", + "ssp-generate-dtypes ppdb.yaml DiaSource SSObject SSSource mpc_orbits current_identifications numbered_identifications NearbySSO > schema.py\n", + "```\n", + "\n", + "(available in `mjuric/ssp-tools` repository). Much of the table contents is randomly generated, with the exception of various IDs to maintain the relationships between the tables." + ] + }, + { + "cell_type": "markdown", + "id": "55a61b27-0a03-423e-bf64-9e15b29e03e7", + "metadata": {}, + "source": [ + "Outline of the table generation strategy:\n", + "\n", + "* Generate N nights worth of DiaSources\n", + " * 10M/night == 300M records for 30 nights\n", + " * We more/less randomly generate these, but try to keep ra/decs for the same visits within r=1.6deg from the visit center.\n", + "* Generate SSObject table by sampling a subset of `mpc_orbits` (rationale: we won't observe all asteroids)\n", + "* Generate the SSSource table:\n", + " * Assume a small percentage of DiaSources are SSSources. The percentage is chosen to generate ~100M SSSources/yr (which Kurlander et al. 2025 predict using precise simulations)\n", + " * Choose DiaSources preferentially around the ecliptic.\n", + " * Fake the ephemerides using astrometry from DiaSources and by adding small shifts within 1\"\n", + "* Generate NearbySSO table\n", + " * Copy all SSSources that have a match\n", + " * Add a small fraction (~10% of the SSSource length) that match at up to 5\" radius. These mimic the nearby-but-not-physically-associated sources.\n", + "* Write all of these out in parquet." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "54c2bd87-dfea-4f38-bbdc-f943159f3345", + "metadata": {}, + "outputs": [], + "source": [ + "import schema\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import healpy as hp\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6058e5f1-3c0e-440b-8c79-16b60c70db37", + "metadata": {}, + "outputs": [], + "source": [ + "def fill_zero_columns(arr):\n", + " # fill columns that have only zeros with random data\n", + " for name in arr.dtype.names:\n", + " col = arr[name]\n", + "\n", + " # skip non-numeric fields\n", + " if not np.issubdtype(col.dtype, np.number):\n", + " continue\n", + "\n", + " # only fill columns that are zero everywhere\n", + " if not np.all(col == 0):\n", + " continue\n", + "\n", + " dt = col.dtype\n", + "\n", + " if np.issubdtype(dt, np.integer):\n", + " col[:] = np.random.randint(0, 10000, size=len(col), dtype=dt)\n", + "\n", + " elif np.issubdtype(dt, np.floating):\n", + " col[:] = np.random.standard_normal(len(col)).astype(dt)\n", + "\n", + " elif np.issubdtype(dt, np.bool_):\n", + " col[:] = np.random.randint(0, 2, size=len(col)).astype(dt)\n", + "\n", + " return arr\n", + "\n", + "import os\n", + "import numpy as np\n", + "from concurrent.futures import ThreadPoolExecutor\n", + "\n", + "def fill_zero_columns_mt(arr, *, max_workers=None):\n", + " \"\"\"\n", + " Fill structured-array columns that are identically zero with random data, in-place, using threads.\n", + " - ints: uniform integers in [0, 10000)\n", + " - floats: standard normal\n", + " - bools: random True/False\n", + " \"\"\"\n", + " names = arr.dtype.names or ()\n", + " if not names:\n", + " return arr\n", + "\n", + " if max_workers is None:\n", + " max_workers = min(32, (os.cpu_count() or 1))\n", + "\n", + " # Independent RNGs per worker (thread-safe and reproducible-per-run only if you fix entropy).\n", + " ss = np.random.SeedSequence()\n", + " child_seeds = ss.spawn(len(names))\n", + "\n", + " def _fill_one(i, name):\n", + " col = arr[name]\n", + "\n", + " # skip non-numeric fields\n", + " if not np.issubdtype(col.dtype, np.number):\n", + " return\n", + "\n", + " # only fill columns that are zero everywhere\n", + " if not np.all(col == 0):\n", + " return\n", + "\n", + " dt = col.dtype\n", + " rng = np.random.default_rng(child_seeds[i])\n", + "\n", + " if np.issubdtype(dt, np.integer):\n", + " col[:] = rng.integers(0, 10000, size=col.shape, dtype=dt)\n", + "\n", + " elif np.issubdtype(dt, np.floating):\n", + " col[:] = rng.standard_normal(size=col.shape).astype(dt, copy=False)\n", + "\n", + " elif np.issubdtype(dt, np.bool_):\n", + " col[:] = rng.integers(0, 2, size=col.shape, dtype=np.uint8).astype(np.bool_, copy=False)\n", + "\n", + " with ThreadPoolExecutor(max_workers=max_workers) as ex:\n", + " list(ex.map(lambda t: _fill_one(*t), enumerate(names)))\n", + "\n", + " return arr\n", + "\n", + "def jitter_radec(ra, dec, r=1.0):\n", + " ra, dec, tmax = map(np.deg2rad, (ra, dec, r))\n", + " th = np.arccos(np.random.uniform(np.cos(tmax), 1.0, ra.size))\n", + " ph = np.random.uniform(0.0, 2*np.pi, ra.size)\n", + " sd, cd, sth, cth = np.sin(dec), np.cos(dec), np.sin(th), np.cos(th)\n", + " dec = np.arcsin(sd*cth + cd*sth*np.cos(ph))\n", + " ra = (ra + np.arctan2(sth*np.sin(ph), cd*cth - sd*sth*np.cos(ph))) % (2*np.pi)\n", + " return np.rad2deg(ra), np.rad2deg(dec), np.rad2deg(th)\n", + "\n", + "import astropy.units as u\n", + "from astropy.coordinates import SkyCoord\n", + "\n", + "def radec_to_galactic(ra, dec):\n", + " c = SkyCoord(ra=ra*u.deg, dec=dec*u.deg, frame=\"icrs\")\n", + " g = c.galactic\n", + " return g.l.to_value(u.deg), g.b.to_value(u.deg)\n", + "\n", + "def radec_to_ecl_iau76(ra, dec):\n", + " ra, dec = np.deg2rad(ra), np.deg2rad(dec)\n", + " ce, se = np.cos(np.deg2rad(84381.448/3600)), np.sin(np.deg2rad(84381.448/3600))\n", + " x = np.cos(dec)*np.cos(ra)\n", + " y = np.cos(dec)*np.sin(ra)\n", + " z = np.sin(dec)\n", + " lam = (np.rad2deg(np.arctan2(y*ce+z*se, x)) + 360) % 360\n", + " bet = np.rad2deg(np.arcsin(-y*se+z*ce))\n", + " return lam, bet\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "6150b262-7182-46d1-afb6-d327b17af15f", + "metadata": {}, + "source": [ + "A column-store ndarray analog. Speeds things up by ~50% (depends on the machine)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7f5d9799", + "metadata": {}, + "outputs": [], + "source": [ + "from __future__ import annotations\n", + "\n", + "from typing import Any, Dict, Mapping, Optional, Sequence, Union\n", + "import numpy as np\n", + "\n", + "Key = Union[str, Sequence[str]]\n", + "RowSel = Union[int, slice, np.ndarray, Sequence[int], Sequence[bool]]\n", + "\n", + "\n", + "class ColumnarStruct:\n", + " \"\"\"\n", + " Minimal structured-ndarray-like container with columnar storage.\n", + "\n", + " Supported:\n", + " - obj[\"col\"] -> 1D ndarray\n", + " - obj[[\"c1\",\"c2\"]] -> ColumnarStruct (columns subset)\n", + " - len(obj)\n", + " - obj[row_sel] where row_sel is:\n", + " int, slice, 1D integer indices, 1D boolean mask\n", + " - obj[\"col\"] = array_like (column assignment, with broadcast of scalars)\n", + " \"\"\"\n", + "\n", + " def __init__(self, cols: Mapping[str, Any], *, copy: bool = False, enforce_1d: bool = True):\n", + " arrs: Dict[str, np.ndarray] = {}\n", + " length: Optional[int] = None\n", + "\n", + " for name, col in cols.items():\n", + " a = np.asarray(col)\n", + " if enforce_1d and a.ndim != 1:\n", + " raise ValueError(f\"Column '{name}' must be 1D; got shape {a.shape}\")\n", + " if length is None:\n", + " length = a.shape[0]\n", + " elif a.shape[0] != length:\n", + " raise ValueError(\n", + " f\"All columns must have same length; '{name}' has {a.shape[0]} vs {length}\"\n", + " )\n", + " arrs[str(name)] = a.copy() if copy else a\n", + "\n", + " if length is None:\n", + " length = 0\n", + "\n", + " self._cols = arrs\n", + " self._length = int(length)\n", + "\n", + " # ---- ndarray-ish surface area ----\n", + "\n", + " @property\n", + " def dtype(self) -> np.dtype:\n", + " fields = [(k, v.dtype) for k, v in self._cols.items()]\n", + " return np.dtype(fields)\n", + "\n", + " @property\n", + " def names(self) -> tuple[str, ...]:\n", + " return tuple(self._cols.keys())\n", + "\n", + " def __len__(self) -> int:\n", + " return self._length\n", + "\n", + " def __contains__(self, name: str) -> bool:\n", + " return name in self._cols\n", + "\n", + " def __repr__(self) -> str:\n", + " schema = \", \".join(f\"{k}:{v.dtype}\" for k, v in self._cols.items())\n", + " return f\"ColumnarStruct(len={len(self)}, cols=[{schema}])\"\n", + "\n", + " # ---- core indexing ----\n", + "\n", + " def __getitem__(self, key: Union[Key, RowSel]) -> Any:\n", + " # Column selection\n", + " if isinstance(key, str):\n", + " return self._cols[key]\n", + "\n", + " # Multi-column selection\n", + " if isinstance(key, (list, tuple)) and key and all(isinstance(x, str) for x in key):\n", + " missing = [c for c in key if c not in self._cols]\n", + " if missing:\n", + " raise KeyError(f\"Missing columns: {missing}\")\n", + " return ColumnarStruct({c: self._cols[c] for c in key}, copy=False)\n", + "\n", + " # Row selection\n", + " return self._take_rows(key)\n", + "\n", + " def __setitem__(self, key: str, value: Any) -> None:\n", + " \"\"\"\n", + " Column assignment: obj[\"col\"] = value\n", + "\n", + " Rules:\n", + " - key must be a column name (string)\n", + " - value may be:\n", + " * scalar -> broadcast to length\n", + " * 1D array-like of length len(self)\n", + " - if column exists: assign into existing array (in-place) when possible\n", + " - if column does not exist:\n", + " * if len(self)==0, length becomes len(value) (if value is 1D)\n", + " * else value must match len(self)\n", + " \"\"\"\n", + " if not isinstance(key, str):\n", + " raise TypeError(\"Column assignment only supports a string key, e.g. obj['col'] = ...\")\n", + "\n", + " n = self._length\n", + "\n", + " # Normalize value\n", + " v = np.asarray(value)\n", + "\n", + " # Scalar -> broadcast\n", + " if v.ndim == 0:\n", + " if key in self._cols:\n", + " col = self._cols[key]\n", + " col[...] = v.astype(col.dtype, copy=False) if col.dtype != v.dtype else v\n", + " else:\n", + " if n == 0:\n", + " raise ValueError(\n", + " \"Cannot infer length from scalar when ColumnarStruct has len=0. \"\n", + " \"Initialize with columns or assign a 1D array first.\"\n", + " )\n", + " self._cols[key] = np.empty(n, dtype=v.dtype)\n", + " self._cols[key][...] = v\n", + " return\n", + "\n", + " # Must be 1D for column assignment\n", + " if v.ndim != 1:\n", + " raise ValueError(f\"Assigned column must be 1D or scalar; got shape {v.shape}\")\n", + "\n", + " # Determine / validate length\n", + " if n == 0 and key not in self._cols:\n", + " # Allow first 1D assignment to define length\n", + " self._length = int(v.shape[0])\n", + " n = self._length\n", + " elif v.shape[0] != n:\n", + " raise ValueError(f\"Length mismatch assigning '{key}': got {v.shape[0]} rows, expected {n}\")\n", + "\n", + " # Assign into existing column when possible\n", + " if key in self._cols:\n", + " col = self._cols[key]\n", + " # If dtype matches and sizes match, do in-place assignment\n", + " try:\n", + " col[...] = v\n", + " except (TypeError, ValueError):\n", + " # Fall back to safe cast if possible\n", + " col[...] = v.astype(col.dtype, copy=False)\n", + " else:\n", + " # New column\n", + " self._cols[key] = v\n", + "\n", + " def _take_rows(self, sel: RowSel) -> \"ColumnarStruct\":\n", + " if isinstance(sel, int):\n", + " if sel < 0:\n", + " sel = self._length + sel\n", + " if sel < 0 or sel >= self._length:\n", + " raise IndexError(\"index out of range\")\n", + " return ColumnarStruct({k: v[sel:sel + 1] for k, v in self._cols.items()}, copy=False)\n", + "\n", + " if isinstance(sel, slice):\n", + " return ColumnarStruct({k: v[sel] for k, v in self._cols.items()}, copy=False)\n", + "\n", + " a = np.asarray(sel)\n", + "\n", + " if a.dtype == np.bool_:\n", + " if a.ndim != 1 or a.shape[0] != self._length:\n", + " raise IndexError(f\"Boolean mask must be 1D of length {self._length}\")\n", + " return ColumnarStruct({k: v[a] for k, v in self._cols.items()}, copy=False)\n", + "\n", + " if np.issubdtype(a.dtype, np.integer):\n", + " if a.ndim != 1:\n", + " raise IndexError(\"Index array must be 1D\")\n", + " return ColumnarStruct({k: v[a] for k, v in self._cols.items()}, copy=False)\n", + "\n", + " raise TypeError(\"Row selector must be int, slice, 1D integer indices, or 1D boolean mask\")\n", + "\n", + " # ---- convenience ----\n", + "\n", + " def select(self, *names: str) -> \"ColumnarStruct\":\n", + " return self[list(names)]\n", + "\n", + " def to_structured(self) -> np.ndarray:\n", + " dt = self.dtype\n", + " out = np.empty(self._length, dtype=dt)\n", + " for name, col in self._cols.items():\n", + " out[name] = col\n", + " return out\n", + "\n", + " # ---- Jupyter / rich display ----\n", + "\n", + " def _preview_dataframe(self, max_rows: int = 10):\n", + " import pandas as pd\n", + "\n", + " n = len(self)\n", + " k = min(max_rows, n)\n", + " data = {name: col[:k] for name, col in self._cols.items()}\n", + "\n", + " df = pd.DataFrame(data)\n", + " if n > k:\n", + " df = df.copy()\n", + " df.attrs[\"__columnarstruct_truncated__\"] = (k, n)\n", + " return df\n", + "\n", + " def _repr_html_(self) -> str:\n", + " try:\n", + " df = self._preview_dataframe(max_rows=10)\n", + " except Exception as e:\n", + " return f\"
{self.__repr__()}\\n\\n[display error: {type(e).__name__}: {e}]
\"\n", + "\n", + " html = df._repr_html_()\n", + "\n", + " trunc = df.attrs.get(\"__columnarstruct_truncated__\")\n", + " if trunc:\n", + " k, n = trunc\n", + " footer = (\n", + " f\"
\"\n", + " f\"Showing first {k} of {n} rows
\"\n", + " )\n", + " html = f\"{html}{footer}\"\n", + "\n", + " schema = \", \".join(f\"{name}:{arr.dtype}\" for name, arr in self._cols.items())\n", + " header = (\n", + " f\"
\"\n", + " f\"ColumnarStruct \"\n", + " f\"(len={len(self)})
\"\n", + " f\"{schema}\"\n", + " f\"
\"\n", + " )\n", + " return f\"{header}{html}\"\n", + "\n", + " def __array__(self, dtype=None) -> np.ndarray:\n", + " \"\"\"\n", + " NumPy conversion hook.\n", + "\n", + " This makes np.asarray(ColumnarStruct) (and therefore pd.DataFrame(ColumnarStruct))\n", + " produce a structured ndarray with fields matching columns.\n", + "\n", + " Note: this materializes a structured (AoS) copy of the current rows.\n", + " \"\"\"\n", + " arr = self.to_structured() # structured ndarray with named fields\n", + " if dtype is not None:\n", + " arr = arr.astype(dtype, copy=False)\n", + " return arr" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f7f487dc", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from typing import Union\n", + "\n", + "def columnar_empty(\n", + " shape: int,\n", + " dtype: Union[np.dtype, list[tuple[str, np.dtype]]],\n", + ") -> ColumnarStruct:\n", + " \"\"\"\n", + " Create an uninitialized ColumnarStruct, analogous to np.empty.\n", + "\n", + " Parameters\n", + " ----------\n", + " shape : int\n", + " Number of rows.\n", + " dtype : structured dtype or list of (name, dtype)\n", + " Column schema.\n", + "\n", + " Returns\n", + " -------\n", + " ColumnarStruct\n", + " \"\"\"\n", + " dt = np.dtype(dtype)\n", + " if dt.fields is None:\n", + " raise TypeError(\"dtype must be a structured dtype\")\n", + "\n", + " cols = {}\n", + " for name, (subdtype, _) in dt.fields.items():\n", + " cols[name] = np.empty(shape, dtype=subdtype)\n", + "\n", + " return ColumnarStruct(cols, copy=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "17dede28-c53f-463d-891e-49b5783c5745", + "metadata": {}, + "outputs": [], + "source": [ + "def memmap_empty(path, shape, dtype, order=\"C\"):\n", + " \"\"\"\n", + " Create a file-backed, uninitialized ndarray (np.empty analog).\n", + "\n", + " Parameters\n", + " ----------\n", + " path : str or Path\n", + " File path backing the memmap.\n", + " shape : int or tuple of int\n", + " Array shape.\n", + " dtype : numpy dtype or dtype spec\n", + " Array dtype.\n", + " order : {\"C\", \"F\"}, optional\n", + " Memory layout.\n", + "\n", + " Returns\n", + " -------\n", + " ndarray\n", + " File-backed NumPy array.\n", + " \"\"\"\n", + " mm = np.memmap(\n", + " path,\n", + " dtype=np.dtype(dtype),\n", + " mode=\"w+\",\n", + " shape=shape,\n", + " order=order,\n", + " )\n", + " return np.asarray(mm)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b9bdd5d2-b519-4d43-a63d-3aeddc3a34eb", + "metadata": {}, + "outputs": [], + "source": [ + "def structured_to_parquet(dia, path, *, batch_rows=1_000_000, compression=\"zstd\",\n", + " use_dictionary=True, write_statistics=True):\n", + " \"\"\"\n", + " Serialize a structured numpy array (possibly memmap) to a Parquet file in chunks.\n", + "\n", + " Parameters\n", + " ----------\n", + " dia : np.ndarray\n", + " Structured array with dtype.names. Can be np.memmap.\n", + " path : str | pathlib.Path\n", + " Output parquet path.\n", + " batch_rows : int\n", + " Rows per write batch (and default row group size).\n", + " compression : str | None\n", + " Parquet compression (e.g., \"zstd\", \"snappy\", \"gzip\", None).\n", + " use_dictionary : bool\n", + " Enable dictionary encoding where beneficial.\n", + " write_statistics : bool\n", + " Write column statistics (can improve predicate pushdown; may add overhead).\n", + " \"\"\"\n", + " import pyarrow as pa\n", + " import pyarrow.parquet as pq\n", + "\n", + " if dia.dtype.names is None:\n", + " raise TypeError(\"dia must be a structured array (dia.dtype.names is None).\")\n", + "\n", + " print(f\"{path}:\")\n", + " print(f\" Number of rows: {len(dia)}\")\n", + " print(f\" Uncompressed size (GiB): {len(dia)*dia.dtype.itemsize / 1024**3:.1f}\")\n", + "\n", + " n = len(dia)\n", + " if n == 0:\n", + " # Write an empty file with the right schema.\n", + " arrays = [pa.array(dia[name]) for name in dia.dtype.names]\n", + " table = pa.Table.from_arrays(arrays, names=list(dia.dtype.names))\n", + " pq.write_table(table, path, compression=compression,\n", + " use_dictionary=use_dictionary, write_statistics=write_statistics)\n", + " return\n", + "\n", + " writer = None\n", + " try:\n", + " for start in range(0, n, batch_rows):\n", + " stop = min(start + batch_rows, n)\n", + " chunk = dia[start:stop] # works for memmap without loading everything\n", + "\n", + " arrays = [pa.array(chunk[name]) for name in chunk.dtype.names]\n", + " table = pa.Table.from_arrays(arrays, names=list(chunk.dtype.names))\n", + "\n", + " if writer is None:\n", + " writer = pq.ParquetWriter(\n", + " path, table.schema,\n", + " compression=compression,\n", + " use_dictionary=use_dictionary,\n", + " write_statistics=write_statistics,\n", + " )\n", + "\n", + " writer.write_table(table, row_group_size=len(chunk))\n", + " finally:\n", + " if writer is not None:\n", + " writer.close()\n", + "\n", + " print(f\" Compressed parquet (GB): {os.path.getsize(path)/1e9:.2f}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "27fa9be3-4717-4088-9e71-643b1f3cc950", + "metadata": {}, + "outputs": [], + "source": [ + "mjd0 = 61041 # Jan 1, 2026\n", + "nnights = 60\n", + "visitsPerNight = 1000\n", + "diaPerVisit = 10_000\n", + "\n", + "# The observed fraction of mpc_orbits catalog\n", + "frac_mpc = nnights/365.\n", + "\n", + "# Fraction of sources that associate to SolSys objects\n", + "# Should be set so that the annual total is ~100M\n", + "frac_assoc = 0.03\n", + "\n", + "# Fraction of SSOs (excluding those in frac_assoc) that\n", + "# fall within 5\" of DiaSources. These will appear in\n", + "# NearbySSO but not in the SSSource table.\n", + "frac_near = frac_assoc/10.\n", + "\n", + "diaPerNight = diaPerVisit * visitsPerNight\n", + "\n", + "ndia = diaPerNight*nnights" + ] + }, + { + "cell_type": "markdown", + "id": "725328cb-6b42-4151-9741-084e71b961ae", + "metadata": {}, + "source": [ + "# DiaSource" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "da8b0b39-442f-40c7-afb1-304e9c4cbca7", + "metadata": {}, + "outputs": [], + "source": [ + "#dia = memmap_empty(\"diasource.dat\", shape=(ndia,), dtype=schema.DiaSourceDtype)\n", + "#dia = np.empty(shape=(ndia,), dtype=schema.DiaSourceDtype)\n", + "dia = columnar_empty(shape=(ndia,), dtype=schema.DiaSourceDtype)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a1b2b5e7-40f5-404a-a102-d059d1cbe96d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "600000000\n", + "CPU times: user 5min 47s, sys: 9min 58s, total: 15min 45s\n", + "Wall time: 2min 27s\n" + ] + }, + { + "data": { + "text/html": [ + "
ColumnarStruct (len=10)
diaSourceId:int64, visit:int64, detector:int16, diaObjectId:int64, parentDiaSourceId:int64, ssObjectReassocTimeMjdTai:float64, midpointMjdTai:float64, ra:float64, raErr:float32, dec:float64, decErr:float32, ra_dec_Cov:float32, x:float32, xErr:float32, y:float32, yErr:float32, centroid_flag:bool, apFlux:float32, apFluxErr:float32, apFlux_flag:bool, apFlux_flag_apertureTruncated:bool, isNegative:bool, snr:float32, psfFlux:float32, psfFluxErr:float32, psfLnL:float32, psfChi2:float32, psfNdata:int32, psfFlux_flag:bool, psfFlux_flag_edge:bool, psfFlux_flag_noGoodPixels:bool, trailFlux:float32, trailFluxErr:float32, trailRa:float64, trailRaErr:float32, trailDec:float64, trailDecErr:float32, trailLength:float32, trailLengthErr:float32, trailAngle:float32, trailAngleErr:float32, trailChi2:float32, trailNdata:int32, trail_flag_edge:bool, dipoleMeanFlux:float32, dipoleMeanFluxErr:float32, dipoleFluxDiff:float32, dipoleFluxDiffErr:float32, dipoleLength:float32, dipoleAngle:float32, dipoleChi2:float32, dipoleNdata:int32, scienceFlux:float32, scienceFluxErr:float32, forced_PsfFlux_flag:bool, forced_PsfFlux_flag_edge:bool, forced_PsfFlux_flag_noGoodPixels:bool, templateFlux:float32, templateFluxErr:float32, ixx:float32, iyy:float32, ixy:float32, ixxPSF:float32, iyyPSF:float32, ixyPSF:float32, shape_flag:bool, shape_flag_no_pixels:bool, shape_flag_not_contained:bool, shape_flag_parent_source:bool, extendedness:float32, reliability:float32, band:
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
diaSourceIdvisitdetectordiaObjectIdparentDiaSourceIdssObjectReassocTimeMjdTaimidpointMjdTairaraErrdec...pixelFlags_saturatedCenterpixelFlags_suspectpixelFlags_suspectCenterpixelFlags_streakpixelFlags_streakCenterpixelFlags_injectedpixelFlags_injectedCenterpixelFlags_injected_templatepixelFlags_injected_templateCenterglint_trail
09980181635881.27573461041.00004845.2006060.0331311.187415...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
19990181617561.29573861041.00004944.1409900.1220802.400285...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
21000018168205-0.00808861041.00004945.8101260.1889113.147406...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
31001018164716-0.53610161041.00004945.9909300.0841561.709514...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
410020181610951.25037261041.00004945.0274740.0462223.007876...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
51003018166844-0.54253561041.00004943.7706600.0925703.128937...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
61004018162677-0.68921961041.00004944.8858870.1837103.798136...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
710050181613780.63575961041.00004944.2104950.0912553.446791...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
81006018166326-0.33907961041.00004944.8055430.0922431.741520...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
910070191649010.98195761041.00004944.4072930.1381073.717870...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", + "

10 rows × 98 columns

\n", + "
" + ], + "text/plain": [ + "ColumnarStruct(len=10, cols=[diaSourceId:int64, visit:int64, detector:int16, diaObjectId:int64, parentDiaSourceId:int64, ssObjectReassocTimeMjdTai:float64, midpointMjdTai:float64, ra:float64, raErr:float32, dec:float64, decErr:float32, ra_dec_Cov:float32, x:float32, xErr:float32, y:float32, yErr:float32, centroid_flag:bool, apFlux:float32, apFluxErr:float32, apFlux_flag:bool, apFlux_flag_apertureTruncated:bool, isNegative:bool, snr:float32, psfFlux:float32, psfFluxErr:float32, psfLnL:float32, psfChi2:float32, psfNdata:int32, psfFlux_flag:bool, psfFlux_flag_edge:bool, psfFlux_flag_noGoodPixels:bool, trailFlux:float32, trailFluxErr:float32, trailRa:float64, trailRaErr:float32, trailDec:float64, trailDecErr:float32, trailLength:float32, trailLengthErr:float32, trailAngle:float32, trailAngleErr:float32, trailChi2:float32, trailNdata:int32, trail_flag_edge:bool, dipoleMeanFlux:float32, dipoleMeanFluxErr:float32, dipoleFluxDiff:float32, dipoleFluxDiffErr:float32, dipoleLength:float32, dipoleAngle:float32, dipoleChi2:float32, dipoleNdata:int32, scienceFlux:float32, scienceFluxErr:float32, forced_PsfFlux_flag:bool, forced_PsfFlux_flag_edge:bool, forced_PsfFlux_flag_noGoodPixels:bool, templateFlux:float32, templateFluxErr:float32, ixx:float32, iyy:float32, ixy:float32, ixxPSF:float32, iyyPSF:float32, ixyPSF:float32, shape_flag:bool, shape_flag_no_pixels:bool, shape_flag_not_contained:bool, shape_flag_parent_source:bool, extendedness:float32, reliability:float32, band:" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hexbin(dia[\"ra\"], dia[\"dec\"]);" + ] + }, + { + "cell_type": "markdown", + "id": "47534344-c7c8-404a-8992-d7c5e2f7f18d", + "metadata": {}, + "source": [ + "# mpc_orbits" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "87139908-8199-4e7f-9b88-fffb08dbbed2", + "metadata": {}, + "outputs": [], + "source": [ + "mpc = pd.read_parquet(\"mpc_orbits.parquet\", columns=[\"unpacked_primary_provisional_designation\"])\n", + "nmpc = len(mpc)" + ] + }, + { + "cell_type": "markdown", + "id": "500e864d-9271-4325-a2f5-bfccfe4cf661", + "metadata": {}, + "source": [ + "# SSObject" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "8a3c5a50-b3ca-45ee-a86c-dca87746aeea", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 267 ms, sys: 17.6 ms, total: 284 ms\n", + "Wall time: 284 ms\n" + ] + }, + { + "data": { + "text/html": [ + "
ColumnarStruct (len=242499)
ssObjectId:int64, designation:
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ssObjectIddesignationnObsarcfirstObservationMjdTaiMOIDEarthMOIDEarthDeltaVMOIDEarthEclipticLongitudeMOIDEarthTrueAnomalyMOIDEarthTrueAnomalyObject...y_Hy_HErry_G12y_G12Erry_H_y_G12_Covy_nObsUsedy_Chi2y_phaseAngleMiny_phaseAngleMaxy_slope_fit_failed
03117602015 VG322374-0.450564-0.0599050.5774690.417415-1.153975-0.9664660.702650...0.6805761.812962-0.044072-0.6819610.5715279649-1.596967-0.254779-0.614637False
112817492022 YQ112171.1880200.2838230.450412-0.4377320.7233491.330882-1.119630...3.651464-0.4602840.2368060.460551-1.50436052191.0380782.0556601.175901False
28459622015 HW3679200.095272-0.2079930.1070260.699524-0.585783-0.9011280.945009...1.666432-1.080738-0.8706480.140322-0.02337470610.3540990.3340980.500912False
35895522021 NK6829781.840990-0.524270-0.271741-0.885402-1.0591101.107961-1.254747...0.462812-1.406867-0.9570310.6077860.9570303322-0.8658230.717816-0.819604False
46085352008 PT1736440.623735-0.546446-0.260583-0.0085111.043118-0.3863280.485666...-1.083613-0.8069570.623374-1.1953631.00376761351.122993-0.382226-0.531998False
52937822007 RC15878162.329457-0.517238-0.0031280.9328191.143755-0.2248710.091381...2.079139-0.940912-1.0059000.203533-1.56636420060.0756352.1855530.202949False
62804342006 VF130512-0.1917780.362361-2.717678-0.1683740.495977-1.667608-0.853244...2.644905-0.5993080.225558-0.361645-0.07649916232.116162-0.6579011.174314False
75115322014 UN30330280.250877-0.442288-1.3602250.616019-0.3277110.1970440.128172...0.975471-0.445377-1.402769-0.571334-0.1354949215-0.9909830.1515320.052774False
810136342003 FB11945120.701316-1.5144221.0885320.4122110.088217-0.6566770.477857...-0.3958560.481580-0.811411-1.034521-0.65330915461.913288-0.6108731.325441False
911370142020 PZ5950200.7123580.1626931.7719080.538562-0.584823-0.995407-0.429358...-1.3049710.173867-0.6554050.726123-0.4549728312.1938440.4106790.513269False
\n", + "

10 rows × 80 columns

\n", + "
Showing first 10 of 242499 rows
" + ], + "text/plain": [ + "ColumnarStruct(len=242499, cols=[ssObjectId:int64, designation:ColumnarStruct (len=18000000)
diaSourceId:int64, ssObjectId:int64, designation:
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
diaSourceIdssObjectIddesignationeclLambdaeclBetagalLongalLatelongationphaseAngletopoRange...pixelFlags_saturatedCenterpixelFlags_suspectpixelFlags_suspectCenterpixelFlags_streakpixelFlags_streakCenterpixelFlags_injectedpixelFlags_injectedCenterpixelFlags_injected_templatepixelFlags_injected_templateCenterglint_trail
0163775202001 HT3143.190180-13.626829173.836651-47.0674641.3042770.707649-1.539428...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
11913751262009 FK5142.294865-14.694989174.600220-48.3444060.7038570.621406-0.983512...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2463893952006 SQ42743.321231-12.551100172.567745-46.421348-0.353166-0.527680-0.383197...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3652067182014 KB16542.616198-13.628449173.434233-47.5540080.2793901.668389-0.451495...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
46814218442022 GT644.461347-13.978421175.156505-46.158835-0.7676580.868693-0.664922...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
51134264152013 VV4544.836194-14.092598175.551711-45.894286-1.141319-1.193975-0.931431...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
61287099462014 FA2942.625609-15.048948175.296561-48.2313050.900658-0.514449-1.196971...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
71778758271999 TJ20443.354002-13.952320174.367847-47.087342-0.302063-0.7991491.420646...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
81869955272017 HY11642.587831-12.873106172.446828-47.201520-0.027165-1.1899670.301173...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
920713163982015 PZ14343.923569-14.183175175.053838-46.7147170.3250660.229175-0.475368...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", + "

10 rows × 133 columns

\n", + "
Showing first 10 of 18000000 rows
" + ], + "text/plain": [ + "ColumnarStruct(len=18000000, cols=[diaSourceId:int64, ssObjectId:int64, designation:" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(sssource[\"eclLambda\"], sssource[\"eclBeta\"], s=0.01);" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "32ee9112-bb5f-44b5-8e92-39f7edf25a78", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(sssource[\"eclBeta\"], bins='fd');" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "60ace5e4-4b30-4601-9931-52f188f153c3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
ColumnarStruct (len=89)
diaSourceId:int64, ssObjectId:int64, designation:
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
diaSourceIdssObjectIddesignationeclLambdaeclBetagalLongalLatelongationphaseAngletopoRange...pixelFlags_saturatedCenterpixelFlags_suspectpixelFlags_suspectCenterpixelFlags_streakpixelFlags_streakCenterpixelFlags_injectedpixelFlags_injectedCenterpixelFlags_injected_templatepixelFlags_injected_templateCenterglint_trail
0463893952006 SQ42743.321231-12.551100172.567745-46.421348-0.353166-0.527680-0.383197...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
150925253893952006 SQ42795.14556210.884447179.3748529.7848990.080883-0.551251-1.247941...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
258200223893952006 SQ427182.44227916.282310286.22692276.290271-0.5931540.6519700.297700...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
399425053893952006 SQ427280.557045-18.916725354.523968-18.133259-0.1918960.737930-0.435090...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
4201274633893952006 SQ42741.9554062.693196154.811970-38.419573-0.616239-1.1088381.315852...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5310399183893952006 SQ427135.73222913.535477198.27040946.0696270.5604540.505075-1.198109...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
6356473993893952006 SQ427170.177418-2.431102258.39638356.411198-0.8405290.5557971.228325...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
7402548803893952006 SQ42766.13782410.335845164.918339-14.858182-0.190156-2.008623-0.311524...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
8409823773893952006 SQ427124.437516-0.015172205.20640529.3570021.435074-0.5022500.684734...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
9453473593893952006 SQ427203.171831-5.170485312.66000348.5695831.364820-0.0848520.120866...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", + "

10 rows × 133 columns

\n", + "
Showing first 10 of 89 rows
" + ], + "text/plain": [ + "ColumnarStruct(len=89, cols=[diaSourceId:int64, ssObjectId:int64, designation:ColumnarStruct (len=10)
diaSourceId:int64, ssObjectId:int64, designation:
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
diaSourceIdssObjectIddesignationephRaephDecephOffsetephVmagephRateRaephRateDec
05451984104851512011 DF42198.027430-19.6968050.306774-0.094802-0.361977-0.477416
15451984157267722011 WS160199.319109-18.4492950.6032060.1661242.273888-1.633666
25451984429395592000 UU13199.901681-18.8223190.7973210.5927600.875929-1.096075
35451984659780252006 WF72199.703549-19.1368430.2296770.143799-0.757419-0.018499
45451984717554652017 QS87199.294095-19.6077160.8092411.415254-0.1318631.018528
5545198487267052015 AE295199.173862-19.2010224.7918311.5926390.5550800.814965
65451985016045862006 SK449198.996310-18.3615053.086721-0.0449970.960493-0.505672
75451985158232831999 FK55198.412552-19.5552950.8137111.7025650.4938940.573605
854519853014225912002 PT163200.904883-18.6478844.2954800.5605422.7051321.207921
954519853918632004 TS233200.156323-19.6385113.473959-0.3031780.397886-0.177814
\n", + "
" + ], + "text/plain": [ + "ColumnarStruct(len=10, cols=[diaSourceId:int64, ssObjectId:int64, designation:ColumnarStruct (len=1)
diaSourceId:int64, ssObjectId:int64, designation:
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
diaSourceIdssObjectIddesignationeclLambdaeclBetagalLongalLatelongationphaseAngletopoRange...pixelFlags_saturatedCenterpixelFlags_suspectpixelFlags_suspectCenterpixelFlags_streakpixelFlags_streakCenterpixelFlags_injectedpixelFlags_injectedCenterpixelFlags_injected_templatepixelFlags_injected_templateCenterglint_trail
05451984717554652017 QS87205.235797-10.607066311.21142942.85004-1.507965-0.60528-0.080811...FalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
\n", + "

1 rows × 133 columns

\n", + "
" + ], + "text/plain": [ + "ColumnarStruct(len=1, cols=[diaSourceId:int64, ssObjectId:int64, designation:ColumnarStruct (len=0)
diaSourceId:int64, ssObjectId:int64, designation:
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
diaSourceIdssObjectIddesignationeclLambdaeclBetagalLongalLatelongationphaseAngletopoRange...pixelFlags_saturatedCenterpixelFlags_suspectpixelFlags_suspectCenterpixelFlags_streakpixelFlags_streakCenterpixelFlags_injectedpixelFlags_injectedCenterpixelFlags_injected_templatepixelFlags_injected_templateCenterglint_trail
\n", + "

0 rows × 133 columns

\n", + "
" + ], + "text/plain": [ + "ColumnarStruct(len=0, cols=[diaSourceId:int64, ssObjectId:int64, designation:=5 on difference images. + columns: + - name: diaSourceId + datatype: long + nullable: false + autoincrement: false + description: Unique identifier of this DiaSource. + ivoa:ucd: meta.id;obs.image + - name: visit + datatype: long + nullable: false + description: Id of the visit where this diaSource was measured. + ivoa:ucd: meta.id;obs.image + - name: detector + datatype: short + nullable: false + description: Id of the detector where this diaSource was measured. + Datatype short instead of byte because of DB concerns about unsigned bytes. + ivoa:ucd: meta.id;obs.image + - name: diaObjectId + datatype: long + nullable: true + description: Id of the diaObject this source was associated with, if any. If not, + it is set to NULL (each diaSource will be associated with either a diaObject + or ssObject). + ivoa:ucd: meta.id;src + - name: parentDiaSourceId + datatype: long + description: Id of the parent diaSource this diaSource has been deblended from, + if any. + ivoa:ucd: meta.id;src + - name: ssObjectReassocTimeMjdTai + datatype: double + description: Time when this diaSource was reassociated from diaObject to ssObject, + expressed as Modified Julian Date, International Atomic Time + (if such reassociation happens, otherwise NULL). + - name: midpointMjdTai + datatype: double + nullable: false + description: Effective mid-visit time for this diaSource, expressed as Modified + Julian Date, International Atomic Time. + fits:tunit: d + ivoa:ucd: time.epoch + - name: ra + datatype: double + nullable: false + description: Right ascension coordinate of the center of this diaSource. + fits:tunit: deg + ivoa:ucd: pos.eq.ra + - name: raErr + datatype: float + description: Uncertainty of ra. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.ra + - name: dec + datatype: double + nullable: false + description: Declination coordinate of the center of this diaSource. + fits:tunit: deg + ivoa:ucd: pos.eq.dec + - name: decErr + datatype: float + description: Uncertainty of dec. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.dec + - name: ra_dec_Cov + datatype: float + description: Covariance between ra and dec. + fits:tunit: deg**2 + ivoa:ucd: stat.covariance + - name: x + datatype: float + nullable: false + description: x position computed by a centroiding algorithm. + fits:tunit: pixel + ivoa:ucd: pos.cartesian.x + - name: xErr + datatype: float + description: Uncertainty of x. + fits:tunit: pixel + ivoa:ucd: stat.error;pos.cartesian.x + - name: y + datatype: float + nullable: false + description: y position computed by a centroiding algorithm. + fits:tunit: pixel + ivoa:ucd: pos.cartesian.y + - name: yErr + datatype: float + description: Uncertainty of y. + fits:tunit: pixel + ivoa:ucd: stat.error;pos.cartesian.y + - name: centroid_flag + datatype: boolean + description: General centroid algorithm failure flag; set if anything went wrong when fitting the centroid. Another centroid flag field should also be set to provide more information. + fits:tunit: + - name: apFlux + datatype: float + description: Flux in a 12 pixel radius aperture on the difference image. + fits:tunit: nJy + ivoa:ucd: phot.count + - name: apFluxErr + datatype: float + description: Estimated uncertainty of apFlux. + fits:tunit: nJy + ivoa:ucd: stat.error;phot.count + - name: apFlux_flag + datatype: boolean + description: General aperture flux algorithm failure flag; set if anything went wrong when measuring aperture fluxes. Another apFlux flag field should also be set to provide more information. + fits:tunit: + - name: apFlux_flag_apertureTruncated + datatype: boolean + description: Aperture did not fit within measurement image. + fits:tunit: + - name: isNegative + datatype: boolean + description: Source was detected as significantly negative. + fits:tunit: + - name: snr + datatype: float + description: The signal-to-noise ratio at which this source was detected in the + difference image. + ivoa:ucd: stat.snr + - name: psfFlux + datatype: float + description: Flux for Point Source model. Note this actually measures + the flux difference between the template and the visit image. + fits:tunit: nJy + ivoa:ucd: phot.count + - name: psfFluxErr + datatype: float + description: Uncertainty of psfFlux. + fits:tunit: nJy + - name: psfLnL + datatype: float + description: Natural log likelihood of the observed data given the point source + model. + ivoa:ucd: stat.likelihood + - name: psfChi2 + datatype: float + description: Chi^2 statistic of the point source model fit. + ivoa:ucd: stat.fit.chi2 + - name: psfNdata + datatype: int + nullable: false + description: The number of data points (pixels) used to fit the point source model. + - name: psfFlux_flag + datatype: boolean + description: Failure to derive linear least-squares fit of psf model. Another psfFlux flag field should also be set to provide more information. + fits:tunit: + - name: psfFlux_flag_edge + datatype: boolean + description: Object was too close to the edge of the image to use the full PSF model. + fits:tunit: + - name: psfFlux_flag_noGoodPixels + datatype: boolean + description: Not enough non-rejected pixels in data to attempt the fit. + fits:tunit: + - name: trailFlux + datatype: float + description: Flux for a trailed source model. Note this actually measures + the flux difference between the template and the visit image. + fits:tunit: nJy + - name: trailFluxErr + datatype: float + description: Uncertainty of trailFlux. + fits:tunit: nJy + - name: trailRa + datatype: double + description: Right ascension coordinate of centroid for trailed source model. + fits:tunit: deg + ivoa:ucd: pos.eq.ra + - name: trailRaErr + datatype: float + description: Uncertainty of trailRa. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.ra + - name: trailDec + datatype: double + description: Declination coordinate of centroid for trailed source model. + fits:tunit: deg + ivoa:ucd: pos.eq.dec + - name: trailDecErr + datatype: float + description: Uncertainty of trailDec. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.dec + - name: trailLength + datatype: float + description: Maximum likelihood fit of trail length. + fits:tunit: arcsec + - name: trailLengthErr + datatype: float + description: Uncertainty of trailLength. + fits:tunit: nJy + - name: trailAngle + datatype: float + description: Maximum likelihood fit of the angle between the meridian through + the centroid and the trail direction (bearing). + fits:tunit: deg + - name: trailAngleErr + datatype: float + description: Uncertainty of trailAngle. + fits:tunit: nJy + - name: trailChi2 + datatype: float + description: Chi^2 statistic of the trailed source model fit. + ivoa:ucd: stat.fit.chi2 + - name: trailNdata + datatype: int + nullable: false + value: 0 + description: The number of data points (pixels) used to fit the trailed source model. + - name: trail_flag_edge + datatype: boolean + description: This flag is set if a trailed source extends onto or past edge pixels. + fits:tunit: + - name: dipoleMeanFlux + datatype: float + description: Maximum likelihood value for the mean absolute flux of the two lobes + for a dipole model. + fits:tunit: nJy + - name: dipoleMeanFluxErr + datatype: float + description: Uncertainty of dipoleMeanFlux. + fits:tunit: nJy + ivoa:ucd: stat.error + - name: dipoleFluxDiff + datatype: float + description: Maximum likelihood value for the difference of absolute fluxes of + the two lobes for a dipole model. + fits:tunit: nJy + - name: dipoleFluxDiffErr + datatype: float + description: Uncertainty of dipoleFluxDiff. + fits:tunit: nJy + ivoa:ucd: stat.error + - name: dipoleLength + datatype: float + description: Maximum likelihood value for the lobe separation in dipole model. + fits:tunit: arcsec + ivoa:ucd: pos.angDistance + - name: dipoleAngle + datatype: float + description: Maximum likelihood fit of the angle between the meridian through + the centroid and the dipole direction (bearing, from negative to positive lobe). + fits:tunit: deg + ivoa:ucd: pos.posAng + - name: dipoleChi2 + datatype: float + description: Chi^2 statistic of the model fit. + ivoa:ucd: stat.fit.chi2 + - name: dipoleNdata + datatype: int + nullable: false + description: The number of data points (pixels) used to fit the model. + - name: scienceFlux + datatype: float + description: Forced photometry flux for a point source model measured on the visit image + centered at DiaSource position. + fits:tunit: nJy + ivoa:ucd: phot.count + - name: scienceFluxErr + datatype: float + description: Estimated uncertainty of scienceFlux. + fits:tunit: nJy + ivoa:ucd: stat.error;phot.count + - name: forced_PsfFlux_flag + datatype: boolean + description: Forced PSF photometry on science image failed. Another forced_PsfFlux flag field should also be set to provide more information. + fits:tunit: + - name: forced_PsfFlux_flag_edge + datatype: boolean + description: Forced PSF flux on science image was too close to the edge of the image to use the full PSF model. + fits:tunit: + - name: forced_PsfFlux_flag_noGoodPixels + datatype: boolean + description: Forced PSF flux not enough non-rejected pixels in data to attempt the fit. + fits:tunit: + - name: templateFlux + datatype: float + description: Forced photometry flux for a point source model measured on the template image + centered at the DiaObject position. + ivoa:ucd: phot.count + fits:tunit: nJy + - name: templateFluxErr + datatype: float + description: Uncertainty of templateFlux. + ivoa:ucd: stat.error;phot.count + fits:tunit: nJy + - name: ixx + datatype: float + description: Adaptive second moment of the source intensity. + fits:tunit: nJy.arcsec**2 + - name: iyy + datatype: float + description: Adaptive second moment of the source intensity. + fits:tunit: nJy.arcsec**2 + - name: ixy + datatype: float + description: Adaptive second moment of the source intensity. + fits:tunit: nJy.arcsec**2 + - name: ixxPSF + datatype: float + description: Adaptive second moment for the PSF. + fits:tunit: nJy.arcsec**2 + - name: iyyPSF + datatype: float + description: Adaptive second moment for the PSF. + fits:tunit: nJy.arcsec**2 + - name: ixyPSF + datatype: float + description: Adaptive second moment for the PSF. + fits:tunit: nJy.arcsec**2 + - name: shape_flag + datatype: boolean + description: General source shape algorithm failure flag; set if anything went wrong when measuring the shape. Another shape flag field should also be set to provide more information. + fits:tunit: + - name: shape_flag_no_pixels + datatype: boolean + description: No pixels to measure shape. + fits:tunit: + - name: shape_flag_not_contained + datatype: boolean + description: Center not contained in footprint bounding box. + fits:tunit: + - name: shape_flag_parent_source + datatype: boolean + description: This source is a parent source; we should only be measuring on deblended children in difference imaging. + fits:tunit: + - name: extendedness + datatype: float + description: A measure of extendedness, computed by comparing an object's moment-based traced radius to + the PSF moments. extendedness = 1 implies a high degree of confidence + that the source is extended. extendedness = 0 implies a high degree of confidence + that the source is point-like. + - name: reliability + datatype: float + description: Probability (0-1) that the diaSource is astrophysical, + derived from a machine learning model. + - name: band + datatype: char + length: 1 + description: Filter band this source was observed with. + - name: isDipole + datatype: boolean + description: Source well fit by a dipole. + - name: dipoleFitAttempted + datatype: boolean + description: Attempted to fit a dipole model to this source. + - name: timeProcessedMjdTai + datatype: double + nullable: false + description: Time when the image was processed and this DiaSource record was generated, + expressed as Modified Julian Date, International Atomic Time. + ivoa:ucd: time.epoch + - name: timeWithdrawnMjdTai + datatype: double + nullable: true + description: Time when this record was marked invalid, + expressed as Modified Julian Date, International Atomic Time. + ivoa:ucd: time.epoch + - name: bboxSize + datatype: int + nullable: false + description: Size of the square bounding box that fully contains the detection footprint. + fits:tunit: pixel + - name: pixelFlags + datatype: boolean + description: General pixel flags failure; set if anything went wrong when setting pixels flags from this footprint's mask. This implies that some pixelFlags for this source may be incorrectly set to False. + fits:tunit: + - name: pixelFlags_bad + datatype: boolean + description: Bad pixel in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_cr + datatype: boolean + description: Cosmic ray in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_crCenter + datatype: boolean + description: Cosmic ray in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_edge + datatype: boolean + description: Some of the source footprint is outside usable exposure region (masked EDGE or centroid off image). + fits:tunit: + - name: pixelFlags_nodata + datatype: boolean + description: NO_DATA pixel in the source footprint. + fits:tunit: + - name: pixelFlags_nodataCenter + datatype: boolean + description: NO_DATA pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_interpolated + datatype: boolean + description: Interpolated pixel in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_interpolatedCenter + datatype: boolean + description: Interpolated pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_offimage + datatype: boolean + description: DiaSource center is off image. + fits:tunit: + - name: pixelFlags_saturated + datatype: boolean + description: Saturated pixel in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_saturatedCenter + datatype: boolean + description: Saturated pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_suspect + datatype: boolean + description: DiaSource's footprint includes suspect pixels. + fits:tunit: + - name: pixelFlags_suspectCenter + datatype: boolean + description: Suspect pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_streak + datatype: boolean + description: Streak in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_streakCenter + datatype: boolean + description: Streak in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_injected + datatype: boolean + description: Injection in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_injectedCenter + datatype: boolean + description: Injection in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_injected_template + datatype: boolean + description: Template injection in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_injected_templateCenter + datatype: boolean + description: Template injection in the 3x3 region around the centroid. + fits:tunit: + - name: glint_trail + datatype: boolean + description: This flag is set if the source is part of a glint trail. + fits:tunit: + primaryKey: "#DiaSource.diaSourceId" + indexes: + - name: IDX_DiaSource_visitDetector + columns: + - "#DiaSource.visit" + - "#DiaSource.detector" + - name: IDX_DiaSource_diaObjectId + columns: + - "#DiaSource.diaObjectId" +- name: DiaForcedSource + description: Forced-photometry source measurement on an individual difference Exposure + for all objects in the DiaObject table. + columns: + - name: diaForcedSourceId + datatype: long + nullable: false + description: Unique id. + - name: diaObjectId + datatype: long + nullable: false + description: Id of the DiaObject that this DiaForcedSource was associated with. + ivoa:ucd: meta.id;src + - name: ra + datatype: double + nullable: false + description: Right ascension coordinate of the position of the DiaObject. + ivoa:ucd: pos.eq.ra + fits:tunit: deg + - name: dec + datatype: double + nullable: false + description: Declination coordinate of the position of the DiaObject. + ivoa:ucd: pos.eq.dec + fits:tunit: deg + - name: visit + datatype: long + nullable: false + description: Id of the visit where this forcedSource was measured. + ivoa:ucd: meta.id;obs.image + - name: detector + datatype: short + nullable: false + description: Id of the detector where this forcedSource was measured. + Datatype short instead of byte because of DB concerns about unsigned bytes. + ivoa:ucd: meta.id;obs.image + - name: psfFlux + datatype: float + description: Point Source model flux. + fits:tunit: nJy + ivoa:ucd: phot.count + - name: psfFluxErr + datatype: float + description: Uncertainty of psfFlux. + fits:tunit: nJy + ivoa:ucd: stat.error;phot.count + - name: midpointMjdTai + datatype: double + nullable: false + description: Effective mid-visit time for this diaForcedSource, expressed as Modified + Julian Date, International Atomic Time. + ivoa:ucd: time.epoch + fits:tunit: d + - name: scienceFlux + datatype: float + description: Forced photometry flux for a point source model measured on the visit image + centered at the DiaObject position. + ivoa:ucd: phot.count + fits:tunit: nJy + - name: scienceFluxErr + datatype: float + description: Uncertainty of scienceFlux. + ivoa:ucd: stat.error;phot.count + fits:tunit: nJy + - name: band + datatype: char + length: 1 + description: Filter band this source was observed with. + ivoa:ucd: meta.id;instr.filter + - name: timeProcessedMjdTai + datatype: double + nullable: false + description: Time when this record was generated, + expressed as Modified Julian Date, International Atomic Time. + - name: timeWithdrawnMjdTai + datatype: double + nullable: true + description: Time when this record was marked invalid, + expressed as Modified Julian Date, International Atomic Time. + primaryKey: + - "#DiaForcedSource.diaObjectId" + - "#DiaForcedSource.visit" + - "#DiaForcedSource.detector" + indexes: + - name: IDX_DiaForcedSource_visitDetector + columns: + - "#DiaForcedSource.visit" + - "#DiaForcedSource.detector" +- name: DiaObject_To_Object_Match + description: The table stores mapping of diaObjects to the nearby objects. + columns: + - name: diaObjectId + datatype: long + nullable: false + description: Id of diaObject. + ivoa:ucd: meta.id;src + - name: objectId + datatype: long + nullable: false + description: Id of a nearby object. + ivoa:ucd: meta.id;src + - name: dist + datatype: float + description: The distance between the diaObject and the object. + fits:tunit: arcsec + - name: lnP + datatype: float + description: Natural log of the probability that the observed diaObject is the + same as the nearby object. + indexes: + - name: IDX_DiaObjectToObjectMatch_diaObjectId + columns: + - "#DiaObject_To_Object_Match.diaObjectId" + - name: IDX_DiaObjectToObjectMatch_objectId + columns: + - "#DiaObject_To_Object_Match.objectId" +- name: DiaObjectLast + description: Table with a subset of DiaObject columns used to store only the + latest version of each object. + columns: + - name: diaObjectId + datatype: long + nullable: false + autoincrement: false + description: Unique id. + ivoa:ucd: meta.id;src + - name: validityStartMjdTai + datatype: double + nullable: false + description: Processing time when validity of this diaObject starts, + expressed as Modified Julian Date, International Atomic Time. + ivoa:ucd: time.epoch + - name: lastDiaSourceMjdTai + datatype: double + description: Time of the most recent non-forced DIASource for this object, expressed as + Modified Julian Date, International Atomic Time. + ivoa:ucd: time.epoch + - name: ra + datatype: double + nullable: false + description: Right ascension coordinate of the position of the object. + ivoa:ucd: pos.eq.ra + fits:tunit: deg + - name: raErr + datatype: float + description: Uncertainty of ra. + ivoa:ucd: stat.error;pos.eq.ra + fits:tunit: deg + - name: dec + datatype: double + nullable: false + description: Declination coordinate of the position of the object. + ivoa:ucd: pos.eq.dec + fits:tunit: deg + - name: decErr + datatype: float + description: Uncertainty of dec. + ivoa:ucd: stat.error;pos.eq.dec + fits:tunit: deg + - name: ra_dec_Cov + datatype: float + description: Covariance between ra and dec. + fits:tunit: deg**2 + - name: firstDiaSourceMjdTai + datatype: double + description: Time of the first diaSource, expressed as Modified Julian Date, International Atomic Time. + ivoa:ucd: time.epoch + - name: nDiaSources + datatype: int + nullable: false + description: Total number of DiaSources associated with this DiaObject. + primaryKey: "#DiaObjectLast.diaObjectId" +- name: DetectorVisitProcessingSummary + '@id': '#DetectorVisitProcessingSummary' + description: Properties of an image from one processing of a single detector in a visit. + columns: + - name: visit + '@id': '#DetectorVisitProcessingSummary.visit' + datatype: long + nullable: false + description: Id of the visit this visit was a part of. + ivoa:ucd: meta.id;obs.image + - name: detector + '@id': '#DetectorVisitProcessingSummary.detector' + datatype: short + nullable: false + description: Id of the detector on the instrument that took this visit. + Datatype short instead of byte because of DB concerns about unsigned bytes. + ivoa:ucd: meta.id;obs.image + # TODO: we probably need to add an index on the above two for this table. + - name: ra + '@id': '#DetectorVisitProcessingSummary.ra' + datatype: double + description: Right Ascension of detector center. + fits:tunit: deg + - name: dec + '@id': '#DetectorVisitProcessingSummary.dec' + datatype: double + description: Declination of detector center. + fits:tunit: deg + - name: pixelScale + '@id': '#DetectorVisitProcessingSummary.pixelScale' + datatype: float + description: Measured detector pixel scale. + fits:tunit: arcsec/pixel + - name: zeroPoint + '@id': '#DetectorVisitProcessingSummary.zeroPoint' + datatype: float + description: Zero-point for the detector, estimated at detector center. + fits:tunit: mag + - name: psfSigma + '@id': '#DetectorVisitProcessingSummary.psfSigma' + datatype: float + description: PSF model second-moments determinant radius (center of detector). + fits:tunit: pixel + - name: skyBg + '@id': '#DetectorVisitProcessingSummary.skyBg' + datatype: float + description: Average sky background. + fits:tunit: adu + - name: skyNoise + '@id': '#DetectorVisitProcessingSummary.skyNoise' + datatype: float + description: RMS noise of the sky background. + fits:tunit: adu + - name: seeing + '@id': '#DetectorVisitProcessingSummary.seeing' + datatype: double + description: Mean measured FWHM of the PSF. + fits:tunit: arcsec + - name: xSize + '@id': '#DetectorVisitProcessingSummary.xSize' + datatype: long + nullable: false + description: Number of columns in the image. + fits:tunit: pixel + - name: ySize + '@id': '#DetectorVisitProcessingSummary.ySize' + datatype: long + nullable: false + description: Number of rows in the image. + fits:tunit: pixel + - name: llcra + '@id': '#DetectorVisitProcessingSummary.llcra' + datatype: double + description: RA of lower left corner. + fits:tunit: deg + - name: llcdec + '@id': '#DetectorVisitProcessingSummary.llcdec' + datatype: double + description: Declination of lower left corner. + fits:tunit: deg + - name: ulcra + '@id': '#DetectorVisitProcessingSummary.ulcra' + datatype: double + description: RA of upper left corner. + fits:tunit: deg + - name: ulcdec + '@id': '#DetectorVisitProcessingSummary.ulcdec' + datatype: double + description: Declination of upper left corner. + fits:tunit: deg + - name: urcra + '@id': '#DetectorVisitProcessingSummary.urcra' + datatype: double + description: RA of upper right corner. + fits:tunit: deg + - name: urcdec + '@id': '#DetectorVisitProcessingSummary.urcdec' + datatype: double + description: Declination of upper right corner. + fits:tunit: deg + - name: lrcra + '@id': '#DetectorVisitProcessingSummary.lrcra' + datatype: double + description: RA of lower right corner. + fits:tunit: deg + - name: lrcdec + '@id': '#DetectorVisitProcessingSummary.lrcdec' + datatype: double + description: Declination of lower right corner. + fits:tunit: deg + - name: astromOffsetMean + '@id': '#DetectorVisitProcessingSummary.astromOffsetMean' + datatype: double + description: Mean offset of astrometric calibration matches (arcsec). + fits:tunit: arcsec + - name: astromOffsetStd + '@id': '#DetectorVisitProcessingSummary.astromOffsetStd' + datatype: double + description: Standard deviation of offsets of astrometric calibration matches (arcsec). + fits:tunit: arcsec + - name: nPsfStar + '@id': '#DetectorVisitProcessingSummary.nPsfStar' + datatype: int + nullable: false + description: Number of stars used for PSF model. + fits:tunit: + - name: psfStarDeltaE1Median + '@id': '#DetectorVisitProcessingSummary.psfStarDeltaE1Median' + datatype: double + description: Median E1 residual (starE1 - psfE1) for psf stars. + fits:tunit: + - name: psfStarDeltaE2Median + '@id': '#DetectorVisitProcessingSummary.psfStarDeltaE2Median' + datatype: double + description: Median E2 residual (starE2 - psfE2) for psf stars. + fits:tunit: + - name: psfStarDeltaE1Scatter + '@id': '#DetectorVisitProcessingSummary.psfStarDeltaE1Scatter' + datatype: double + description: Scatter (via MAD) of E1 residual (starE1 - psfE1) for psf stars. + fits:tunit: + - name: psfStarDeltaE2Scatter + '@id': '#DetectorVisitProcessingSummary.psfStarDeltaE2Scatter' + datatype: double + description: Scatter (via MAD) of E2 residual (starE2 - psfE2) for psf stars. + fits:tunit: + - name: psfStarDeltaSizeMedian + '@id': '#DetectorVisitProcessingSummary.psfStarDeltaSizeMedian' + datatype: double + description: Median size residual (starSize - psfSize) for psf stars (pixel). + fits:tunit: pixel + - name: psfStarDeltaSizeScatter + '@id': '#DetectorVisitProcessingSummary.psfStarDeltaSizeScatter' + datatype: double + description: Scatter (via MAD) of size residual (starSize - psfSize) for stars (pixel). + fits:tunit: pixel + - name: psfStarScaledDeltaSizeScatter + '@id': '#DetectorVisitProcessingSummary.psfStarScaledDeltaSizeScatter' + datatype: double + description: Scatter (via MAD) of size residual scaled by median size squared. + fits:tunit: + - name: psfTraceRadiusDelta + '@id': '#DetectorVisitProcessingSummary.psfTraceRadiusDelta' + datatype: double + description: Delta (max - min) of model psf trace radius values evaluated on a grid of unmasked pixels (pixel). + fits:tunit: pixel + - name: psfApFluxDelta + '@id': '#DetectorVisitProcessingSummary.psfApFluxDelta' + datatype: double + description: Delta (max - min) of model psf aperture flux (with aperture radius of max(2, 3*psfSigma)) values evaluated on a grid of unmasked pixels + fits:tunit: + - name: psfApCorrSigmaScaledDelta + '@id': '#DetectorVisitProcessingSummary.psfApCorrSigmaScaledDelta' + datatype: double + description: Delta (max - min) of psf flux aperture correction factors scaled (divided) by the psfSigma evaluated on a grid of unmasked pixels + fits:tunit: + - name: maxDistToNearestPsf + '@id': '#DetectorVisitProcessingSummary.maxDistToNearestPsf' + datatype: double + description: Maximum distance of an unmasked pixel to its nearest model psf star (pixel). + fits:tunit: pixel + - name: starEMedian + '@id': '#DetectorVisitProcessingSummary.starEMedian' + datatype: double + description: Median ellipticity (sqrt(starE1**2.0 + starE2**2.0)) of the stars used in the PSF model + - name: starUnNormalizedEMedian + '@id': '#DetectorVisitProcessingSummary.starUnNormalizedEMedian' + datatype: double + description: Median un-normalized ellipticity (sqrt((starXX - starYY)**2.0 + (2.0*starXY)**2.0)) of the stars used in the PSF model + fits:tunit: pixel**2 + +- name: SSObject + description: LSST-computed per-object quantities. + tap:table_index: 110 + primaryKey: '#SSObject.ssObjectId' + columns: + - name: ssObjectId + description: Unique identifier. + datatype: long + nullable: false + ivoa:ucd: meta.id;src + - name: designation + description: The unpacked primary provisional designation for this object. + datatype: char + length: 16 + ivoa:ucd: meta.id;src + - name: nObs + description: Total number of LSST observations of this object. + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: arc + description: 'Timespan ("arc") of all LSST observations, t_{last} - t_{first}' + datatype: float + nullable: false + ivoa:unit: d + ivoa:ucd: time.duration;obs + - name: firstObservationMjdTai + description: The time of the first LSST observation of this object (could be precovered), TAI. + datatype: double + ivoa:unit: d + ivoa:ucd: time.epoch;obs + # DP2 DISABLED: we will not deliver this for DP2. The list of Rubin + # discoveries will be in flux early in the survey. Due to the long lead + # time between freezing the input data and the release, what we write into + # here may change significantly by the time DP2 is released. Users + # interested in this can easily pull it from the MPC (or the PPDB) at the + # time of DP2 release. + # + # - name: discoverySubmissionDate + # description: The date the LSST first submitted the discovery observations to the MPC. NULL if not an LSST discovery. TAI. + # datatype: double + # ivoa:unit: d + # ivoa:ucd: time.epoch + + - name: MOIDEarth + description: Minimum orbit intersection distance to Earth. + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.distance;src.orbital + - name: MOIDEarthDeltaV + description: DeltaV at the MOID point. + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc.orbital + - name: MOIDEarthEclipticLongitude + description: "Ecliptic longitude of the MOID point (Earth's orbit)." + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.ecliptic.lon + - name: MOIDEarthTrueAnomaly + description: "True anomaly of the MOID point on Earth's orbit." + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng + - name: MOIDEarthTrueAnomalyObject + description: "True anomaly of the MOID point on the object's orbit." + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;src.orbital + + - name: tisserand_J + description: Tisserand parameter with respect to Jupiter (T_J). + datatype: float + ivoa:ucd: src.orbital.TissJ + + - name: extendednessMax + description: Maximum `extendedness` value from the DiaSource. + datatype: float + - name: extendednessMedian + description: Median `extendedness` value from the DiaSource. + datatype: float + - name: extendednessMin + description: Minimum `extendedness` value from the DiaSource. + datatype: float + + - name: u_nObs + description: Total number of data points (u band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: u_H + description: Best fit absolute magnitude (u band). + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag + - name: u_HErr + description: Error in the estimate of H (u band). + datatype: float + ivoa:unit: mag + ivoa:ucd: stat.error;phot.mag + - name: u_G12 + description: Best fit G12 slope parameter (u band). + datatype: float + ivoa:ucd: stat.fit.param + - name: u_G12Err + description: Error in the estimate of G12 (u band). + datatype: float + ivoa:ucd: stat.error;stat.fit.param + - name: u_H_u_G12_Cov + description: H–G12 covariance (u band). + datatype: float + ivoa:unit: mag**2 + ivoa:ucd: stat.covariance;phot.mag;stat.fit.param + - name: u_nObsUsed + description: The number of data points used to fit the phase curve (u band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: u_Chi2 + description: Chi^2 statistic of the phase curve fit (u band). + datatype: float + ivoa:ucd: stat.fit.chi2 + - name: u_phaseAngleMin + description: Minimum phase angle observed (u band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.min + - name: u_phaseAngleMax + description: Maximum phase angle observed (u band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.max + - name: u_slope_fit_failed + description: G12 fit failed in u band. G12 contains a fiducial value used to fit H. + datatype: boolean + + + - name: g_nObs + description: Total number of data points (g band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: g_H + description: Best fit absolute magnitude (g band). + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag + - name: g_HErr + description: Error in the estimate of H (g band). + datatype: float + ivoa:unit: mag + ivoa:ucd: stat.error;phot.mag + - name: g_G12 + description: Best fit G12 slope parameter (g band). + datatype: float + ivoa:ucd: stat.fit.param + - name: g_G12Err + description: Error in the estimate of G12 (g band). + datatype: float + ivoa:ucd: stat.error;stat.fit.param + - name: g_H_g_G12_Cov + description: H–G12 covariance (g band). + datatype: float + ivoa:unit: mag**2 + ivoa:ucd: stat.covariance;phot.mag;stat.fit.param + - name: g_nObsUsed + description: The number of data points used to fit the phase curve (g band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: g_Chi2 + description: Chi^2 statistic of the phase curve fit (g band). + datatype: float + ivoa:ucd: stat.fit.chi2 + - name: g_phaseAngleMin + description: Minimum phase angle observed (g band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.min + - name: g_phaseAngleMax + description: Maximum phase angle observed (g band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.max + - name: g_slope_fit_failed + description: G12 fit failed in g band. G12 contains a fiducial value used to fit H. + datatype: boolean + + + - name: r_nObs + description: Total number of data points (r band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: r_H + description: Best fit absolute magnitude (r band). + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag + - name: r_HErr + description: Error in the estimate of H (r band). + datatype: float + ivoa:unit: mag + ivoa:ucd: stat.error;phot.mag + - name: r_G12 + description: Best fit G12 slope parameter (r band). + datatype: float + ivoa:ucd: stat.fit.param + - name: r_G12Err + description: Error in the estimate of G12 (r band). + datatype: float + ivoa:ucd: stat.error;stat.fit.param + - name: r_H_r_G12_Cov + description: H–G12 covariance (r band). + datatype: float + ivoa:unit: mag**2 + ivoa:ucd: stat.covariance;phot.mag;stat.fit.param + - name: r_nObsUsed + description: The number of data points used to fit the phase curve (r band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: r_Chi2 + description: Chi^2 statistic of the phase curve fit (r band). + datatype: float + ivoa:ucd: stat.fit.chi2 + - name: r_phaseAngleMin + description: Minimum phase angle observed (r band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.min + - name: r_phaseAngleMax + description: Maximum phase angle observed (r band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.max + - name: r_slope_fit_failed + description: G12 fit failed in r band. G12 contains a fiducial value used to fit H. + datatype: boolean + + + - name: i_nObs + description: Total number of data points (i band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: i_H + description: Best fit absolute magnitude (i band). + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag + - name: i_HErr + description: Error in the estimate of H (i band). + datatype: float + ivoa:unit: mag + ivoa:ucd: stat.error;phot.mag + - name: i_G12 + description: Best fit G12 slope parameter (i band). + datatype: float + ivoa:ucd: stat.fit.param + - name: i_G12Err + description: Error in the estimate of G12 (i band). + datatype: float + ivoa:ucd: stat.error;stat.fit.param + - name: i_H_i_G12_Cov + description: H–G12 covariance (i band). + datatype: float + ivoa:unit: mag**2 + ivoa:ucd: stat.covariance;phot.mag;stat.fit.param + - name: i_nObsUsed + description: The number of data points used to fit the phase curve (i band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: i_Chi2 + description: Chi^2 statistic of the phase curve fit (i band). + datatype: float + ivoa:ucd: stat.fit.chi2 + - name: i_phaseAngleMin + description: Minimum phase angle observed (i band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.min + - name: i_phaseAngleMax + description: Maximum phase angle observed (i band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.max + - name: i_slope_fit_failed + description: G12 fit failed in i band. G12 contains a fiducial value used to fit H. + datatype: boolean + + + - name: z_nObs + description: Total number of data points (z band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: z_H + description: Best fit absolute magnitude (z band). + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag + - name: z_HErr + description: Error in the estimate of H (z band). + datatype: float + ivoa:unit: mag + ivoa:ucd: stat.error;phot.mag + - name: z_G12 + description: Best fit G12 slope parameter (z band). + datatype: float + ivoa:ucd: stat.fit.param + - name: z_G12Err + description: Error in the estimate of G12 (z band). + datatype: float + ivoa:ucd: stat.error;stat.fit.param + - name: z_H_z_G12_Cov + description: H–G12 covariance (z band). + datatype: float + ivoa:unit: mag**2 + ivoa:ucd: stat.covariance;phot.mag;stat.fit.param + - name: z_nObsUsed + description: The number of data points used to fit the phase curve (z band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: z_Chi2 + description: Chi^2 statistic of the phase curve fit (z band). + datatype: float + ivoa:ucd: stat.fit.chi2 + - name: z_phaseAngleMin + description: Minimum phase angle observed (z band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.min + - name: z_phaseAngleMax + description: Maximum phase angle observed (z band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.max + - name: z_slope_fit_failed + description: G12 fit failed in z band. G12 contains a fiducial value used to fit H. + datatype: boolean + + + - name: y_nObs + description: Total number of data points (y band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: y_H + description: Best fit absolute magnitude (y band). + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag + - name: y_HErr + description: Error in the estimate of H (y band). + datatype: float + ivoa:unit: mag + ivoa:ucd: stat.error;phot.mag + - name: y_G12 + description: Best fit G12 slope parameter (y band). + datatype: float + ivoa:ucd: stat.fit.param + - name: y_G12Err + description: Error in the estimate of G12 (y band). + datatype: float + ivoa:ucd: stat.error;stat.fit.param + - name: y_H_y_G12_Cov + description: H–G12 covariance (y band). + datatype: float + ivoa:unit: mag**2 + ivoa:ucd: stat.covariance;phot.mag;stat.fit.param + - name: y_nObsUsed + description: The number of data points used to fit the phase curve (y band). + datatype: int + nullable: false + ivoa:ucd: meta.number;obs + - name: y_Chi2 + description: Chi^2 statistic of the phase curve fit (y band). + datatype: float + ivoa:ucd: stat.fit.chi2 + - name: y_phaseAngleMin + description: Minimum phase angle observed (y band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.min + - name: y_phaseAngleMax + description: Maximum phase angle observed (y band). + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng;stat.max + - name: y_slope_fit_failed + description: G12 fit failed in y band. G12 contains a fiducial value used to fit H. + datatype: boolean + constraints: + - name: fk_SSObject_mpc_orbits + description: Link an SSObject to its associated mpc_orbits + '@type': ForeignKey + columns: + - '#SSObject.designation' + referencedColumns: + - '#mpc_orbits.designation' + - name: unique_SSObject_designation + description: Unique index on the designation column + '@type': Unique + columns: + - "#SSObject.designation" + indexes: + - name: idx_SSObject_MOIDEarth + description: Index on the MOIDEarth column + columns: + - "#SSObject.MOIDEarth" + +- name: SSSource + description: LSST-computed per-source quantities. 1::1 relationship with DiaSource. + tap:table_index: 120 + primaryKey: '#SSSource.diaSourceId' + + columns: + - name: diaSourceId + description: Unique identifier of the observation (matching DiaSource.diaSourceId). + datatype: long + nullable: false + ivoa:ucd: meta.id;src + - name: ssObjectId + description: Unique LSST identifier of the Solar System object. + datatype: long + nullable: false + ivoa:ucd: meta.id;src + - name: designation + description: The unpacked primary provisional designation for this object. + datatype: char + length: 16 + ivoa:ucd: meta.id;src + + + - name: eclLambda + description: Ecliptic longitude, converted from the observed coordinates. + datatype: double + nullable: false + ivoa:unit: deg + ivoa:ucd: pos.ecliptic.lon + - name: eclBeta + description: Ecliptic latitude, converted from the observed coordinates. + datatype: double + nullable: false + ivoa:unit: deg + ivoa:ucd: pos.ecliptic.lat + + - name: galLon + description: Galactic longitude, converted from the observed coordinates. + datatype: double + nullable: false + ivoa:unit: deg + ivoa:ucd: pos.galactic.lon + - name: galLat + description: Galactic latitude, converted from the observed coordinates. + datatype: double + nullable: false + ivoa:unit: deg + ivoa:ucd: pos.galactic.lat + + - name: elongation + description: Solar elongation of the object at the time of observation. + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng + - name: phaseAngle + description: Phase angle between the Sun, object, and observer. + datatype: float + ivoa:unit: deg + ivoa:ucd: pos.phaseAng + + - name: topoRange + description: Topocentric distance (delta) at light-emission time. + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.distance + - name: topoRangeRate + description: Topocentric radial (line-of-sight) velocity (deldot); positive values indicate motion away from the observer. + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc + + - name: helioRange + description: Heliocentric distance (r) at light-emission time. + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.distance;pos.heliocentric + - name: helioRangeRate + description: Heliocentric radial velocity (rdot); positive values indicate motion away from the Sun. + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.heliocentric + + - name: ephRa + description: Predicted ICRS right ascension from the orbit in mpc_orbits. + datatype: double + ivoa:unit: deg + ivoa:ucd: pos.eq.ra;meta.modelled;pos.ephem + - name: ephDec + description: Predicted ICRS declination from the orbit in mpc_orbits. + datatype: double + ivoa:unit: deg + ivoa:ucd: pos.eq.dec;meta.modelled;pos.ephem + - name: ephVmag + description: > + Predicted magnitude in V band, computed from mpc_orbits data including + the mpc_orbits-provided (H, G) estimates + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag;em.opt.V + + - name: ephRate + description: Total predicted on-sky angular rate of motion. + datatype: float + ivoa:unit: deg/d + ivoa:ucd: pos.pm;pos.ephem + - name: ephRateRa + description: Predicted on-sky angular rate in the R.A. direction (includes the cos(dec) factor). + datatype: float + ivoa:unit: deg/d + ivoa:ucd: pos.pm;pos.eq.ra;pos.ephem + - name: ephRateDec + description: Predicted on-sky angular rate in the declination direction. + datatype: float + ivoa:unit: deg/d + ivoa:ucd: pos.pm;pos.eq.dec;pos.ephem + + - name: ephOffset + description: Total observed versus predicted angular separation on the sky. + datatype: float + ivoa:unit: arcsec + ivoa:ucd: pos.angDistance;stat.fit.omc + - name: ephOffsetRa + description: Offset between observed and predicted position in the R.A. direction (includes cos(dec) term). + datatype: double + ivoa:unit: arcsec + ivoa:ucd: pos.eq.ra;stat.fit.omc + - name: ephOffsetDec + description: Offset between observed and predicted position in declination. + datatype: double + ivoa:unit: arcsec + ivoa:ucd: pos.eq.dec;stat.fit.omc + - name: ephOffsetAlongTrack + description: Offset between observed and predicted position in the along-track direction on the sky. + datatype: float + ivoa:unit: arcsec + ivoa:ucd: pos.angDistance;stat.fit.omc + - name: ephOffsetCrossTrack + description: Offset between observed and predicted position in the cross-track direction on the sky. + datatype: float + ivoa:unit: arcsec + ivoa:ucd: pos.angDistance;stat.fit.omc + + + - name: helio_x + description: Cartesian heliocentric X coordinate at light-emission time (ICRS). + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.cartesian.x;pos.heliocentric + - name: helio_y + description: Cartesian heliocentric Y coordinate at light-emission time (ICRS). + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.cartesian.y;pos.heliocentric + - name: helio_z + description: Cartesian heliocentric Z coordinate at light-emission time (ICRS). + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.cartesian.z;pos.heliocentric + - name: helio_vx + description: Cartesian heliocentric X velocity at light-emission time (ICRS). + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.cartesian.x + - name: helio_vy + description: Cartesian heliocentric Y velocity at light-emission time (ICRS). + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.cartesian.y + - name: helio_vz + description: Cartesian heliocentric Z velocity at light-emission time (ICRS). + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.cartesian.z + - name: helio_vtot + description: "The magnitude of the heliocentric velocity vector, sqrt(vx*vx + vy*vy + vz*vz)." + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.heliocentric + + - name: topo_x + description: Cartesian topocentric X coordinate at light-emission time (ICRS). + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.cartesian.x + - name: topo_y + description: Cartesian topocentric Y coordinate at light-emission time (ICRS). + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.cartesian.y + - name: topo_z + description: Cartesian topocentric Z coordinate at light-emission time (ICRS). + datatype: float + ivoa:unit: AU + ivoa:ucd: pos.cartesian.z + - name: topo_vx + description: Cartesian topocentric X velocity at light-emission time (ICRS). + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.cartesian.x + - name: topo_vy + description: Cartesian topocentric Y velocity at light-emission time (ICRS). + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.cartesian.y + - name: topo_vz + description: Cartesian topocentric Z velocity at light-emission time (ICRS). + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc;pos.cartesian.z + - name: topo_vtot + description: "The magnitude of the topocentric velocity vector, sqrt(vx*vx + vy*vy + vz*vz)." + datatype: float + ivoa:unit: km/s + ivoa:ucd: phys.veloc + + - name: diaDistanceRank + description: >- + The rank of the diaSourceId-identified source in terms of its + closeness to the predicted SSO position. If diaSourceId is the + nearest DiaSource to this SSO prediction, diaSourceDistanceRank=1 + would be set. If it is the second nearest, it would be 2, etc. + datatype: short + +# Columns copied from DiaSurce + - name: visit + datatype: long + nullable: false + description: Id of the visit where this diaSource was measured. + ivoa:ucd: meta.id;obs.image + - name: detector + datatype: short + nullable: false + description: Id of the detector where this diaSource was measured. + Datatype short instead of byte because of DB concerns about unsigned bytes. + ivoa:ucd: meta.id;obs.image + - name: parentDiaSourceId + datatype: long + description: Id of the parent diaSource this diaSource has been deblended from, + if any. + ivoa:ucd: meta.id;src + - name: midpointMjdTai + datatype: double + nullable: false + description: Effective mid-visit time for this diaSource, expressed as Modified + Julian Date, International Atomic Time. + fits:tunit: d + ivoa:ucd: time.epoch + - name: ra + datatype: double + nullable: false + description: Right ascension coordinate of the center of this diaSource. + fits:tunit: deg + ivoa:ucd: pos.eq.ra + - name: raErr + datatype: float + description: Uncertainty of ra. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.ra + - name: dec + datatype: double + nullable: false + description: Declination coordinate of the center of this diaSource. + fits:tunit: deg + ivoa:ucd: pos.eq.dec + - name: decErr + datatype: float + description: Uncertainty of dec. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.dec + - name: ra_dec_Cov + datatype: float + description: Covariance between ra and dec. + fits:tunit: deg**2 + ivoa:ucd: stat.covariance + - name: x + datatype: float + nullable: false + description: x position computed by a centroiding algorithm. + fits:tunit: pixel + ivoa:ucd: pos.cartesian.x + - name: xErr + datatype: float + description: Uncertainty of x. + fits:tunit: pixel + ivoa:ucd: stat.error;pos.cartesian.x + - name: y + datatype: float + nullable: false + description: y position computed by a centroiding algorithm. + fits:tunit: pixel + ivoa:ucd: pos.cartesian.y + - name: yErr + datatype: float + description: Uncertainty of y. + fits:tunit: pixel + ivoa:ucd: stat.error;pos.cartesian.y + - name: centroid_flag + datatype: boolean + description: General centroid algorithm failure flag; set if anything went wrong when fitting the centroid. Another centroid flag field should also be set to provide more information. + fits:tunit: + - name: apFlux + datatype: float + description: Flux in a 12 pixel radius aperture on the difference image. + fits:tunit: nJy + ivoa:ucd: phot.count + - name: apFluxErr + datatype: float + description: Estimated uncertainty of apFlux. + fits:tunit: nJy + ivoa:ucd: stat.error;phot.count + - name: apFlux_flag + datatype: boolean + description: General aperture flux algorithm failure flag; set if anything went wrong when measuring aperture fluxes. Another apFlux flag field should also be set to provide more information. + fits:tunit: + - name: apFlux_flag_apertureTruncated + datatype: boolean + description: Aperture did not fit within measurement image. + fits:tunit: + - name: isNegative + datatype: boolean + description: Source was detected as significantly negative. + fits:tunit: + - name: snr + datatype: float + description: The signal-to-noise ratio at which this source was detected in the + difference image. + ivoa:ucd: stat.snr + - name: psfFlux + datatype: float + description: Flux for Point Source model. Note this actually measures + the flux difference between the template and the visit image. + fits:tunit: nJy + ivoa:ucd: phot.count + - name: psfFluxErr + datatype: float + description: Uncertainty of psfFlux. + fits:tunit: nJy + - name: psfLnL + datatype: float + description: Natural log likelihood of the observed data given the point source + model. + ivoa:ucd: stat.likelihood + - name: psfChi2 + datatype: float + description: Chi^2 statistic of the point source model fit. + ivoa:ucd: stat.fit.chi2 + - name: psfNdata + datatype: int + nullable: false + description: The number of data points (pixels) used to fit the point source model. + - name: psfFlux_flag + datatype: boolean + description: Failure to derive linear least-squares fit of psf model. Another psfFlux flag field should also be set to provide more information. + fits:tunit: + - name: psfFlux_flag_edge + datatype: boolean + description: Object was too close to the edge of the image to use the full PSF model. + fits:tunit: + - name: psfFlux_flag_noGoodPixels + datatype: boolean + description: Not enough non-rejected pixels in data to attempt the fit. + fits:tunit: + - name: trailFlux + datatype: float + description: Flux for a trailed source model. Note this actually measures + the flux difference between the template and the visit image. + fits:tunit: nJy + - name: trailFluxErr + datatype: float + description: Uncertainty of trailFlux. + fits:tunit: nJy + - name: trailRa + datatype: double + description: Right ascension coordinate of centroid for trailed source model. + fits:tunit: deg + ivoa:ucd: pos.eq.ra + - name: trailRaErr + datatype: float + description: Uncertainty of trailRa. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.ra + - name: trailDec + datatype: double + description: Declination coordinate of centroid for trailed source model. + fits:tunit: deg + ivoa:ucd: pos.eq.dec + - name: trailDecErr + datatype: float + description: Uncertainty of trailDec. + fits:tunit: deg + ivoa:ucd: stat.error;pos.eq.dec + - name: trailLength + datatype: float + description: Maximum likelihood fit of trail length. + fits:tunit: arcsec + - name: trailLengthErr + datatype: float + description: Uncertainty of trailLength. + fits:tunit: nJy + - name: trailAngle + datatype: float + description: Maximum likelihood fit of the angle between the meridian through + the centroid and the trail direction (bearing). + fits:tunit: deg + - name: trailAngleErr + datatype: float + description: Uncertainty of trailAngle. + fits:tunit: nJy + - name: trailChi2 + datatype: float + description: Chi^2 statistic of the trailed source model fit. + ivoa:ucd: stat.fit.chi2 + - name: trailNdata + datatype: int + nullable: false + value: 0 + description: The number of data points (pixels) used to fit the trailed source model. + - name: trail_flag_edge + datatype: boolean + description: This flag is set if a trailed source extends onto or past edge pixels. + fits:tunit: + - name: dipoleMeanFlux + datatype: float + description: Maximum likelihood value for the mean absolute flux of the two lobes + for a dipole model. + fits:tunit: nJy + - name: dipoleMeanFluxErr + datatype: float + description: Uncertainty of dipoleMeanFlux. + fits:tunit: nJy + ivoa:ucd: stat.error + - name: dipoleFluxDiff + datatype: float + description: Maximum likelihood value for the difference of absolute fluxes of + the two lobes for a dipole model. + fits:tunit: nJy + - name: dipoleFluxDiffErr + datatype: float + description: Uncertainty of dipoleFluxDiff. + fits:tunit: nJy + ivoa:ucd: stat.error + - name: dipoleLength + datatype: float + description: Maximum likelihood value for the lobe separation in dipole model. + fits:tunit: arcsec + ivoa:ucd: pos.angDistance + - name: dipoleAngle + datatype: float + description: Maximum likelihood fit of the angle between the meridian through + the centroid and the dipole direction (bearing, from negative to positive lobe). + fits:tunit: deg + ivoa:ucd: pos.posAng + - name: dipoleChi2 + datatype: float + description: Chi^2 statistic of the model fit. + ivoa:ucd: stat.fit.chi2 + - name: dipoleNdata + datatype: int + nullable: false + description: The number of data points (pixels) used to fit the model. + - name: scienceFlux + datatype: float + description: Forced photometry flux for a point source model measured on the visit image + centered at DiaSource position. + fits:tunit: nJy + ivoa:ucd: phot.count + - name: scienceFluxErr + datatype: float + description: Estimated uncertainty of scienceFlux. + fits:tunit: nJy + ivoa:ucd: stat.error;phot.count + - name: forced_PsfFlux_flag + datatype: boolean + description: Forced PSF photometry on science image failed. Another forced_PsfFlux flag field should also be set to provide more information. + fits:tunit: + - name: forced_PsfFlux_flag_edge + datatype: boolean + description: Forced PSF flux on science image was too close to the edge of the image to use the full PSF model. + fits:tunit: + - name: forced_PsfFlux_flag_noGoodPixels + datatype: boolean + description: Forced PSF flux not enough non-rejected pixels in data to attempt the fit. + fits:tunit: + - name: templateFlux + datatype: float + description: Forced photometry flux for a point source model measured on the template image + centered at the DiaObject position. + ivoa:ucd: phot.count + fits:tunit: nJy + - name: templateFluxErr + datatype: float + description: Uncertainty of templateFlux. + ivoa:ucd: stat.error;phot.count + fits:tunit: nJy + - name: ixx + datatype: float + description: Adaptive second moment of the source intensity. + fits:tunit: nJy.arcsec**2 + - name: iyy + datatype: float + description: Adaptive second moment of the source intensity. + fits:tunit: nJy.arcsec**2 + - name: ixy + datatype: float + description: Adaptive second moment of the source intensity. + fits:tunit: nJy.arcsec**2 + - name: ixxPSF + datatype: float + description: Adaptive second moment for the PSF. + fits:tunit: nJy.arcsec**2 + - name: iyyPSF + datatype: float + description: Adaptive second moment for the PSF. + fits:tunit: nJy.arcsec**2 + - name: ixyPSF + datatype: float + description: Adaptive second moment for the PSF. + fits:tunit: nJy.arcsec**2 + - name: shape_flag + datatype: boolean + description: General source shape algorithm failure flag; set if anything went wrong when measuring the shape. Another shape flag field should also be set to provide more information. + fits:tunit: + - name: shape_flag_no_pixels + datatype: boolean + description: No pixels to measure shape. + fits:tunit: + - name: shape_flag_not_contained + datatype: boolean + description: Center not contained in footprint bounding box. + fits:tunit: + - name: shape_flag_parent_source + datatype: boolean + description: This source is a parent source; we should only be measuring on deblended children in difference imaging. + fits:tunit: + - name: extendedness + datatype: float + description: > + A measure of extendedness, computed by comparing an object''s moment-based traced radius to + the PSF moments. extendedness = 1 implies a high degree of confidence + that the source is extended. extendedness = 0 implies a high degree of confidence + that the source is point-like. + - name: reliability + datatype: float + description: Probability (0-1) that the diaSource is astrophysical, + derived from a machine learning model. + - name: band + datatype: char + length: 1 + description: Filter band this source was observed with. + - name: isDipole + datatype: boolean + description: Source well fit by a dipole. + - name: dipoleFitAttempted + datatype: boolean + description: Attempted to fit a dipole model to this source. + - name: timeProcessedMjdTai + datatype: double + nullable: false + description: Time when the image was processed and this DiaSource record was generated, + expressed as Modified Julian Date, International Atomic Time. + ivoa:ucd: time.epoch + - name: bboxSize + datatype: int + nullable: false + description: Size of the square bounding box that fully contains the detection footprint. + fits:tunit: pixel + - name: pixelFlags + datatype: boolean + description: "General pixel flags failure; set if anything went wrong when setting pixels flags from this footprint's mask. This implies that some pixelFlags for this source may be incorrectly set to False." + fits:tunit: + - name: pixelFlags_bad + datatype: boolean + description: Bad pixel in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_cr + datatype: boolean + description: Cosmic ray in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_crCenter + datatype: boolean + description: Cosmic ray in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_edge + datatype: boolean + description: Some of the source footprint is outside usable exposure region (masked EDGE or centroid off image). + fits:tunit: + - name: pixelFlags_nodata + datatype: boolean + description: NO_DATA pixel in the source footprint. + fits:tunit: + - name: pixelFlags_nodataCenter + datatype: boolean + description: NO_DATA pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_interpolated + datatype: boolean + description: Interpolated pixel in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_interpolatedCenter + datatype: boolean + description: Interpolated pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_offimage + datatype: boolean + description: DiaSource center is off image. + fits:tunit: + - name: pixelFlags_saturated + datatype: boolean + description: Saturated pixel in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_saturatedCenter + datatype: boolean + description: Saturated pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_suspect + datatype: boolean + description: "DiaSource's footprint includes suspect pixels." + fits:tunit: + - name: pixelFlags_suspectCenter + datatype: boolean + description: Suspect pixel in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_streak + datatype: boolean + description: Streak in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_streakCenter + datatype: boolean + description: Streak in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_injected + datatype: boolean + description: Injection in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_injectedCenter + datatype: boolean + description: Injection in the 3x3 region around the centroid. + fits:tunit: + - name: pixelFlags_injected_template + datatype: boolean + description: Template injection in the DiaSource footprint. + fits:tunit: + - name: pixelFlags_injected_templateCenter + datatype: boolean + description: Template injection in the 3x3 region around the centroid. + fits:tunit: + - name: glint_trail + datatype: boolean + description: This flag is set if the source is part of a glint trail. + fits:tunit: + + constraints: + - name: fk_SSSource_DiaSource + description: Link an SSSource to its associated DiaSource + '@type': ForeignKey + columns: + - '#SSSource.diaSourceId' + referencedColumns: + - '#DiaSource.diaSourceId' + + - name: fk_SSSource_SSObject + description: Link an SSObject to its associated SSSources + '@type': ForeignKey + columns: + - '#SSSource.ssObjectId' + referencedColumns: + - '#SSObject.ssObjectId' + + - name: fk_SSSource_mpc_orbits + description: Link an SSSource to its associated mpc_orbits + '@type': ForeignKey + columns: + - '#SSSource.designation' + referencedColumns: + - '#mpc_orbits.designation' + + indexes: + - name: idx_SSSource_ssObjectId + description: > + Non-unique index on the ssObjectId column; accelerates retrieval of + single-epoch data for SSObjects. + columns: + - "#SSSource.ssObjectId" + + - name: idx_SSSource_designation + description: > + Non-unique index on the designation column; accelerates retrieval of + single-epoch data for SSObjects. + columns: + - "#SSSource.designation" + +- name: NearbySSO + description: > + Indices to solar system objects closest to DiaSources, within some + matching radius. + tap:table_index: 125 + primaryKey: '#NearbySSO.diaSourceId' + columns: + - name: diaSourceId + datatype: long + nullable: false + autoincrement: false + description: Unique identifier of the DiaSource. + ivoa:ucd: meta.id;obs.image + - name: ssObjectId + datatype: long + nullable: true + description: Id of the ssObject found within a matching radius of this source, if any. + ivoa:ucd: meta.id;src + - name: designation + description: The primary provisional designation in unpacked form (e.g. 2008 AB). + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: ephRa + description: Predicted ICRS right ascension from the orbit in mpc_orbits. + datatype: double + ivoa:unit: deg + ivoa:ucd: pos.eq.ra;meta.modelled;pos.ephem + - name: ephDec + description: Predicted ICRS declination from the orbit in mpc_orbits. + datatype: double + ivoa:unit: deg + ivoa:ucd: pos.eq.dec;meta.modelled;pos.ephem + - name: ephOffset + description: Total observed versus predicted angular separation on the sky. + datatype: float + ivoa:unit: arcsec + ivoa:ucd: pos.angDistance;stat.fit.omc + - name: ephVmag + description: > + Predicted magnitude in V band, computed from mpc_orbits data including + the mpc_orbits-provided (H, G) estimates + datatype: float + ivoa:unit: mag + ivoa:ucd: phot.mag;em.opt.V + - name: ephRateRa + description: Predicted on-sky angular rate in the R.A. direction (includes the cos(dec) factor). + datatype: float + ivoa:unit: deg/d + ivoa:ucd: pos.pm;pos.eq.ra;pos.ephem + - name: ephRateDec + description: Predicted on-sky angular rate in the declination direction. + datatype: float + ivoa:unit: deg/d + ivoa:ucd: pos.pm;pos.eq.dec;pos.ephem + constraints: + - name: fk_NearbySSO_DiaSource + description: Link to its associated DiaSource + '@type': ForeignKey + columns: + - '#NearbySSO.diaSourceId' + referencedColumns: + - '#DiaSource.diaSourceId' + - name: fk_NearbySSO_SSObject + description: Link to its associated SSObject + '@type': ForeignKey + columns: + - '#NearbySSO.ssObjectId' + referencedColumns: + - '#SSObject.ssObjectId' + - name: fk_NearbySSO_mpc_orbits + description: Link an NearbySSO to its associated mpc_orbits + '@type': ForeignKey + columns: + - '#NearbySSO.designation' + referencedColumns: + - '#mpc_orbits.designation' + + indexes: + - name: idx_NearbySSO_ssObjectId + description: > + Non-unique index on the ssObjectId column; accelerates retrieval of + single-epoch data for SSObjects. + columns: + - "#NearbySSO.ssObjectId" + + - name: idx_NearbySSO_designation + description: > + Non-unique index on the designation column; accelerates retrieval of + single-epoch data for SSObjects. + columns: + - "#NearbySSO.designation" + +- name: mpc_orbits + description: Table of orbital elements and related information of known (sun-orbiting and unbound) Solar + System objects. Replicated from the Minor Planet Center (Postgres) database. This schema will + generally closely follow the schema of the upstream table, to allow end-users to rerun queries + developed elsewhere on the RSP. + tap:table_index: 130 + primaryKey: '#mpc_orbits.id' + columns: + - name: id + description: Internal ID (generally not seen/used by the user) + datatype: int + nullable: false + ivoa:ucd: meta.id;src + - name: designation + # Note: the 'designation' column is a Rubin-provided copy of the + # unpacked_primary_provisional_designation column to work around UX issues. + description: The primary provisional designation in unpacked form (e.g. 2008 AB). + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: packed_primary_provisional_designation + description: The primary provisional designation in packed form (e.g. K08A00B) + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: unpacked_primary_provisional_designation + description: The primary provisional designation in unpacked form (e.g. 2008 AB) + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: mpc_orb_jsonb + description: Details of the orbit solution in JSON form + datatype: text + - name: created_at + description: When this row was created + datatype: timestamp + precision: 6 + ivoa:ucd: time.creation;meta.dataset + - name: updated_at + description: When this row was updated + datatype: timestamp + precision: 6 + ivoa:ucd: time.processing;meta.dataset + - name: orbit_type_int + description: Orbit Type (Integer) + datatype: int + - name: u_param + description: U parameter + datatype: int + - name: nopp + description: number of oppositions + datatype: int + - name: arc_length_total + description: "Arc length over total observations [days]" + datatype: double + ivoa:unit: d + - name: arc_length_sel + description: "Arc length over total observations *selected* [days]" + datatype: double + ivoa:unit: d + - name: nobs_total + description: Total number of all observations (optical + radar) available + datatype: int + - name: nobs_total_sel + description: Total number of all observations (optical + radar) selected for use in orbit fitting + datatype: int + - name: a + description: "Semi Major Axis [au]" + datatype: double + ivoa:ucd: pos.distance;src.orbital + ivoa:unit: AU + - name: q + description: "Pericenter Distance [au]" + datatype: double + ivoa:ucd: pos.distance;src.orbital + ivoa:unit: AU + - name: e + description: "Eccentricity" + datatype: double + ivoa:ucd: src.orbital.eccentricity + - name: i + description: "Inclination [degrees]" + datatype: double + ivoa:ucd: src.orbital.inclination + ivoa:unit: deg + - name: node + description: "Longitude of Ascending Node [degrees]" + datatype: double + ivoa:ucd: src.orbital.node + ivoa:unit: deg + - name: argperi + description: "Argument of Pericenter [degrees]" + datatype: double + ivoa:ucd: src.orbital.periastron + ivoa:unit: deg + - name: peri_time + description: "Time from Pericenter Passage [days]" + datatype: double + ivoa:unit: d + - name: yarkovsky + description: "Yarkovsky Component [10^(-10)*au/day^2]" + datatype: double + ivoa:unit: 1e-10.au.d-2 + - name: srp + description: "Solar-Radiation Pressure Component [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: a1 + description: "A1 non-grav components [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: a2 + description: "A2 non-grav components [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: a3 + description: "A3 non-grav components [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: dt + description: DT non-grav component + datatype: double + - name: mean_anomaly + description: "Mean Anomaly [degrees]" + datatype: double + ivoa:ucd: src.orbital.meanAnomaly + ivoa:unit: deg + - name: period + description: "Orbital Period [days]" + datatype: double + ivoa:ucd: time.period.revolution;src.orbital + ivoa:unit: d + - name: mean_motion + description: "Orbital Mean Motion [degrees per day]" + datatype: double + ivoa:ucd: src.orbital.meanMotion + ivoa:unit: deg.d-1 + - name: a_unc + description: "Uncertainty on Semi Major Axis [au]" + datatype: double + ivoa:ucd: stat.error;pos.distance;src.orbital + ivoa:unit: AU + - name: q_unc + description: "Uncertainty on Pericenter Distance [au]" + datatype: double + ivoa:ucd: stat.error;pos.distance;src.orbital + ivoa:unit: AU + - name: e_unc + description: "Uncertainty on Eccentricity" + datatype: double + ivoa:ucd: stat.error;src.orbital.eccentricity + - name: i_unc + description: "Uncertainty on Inclination [degrees]" + datatype: double + ivoa:ucd: stat.error;src.orbital.inclination + ivoa:unit: deg + - name: node_unc + description: "Uncertainty on Longitude of Ascending Node [degrees]" + datatype: double + ivoa:ucd: stat.error;src.orbital.node + ivoa:unit: deg + - name: argperi_unc + description: "Uncertainty on Argument of Pericenter [degrees]" + datatype: double + ivoa:ucd: stat.error;src.orbital.periastron + ivoa:unit: deg + - name: peri_time_unc + description: "Uncertainty on Time from Pericenter Passage [days]" + datatype: double + ivoa:unit: d + - name: yarkovsky_unc + description: "Uncertainty on Yarkovsky Component [10^(-10)*au/day^2]" + datatype: double + ivoa:unit: 1e-10.au.d-2 + - name: srp_unc + description: "Uncertainty on Solar-Radiation Pressure Component [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: a1_unc + description: "Uncertainty on A1 non-grav components [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: a2_unc + description: "Uncertainty on A2 non-grav components [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: a3_unc + description: "Uncertainty on A3 non-grav components [m^2/ton]" + datatype: double + ivoa:unit: m2.t-1 + - name: dt_unc + description: Uncertainty on DT non-grav component + datatype: double + - name: mean_anomaly_unc + description: "Uncertainty on Mean Anomaly [degrees]" + datatype: double + ivoa:ucd: stat.error;src.orbital.meanAnomaly + ivoa:unit: deg + - name: period_unc + description: "Uncertainty on Orbital Period [days]" + datatype: double + ivoa:ucd: stat.error;time.period.revolution;src.orbital + ivoa:unit: d + - name: mean_motion_unc + description: "Uncertainty on Orbital Mean Motion [degrees per day]" + datatype: double + ivoa:ucd: stat.error;src.orbital.meanMotion + ivoa:unit: deg.d-1 + - name: epoch_mjd + description: Epoch of the Orbfit-Solution in MJD + datatype: double + ivoa:ucd: time.epoch;src.orbital + ivoa:unit: d + - name: h + description: H-Magnitude + datatype: double + ivoa:ucd: phys.magAbs + ivoa:unit: mag + - name: g + description: G-Slope Parameter + datatype: double + - name: not_normalized_rms + description: "unnormalized rms of the fit [arcsec]" + datatype: double + ivoa:ucd: stat.rms;stat.fit + ivoa:unit: arcsec + - name: normalized_rms + description: "rms of the fit [unitless]" + datatype: double + ivoa:ucd: stat.rms;stat.fit + - name: earth_moid + description: "Minimum Orbit Intersection Distance [au] with respect to the Earths Orbit" + datatype: double + ivoa:ucd: pos.distance;src.orbital + ivoa:unit: AU + - name: fitting_datetime + description: Date of the last orbit fit + datatype: timestamp + precision: 6 + constraints: + - name: unique_mpc_orbits_unpacked_primary_provisional_designation + description: Uniqueness of unpacked_primary_provisional_designation + '@type': Unique + columns: + - '#mpc_orbits.unpacked_primary_provisional_designation' + - name: unique_mpc_orbits_designation + description: Uniqueness of designation + '@type': Unique + columns: + - '#mpc_orbits.designation' + - name: unique_mpc_orbits_packed_primary_provisional_designation + description: Uniqueness of packed_primary_provisional_designation + '@type': Unique + columns: + - '#mpc_orbits.packed_primary_provisional_designation' + +- name: current_identifications + description: All single-designations, and all identifications between designations. Always uses primary + provisional designation (even for numbered objects). Includes all comets and satellites. + Replicated from the Minor Planet Center (Postgres) database. This schema will generally closely + follow the schema of the upstream table, to allow end-users to rerun queries developed + elsewhere on the RSP. + tap:table_index: 140 + primaryKey: '#current_identifications.id' + columns: + - name: id + description: Internal ID (generally not seen/used by the user) + datatype: int + nullable: false + ivoa:ucd: meta.id;src + - name: packed_primary_provisional_designation + description: The primary provisional designation in packed form (e.g. K08A00B) + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: packed_secondary_provisional_designation + description: The secondary provisional designation in packed form (e.g. K08A00B). May be the same-as (A=A) + or different-to (A=B) the primary provisional designation + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: unpacked_primary_provisional_designation + description: The primary provisional designation in unpacked form (e.g. 2008 AB) + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: unpacked_secondary_provisional_designation + description: The secondary provisional designation in unpacked form (e.g. 2008 AB). May be the same-as + (A=A) or different-to (A=B) the primary provisional designation + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: published + description: Has this been published yet? i.e. has it been released to the public? + datatype: boolean + ivoa:ucd: meta.code.status;meta.dataset + - name: identifier_ids + description: This is a set of unique identifier_ids in an array that points to the identification_metadata + table. + datatype: text + nullable: false + ivoa:ucd: meta.id;src + - name: object_type + description: Integer to indicate the object type. To be linked (foreign key) to object_type lookup table + datatype: int + - name: numbered + description: Has the object been numbered and hence does it appear in the numbered_objects table? + datatype: boolean + - name: created_at + description: When this row was created + datatype: timestamp + precision: 6 + ivoa:ucd: time.creation;meta.dataset + - name: updated_at + description: When this row was updated + datatype: timestamp + precision: 6 + ivoa:ucd: time.processing;meta.dataset + constraints: + - name: unique_current_identifications_packed_primary_provisional_desig + "@type": Unique + description: Unique index on the packed_primary_provisional_designation column + columns: + - '#current_identifications.packed_primary_provisional_designation' + - name: uniq_current_identifications_packed_secondary_provisional_desig + "@type": Unique + description: Unique index on the packed_secondary_provisional_designation column + columns: + - '#current_identifications.packed_secondary_provisional_designation' + +- name: numbered_identifications + description: The numbered identification table contains all the numbered objects (minor planets, comets and + natural satellites) with their primary provisional designations. The table is continously + updated everytime a new object is numbered. Replicated from the Minor Planet Center (Postgres) + database. This schema will generally closely follow the schema of the upstream table, to allow + end-users to rerun queries developed elsewhere on the RSP. + tap:table_index: 150 + primaryKey: '#numbered_identifications.id' + columns: + - name: id + description: Internal ID (generally not seen/used by the user) + datatype: int + nullable: false + ivoa:ucd: meta.id;src + - name: packed_primary_provisional_designation + description: The primary provisional designation in packed form (e.g. K08A00B) + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: unpacked_primary_provisional_designation + description: The primary provisional designation in unpacked form (e.g. 2008 AB) + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: permid + description: Permanent designation (number) + datatype: char + length: 16 + nullable: false + ivoa:ucd: meta.id;src + - name: iau_designation + description: IAU-approved designation (not filled at the moment) + datatype: text + ivoa:ucd: meta.id;src + - name: iau_name + description: IAU-approved name (not filled at the moment) + datatype: char + length: 32 + ivoa:ucd: meta.id;src + - name: numbered_publication_references + description: MPEC where this object was numbered + datatype: text + ivoa:ucd: meta.bib.bibcode + - name: named_publication_references + description: MPEC where this object was named + datatype: text + ivoa:ucd: meta.bib.bibcode + - name: naming_credit + description: Credit for suggesting the name + datatype: text + - name: created_at + description: When this row was created + datatype: timestamp + precision: 6 + ivoa:ucd: time.creation;meta.dataset + - name: updated_at + description: When this row was updated + datatype: timestamp + precision: 6 + ivoa:ucd: time.processing;meta.dataset + constraints: + - name: unique_numbered_identifications_iau_name + "@type": Unique + description: Unique index on the iau_name column + columns: + - '#numbered_identifications.iau_name' + - name: unique_numbered_identifications_packed_primary_prov_desig + "@type": Unique + description: Unique index on the packed_primary_provisional_designation column + columns: + - '#numbered_identifications.packed_primary_provisional_designation' + - name: unique_numbered_identifications_permid + "@type": Unique + description: Unique index on the permid column + columns: + - '#numbered_identifications.permid' + - name: uniq_numbered_identifications_unpacked_primary_prov_desig + "@type": Unique + description: Unique index on the unpacked_primary_provisional_designation column + columns: + - '#numbered_identifications.unpacked_primary_provisional_designation' diff --git a/python/schema.py b/python/schema.py new file mode 100644 index 00000000..cd1e6f2b --- /dev/null +++ b/python/schema.py @@ -0,0 +1,528 @@ +# ***** GENERATED FILE, DO NOT EDIT BY HAND ***** +# ruff: noqa: W505 +# generated with /Users/mjuric/miniforge3/envs/ddpp-dev/bin/ssp-generate-dtypes ppdb.yaml DiaSource SSObject SSSource mpc_orbits current_identifications numbered_identifications NearbySSO # noqa: E501 + +import numpy as np + +# DiaSource: Table to store 'difference image sources'; - sources detected at SNR >=5 on difference images. +DiaSourceDtype = np.dtype([ + ('diaSourceId', '