From cebef542e6587df0bf1f9ac5e7726f8de5a875ef Mon Sep 17 00:00:00 2001 From: Masato Onodera Date: Mon, 5 May 2025 16:20:40 -1000 Subject: [PATCH 1/5] add total flux columns --- src/targetdb/models/target.py | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/targetdb/models/target.py b/src/targetdb/models/target.py index d737e13..1755889 100644 --- a/src/targetdb/models/target.py +++ b/src/targetdb/models/target.py @@ -148,6 +148,20 @@ class target(Base): psf_flux_error_y = Column(Float, comment="Error in y-band PSF flux (nJy)") psf_flux_error_j = Column(Float, comment="Error in J band PSF flux (nJy)") + total_flux_g = Column(Float, comment="g-band total flux (nJy)") + total_flux_r = Column(Float, comment="r-band total flux (nJy)") + total_flux_i = Column(Float, comment="i-band total flux (nJy)") + total_flux_z = Column(Float, comment="z-band total flux (nJy)") + total_flux_y = Column(Float, comment="y-band total flux (nJy)") + total_flux_j = Column(Float, comment="J band total flux (nJy)") + + total_flux_error_g = Column(Float, comment="Error in g-band total flux (nJy)") + total_flux_error_r = Column(Float, comment="Error in r-band total flux (nJy)") + total_flux_error_i = Column(Float, comment="Error in i-band total flux (nJy)") + total_flux_error_z = Column(Float, comment="Error in z-band total flux (nJy)") + total_flux_error_y = Column(Float, comment="Error in y-band total flux (nJy)") + total_flux_error_j = Column(Float, comment="Error in J band total flux (nJy)") + filter_g = Column( String, ForeignKey("filter_name.filter_name"), @@ -309,6 +323,20 @@ def __init__( psf_flux_error_y, psf_flux_error_j, # + total_flux_g, + total_flux_r, + total_flux_i, + total_flux_z, + total_flux_y, + total_flux_j, + # + total_flux_error_g, + total_flux_error_r, + total_flux_error_i, + total_flux_error_z, + total_flux_error_y, + total_flux_error_j, + # filter_g, filter_r, filter_i, @@ -378,6 +406,20 @@ def __init__( self.psf_flux_error_y = psf_flux_error_y self.psf_flux_error_j = psf_flux_error_j # + self.total_flux_g = total_flux_g + self.total_flux_r = total_flux_r + self.total_flux_i = total_flux_i + self.total_flux_z = total_flux_z + self.total_flux_y = total_flux_y + self.total_flux_j = total_flux_j + # + self.total_flux_error_g = total_flux_error_g + self.total_flux_error_r = total_flux_error_r + self.total_flux_error_i = total_flux_error_i + self.total_flux_error_z = total_flux_error_z + self.total_flux_error_y = total_flux_error_y + self.total_flux_error_j = total_flux_error_j + # self.filter_g = filter_g self.filter_r = filter_r self.filter_i = filter_i From 7d6f37f052d75f09ecfd7abcf63886ae9da191e9 Mon Sep 17 00:00:00 2001 From: Masato Onodera Date: Mon, 5 May 2025 16:22:33 -1000 Subject: [PATCH 2/5] add alembic script --- ...05-162126_fc8ea63b8c9d_add_total_fluxes.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 alembic/pfsa-db01-gb/alembic/versions/20250505-162126_fc8ea63b8c9d_add_total_fluxes.py diff --git a/alembic/pfsa-db01-gb/alembic/versions/20250505-162126_fc8ea63b8c9d_add_total_fluxes.py b/alembic/pfsa-db01-gb/alembic/versions/20250505-162126_fc8ea63b8c9d_add_total_fluxes.py new file mode 100644 index 0000000..5b35449 --- /dev/null +++ b/alembic/pfsa-db01-gb/alembic/versions/20250505-162126_fc8ea63b8c9d_add_total_fluxes.py @@ -0,0 +1,50 @@ +"""add total fluxes + +Revision ID: fc8ea63b8c9d +Revises: 5b40ed8dcd48 +Create Date: 2025-05-05 16:21:26.652825 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'fc8ea63b8c9d' +down_revision = '5b40ed8dcd48' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('target', sa.Column('total_flux_g', sa.Float(), nullable=True, comment='g-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_r', sa.Float(), nullable=True, comment='r-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_i', sa.Float(), nullable=True, comment='i-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_z', sa.Float(), nullable=True, comment='z-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_y', sa.Float(), nullable=True, comment='y-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_j', sa.Float(), nullable=True, comment='J band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_error_g', sa.Float(), nullable=True, comment='Error in g-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_error_r', sa.Float(), nullable=True, comment='Error in r-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_error_i', sa.Float(), nullable=True, comment='Error in i-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_error_z', sa.Float(), nullable=True, comment='Error in z-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_error_y', sa.Float(), nullable=True, comment='Error in y-band total flux (nJy)')) + op.add_column('target', sa.Column('total_flux_error_j', sa.Float(), nullable=True, comment='Error in J band total flux (nJy)')) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('target', 'total_flux_error_j') + op.drop_column('target', 'total_flux_error_y') + op.drop_column('target', 'total_flux_error_z') + op.drop_column('target', 'total_flux_error_i') + op.drop_column('target', 'total_flux_error_r') + op.drop_column('target', 'total_flux_error_g') + op.drop_column('target', 'total_flux_j') + op.drop_column('target', 'total_flux_y') + op.drop_column('target', 'total_flux_z') + op.drop_column('target', 'total_flux_i') + op.drop_column('target', 'total_flux_r') + op.drop_column('target', 'total_flux_g') + # ### end Alembic commands ### From 4a85358238b50fee649dce16273b8ca606b94013 Mon Sep 17 00:00:00 2001 From: Masato Onodera Date: Mon, 5 May 2025 19:19:57 -1000 Subject: [PATCH 3/5] CLI and doc update --- docs/reference/cli.md | 202 ++++++++++++++++++----------------- docs/schema/target.md | 12 +++ src/targetdb/cli/cli_main.py | 19 ++++ src/targetdb/utils.py | 28 ++++- 4 files changed, 159 insertions(+), 102 deletions(-) diff --git a/docs/reference/cli.md b/docs/reference/cli.md index 33a5266..8926bc4 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -44,25 +44,25 @@ $ pfs-targetdb-cli [OPTIONS] COMMAND [ARGS]... **Options**: -* `--help`: Show this message and exit. +- `--help`: Show this message and exit. **Commands**: -* `create-db`: Create a database on a PostgreSQL server. -* `drop-db`: Drop a database on a PostgreSQL server. -* `install-q3c`: Insert the Q3C extension. -* `create-schema`: Create tables of the PFS tartedb in a... -* `checkdups`: Check for duplicates in data files in a... -* `prep-fluxstd`: Prepare flux standard data for the target... -* `diagram`: Generate an ER diagram of a database. -* `mdtable`: Generate a Markdown output of the schema... -* `insert`: Insert rows into a table in the PFS Target... -* `update`: Update rows in a table in the PFS Target... -* `parse-alloc`: Parse an Excel file containing time... -* `transfer-targets`: Download target lists from the uploader to... -* `insert-targets`: Insert targets using a list of input... -* `insert-pointings`: Insert user-defined pointings using a list... -* `update-catalog-active`: Update active flag in the input_catalog... +- `create-db`: Create a database on a PostgreSQL server. +- `drop-db`: Drop a database on a PostgreSQL server. +- `install-q3c`: Insert the Q3C extension. +- `create-schema`: Create tables of the PFS tartedb in a... +- `checkdups`: Check for duplicates in data files in a... +- `prep-fluxstd`: Prepare flux standard data for the target... +- `diagram`: Generate an ER diagram of a database. +- `mdtable`: Generate a Markdown output of the schema... +- `insert`: Insert rows into a table in the PFS Target... +- `update`: Update rows in a table in the PFS Target... +- `parse-alloc`: Parse an Excel file containing time... +- `transfer-targets`: Download target lists from the uploader to... +- `insert-targets`: Insert targets using a list of input... +- `insert-pointings`: Insert user-defined pointings using a list... +- `update-catalog-active`: Update active flag in the input_catalog... --- @@ -78,8 +78,8 @@ $ pfs-targetdb-cli create-db [OPTIONS] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--help`: Show this message and exit. --- @@ -95,8 +95,8 @@ $ pfs-targetdb-cli drop-db [OPTIONS] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--help`: Show this message and exit. --- @@ -112,8 +112,8 @@ $ pfs-targetdb-cli install-q3c [OPTIONS] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--help`: Show this message and exit. --- @@ -129,9 +129,9 @@ $ pfs-targetdb-cli create-schema [OPTIONS] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--drop-all`: Flag to drop all tables before creating schema. -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--drop-all`: Flag to drop all tables before creating schema. +- `--help`: Show this message and exit. --- @@ -147,16 +147,16 @@ $ pfs-targetdb-cli checkdups [OPTIONS] DIRECTORY **Arguments**: -* `DIRECTORY`: Directory path containing input files. [required] +- `DIRECTORY`: Directory path containing input files. [required] **Options**: -* `-o, --outdir TEXT`: Directory path to save output files. [default: .] -* `--skip-save-merged`: Do not save the merged DataFrame. -* `--additional-columns TEXT`: Additional columns to output for the merged file. (e.g., 'psf_mag_g' 'psf_mag_r'). The following columns are saved by default: "obj_id", "ra", "dec", "input_catalog_id", "version", "input_file", "is_fstar_gaia", "prob_f_star". -* `--check-columns TEXT`: Columns used to check for duplicates. [default: obj_id, input_catalog_id, version] -* `--format [feather|parquet]`: File format of the merged data file. [default: parquet] -* `--help`: Show this message and exit. +- `-o, --outdir TEXT`: Directory path to save output files. [default: .] +- `--skip-save-merged`: Do not save the merged DataFrame. +- `--additional-columns TEXT`: Additional columns to output for the merged file. (e.g., 'psf_mag_g' 'psf_mag_r'). The following columns are saved by default: "obj_id", "ra", "dec", "input_catalog_id", "version", "input_file", "is_fstar_gaia", "prob_f_star". +- `--check-columns TEXT`: Columns used to check for duplicates. [default: obj_id, input_catalog_id, version] +- `--format [feather|parquet]`: File format of the merged data file. [default: parquet] +- `--help`: Show this message and exit. --- @@ -172,17 +172,17 @@ $ pfs-targetdb-cli prep-fluxstd [OPTIONS] INPUT_DIR OUTPUT_DIR **Arguments**: -* `INPUT_DIR`: Directory path containing input files. Files must be in one of the following formats: parquet, feather, or csv. The input files must be generated in a certain format to be compatible for targetdb. [required] -* `OUTPUT_DIR`: Directory path to save the output files. [required] +- `INPUT_DIR`: Directory path containing input files. Files must be in one of the following formats: parquet, feather, or csv. The input files must be generated in a certain format to be compatible for targetdb. [required] +- `OUTPUT_DIR`: Directory path to save the output files. [required] **Options**: -* `--version TEXT`: Version **string** for the F-star candidate catalog (e.g., '3.3'). [required] -* `--input_catalog_id INTEGER`: Input catalog ID for the flux standard star catalog. -* `--input_catalog_name TEXT`: Input catalog name for the flux standard star catalog. -* `--rename-cols TEXT`: Dictionary to rename columns (e.g., '{"fstar_gaia": "is_fstar_gaia"}'). -* `--format [feather|parquet]`: File format of the output data file. [default: parquet] -* `--help`: Show this message and exit. +- `--version TEXT`: Version **string** for the F-star candidate catalog (e.g., '3.3'). [required] +- `--input_catalog_id INTEGER`: Input catalog ID for the flux standard star catalog. +- `--input_catalog_name TEXT`: Input catalog name for the flux standard star catalog. +- `--rename-cols TEXT`: Dictionary to rename columns (e.g., '{"fstar_gaia": "is_fstar_gaia"}'). +- `--format [feather|parquet]`: File format of the output data file. [default: parquet] +- `--help`: Show this message and exit. --- @@ -198,15 +198,15 @@ $ pfs-targetdb-cli diagram [OPTIONS] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--generator [schemacrawler|tbls]`: Program to generate ER diagram. [default: schemacrawler] -* `--output-dir TEXT`: Directory path to save output files. [default: diagram] -* `--title TEXT`: Title of the ER diagram. [default: PFS Target Database] -* `--sc-info-level TEXT`: SchemaCrawler info level. [default: maximum] -* `--sc-level-level TEXT`: SchemaCrawler log level. [default: SEVERE] -* `--sc-outprefix TEXT`: Output file prefix. [default: erdiagram_targetdb] -* `--tbls-format TEXT`: tbls format for ER diagrams. [default: mermaid] -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--generator [schemacrawler|tbls]`: Program to generate ER diagram. [default: schemacrawler] +- `--output-dir TEXT`: Directory path to save output files. [default: diagram] +- `--title TEXT`: Title of the ER diagram. [default: PFS Target Database] +- `--sc-info-level TEXT`: SchemaCrawler info level. [default: maximum] +- `--sc-level-level TEXT`: SchemaCrawler log level. [default: SEVERE] +- `--sc-outprefix TEXT`: Output file prefix. [default: erdiagram_targetdb] +- `--tbls-format TEXT`: tbls format for ER diagrams. [default: mermaid] +- `--help`: Show this message and exit. --- @@ -222,8 +222,8 @@ $ pfs-targetdb-cli mdtable [OPTIONS] **Options**: -* `-o, --output-file TEXT`: Output file. -* `--help`: Show this message and exit. +- `-o, --output-file TEXT`: Output file. +- `--help`: Show this message and exit. --- @@ -239,19 +239,20 @@ $ pfs-targetdb-cli insert [OPTIONS] INPUT_FILE **Arguments**: -* `INPUT_FILE`: Input file to be inserted to targetdb (CSV, ECSV, Feather, or Parquet format). [required] +- `INPUT_FILE`: Input file to be inserted to targetdb (CSV, ECSV, Feather, or Parquet format). [required] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `-t, --table [filter_name|fluxstd|input_catalog|partner|pfs_arm|proposal|proposal_category|sky|target|target_type|user_pointing]`: Table name to insert rows. [required] -* `--commit`: Commit changes to the database. -* `--fetch`: Fetch data from database a the end. -* `--from-uploader`: Flag to indicate the data is coming from the PFS Target Uploader. Only required for the `target` table. -* `--upload_id TEXT`: Upload ID issued by the PFS Target Uploader. Only required for the `target` table. -* `--proposal_id TEXT`: Proposal ID (e.g., S24B-QT001). Only required for the `target` table. -* `-v, --verbose`: Verbose output. -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `-t, --table [filter_name|fluxstd|input_catalog|partner|pfs_arm|proposal|proposal_category|sky|target|target_type|user_pointing]`: Table name to insert rows. [required] +- `--commit`: Commit changes to the database. +- `--fetch`: Fetch data from database a the end. +- `--from-uploader`: Flag to indicate the data is coming from the PFS Target Uploader. Only required for the `target` table. +- `--flux-type [total|psf]`: Flux type for the flux standard star catalog. [default: total] +- `--upload_id TEXT`: Upload ID issued by the PFS Target Uploader. Only required for the `target` table. +- `--proposal_id TEXT`: Proposal ID (e.g., S24B-QT001). Only required for the `target` table. +- `-v, --verbose`: Verbose output. +- `--help`: Show this message and exit. --- @@ -267,19 +268,19 @@ $ pfs-targetdb-cli update [OPTIONS] INPUT_FILE **Arguments**: -* `INPUT_FILE`: Input file containing data to update records in the PFS Target Database (CSV, ECSV, or Feather formats). [required] +- `INPUT_FILE`: Input file containing data to update records in the PFS Target Database (CSV, ECSV, or Feather formats). [required] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `-t, --table [filter_name|fluxstd|input_catalog|partner|pfs_arm|proposal|proposal_category|sky|target|target_type|user_pointing]`: Table name to update rows. [required] -* `--commit`: Commit changes to the database. -* `--fetch`: Fetch data from database a the end. -* `--from-uploader`: Flag to indicate the data is coming from the PFS Target Uploader. Only required for the `target` table. -* `--upload_id TEXT`: Upload ID issued by the PFS Target Uploader. Only required for the `target` table -* `--proposal_id TEXT`: Proposal ID (e.g., S24B-QT001). Only required for the `target` table -* `--verbose`: Verbose output. -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `-t, --table [filter_name|fluxstd|input_catalog|partner|pfs_arm|proposal|proposal_category|sky|target|target_type|user_pointing]`: Table name to update rows. [required] +- `--commit`: Commit changes to the database. +- `--fetch`: Fetch data from database a the end. +- `--from-uploader`: Flag to indicate the data is coming from the PFS Target Uploader. Only required for the `target` table. +- `--upload_id TEXT`: Upload ID issued by the PFS Target Uploader. Only required for the `target` table +- `--proposal_id TEXT`: Proposal ID (e.g., S24B-QT001). Only required for the `target` table +- `--verbose`: Verbose output. +- `--help`: Show this message and exit. --- @@ -295,13 +296,13 @@ $ pfs-targetdb-cli parse-alloc [OPTIONS] INPUT_FILE **Arguments**: -* `INPUT_FILE`: Path to the Excel file containing time allocation information (e.g., "allocations.xlsx"). [required] +- `INPUT_FILE`: Path to the Excel file containing time allocation information (e.g., "allocations.xlsx"). [required] **Options**: -* `--output-dir PATH`: Directory path to save output files. [default: .] -* `--outfile-prefix TEXT`: Prefix to the output files. -* `--help`: Show this message and exit. +- `--output-dir PATH`: Directory path to save output files. [default: .] +- `--outfile-prefix TEXT`: Prefix to the output files. +- `--help`: Show this message and exit. --- @@ -317,14 +318,14 @@ $ pfs-targetdb-cli transfer-targets [OPTIONS] INPUT_FILE **Arguments**: -* `INPUT_FILE`: Input catalog list file (csv). [required] +- `INPUT_FILE`: Input catalog list file (csv). [required] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--local-dir PATH`: Path to the data directory in the local machine [default: .] -* `--force / --no-force`: Force download. [default: no-force] -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--local-dir PATH`: Path to the data directory in the local machine [default: .] +- `--force / --no-force`: Force download. [default: no-force] +- `--help`: Show this message and exit. --- @@ -340,16 +341,17 @@ $ pfs-targetdb-cli insert-targets [OPTIONS] INPUT_CATALOGS **Arguments**: -* `INPUT_CATALOGS`: Input catalog list to insert (csv). [required] +- `INPUT_CATALOGS`: Input catalog list to insert (csv). [required] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--data-dir PATH`: Path to the data directory. [default: .] -* `--commit`: Commit changes to the database. -* `--fetch`: Fetch data from database a the end. -* `-v, --verbose`: Verbose output. -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--data-dir PATH`: Path to the data directory. [default: .] +- `--flux-type [total|psf]`: Flux type for the flux standard star catalog. [default: total] +- `--commit`: Commit changes to the database. +- `--fetch`: Fetch data from database a the end. +- `-v, --verbose`: Verbose output. +- `--help`: Show this message and exit. --- @@ -365,16 +367,16 @@ $ pfs-targetdb-cli insert-pointings [OPTIONS] INPUT_CATALOGS **Arguments**: -* `INPUT_CATALOGS`: Input catalog list to insert (csv). [required] +- `INPUT_CATALOGS`: Input catalog list to insert (csv). [required] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--data-dir PATH`: Path to the data directory. [default: .] -* `--commit`: Commit changes to the database. -* `--fetch`: Fetch data from database a the end. -* `-v, --verbose`: Verbose output. -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--data-dir PATH`: Path to the data directory. [default: .] +- `--commit`: Commit changes to the database. +- `--fetch`: Fetch data from database a the end. +- `-v, --verbose`: Verbose output. +- `--help`: Show this message and exit. --- @@ -390,12 +392,12 @@ $ pfs-targetdb-cli update-catalog-active [OPTIONS] INPUT_CATALOG_ID ACTIVE_FLAG **Arguments**: -* `INPUT_CATALOG_ID`: Input catalog ID to be updated. [required] -* `ACTIVE_FLAG`: Active flag to be set. [required] +- `INPUT_CATALOG_ID`: Input catalog ID to be updated. [required] +- `ACTIVE_FLAG`: Active flag to be set. [required] **Options**: -* `-c, --config TEXT`: Database configuration file in the TOML format. [required] -* `--commit`: Commit changes to the database. -* `-v, --verbose`: Verbose output. -* `--help`: Show this message and exit. +- `-c, --config TEXT`: Database configuration file in the TOML format. [required] +- `--commit`: Commit changes to the database. +- `-v, --verbose`: Verbose output. +- `--help`: Show this message and exit. diff --git a/docs/schema/target.md b/docs/schema/target.md index 541e7d0..9c6d5ce 100644 --- a/docs/schema/target.md +++ b/docs/schema/target.md @@ -54,6 +54,18 @@ Here are the columns in the `target` table: | psf_flux_error_z | float | Error in PSF flux in _z_-band | nJy | (\*) | | | psf_flux_error_y | float | Error in PSF flux in _y_-band | nJy | (\*) | | | psf_flux_error_j | float | Error in PSF flux in _j_-band | nJy | (\*) | | +| total_flux_g | float | Total flux in _g_-band | nJy | (\*) | | +| total_flux_r | float | Total flux in _r_-band | nJy | (\*) | | +| total_flux_i | float | Total flux in _i_-band | nJy | (\*) | | +| total_flux_z | float | Total flux in _z_-band | nJy | (\*) | | +| total_flux_y | float | Total flux in _y_-band | nJy | (\*) | | +| total_flux_j | float | Total flux in _j_-band | nJy | (\*) | | +| total_flux_error_g | float | Error in total flux in _g_-band | nJy | (\*) | | +| total_flux_error_r | float | Error in total flux in _r_-band | nJy | (\*) | | +| total_flux_error_i | float | Error in total flux in _i_-band | nJy | (\*) | | +| total_flux_error_z | float | Error in total flux in _z_-band | nJy | (\*) | | +| total_flux_error_y | float | Error in total flux in _y_-band | nJy | (\*) | | +| total_flux_error_j | float | Error in total flux in _j_-band | nJy | (\*) | | | filter_g | str | Photometric band used to measure the PSF flux in _g_-band | | (\*) | | | filter_r | str | Photometric band used to measure the PSF flux in _r_-band | | (\*) | | | filter_i | str | Photometric band used to measure the PSF flux in _i_-band | | (\*) | | diff --git a/src/targetdb/cli/cli_main.py b/src/targetdb/cli/cli_main.py index 8d27742..fd540a8 100644 --- a/src/targetdb/cli/cli_main.py +++ b/src/targetdb/cli/cli_main.py @@ -59,6 +59,11 @@ class TargetdbTable(str, Enum): user_pointing = "user_pointing" +class FluxType(str, Enum): + total = "total" + psf = "psf" + + config_help_msg = "Database configuration file in the TOML format." @@ -407,6 +412,12 @@ def insert( help="Flag to indicate the data is coming from the PFS Target Uploader. Only required for the `target` table.", ), ] = False, + flux_type: Annotated[ + FluxType, + typer.Option( + "--flux-type", help="Flux type for the flux standard star catalog." + ), + ] = "total", upload_id: Annotated[ str, typer.Option( @@ -445,6 +456,7 @@ def insert( config=config, df=df, from_uploader=from_uploader, + flux_type=flux_type, proposal_id=proposal_id, upload_id=upload_id, insert=True, @@ -646,6 +658,12 @@ def insert_targets( help="Path to the data directory.", ), ] = ".", + flux_type: Annotated[ + FluxType, + typer.Option( + "--flux-type", help="Flux type for the flux standard star catalog." + ), + ] = "total", commit: Annotated[ bool, typer.Option("--commit", help="Commit changes to the database."), @@ -667,6 +685,7 @@ def insert_targets( df_input_catalogs, config, data_dir=data_dir, + flux_type=flux_type, commit=commit, fetch=fetch, verbose=verbose, diff --git a/src/targetdb/utils.py b/src/targetdb/utils.py index 9fbf07e..f0de875 100644 --- a/src/targetdb/utils.py +++ b/src/targetdb/utils.py @@ -575,6 +575,7 @@ def make_target_df_from_uploader( table="target", proposal_id=None, upload_id=None, + flux_type="total", target_type_name="SCIENCE", insert=False, update=False, @@ -594,6 +595,8 @@ def make_target_df_from_uploader( The proposal id to be used. Defaults to None. upload_id : str, optional The upload id to be used. Defaults to None. + flux_type : str, optional + The kind of flux to use and must be "total" or "psf". Defaults to "total". target_type_name : str, optional The type of the target. Defaults to "SCIENCE". insert : bool, optional @@ -637,6 +640,10 @@ def make_target_df_from_uploader( if "reference_arm" in df.columns: df.rename(columns={"reference_arm": "qa_reference_arm"}, inplace=True) + if flux_type not in ["total", "psf"]: + logger.error(f"flux_type must be 'total' or 'psf'. {flux_type=}") + raise ValueError(f"flux_type must be 'total' or 'psf'. {flux_type=}") + # fill missing values with None or NaN for filters and fluxes for band in ["g", "r", "i", "z", "y", "j"]: if f"filter_{band}" in df.columns: @@ -647,10 +654,13 @@ def make_target_df_from_uploader( except AttributeError: pass if f"flux_{band}" in df.columns: - df.rename(columns={f"flux_{band}": f"psf_flux_{band}"}, inplace=True) + df.rename( + columns={f"flux_{band}": f"{flux_type}_flux_{band}"}, inplace=True + ) if f"flux_error_{band}" in df.columns: df.rename( - columns={f"flux_error_{band}": f"psf_flux_error_{band}"}, inplace=True + columns={f"flux_error_{band}": f"{flux_type}_flux_error_{band}"}, + inplace=True, ) df["target_type_name"] = target_type_name @@ -755,6 +765,7 @@ def add_database_rows( config=None, df=None, from_uploader=False, + flux_type="total", proposal_id=None, upload_id=None, insert=False, @@ -783,6 +794,8 @@ def add_database_rows( The DataFrame to add rows from. Defaults to None. from_uploader : bool, optional If True, the DataFrame is from an uploader. Defaults to False. + flux_type : str, optional + The kind of flux to use and must be "total" or "psf". Defaults to "total". proposal_id : int, optional The proposal id to be used. Defaults to None. upload_id : int, optional @@ -812,6 +825,10 @@ def add_database_rows( logger.warning("Neither insert nor update is selected. Exiting...") return + if flux_type not in ["total", "psf"]: + logger.error(f"flux_type must be 'total' or 'psf'. {flux_type=}") + raise ValueError(f"flux_type must be 'total' or 'psf'. {flux_type=}") + logger.info("Connecting to targetDB") db = TargetDB(**config["targetdb"]["db"]) db.connect() @@ -827,6 +844,7 @@ def add_database_rows( table=table, proposal_id=proposal_id, upload_id=upload_id, + flux_type=flux_type, insert=insert, update=update, ) @@ -1353,12 +1371,17 @@ def insert_targets_from_uploader( df_input_catalogs, config, data_dir=Path("."), + flux_type="total", file_prefix="target", commit=False, fetch=False, verbose=False, ): + if flux_type not in ["total", "psf"]: + logger.error(f"flux_type must be 'total' or 'psf'. {flux_type=}") + raise ValueError(f"flux_type must be 'total' or 'psf'. {flux_type=}") + for _, row in df_input_catalogs.iterrows(): proposal_id = row["proposal_id"] upload_id = row["upload_id"] @@ -1398,6 +1421,7 @@ def insert_targets_from_uploader( config=config, df=df, from_uploader=True, + flux_type=flux_type, proposal_id=proposal_id, upload_id=upload_id, insert=True, From 5509b6d07446452b023bf04d410e10530e329afc Mon Sep 17 00:00:00 2001 From: Masato Onodera Date: Mon, 5 May 2025 19:36:27 -1000 Subject: [PATCH 4/5] version to 0.8.0 --- src/targetdb/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/targetdb/__init__.py b/src/targetdb/__init__.py index bf070f5..2f0aa7e 100644 --- a/src/targetdb/__init__.py +++ b/src/targetdb/__init__.py @@ -2,6 +2,6 @@ from .targetdb import TargetDB -__version__ = "0.7.0" +__version__ = "0.8.0" __all__ = ["TargetDB", "__version__"] From 50e6e049b597130ad7ad15934008965c92f20961 Mon Sep 17 00:00:00 2001 From: Masato Onodera Date: Tue, 6 May 2025 09:43:42 -1000 Subject: [PATCH 5/5] ER diagram update --- .../erdiagram_targetdb-20250506094125.pdf | Bin 0 -> 47922 bytes docs/tbls/README.md | 284 ++++++++++-------- docs/tbls/public.alembic_version.md | 36 +++ docs/tbls/public.cluster.md | 64 ++-- docs/tbls/public.filter_name.md | 92 +++--- docs/tbls/public.fluxstd.md | 80 ++--- docs/tbls/public.input_catalog.md | 168 ++++++----- docs/tbls/public.partner.md | 22 +- docs/tbls/public.pfs_arm.md | 56 ++-- docs/tbls/public.proposal.md | 86 ++++-- docs/tbls/public.proposal_category.md | 9 +- docs/tbls/public.sky.md | 16 +- docs/tbls/public.target.md | 127 +++++--- docs/tbls/public.target_type.md | 122 ++++---- docs/tbls/public.user_pointing.md | 6 +- 15 files changed, 689 insertions(+), 479 deletions(-) create mode 100644 diagrams/erdiagram_targetdb-20250506094125.pdf create mode 100644 docs/tbls/public.alembic_version.md diff --git a/diagrams/erdiagram_targetdb-20250506094125.pdf b/diagrams/erdiagram_targetdb-20250506094125.pdf new file mode 100644 index 0000000000000000000000000000000000000000..59823168c3956516d243d9ed3de19e37c727ec13 GIT binary patch literal 47922 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 literal 0 HcmV?d00001 diff --git a/docs/tbls/README.md b/docs/tbls/README.md index b15a707..3bd761b 100644 --- a/docs/tbls/README.md +++ b/docs/tbls/README.md @@ -4,17 +4,18 @@ | Name | Columns | Comment | Type | | ---- | ------- | ------- | ---- | +| [public.alembic_version](public.alembic_version.md) | 1 | | BASE TABLE | +| [public.cluster](public.cluster.md) | 10 | | BASE TABLE | | [public.filter_name](public.filter_name.md) | 4 | | BASE TABLE | +| [public.fluxstd](public.fluxstd.md) | 61 | | BASE TABLE | +| [public.input_catalog](public.input_catalog.md) | 9 | | BASE TABLE | | [public.pfs_arm](public.pfs_arm.md) | 4 | | BASE TABLE | +| [public.proposal](public.proposal.md) | 15 | | BASE TABLE | | [public.proposal_category](public.proposal_category.md) | 5 | | BASE TABLE | -| [public.input_catalog](public.input_catalog.md) | 9 | | BASE TABLE | +| [public.sky](public.sky.md) | 14 | | BASE TABLE | +| [public.target](public.target.md) | 73 | | BASE TABLE | | [public.target_type](public.target_type.md) | 5 | | BASE TABLE | | [public.user_pointing](public.user_pointing.md) | 10 | | BASE TABLE | -| [public.proposal](public.proposal.md) | 14 | | BASE TABLE | -| [public.sky](public.sky.md) | 14 | | BASE TABLE | -| [public.fluxstd](public.fluxstd.md) | 61 | | BASE TABLE | -| [public.target](public.target.md) | 61 | | BASE TABLE | -| [public.cluster](public.cluster.md) | 10 | | BASE TABLE | | [public.partner](public.partner.md) | 5 | | BASE TABLE | ## Stored procedures and functions @@ -55,6 +56,12 @@ | public.q3c_poly_query | bool | real, real, double precision[] | FUNCTION | | public.q3c_poly_query | bool | double precision, double precision, polygon | FUNCTION | | public.q3c_poly_query | bool | real, real, polygon | FUNCTION | +| public.bt_index_check | void | index regclass | FUNCTION | +| public.bt_index_parent_check | void | index regclass | FUNCTION | +| public.bt_index_check | void | index regclass, heapallindexed boolean | FUNCTION | +| public.bt_index_parent_check | void | index regclass, heapallindexed boolean | FUNCTION | +| public.bt_index_parent_check | void | index regclass, heapallindexed boolean, rootdescend boolean | FUNCTION | +| public.verify_heapam | record | relation regclass, on_error_stop boolean DEFAULT false, check_toast boolean DEFAULT false, skip text DEFAULT 'none'::text, startblock bigint DEFAULT NULL::bigint, endblock bigint DEFAULT NULL::bigint, OUT blkno bigint, OUT offnum integer, OUT attnum integer, OUT msg text | FUNCTION | ## Enums @@ -67,10 +74,8 @@ ```mermaid erDiagram -"public.user_pointing" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" -"public.proposal" }o--o| "public.proposal_category" : "FOREIGN KEY (proposal_category_id) REFERENCES proposal_category(proposal_category_id)" -"public.sky" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" -"public.sky" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" +"public.cluster" }o--o| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" +"public.cluster" }o--|| "public.target" : "FOREIGN KEY (target_id) REFERENCES target(target_id)" "public.fluxstd" }o--o| "public.filter_name" : "FOREIGN KEY (filter_g) REFERENCES filter_name(filter_name)" "public.fluxstd" }o--o| "public.filter_name" : "FOREIGN KEY (filter_i) REFERENCES filter_name(filter_name)" "public.fluxstd" }o--o| "public.filter_name" : "FOREIGN KEY (filter_j) REFERENCES filter_name(filter_name)" @@ -79,97 +84,40 @@ erDiagram "public.fluxstd" }o--o| "public.filter_name" : "FOREIGN KEY (filter_z) REFERENCES filter_name(filter_name)" "public.fluxstd" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" "public.fluxstd" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" +"public.proposal" }o--o| "public.proposal_category" : "FOREIGN KEY (proposal_category_id) REFERENCES proposal_category(proposal_category_id)" +"public.proposal" }o--o| "public.partner" : "FOREIGN KEY (partner_id) REFERENCES partner(partner_id)" +"public.sky" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" +"public.sky" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" "public.target" }o--o| "public.filter_name" : "FOREIGN KEY (filter_g) REFERENCES filter_name(filter_name)" "public.target" }o--o| "public.filter_name" : "FOREIGN KEY (filter_i) REFERENCES filter_name(filter_name)" "public.target" }o--o| "public.filter_name" : "FOREIGN KEY (filter_j) REFERENCES filter_name(filter_name)" "public.target" }o--o| "public.filter_name" : "FOREIGN KEY (filter_r) REFERENCES filter_name(filter_name)" "public.target" }o--o| "public.filter_name" : "FOREIGN KEY (filter_y) REFERENCES filter_name(filter_name)" "public.target" }o--o| "public.filter_name" : "FOREIGN KEY (filter_z) REFERENCES filter_name(filter_name)" -"public.target" }o--o| "public.pfs_arm" : "FOREIGN KEY (qa_reference_arm) REFERENCES pfs_arm(name)" "public.target" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" -"public.target" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" +"public.target" }o--o| "public.pfs_arm" : "FOREIGN KEY (qa_reference_arm) REFERENCES pfs_arm(name)" "public.target" }o--o| "public.proposal" : "FOREIGN KEY (proposal_id) REFERENCES proposal(proposal_id)" -"public.cluster" }o--o| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" -"public.cluster" }o--|| "public.target" : "FOREIGN KEY (target_id) REFERENCES target(target_id)" +"public.target" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" +"public.user_pointing" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" -"public.filter_name" { - varchar filter_name - varchar filter_name_description - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at +"public.alembic_version" { + varchar_32_ version_num } -"public.pfs_arm" { - varchar name - varchar description - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at -} -"public.proposal_category" { - integer proposal_category_id - varchar proposal_category_name - varchar proposal_category_description - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at -} -"public.input_catalog" { - integer input_catalog_id - varchar input_catalog_name - varchar input_catalog_description - varchar_16_ upload_id - boolean active - boolean is_classical - boolean is_user_pointing - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at -} -"public.target_type" { - integer target_type_id - varchar target_type_name - varchar target_type_description - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at -} -"public.user_pointing" { - bigint user_pointing_id - varchar ppc_code - double_precision ppc_ra - double_precision ppc_dec - double_precision ppc_pa - resolutionmode ppc_resolution - double_precision ppc_priority +"public.cluster" { + bigint cluster_id + bigint target_id FK + integer n_targets + double_precision ra_cluster + double_precision dec_cluster + double_precision d_ra + double_precision d_dec integer input_catalog_id FK timestamp_without_time_zone created_at timestamp_without_time_zone updated_at } -"public.proposal" { - varchar proposal_id - varchar group_id - varchar pi_first_name - varchar pi_last_name - varchar pi_middle_name - double_precision rank - varchar grade - double_precision allocated_time_total - double_precision allocated_time_lr - double_precision allocated_time_mr - integer proposal_category_id FK - boolean is_too - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at -} -"public.sky" { - bigint sky_id - bigint obj_id - varchar obj_id_orig - double_precision ra - double_precision dec - varchar epoch - integer tract - integer patch - integer target_type_id FK - integer input_catalog_id FK - double_precision mag_thresh - varchar version +"public.filter_name" { + varchar filter_name + varchar filter_name_description timestamp_without_time_zone created_at timestamp_without_time_zone updated_at } @@ -195,33 +143,36 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j + double_precision prob_f_star + boolean flags_dist + boolean flags_ebv + varchar version + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar filter_g FK varchar filter_r FK varchar filter_i FK varchar filter_z FK varchar filter_y FK varchar filter_j FK - double_precision prob_f_star - boolean flags_dist - boolean flags_ebv + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j double_precision teff_brutus double_precision teff_brutus_low double_precision teff_brutus_high @@ -232,6 +183,60 @@ erDiagram double_precision teff_gspphot_lower double_precision teff_gspphot_upper boolean is_fstar_gaia +} +"public.input_catalog" { + varchar input_catalog_name + varchar input_catalog_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at + varchar_16_ upload_id + integer input_catalog_id + boolean active + boolean is_classical + boolean is_user_pointing +} +"public.pfs_arm" { + varchar name + varchar description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at +} +"public.proposal" { + varchar proposal_id + varchar group_id + varchar pi_first_name + varchar pi_last_name + varchar pi_middle_name + double_precision rank + varchar grade + double_precision allocated_time_total + integer proposal_category_id FK + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at + double_precision allocated_time_lr + double_precision allocated_time_mr + boolean is_too + integer partner_id FK +} +"public.proposal_category" { + integer proposal_category_id + varchar proposal_category_name + varchar proposal_category_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at +} +"public.sky" { + bigint sky_id + bigint obj_id + varchar obj_id_orig + double_precision ra + double_precision dec + varchar epoch + integer tract + integer patch + integer target_type_id FK + integer input_catalog_id FK + double_precision mag_thresh varchar version timestamp_without_time_zone created_at timestamp_without_time_zone updated_at @@ -239,7 +244,6 @@ erDiagram "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -263,50 +267,70 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j + double_precision priority + double_precision effective_exptime + boolean is_medium_resolution + double_precision qa_relative_throughput + double_precision qa_relative_noise + double_precision qa_reference_lambda + boolean is_cluster + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar filter_g FK varchar filter_r FK varchar filter_i FK varchar filter_z FK varchar filter_y FK varchar filter_j FK - double_precision priority - double_precision effective_exptime + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code double_precision single_exptime - boolean is_medium_resolution - double_precision qa_relative_throughput - double_precision qa_relative_noise - double_precision qa_reference_lambda varchar qa_reference_arm FK - boolean is_cluster + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j +} +"public.target_type" { + integer target_type_id + varchar target_type_name + varchar target_type_description timestamp_without_time_zone created_at timestamp_without_time_zone updated_at } -"public.cluster" { - bigint cluster_id - bigint target_id FK - integer n_targets - double_precision ra_cluster - double_precision dec_cluster - double_precision d_ra - double_precision d_dec +"public.user_pointing" { + bigint user_pointing_id + varchar ppc_code + double_precision ppc_ra + double_precision ppc_dec + double_precision ppc_pa + resolutionmode ppc_resolution + double_precision ppc_priority integer input_catalog_id FK timestamp_without_time_zone created_at timestamp_without_time_zone updated_at diff --git a/docs/tbls/public.alembic_version.md b/docs/tbls/public.alembic_version.md new file mode 100644 index 0000000..b41fd16 --- /dev/null +++ b/docs/tbls/public.alembic_version.md @@ -0,0 +1,36 @@ +# public.alembic_version + +## Description + +## Columns + +| Name | Type | Default | Nullable | Children | Parents | Comment | +| ---- | ---- | ------- | -------- | -------- | ------- | ------- | +| version_num | varchar(32) | | false | | | | + +## Constraints + +| Name | Type | Definition | +| ---- | ---- | ---------- | +| alembic_version_pkc | PRIMARY KEY | PRIMARY KEY (version_num) | + +## Indexes + +| Name | Definition | +| ---- | ---------- | +| alembic_version_pkc | CREATE UNIQUE INDEX alembic_version_pkc ON public.alembic_version USING btree (version_num) | + +## Relations + +```mermaid +erDiagram + + +"public.alembic_version" { + varchar_32_ version_num +} +``` + +--- + +> Generated by [tbls](https://github.com/k1LoW/tbls) diff --git a/docs/tbls/public.cluster.md b/docs/tbls/public.cluster.md index f4187a7..d1eaf23 100644 --- a/docs/tbls/public.cluster.md +++ b/docs/tbls/public.cluster.md @@ -21,14 +21,16 @@ | Name | Type | Definition | | ---- | ---- | ---------- | +| cluster_cluster_id_target_id_key | UNIQUE | UNIQUE (cluster_id, target_id) | +| cluster_pkey | PRIMARY KEY | PRIMARY KEY (cluster_id, target_id) | | cluster_input_catalog_id_fkey | FOREIGN KEY | FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id) | | cluster_target_id_fkey | FOREIGN KEY | FOREIGN KEY (target_id) REFERENCES target(target_id) | -| cluster_pkey | PRIMARY KEY | PRIMARY KEY (cluster_id, target_id) | ## Indexes | Name | Definition | | ---- | ---------- | +| cluster_cluster_id_target_id_key | CREATE UNIQUE INDEX cluster_cluster_id_target_id_key ON public.cluster USING btree (cluster_id, target_id) | | cluster_pkey | CREATE UNIQUE INDEX cluster_pkey ON public.cluster USING btree (cluster_id, target_id) | ## Relations @@ -54,7 +56,6 @@ erDiagram "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -78,52 +79,65 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j - varchar filter_g FK - varchar filter_r FK - varchar filter_i FK - varchar filter_z FK - varchar filter_y FK - varchar filter_j FK double_precision priority double_precision effective_exptime - double_precision single_exptime boolean is_medium_resolution double_precision qa_relative_throughput double_precision qa_relative_noise double_precision qa_reference_lambda - varchar qa_reference_arm FK boolean is_cluster timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + varchar filter_g FK + varchar filter_r FK + varchar filter_i FK + varchar filter_z FK + varchar filter_y FK + varchar filter_j FK + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code + double_precision single_exptime + varchar qa_reference_arm FK + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j } "public.input_catalog" { - integer input_catalog_id varchar input_catalog_name varchar input_catalog_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar_16_ upload_id + integer input_catalog_id boolean active boolean is_classical boolean is_user_pointing - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } ``` diff --git a/docs/tbls/public.filter_name.md b/docs/tbls/public.filter_name.md index 2590c98..1918eeb 100644 --- a/docs/tbls/public.filter_name.md +++ b/docs/tbls/public.filter_name.md @@ -15,12 +15,14 @@ | Name | Type | Definition | | ---- | ---- | ---------- | +| filter_name_filter_name_key | UNIQUE | UNIQUE (filter_name) | | filter_name_pkey | PRIMARY KEY | PRIMARY KEY (filter_name) | ## Indexes | Name | Definition | | ---- | ---------- | +| filter_name_filter_name_key | CREATE UNIQUE INDEX filter_name_filter_name_key ON public.filter_name USING btree (filter_name) | | filter_name_pkey | CREATE UNIQUE INDEX filter_name_pkey ON public.filter_name USING btree (filter_name) | ## Relations @@ -69,33 +71,36 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j + double_precision prob_f_star + boolean flags_dist + boolean flags_ebv + varchar version + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar filter_g FK varchar filter_r FK varchar filter_i FK varchar filter_z FK varchar filter_y FK varchar filter_j FK - double_precision prob_f_star - boolean flags_dist - boolean flags_ebv + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j double_precision teff_brutus double_precision teff_brutus_low double_precision teff_brutus_high @@ -106,14 +111,10 @@ erDiagram double_precision teff_gspphot_lower double_precision teff_gspphot_upper boolean is_fstar_gaia - varchar version - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -137,41 +138,54 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j - varchar filter_g FK - varchar filter_r FK - varchar filter_i FK - varchar filter_z FK - varchar filter_y FK - varchar filter_j FK double_precision priority double_precision effective_exptime - double_precision single_exptime boolean is_medium_resolution double_precision qa_relative_throughput double_precision qa_relative_noise double_precision qa_reference_lambda - varchar qa_reference_arm FK boolean is_cluster timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + varchar filter_g FK + varchar filter_r FK + varchar filter_i FK + varchar filter_z FK + varchar filter_y FK + varchar filter_j FK + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code + double_precision single_exptime + varchar qa_reference_arm FK + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j } ``` diff --git a/docs/tbls/public.fluxstd.md b/docs/tbls/public.fluxstd.md index 6eb58ac..ba48566 100644 --- a/docs/tbls/public.fluxstd.md +++ b/docs/tbls/public.fluxstd.md @@ -27,33 +27,36 @@ | psf_mag_z | double precision | | true | | | z-band PSF magnitude (AB mag) | | psf_mag_y | double precision | | true | | | y-band PSF magnitude (AB mag) | | psf_mag_j | double precision | | true | | | J band PSF magnitude (AB mag) | -| psf_mag_error_g | double precision | | true | | | Error in g-band PSF magnitude (AB mag) | -| psf_mag_error_r | double precision | | true | | | Error in r-band PSF magnitude (AB mag) | -| psf_mag_error_i | double precision | | true | | | Error in i-band PSF magnitude (AB mag) | -| psf_mag_error_z | double precision | | true | | | Error in z-band PSF magnitude (AB mag) | -| psf_mag_error_y | double precision | | true | | | Error in y-band PSF magnitude (AB mag) | -| psf_mag_error_j | double precision | | true | | | Error in J band PSF magnitude (AB mag) | | psf_flux_g | double precision | | true | | | g-band PSF flux (nJy) | | psf_flux_r | double precision | | true | | | r-band PSF flux (nJy) | | psf_flux_i | double precision | | true | | | i-band PSF flux (nJy) | | psf_flux_z | double precision | | true | | | z-band PSF flux (nJy) | | psf_flux_y | double precision | | true | | | y-band PSF flux (nJy) | | psf_flux_j | double precision | | true | | | J band PSF flux (nJy) | -| psf_flux_error_g | double precision | | true | | | Error in g-band PSF flux (nJy) | -| psf_flux_error_r | double precision | | true | | | Error in r-band PSF flux (nJy) | -| psf_flux_error_i | double precision | | true | | | Error in i-band PSF flux (nJy) | -| psf_flux_error_z | double precision | | true | | | Error in z-band PSF flux (nJy) | -| psf_flux_error_y | double precision | | true | | | Error in y-band PSF flux (nJy) | -| psf_flux_error_j | double precision | | true | | | Error in J band PSF flux (nJy) | +| prob_f_star | double precision | | true | | | Probability of being an F-type star | +| flags_dist | boolean | | true | | | Distance uncertanty flag, True if parallax_error/parallax \> 0.2 | +| flags_ebv | boolean | | true | | | E(B-V) uncertainty flag, True if E(B-V) uncertainty is greater than 20% | +| version | varchar | | false | | | Version string of the F-star selection | +| created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | +| updated_at | timestamp without time zone | | true | | | The date and time in UTC when the record was last updated | | filter_g | varchar | | true | | [public.filter_name](public.filter_name.md) | g-band filter (g_hsc, g_ps1, g_sdss, etc.) | | filter_r | varchar | | true | | [public.filter_name](public.filter_name.md) | r-band filter (r_hsc, r_ps1, r_sdss, etc.) | | filter_i | varchar | | true | | [public.filter_name](public.filter_name.md) | i-band filter (i_hsc, i_ps1, i_sdss, etc.) | | filter_z | varchar | | true | | [public.filter_name](public.filter_name.md) | z-band filter (z_hsc, z_ps1, z_sdss, etc.) | | filter_y | varchar | | true | | [public.filter_name](public.filter_name.md) | y-band filter (y_hsc, y_ps1, y_sdss, etc.) | | filter_j | varchar | | true | | [public.filter_name](public.filter_name.md) | j-band filter (j_mko, etc.) | -| prob_f_star | double precision | | true | | | Probability of being an F-type star | -| flags_dist | boolean | | true | | | Distance uncertanty flag, True if parallax_error/parallax > 0.2 | -| flags_ebv | boolean | | true | | | E(B-V) uncertainty flag, True if E(B-V) uncertainty is greater than 20% | +| psf_mag_error_g | double precision | | true | | | Error in g-band PSF magnitude (AB mag) | +| psf_mag_error_r | double precision | | true | | | Error in r-band PSF magnitude (AB mag) | +| psf_mag_error_i | double precision | | true | | | Error in i-band PSF magnitude (AB mag) | +| psf_mag_error_z | double precision | | true | | | Error in z-band PSF magnitude (AB mag) | +| psf_mag_error_y | double precision | | true | | | Error in y-band PSF magnitude (AB mag) | +| psf_mag_error_j | double precision | | true | | | Error in J band PSF magnitude (AB mag) | +| psf_flux_error_g | double precision | | true | | | Error in g-band PSF flux (nJy) | +| psf_flux_error_r | double precision | | true | | | Error in r-band PSF flux (nJy) | +| psf_flux_error_i | double precision | | true | | | Error in i-band PSF flux (nJy) | +| psf_flux_error_z | double precision | | true | | | Error in z-band PSF flux (nJy) | +| psf_flux_error_y | double precision | | true | | | Error in y-band PSF flux (nJy) | +| psf_flux_error_j | double precision | | true | | | Error in J band PSF flux (nJy) | | teff_brutus | double precision | | true | | | Effective temperature from Brutus code [K] | | teff_brutus_low | double precision | | true | | | Lower confidence level (16%) of effective temperature from Brutus code [K] | | teff_brutus_high | double precision | | true | | | Upper confidence level (84%) of effective temperature from Brutus code [K] | @@ -64,9 +67,6 @@ | teff_gspphot_lower | double precision | | true | | | Lower confidence level (16%) of effective temperature inferred by GSP-phot Aeneas [K] | | teff_gspphot_upper | double precision | | true | | | Upper confidence level (84%) of effective temperature inferred by GSP-phot Aeneas [K] | | is_fstar_gaia | boolean | | true | | | Flag for F-star from Gaia (Teff=6000-7500K if True) | -| version | varchar | | false | | | Version string of the F-star selection | -| created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | -| updated_at | timestamp without time zone | | true | | | The date and time in UTC when the record was last updated | ## Constraints @@ -80,6 +80,7 @@ | fluxstd_filter_z_fkey | FOREIGN KEY | FOREIGN KEY (filter_z) REFERENCES filter_name(filter_name) | | fluxstd_input_catalog_id_fkey | FOREIGN KEY | FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id) | | fluxstd_target_type_id_fkey | FOREIGN KEY | FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id) | +| fluxstd_fluxstd_id_key | UNIQUE | UNIQUE (fluxstd_id) | | fluxstd_pkey | PRIMARY KEY | PRIMARY KEY (fluxstd_id) | | uq_obj_id_input_catalog_id_version | UNIQUE | UNIQUE (obj_id, input_catalog_id, version) | @@ -87,6 +88,7 @@ | Name | Definition | | ---- | ---------- | +| fluxstd_fluxstd_id_key | CREATE UNIQUE INDEX fluxstd_fluxstd_id_key ON public.fluxstd USING btree (fluxstd_id) | | fluxstd_pkey | CREATE UNIQUE INDEX fluxstd_pkey ON public.fluxstd USING btree (fluxstd_id) | | uq_obj_id_input_catalog_id_version | CREATE UNIQUE INDEX uq_obj_id_input_catalog_id_version ON public.fluxstd USING btree (obj_id, input_catalog_id, version) | | ix_fluxstd_version | CREATE INDEX ix_fluxstd_version ON public.fluxstd USING btree (version) | @@ -128,33 +130,36 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j + double_precision prob_f_star + boolean flags_dist + boolean flags_ebv + varchar version + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar filter_g FK varchar filter_r FK varchar filter_i FK varchar filter_z FK varchar filter_y FK varchar filter_j FK - double_precision prob_f_star - boolean flags_dist - boolean flags_ebv + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j double_precision teff_brutus double_precision teff_brutus_low double_precision teff_brutus_high @@ -165,9 +170,6 @@ erDiagram double_precision teff_gspphot_lower double_precision teff_gspphot_upper boolean is_fstar_gaia - varchar version - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } "public.target_type" { integer target_type_id @@ -177,15 +179,15 @@ erDiagram timestamp_without_time_zone updated_at } "public.input_catalog" { - integer input_catalog_id varchar input_catalog_name varchar input_catalog_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar_16_ upload_id + integer input_catalog_id boolean active boolean is_classical boolean is_user_pointing - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } "public.filter_name" { varchar filter_name diff --git a/docs/tbls/public.input_catalog.md b/docs/tbls/public.input_catalog.md index 2cdfa86..f6d07c7 100644 --- a/docs/tbls/public.input_catalog.md +++ b/docs/tbls/public.input_catalog.md @@ -6,26 +6,28 @@ | Name | Type | Default | Nullable | Children | Parents | Comment | | ---- | ---- | ------- | -------- | -------- | ------- | ------- | -| input_catalog_id | integer | | false | [public.user_pointing](public.user_pointing.md) [public.sky](public.sky.md) [public.fluxstd](public.fluxstd.md) [public.target](public.target.md) [public.cluster](public.cluster.md) | | Unique identifier for input catalogs | | input_catalog_name | varchar | | false | | | Name of the input catalog (e.g., Gaia DR2, HSC-SSP PDR3, etc.) | | input_catalog_description | varchar | | true | | | Description of the input catalog | +| created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | +| updated_at | timestamp without time zone | | true | | | The date and time in UTC when the record was last updated | | upload_id | varchar(16) | | true | | | A 8-bit hex string (16 characters) assigned at the submission of the target list (default: empty string) | +| input_catalog_id | integer | | false | [public.cluster](public.cluster.md) [public.fluxstd](public.fluxstd.md) [public.sky](public.sky.md) [public.target](public.target.md) [public.user_pointing](public.user_pointing.md) | | Unique identifier for input catalogs | | active | boolean | | true | | | Flag to indicate if the input catalog is active (default: True) | | is_classical | boolean | | true | | | True if the classical mode is requested | | is_user_pointing | boolean | | true | | | True if user-defined pointings are provided | -| created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | -| updated_at | timestamp without time zone | | true | | | The date and time in UTC when the record was last updated | ## Constraints | Name | Type | Definition | | ---- | ---- | ---------- | +| input_catalog_input_catalog_id_key | UNIQUE | UNIQUE (input_catalog_id) | | input_catalog_pkey | PRIMARY KEY | PRIMARY KEY (input_catalog_id) | ## Indexes | Name | Definition | | ---- | ---------- | +| input_catalog_input_catalog_id_key | CREATE UNIQUE INDEX input_catalog_input_catalog_id_key ON public.input_catalog USING btree (input_catalog_id) | | input_catalog_pkey | CREATE UNIQUE INDEX input_catalog_pkey ON public.input_catalog USING btree (input_catalog_id) | ## Relations @@ -33,48 +35,32 @@ ```mermaid erDiagram -"public.user_pointing" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" -"public.sky" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" +"public.cluster" }o--o| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" "public.fluxstd" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" +"public.sky" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" "public.target" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" -"public.cluster" }o--o| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" +"public.user_pointing" }o--|| "public.input_catalog" : "FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id)" "public.input_catalog" { - integer input_catalog_id varchar input_catalog_name varchar input_catalog_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar_16_ upload_id + integer input_catalog_id boolean active boolean is_classical boolean is_user_pointing - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at -} -"public.user_pointing" { - bigint user_pointing_id - varchar ppc_code - double_precision ppc_ra - double_precision ppc_dec - double_precision ppc_pa - resolutionmode ppc_resolution - double_precision ppc_priority - integer input_catalog_id FK - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } -"public.sky" { - bigint sky_id - bigint obj_id - varchar obj_id_orig - double_precision ra - double_precision dec - varchar epoch - integer tract - integer patch - integer target_type_id FK +"public.cluster" { + bigint cluster_id + bigint target_id FK + integer n_targets + double_precision ra_cluster + double_precision dec_cluster + double_precision d_ra + double_precision d_dec integer input_catalog_id FK - double_precision mag_thresh - varchar version timestamp_without_time_zone created_at timestamp_without_time_zone updated_at } @@ -100,33 +86,36 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j + double_precision prob_f_star + boolean flags_dist + boolean flags_ebv + varchar version + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar filter_g FK varchar filter_r FK varchar filter_i FK varchar filter_z FK varchar filter_y FK varchar filter_j FK - double_precision prob_f_star - boolean flags_dist - boolean flags_ebv + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j double_precision teff_brutus double_precision teff_brutus_low double_precision teff_brutus_high @@ -137,6 +126,19 @@ erDiagram double_precision teff_gspphot_lower double_precision teff_gspphot_upper boolean is_fstar_gaia +} +"public.sky" { + bigint sky_id + bigint obj_id + varchar obj_id_orig + double_precision ra + double_precision dec + varchar epoch + integer tract + integer patch + integer target_type_id FK + integer input_catalog_id FK + double_precision mag_thresh varchar version timestamp_without_time_zone created_at timestamp_without_time_zone updated_at @@ -144,7 +146,6 @@ erDiagram "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -168,50 +169,63 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j - varchar filter_g FK - varchar filter_r FK - varchar filter_i FK - varchar filter_z FK - varchar filter_y FK - varchar filter_j FK double_precision priority double_precision effective_exptime - double_precision single_exptime boolean is_medium_resolution double_precision qa_relative_throughput double_precision qa_relative_noise double_precision qa_reference_lambda - varchar qa_reference_arm FK boolean is_cluster timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + varchar filter_g FK + varchar filter_r FK + varchar filter_i FK + varchar filter_z FK + varchar filter_y FK + varchar filter_j FK + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code + double_precision single_exptime + varchar qa_reference_arm FK + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j } -"public.cluster" { - bigint cluster_id - bigint target_id FK - integer n_targets - double_precision ra_cluster - double_precision dec_cluster - double_precision d_ra - double_precision d_dec +"public.user_pointing" { + bigint user_pointing_id + varchar ppc_code + double_precision ppc_ra + double_precision ppc_dec + double_precision ppc_pa + resolutionmode ppc_resolution + double_precision ppc_priority integer input_catalog_id FK timestamp_without_time_zone created_at timestamp_without_time_zone updated_at diff --git a/docs/tbls/public.partner.md b/docs/tbls/public.partner.md index e29cc6a..aaf3b70 100644 --- a/docs/tbls/public.partner.md +++ b/docs/tbls/public.partner.md @@ -6,7 +6,7 @@ | Name | Type | Default | Nullable | Children | Parents | Comment | | ---- | ---- | ------- | -------- | -------- | ------- | ------- | -| partner_id | integer | | false | | | Unique identifier of the partner | +| partner_id | integer | | false | [public.proposal](public.proposal.md) | | Unique identifier of the partner | | partner_name | varchar | | false | | | Name of the partner (e.g., subaru, gemini, keck, and uh) | | partner_description | varchar | | true | | | Description of the partner | | created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | @@ -18,6 +18,7 @@ | ---- | ---- | ---------- | | partner_pkey | PRIMARY KEY | PRIMARY KEY (partner_id) | | partner_partner_name_key | UNIQUE | UNIQUE (partner_name) | +| partner_partner_id_key | UNIQUE | UNIQUE (partner_id) | ## Indexes @@ -25,12 +26,14 @@ | ---- | ---------- | | partner_pkey | CREATE UNIQUE INDEX partner_pkey ON public.partner USING btree (partner_id) | | partner_partner_name_key | CREATE UNIQUE INDEX partner_partner_name_key ON public.partner USING btree (partner_name) | +| partner_partner_id_key | CREATE UNIQUE INDEX partner_partner_id_key ON public.partner USING btree (partner_id) | ## Relations ```mermaid erDiagram +"public.proposal" }o--o| "public.partner" : "FOREIGN KEY (partner_id) REFERENCES partner(partner_id)" "public.partner" { integer partner_id @@ -39,6 +42,23 @@ erDiagram timestamp_without_time_zone created_at timestamp_without_time_zone updated_at } +"public.proposal" { + varchar proposal_id + varchar group_id + varchar pi_first_name + varchar pi_last_name + varchar pi_middle_name + double_precision rank + varchar grade + double_precision allocated_time_total + integer proposal_category_id FK + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at + double_precision allocated_time_lr + double_precision allocated_time_mr + boolean is_too + integer partner_id FK +} ``` --- diff --git a/docs/tbls/public.pfs_arm.md b/docs/tbls/public.pfs_arm.md index 959d089..332004c 100644 --- a/docs/tbls/public.pfs_arm.md +++ b/docs/tbls/public.pfs_arm.md @@ -15,12 +15,14 @@ | Name | Type | Definition | | ---- | ---- | ---------- | +| pfs_arm_name_key | UNIQUE | UNIQUE (name) | | pfs_arm_pkey | PRIMARY KEY | PRIMARY KEY (name) | ## Indexes | Name | Definition | | ---- | ---------- | +| pfs_arm_name_key | CREATE UNIQUE INDEX pfs_arm_name_key ON public.pfs_arm USING btree (name) | | pfs_arm_pkey | CREATE UNIQUE INDEX pfs_arm_pkey ON public.pfs_arm USING btree (name) | ## Relations @@ -39,7 +41,6 @@ erDiagram "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -63,41 +64,54 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j - varchar filter_g FK - varchar filter_r FK - varchar filter_i FK - varchar filter_z FK - varchar filter_y FK - varchar filter_j FK double_precision priority double_precision effective_exptime - double_precision single_exptime boolean is_medium_resolution double_precision qa_relative_throughput double_precision qa_relative_noise double_precision qa_reference_lambda - varchar qa_reference_arm FK boolean is_cluster timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + varchar filter_g FK + varchar filter_r FK + varchar filter_i FK + varchar filter_z FK + varchar filter_y FK + varchar filter_j FK + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code + double_precision single_exptime + varchar qa_reference_arm FK + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j } ``` diff --git a/docs/tbls/public.proposal.md b/docs/tbls/public.proposal.md index 4f26b70..4565363 100644 --- a/docs/tbls/public.proposal.md +++ b/docs/tbls/public.proposal.md @@ -6,20 +6,21 @@ | Name | Type | Default | Nullable | Children | Parents | Comment | | ---- | ---- | ------- | -------- | -------- | ------- | ------- | -| proposal_id | varchar | | false | [public.target](public.target.md) | | Unique identifier for proposal (e.g, S21B-OT06?) | -| group_id | varchar | | false | | | Group ID in STARS (e.g., o21195?) | +| proposal_id | varchar | | false | [public.target](public.target.md) | | Unique identifier for proposal (e.g, S21B-OT06) | +| group_id | varchar | | false | | | Group ID in STARS (e.g., o21195) | | pi_first_name | varchar | | true | | | PI's first name | | pi_last_name | varchar | | false | | | PI's last name | | pi_middle_name | varchar | | true | | | PI's middle name | | rank | double precision | | false | | | TAC score | -| grade | varchar | | false | | | TAC grade (A/B/C/F in the case of HSC queue) | +| grade | varchar | | false | | | TAC grade (A/B/C/F and N/A) | | allocated_time_total | double precision | | true | | | Total fiberhours allocated by TAC (hour) | -| allocated_time_lr | double precision | | true | | | Total fiberhours for the low-resolution mode allocated by TAC (hour) | -| allocated_time_mr | double precision | | true | | | Total fiberhours for the medium-resolution mode allocated by TAC (hour) | | proposal_category_id | integer | | true | | [public.proposal_category](public.proposal_category.md) | | -| is_too | boolean | | true | | | True when the proposal is ToO | | created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | | updated_at | timestamp without time zone | | true | | | The date and time in UTC when the record was last updated | +| allocated_time_lr | double precision | | true | | | Total fiberhours for the low-resolution mode allocated by TAC (hour) | +| allocated_time_mr | double precision | | true | | | Total fiberhours for the medium-resolution mode allocated by TAC (hour) | +| is_too | boolean | | true | | | True when the proposal is ToO | +| partner_id | integer | | true | | [public.partner](public.partner.md) | | ## Constraints @@ -27,12 +28,16 @@ | ---- | ---- | ---------- | | proposal_proposal_category_id_fkey | FOREIGN KEY | FOREIGN KEY (proposal_category_id) REFERENCES proposal_category(proposal_category_id) | | proposal_pkey | PRIMARY KEY | PRIMARY KEY (proposal_id) | +| proposal_proposal_id_key | UNIQUE | UNIQUE (proposal_id) | +| proposal_partner_id_fkey | FOREIGN KEY | FOREIGN KEY (partner_id) REFERENCES partner(partner_id) | ## Indexes | Name | Definition | | ---- | ---------- | | proposal_pkey | CREATE UNIQUE INDEX proposal_pkey ON public.proposal USING btree (proposal_id) | +| proposal_proposal_id_key | CREATE UNIQUE INDEX proposal_proposal_id_key ON public.proposal USING btree (proposal_id) | +| idx_proposal_grade | CREATE INDEX idx_proposal_grade ON public.proposal USING btree (grade) | ## Relations @@ -41,6 +46,7 @@ erDiagram "public.target" }o--o| "public.proposal" : "FOREIGN KEY (proposal_id) REFERENCES proposal(proposal_id)" "public.proposal" }o--o| "public.proposal_category" : "FOREIGN KEY (proposal_category_id) REFERENCES proposal_category(proposal_category_id)" +"public.proposal" }o--o| "public.partner" : "FOREIGN KEY (partner_id) REFERENCES partner(partner_id)" "public.proposal" { varchar proposal_id @@ -51,17 +57,17 @@ erDiagram double_precision rank varchar grade double_precision allocated_time_total - double_precision allocated_time_lr - double_precision allocated_time_mr integer proposal_category_id FK - boolean is_too timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + double_precision allocated_time_lr + double_precision allocated_time_mr + boolean is_too + integer partner_id FK } "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -85,41 +91,54 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j - varchar filter_g FK - varchar filter_r FK - varchar filter_i FK - varchar filter_z FK - varchar filter_y FK - varchar filter_j FK double_precision priority double_precision effective_exptime - double_precision single_exptime boolean is_medium_resolution double_precision qa_relative_throughput double_precision qa_relative_noise double_precision qa_reference_lambda - varchar qa_reference_arm FK boolean is_cluster timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + varchar filter_g FK + varchar filter_r FK + varchar filter_i FK + varchar filter_z FK + varchar filter_y FK + varchar filter_j FK + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code + double_precision single_exptime + varchar qa_reference_arm FK + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j } "public.proposal_category" { integer proposal_category_id @@ -128,6 +147,13 @@ erDiagram timestamp_without_time_zone created_at timestamp_without_time_zone updated_at } +"public.partner" { + integer partner_id + varchar partner_name + varchar partner_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at +} ``` --- diff --git a/docs/tbls/public.proposal_category.md b/docs/tbls/public.proposal_category.md index b591581..d25dbac 100644 --- a/docs/tbls/public.proposal_category.md +++ b/docs/tbls/public.proposal_category.md @@ -17,6 +17,7 @@ | Name | Type | Definition | | ---- | ---- | ---------- | | proposal_category_pkey | PRIMARY KEY | PRIMARY KEY (proposal_category_id) | +| proposal_category_proposal_category_id_key | UNIQUE | UNIQUE (proposal_category_id) | | proposal_category_proposal_category_name_key | UNIQUE | UNIQUE (proposal_category_name) | ## Indexes @@ -24,6 +25,7 @@ | Name | Definition | | ---- | ---------- | | proposal_category_pkey | CREATE UNIQUE INDEX proposal_category_pkey ON public.proposal_category USING btree (proposal_category_id) | +| proposal_category_proposal_category_id_key | CREATE UNIQUE INDEX proposal_category_proposal_category_id_key ON public.proposal_category USING btree (proposal_category_id) | | proposal_category_proposal_category_name_key | CREATE UNIQUE INDEX proposal_category_proposal_category_name_key ON public.proposal_category USING btree (proposal_category_name) | ## Relations @@ -49,12 +51,13 @@ erDiagram double_precision rank varchar grade double_precision allocated_time_total - double_precision allocated_time_lr - double_precision allocated_time_mr integer proposal_category_id FK - boolean is_too timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + double_precision allocated_time_lr + double_precision allocated_time_mr + boolean is_too + integer partner_id FK } ``` diff --git a/docs/tbls/public.sky.md b/docs/tbls/public.sky.md index f79a461..63116a7 100644 --- a/docs/tbls/public.sky.md +++ b/docs/tbls/public.sky.md @@ -26,19 +26,21 @@ | Name | Type | Definition | | ---- | ---- | ---------- | | sky_input_catalog_id_fkey | FOREIGN KEY | FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id) | -| sky_target_type_id_fkey | FOREIGN KEY | FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id) | -| sky_pkey | PRIMARY KEY | PRIMARY KEY (sky_id) | | sky_obj_id_input_catalog_id_version_key | UNIQUE | UNIQUE (obj_id, input_catalog_id, version) | +| sky_pkey | PRIMARY KEY | PRIMARY KEY (sky_id) | +| sky_sky_id_key | UNIQUE | UNIQUE (sky_id) | +| sky_target_type_id_fkey | FOREIGN KEY | FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id) | ## Indexes | Name | Definition | | ---- | ---------- | -| sky_pkey | CREATE UNIQUE INDEX sky_pkey ON public.sky USING btree (sky_id) | | sky_obj_id_input_catalog_id_version_key | CREATE UNIQUE INDEX sky_obj_id_input_catalog_id_version_key ON public.sky USING btree (obj_id, input_catalog_id, version) | +| sky_pkey | CREATE UNIQUE INDEX sky_pkey ON public.sky USING btree (sky_id) | +| sky_sky_id_key | CREATE UNIQUE INDEX sky_sky_id_key ON public.sky USING btree (sky_id) | +| ix_sky_input_catalog_id | CREATE INDEX ix_sky_input_catalog_id ON public.sky USING btree (input_catalog_id) | | ix_sky_version | CREATE INDEX ix_sky_version ON public.sky USING btree (version) | | sky_q3c_ang2ipix_idx | CREATE INDEX sky_q3c_ang2ipix_idx ON public.sky USING btree (q3c_ang2ipix(ra, "dec")) | -| ix_sky_input_catalog_id | CREATE INDEX ix_sky_input_catalog_id ON public.sky USING btree (input_catalog_id) | ## Relations @@ -72,15 +74,15 @@ erDiagram timestamp_without_time_zone updated_at } "public.input_catalog" { - integer input_catalog_id varchar input_catalog_name varchar input_catalog_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar_16_ upload_id + integer input_catalog_id boolean active boolean is_classical boolean is_user_pointing - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } ``` diff --git a/docs/tbls/public.target.md b/docs/tbls/public.target.md index 3aa6614..d8c4eac 100644 --- a/docs/tbls/public.target.md +++ b/docs/tbls/public.target.md @@ -8,7 +8,6 @@ | ---- | ---- | ------- | -------- | -------- | ------- | ------- | | target_id | bigint | nextval('target_target_id_seq'::regclass) | false | [public.cluster](public.cluster.md) | | Unique identifier for each target | | proposal_id | varchar | | true | | [public.proposal](public.proposal.md) | | -| ob_code | varchar | | false | | | Identifer for a combination of a target, observing mode, and exposure time in a program. | | obj_id | bigint | | false | | | Object ID as specified by the observer at Phase 2 (can be same as the input_catalog_object_id) | | ra | double precision | | false | | | RA (ICRS, degree) | | dec | double precision | | false | | | Dec (ICRS, degree) | @@ -32,41 +31,54 @@ | psf_mag_z | double precision | | true | | | z-band PSF magnitude (AB mag) | | psf_mag_y | double precision | | true | | | y-band PSF magnitude (AB mag) | | psf_mag_j | double precision | | true | | | J band PSF magnitude (AB mag) | -| psf_mag_error_g | double precision | | true | | | Error in g-band PSF magnitude (AB mag) | -| psf_mag_error_r | double precision | | true | | | Error in r-band PSF magnitude (AB mag) | -| psf_mag_error_i | double precision | | true | | | Error in i-band PSF magnitude (AB mag) | -| psf_mag_error_z | double precision | | true | | | Error in z-band PSF magnitude (AB mag) | -| psf_mag_error_y | double precision | | true | | | Error in y-band PSF magnitude (AB mag) | -| psf_mag_error_j | double precision | | true | | | Error in J band PSF magnitude (AB mag) | | psf_flux_g | double precision | | true | | | g-band PSF flux (nJy) | | psf_flux_r | double precision | | true | | | r-band PSF flux (nJy) | | psf_flux_i | double precision | | true | | | i-band PSF flux (nJy) | | psf_flux_z | double precision | | true | | | z-band PSF flux (nJy) | | psf_flux_y | double precision | | true | | | y-band PSF flux (nJy) | | psf_flux_j | double precision | | true | | | J band PSF flux (nJy) | -| psf_flux_error_g | double precision | | true | | | Error in g-band PSF flux (nJy) | -| psf_flux_error_r | double precision | | true | | | Error in r-band PSF flux (nJy) | -| psf_flux_error_i | double precision | | true | | | Error in i-band PSF flux (nJy) | -| psf_flux_error_z | double precision | | true | | | Error in z-band PSF flux (nJy) | -| psf_flux_error_y | double precision | | true | | | Error in y-band PSF flux (nJy) | -| psf_flux_error_j | double precision | | true | | | Error in J band PSF flux (nJy) | -| filter_g | varchar | | true | | [public.filter_name](public.filter_name.md) | g-band filter (g_hsc, g_ps1, g_sdss, etc.) | -| filter_r | varchar | | true | | [public.filter_name](public.filter_name.md) | r-band filter (r_hsc, r_ps1, r_sdss, etc.) | -| filter_i | varchar | | true | | [public.filter_name](public.filter_name.md) | i-band filter (i_hsc, i_ps1, i_sdss, etc.) | -| filter_z | varchar | | true | | [public.filter_name](public.filter_name.md) | z-band filter (z_hsc, z_ps1, z_sdss, etc.) | -| filter_y | varchar | | true | | [public.filter_name](public.filter_name.md) | y-band filter (y_hsc, y_ps1, y_sdss, etc.) | -| filter_j | varchar | | true | | [public.filter_name](public.filter_name.md) | j-band filter (j_mko, etc.) | | priority | double precision | | true | | | Priority of the target specified by the observer within the proposal | | effective_exptime | double precision | | false | | | Requested effective exposure time (s) | -| single_exptime | double precision | | false | | | Individual exposure time (s) | | is_medium_resolution | boolean | | true | | | True if the medium resolution mode is requested | | qa_relative_throughput | double precision | | true | | | Relative throughput to the reference value requested by the observer (default: 1.0) | | qa_relative_noise | double precision | | true | | | Relative noise to the reference value requested by the observer (default: 1.0) | | qa_reference_lambda | double precision | | true | | | Reference wavelength to evaluate effective exposure time (angstrom or nm?) | -| qa_reference_arm | varchar | | true | | [public.pfs_arm](public.pfs_arm.md) | Reference arm to evaluate effective exposure time ('b', 'r', 'n', 'm') | | is_cluster | boolean | | true | | | True if it is a cluster of multiple targets. | | created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | | updated_at | timestamp without time zone | | true | | | The date and time in UTC when the record was last updated | +| filter_g | varchar | | true | | [public.filter_name](public.filter_name.md) | g-band filter (g_hsc, g_ps1, g_sdss, etc.) | +| filter_r | varchar | | true | | [public.filter_name](public.filter_name.md) | r-band filter (r_hsc, r_ps1, r_sdss, etc.) | +| filter_i | varchar | | true | | [public.filter_name](public.filter_name.md) | i-band filter (i_hsc, i_ps1, i_sdss, etc.) | +| filter_z | varchar | | true | | [public.filter_name](public.filter_name.md) | z-band filter (z_hsc, z_ps1, z_sdss, etc.) | +| filter_y | varchar | | true | | [public.filter_name](public.filter_name.md) | y-band filter (y_hsc, y_ps1, y_sdss, etc.) | +| filter_j | varchar | | true | | [public.filter_name](public.filter_name.md) | j-band filter (j_mko, etc.) | +| psf_mag_error_g | double precision | | true | | | Error in g-band PSF magnitude (AB mag) | +| psf_mag_error_r | double precision | | true | | | Error in r-band PSF magnitude (AB mag) | +| psf_mag_error_i | double precision | | true | | | Error in i-band PSF magnitude (AB mag) | +| psf_mag_error_z | double precision | | true | | | Error in z-band PSF magnitude (AB mag) | +| psf_mag_error_y | double precision | | true | | | Error in y-band PSF magnitude (AB mag) | +| psf_mag_error_j | double precision | | true | | | Error in J band PSF magnitude (AB mag) | +| psf_flux_error_g | double precision | | true | | | Error in g-band PSF flux (nJy) | +| psf_flux_error_r | double precision | | true | | | Error in r-band PSF flux (nJy) | +| psf_flux_error_i | double precision | | true | | | Error in i-band PSF flux (nJy) | +| psf_flux_error_z | double precision | | true | | | Error in z-band PSF flux (nJy) | +| psf_flux_error_y | double precision | | true | | | Error in y-band PSF flux (nJy) | +| psf_flux_error_j | double precision | | true | | | Error in J band PSF flux (nJy) | +| ob_code | varchar | | false | | | Identifer for a combination of a target, observing mode, and exposure time in a program. | +| single_exptime | double precision | | false | | | Individual exposure time (s) | +| qa_reference_arm | varchar | | true | | [public.pfs_arm](public.pfs_arm.md) | Reference arm to evaluate effective exposure time ('b', 'r', 'n', 'm') | +| total_flux_g | double precision | | true | | | g-band total flux (nJy) | +| total_flux_r | double precision | | true | | | r-band total flux (nJy) | +| total_flux_i | double precision | | true | | | i-band total flux (nJy) | +| total_flux_z | double precision | | true | | | z-band total flux (nJy) | +| total_flux_y | double precision | | true | | | y-band total flux (nJy) | +| total_flux_j | double precision | | true | | | J band total flux (nJy) | +| total_flux_error_g | double precision | | true | | | Error in g-band total flux (nJy) | +| total_flux_error_r | double precision | | true | | | Error in r-band total flux (nJy) | +| total_flux_error_i | double precision | | true | | | Error in i-band total flux (nJy) | +| total_flux_error_z | double precision | | true | | | Error in z-band total flux (nJy) | +| total_flux_error_y | double precision | | true | | | Error in y-band total flux (nJy) | +| total_flux_error_j | double precision | | true | | | Error in J band total flux (nJy) | ## Constraints @@ -78,13 +90,14 @@ | target_filter_r_fkey | FOREIGN KEY | FOREIGN KEY (filter_r) REFERENCES filter_name(filter_name) | | target_filter_y_fkey | FOREIGN KEY | FOREIGN KEY (filter_y) REFERENCES filter_name(filter_name) | | target_filter_z_fkey | FOREIGN KEY | FOREIGN KEY (filter_z) REFERENCES filter_name(filter_name) | -| target_qa_reference_arm_fkey | FOREIGN KEY | FOREIGN KEY (qa_reference_arm) REFERENCES pfs_arm(name) | | target_input_catalog_id_fkey | FOREIGN KEY | FOREIGN KEY (input_catalog_id) REFERENCES input_catalog(input_catalog_id) | -| target_target_type_id_fkey | FOREIGN KEY | FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id) | +| target_qa_reference_arm_fkey | FOREIGN KEY | FOREIGN KEY (qa_reference_arm) REFERENCES pfs_arm(name) | | target_proposal_id_fkey | FOREIGN KEY | FOREIGN KEY (proposal_id) REFERENCES proposal(proposal_id) | +| target_target_type_id_fkey | FOREIGN KEY | FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id) | | target_pkey | PRIMARY KEY | PRIMARY KEY (target_id) | | target_propid_obcode_catid_objid_resolution_key | UNIQUE | UNIQUE (proposal_id, ob_code, input_catalog_id, obj_id, is_medium_resolution) | | target_propid_obcode_key | UNIQUE | UNIQUE (proposal_id, ob_code) | +| target_target_id_key | UNIQUE | UNIQUE (target_id) | ## Indexes @@ -93,6 +106,7 @@ | target_pkey | CREATE UNIQUE INDEX target_pkey ON public.target USING btree (target_id) | | target_propid_obcode_catid_objid_resolution_key | CREATE UNIQUE INDEX target_propid_obcode_catid_objid_resolution_key ON public.target USING btree (proposal_id, ob_code, input_catalog_id, obj_id, is_medium_resolution) | | target_propid_obcode_key | CREATE UNIQUE INDEX target_propid_obcode_key ON public.target USING btree (proposal_id, ob_code) | +| target_target_id_key | CREATE UNIQUE INDEX target_target_id_key ON public.target USING btree (target_id) | | target_q3c_ang2ipix_idx | CREATE INDEX target_q3c_ang2ipix_idx ON public.target USING btree (q3c_ang2ipix(ra, "dec")) | ## Relations @@ -115,7 +129,6 @@ erDiagram "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -139,41 +152,54 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j - varchar filter_g FK - varchar filter_r FK - varchar filter_i FK - varchar filter_z FK - varchar filter_y FK - varchar filter_j FK double_precision priority double_precision effective_exptime - double_precision single_exptime boolean is_medium_resolution double_precision qa_relative_throughput double_precision qa_relative_noise double_precision qa_reference_lambda - varchar qa_reference_arm FK boolean is_cluster timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + varchar filter_g FK + varchar filter_r FK + varchar filter_i FK + varchar filter_z FK + varchar filter_y FK + varchar filter_j FK + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code + double_precision single_exptime + varchar qa_reference_arm FK + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j } "public.cluster" { bigint cluster_id @@ -196,12 +222,13 @@ erDiagram double_precision rank varchar grade double_precision allocated_time_total - double_precision allocated_time_lr - double_precision allocated_time_mr integer proposal_category_id FK - boolean is_too timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + double_precision allocated_time_lr + double_precision allocated_time_mr + boolean is_too + integer partner_id FK } "public.target_type" { integer target_type_id @@ -211,15 +238,15 @@ erDiagram timestamp_without_time_zone updated_at } "public.input_catalog" { - integer input_catalog_id varchar input_catalog_name varchar input_catalog_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar_16_ upload_id + integer input_catalog_id boolean active boolean is_classical boolean is_user_pointing - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } "public.filter_name" { varchar filter_name diff --git a/docs/tbls/public.target_type.md b/docs/tbls/public.target_type.md index 3d05465..418461c 100644 --- a/docs/tbls/public.target_type.md +++ b/docs/tbls/public.target_type.md @@ -6,7 +6,7 @@ | Name | Type | Default | Nullable | Children | Parents | Comment | | ---- | ---- | ------- | -------- | -------- | ------- | ------- | -| target_type_id | integer | | false | [public.sky](public.sky.md) [public.fluxstd](public.fluxstd.md) [public.target](public.target.md) | | Unique identifier for target types | +| target_type_id | integer | | false | [public.fluxstd](public.fluxstd.md) [public.sky](public.sky.md) [public.target](public.target.md) | | Unique identifier for target types | | target_type_name | varchar | | false | | | Name for the target type. | | target_type_description | varchar | | true | | | Description of the target type | | created_at | timestamp without time zone | timezone('utc'::text, CURRENT_TIMESTAMP) | true | | | The date and time in UTC when the record was created | @@ -17,20 +17,22 @@ | Name | Type | Definition | | ---- | ---- | ---------- | | target_type_pkey | PRIMARY KEY | PRIMARY KEY (target_type_id) | +| target_type_target_type_id_key | UNIQUE | UNIQUE (target_type_id) | ## Indexes | Name | Definition | | ---- | ---------- | | target_type_pkey | CREATE UNIQUE INDEX target_type_pkey ON public.target_type USING btree (target_type_id) | +| target_type_target_type_id_key | CREATE UNIQUE INDEX target_type_target_type_id_key ON public.target_type USING btree (target_type_id) | ## Relations ```mermaid erDiagram -"public.sky" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" "public.fluxstd" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" +"public.sky" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" "public.target" }o--o| "public.target_type" : "FOREIGN KEY (target_type_id) REFERENCES target_type(target_type_id)" "public.target_type" { @@ -40,22 +42,6 @@ erDiagram timestamp_without_time_zone created_at timestamp_without_time_zone updated_at } -"public.sky" { - bigint sky_id - bigint obj_id - varchar obj_id_orig - double_precision ra - double_precision dec - varchar epoch - integer tract - integer patch - integer target_type_id FK - integer input_catalog_id FK - double_precision mag_thresh - varchar version - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at -} "public.fluxstd" { bigint fluxstd_id bigint obj_id @@ -78,33 +64,36 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j + double_precision prob_f_star + boolean flags_dist + boolean flags_ebv + varchar version + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar filter_g FK varchar filter_r FK varchar filter_i FK varchar filter_z FK varchar filter_y FK varchar filter_j FK - double_precision prob_f_star - boolean flags_dist - boolean flags_ebv + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j double_precision teff_brutus double_precision teff_brutus_low double_precision teff_brutus_high @@ -115,6 +104,19 @@ erDiagram double_precision teff_gspphot_lower double_precision teff_gspphot_upper boolean is_fstar_gaia +} +"public.sky" { + bigint sky_id + bigint obj_id + varchar obj_id_orig + double_precision ra + double_precision dec + varchar epoch + integer tract + integer patch + integer target_type_id FK + integer input_catalog_id FK + double_precision mag_thresh varchar version timestamp_without_time_zone created_at timestamp_without_time_zone updated_at @@ -122,7 +124,6 @@ erDiagram "public.target" { bigint target_id varchar proposal_id FK - varchar ob_code bigint obj_id double_precision ra double_precision dec @@ -146,41 +147,54 @@ erDiagram double_precision psf_mag_z double_precision psf_mag_y double_precision psf_mag_j - double_precision psf_mag_error_g - double_precision psf_mag_error_r - double_precision psf_mag_error_i - double_precision psf_mag_error_z - double_precision psf_mag_error_y - double_precision psf_mag_error_j double_precision psf_flux_g double_precision psf_flux_r double_precision psf_flux_i double_precision psf_flux_z double_precision psf_flux_y double_precision psf_flux_j - double_precision psf_flux_error_g - double_precision psf_flux_error_r - double_precision psf_flux_error_i - double_precision psf_flux_error_z - double_precision psf_flux_error_y - double_precision psf_flux_error_j - varchar filter_g FK - varchar filter_r FK - varchar filter_i FK - varchar filter_z FK - varchar filter_y FK - varchar filter_j FK double_precision priority double_precision effective_exptime - double_precision single_exptime boolean is_medium_resolution double_precision qa_relative_throughput double_precision qa_relative_noise double_precision qa_reference_lambda - varchar qa_reference_arm FK boolean is_cluster timestamp_without_time_zone created_at timestamp_without_time_zone updated_at + varchar filter_g FK + varchar filter_r FK + varchar filter_i FK + varchar filter_z FK + varchar filter_y FK + varchar filter_j FK + double_precision psf_mag_error_g + double_precision psf_mag_error_r + double_precision psf_mag_error_i + double_precision psf_mag_error_z + double_precision psf_mag_error_y + double_precision psf_mag_error_j + double_precision psf_flux_error_g + double_precision psf_flux_error_r + double_precision psf_flux_error_i + double_precision psf_flux_error_z + double_precision psf_flux_error_y + double_precision psf_flux_error_j + varchar ob_code + double_precision single_exptime + varchar qa_reference_arm FK + double_precision total_flux_g + double_precision total_flux_r + double_precision total_flux_i + double_precision total_flux_z + double_precision total_flux_y + double_precision total_flux_j + double_precision total_flux_error_g + double_precision total_flux_error_r + double_precision total_flux_error_i + double_precision total_flux_error_z + double_precision total_flux_error_y + double_precision total_flux_error_j } ``` diff --git a/docs/tbls/public.user_pointing.md b/docs/tbls/public.user_pointing.md index e29095d..5d2b36f 100644 --- a/docs/tbls/public.user_pointing.md +++ b/docs/tbls/public.user_pointing.md @@ -50,15 +50,15 @@ erDiagram timestamp_without_time_zone updated_at } "public.input_catalog" { - integer input_catalog_id varchar input_catalog_name varchar input_catalog_description + timestamp_without_time_zone created_at + timestamp_without_time_zone updated_at varchar_16_ upload_id + integer input_catalog_id boolean active boolean is_classical boolean is_user_pointing - timestamp_without_time_zone created_at - timestamp_without_time_zone updated_at } ```