diff --git a/docs/.buildinfo b/docs/.buildinfo index d840ca9..6ba2f11 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 20de538d23999e0682f5043704a6a894 +config: bc064b999073f39c5268b1314d8c5e6f tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_images/notebooks_intro_notebook_65_0.png b/docs/_images/notebooks_intro_notebook_65_0.png new file mode 100644 index 0000000..eedd5fb Binary files /dev/null and b/docs/_images/notebooks_intro_notebook_65_0.png differ diff --git a/docs/_images/notebooks_intro_notebook_67_1.png b/docs/_images/notebooks_intro_notebook_67_1.png new file mode 100644 index 0000000..3d510e2 Binary files /dev/null and b/docs/_images/notebooks_intro_notebook_67_1.png differ diff --git a/docs/_images/notebooks_intro_notebook_74_0.png b/docs/_images/notebooks_intro_notebook_74_0.png new file mode 100644 index 0000000..556be5b Binary files /dev/null and b/docs/_images/notebooks_intro_notebook_74_0.png differ diff --git a/docs/_modules/index.html b/docs/_modules/index.html index a9af155..fd3b88c 100644 --- a/docs/_modules/index.html +++ b/docs/_modules/index.html @@ -3,7 +3,7 @@
-
[docs]class Catalog:
- """
+ """
Main class for loading catalog
"""
def __init__(self, data=None, metadata=None, metadata_df=None):
- """
+ """
Catalog class constructor
"""
self.data = pd.DataFrame(data)
@@ -98,8 +98,8 @@ Source code for pzserver.catalog
self.columns = metadata.get("main_file").get("columns_association")
self.metadata_df = metadata_df
-[docs] def display_metadata(self):
- """
+[docs] def display_metadata(self):
+ """
Displays the catalog's metadata
Displays a pandas.io.formats.style.Styler object
@@ -111,15 +111,15 @@ Source code for pzserver.catalog
[docs]class SpeczCatalog(Catalog):
- """
+ """
SpeczCatalog
Args:
Catalog (_type_): _description_
"""
-[docs] def plot(self, savefig=False):
- """
+[docs] def plot(self, savefig=False):
+ """
Very basic plots to characterize a Spec-z catalog.
Args:
@@ -161,15 +161,15 @@ Source code for pzserver.catalog
[docs]class TrainingSet(Catalog):
- """
+ """
TrainingSet
Args:
Catalog (_type_): _description_
"""
-[docs] def plot(self, mag_name=None, savefig=False):
- """Very basic plots to characterize a Training Set.
+[docs] def plot(self, mag_name=None, savefig=False):
+ """Very basic plots to characterize a Training Set.
Args:
savefig: option to save PNG figure (boolean)
diff --git a/docs/_modules/pzserver/communicate.html b/docs/_modules/pzserver/communicate.html
index 3285d32..a654544 100644
--- a/docs/_modules/pzserver/communicate.html
+++ b/docs/_modules/pzserver/communicate.html
@@ -3,7 +3,7 @@
- pzserver.communicate — pzserver 0.1.dev1+ga41731a documentation
+ pzserver.communicate — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -32,7 +32,7 @@
pzserver
- 0.1
+ 0.2
@@ -85,7 +85,7 @@ Source code for pzserver.communicate
[docs]class PzRequests:
- """
+ """
Responsible for managing all requests to the Pz Server app.
"""
@@ -105,7 +105,7 @@ Source code for pzserver.communicate
}
def __init__(self, token, host="pz"):
- """
+ """
Initializes communication with the Pz Server app.
Args:
@@ -123,7 +123,7 @@ Source code for pzserver.communicate
@staticmethod
[docs] def safe_list_get(_list, idx, default) -> list:
- """
+ """
Gets a value from a list if it exists. Otherwise returns the default.
Args:
@@ -141,7 +141,7 @@ Source code for pzserver.communicate
return default
[docs] def _check_filters(self, entity, filters):
- """
+ """
Checks if the filters are valid for an entity.
Args:
@@ -181,7 +181,7 @@ Source code for pzserver.communicate
)
[docs] def _reverse_filters(self, api_params) -> list:
- """
+ """
Reverts filter mapping
Args:
@@ -192,7 +192,7 @@ Source code for pzserver.communicate
"""
def check_filter(filter_name):
- """
+ """
Check filter name
Args:
@@ -210,7 +210,7 @@ Source code for pzserver.communicate
return list(set(map(check_filter, api_params)))
[docs] def _check_response(self, api_response) -> dict:
- """
+ """
Checks for possible HTTP errors in the response.
Args:
@@ -252,7 +252,7 @@ Source code for pzserver.communicate
cert=None,
proxies=None,
) -> dict:
- """
+ """
Sends PreparedRequest object.
Args:
@@ -333,7 +333,7 @@ Source code for pzserver.communicate
return data
[docs] def _get_request(self, url, params=None) -> dict:
- """
+ """
Get a record from the API.
Args:
@@ -359,7 +359,7 @@ Source code for pzserver.communicate
return self._send_request(req.prepare())
[docs] def _options_request(self, url) -> dict:
- """
+ """
Returns the options and settings for a given endpoint.
Args:
@@ -383,7 +383,7 @@ Source code for pzserver.communicate
return self._send_request(req.prepare())
[docs] def _check_token(self):
- """
+ """
Checks if the token is valid, otherwise stops class
initialization.
@@ -397,7 +397,7 @@ Source code for pzserver.communicate
raise requests.exceptions.RequestException(f"Status code {stcode}: {msg}")
[docs] def _download_request(self, url, save_in="."):
- """
+ """
Download a record from the API.
Args:
@@ -432,7 +432,7 @@ Source code for pzserver.communicate
return data
[docs] def _post_request(self, url, payload) -> dict:
- """
+ """
Posts a record to the API.
Args:
@@ -458,7 +458,7 @@ Source code for pzserver.communicate
return self._send_request(req.prepare())
[docs] def _delete_request(self, url) -> dict:
- """
+ """
Remove a record from the API.
Args:
@@ -495,7 +495,7 @@ Source code for pzserver.communicate
return resp
[docs] def get_entities(self) -> list:
- """
+ """
Gets all entities from the API.
Returns:
@@ -510,7 +510,7 @@ Source code for pzserver.communicate
return list(resp.keys())
[docs] def get_all(self, entity) -> list:
- """
+ """
Returns a list with all records of the entity.
Args:
@@ -528,7 +528,7 @@ Source code for pzserver.communicate
return resp.get("data").get("results")
[docs] def get(self, entity, _id) -> dict:
- """
+ """
Gets a record from the entity.
Args:
@@ -547,7 +547,7 @@ Source code for pzserver.communicate
return data.get("data")
[docs] def options(self, entity) -> dict:
- """
+ """
Gets options (filters, search and ordering) from the entity.
Args:
@@ -564,7 +564,7 @@ Source code for pzserver.communicate
return opt.get("data")
[docs] def download_main_file(self, _id, save_in="."):
- """
+ """
Gets the contents uploaded by the user for a given record.
Args:
@@ -580,7 +580,7 @@ Source code for pzserver.communicate
)
[docs] def get_main_file_info(self, _id, column_association=True) -> dict:
- """
+ """
Returns information about the main product file.
Args:
@@ -609,7 +609,7 @@ Source code for pzserver.communicate
return data
[docs] def download_product(self, _id, save_in="."):
- """
+ """
Downloads the product to local
Args:
@@ -625,7 +625,7 @@ Source code for pzserver.communicate
)
[docs] def get_products(self, filters=None, status=1) -> list:
- """
+ """
Returns list of products according to a filter
Args:
diff --git a/docs/_modules/pzserver/core.html b/docs/_modules/pzserver/core.html
index 18e1fc6..7a6097d 100644
--- a/docs/_modules/pzserver/core.html
+++ b/docs/_modules/pzserver/core.html
@@ -3,7 +3,7 @@
- pzserver.core — pzserver 0.1.dev1+ga41731a documentation
+ pzserver.core — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -32,7 +32,7 @@
pzserver
- 0.1
+ 0.2
@@ -98,12 +98,12 @@ Source code for pzserver.core
[docs]class PzServer:
- """
+ """
Responsible for managing user interactions with the Pz Server app.
"""
def __init__(self, token=None, host="pz"):
- """
+ """
PzServer class constructor
Args:
@@ -123,8 +123,8 @@ Source code for pzserver.core
self._token = token
# ---- methods to get general info ----#
-[docs] def get_product_types(self) -> list:
- """
+[docs] def get_product_types(self) -> list:
+ """
Fetches the list of valid product types.
Connects to the Photo-z Server's administrative
@@ -136,8 +136,8 @@ Source code for pzserver.core
"""
return self.api.get_all("product-types")
-[docs] def display_product_types(self):
- """
+[docs] def display_product_types(self):
+ """
Displays the list of product types as dataframe
Displays a pandas.io.formats.style.Styler object
@@ -152,8 +152,8 @@ Source code for pzserver.core
)
display(dataframe.style.hide(axis="index"))
-[docs] def get_users(self) -> list:
- """
+[docs] def get_users(self) -> list:
+ """
Fetches the list of registered users.
Connects to the Photo-z Server's administrative
@@ -165,8 +165,8 @@ Source code for pzserver.core
"""
return self.api.get_all("users")
-[docs] def display_users(self):
- """
+[docs] def display_users(self):
+ """
Displays the list of users as dataframe
Displays a pandas.io.formats.style.Styler object
@@ -180,8 +180,8 @@ Source code for pzserver.core
)
display(dataframe.style.hide(axis="index"))
-[docs] def get_releases(self) -> list:
- """
+[docs] def get_releases(self) -> list:
+ """
Fetches the list of valid data releases.
Connects to the Photo-z Server's administrative
@@ -195,8 +195,8 @@ Source code for pzserver.core
"""
return self.api.get_all("releases")
-[docs] def display_releases(self):
- """
+[docs] def display_releases(self):
+ """
Displays the list of data releases as dataframe
Displays a pandas.io.formats.style.Styler object
@@ -211,8 +211,8 @@ Source code for pzserver.core
)
display(dataframe.style.hide(axis="index"))
-[docs] def get_products_list(self, filters=None) -> list:
- """
+[docs] def get_products_list(self, filters=None) -> list:
+ """
Fetches the list of data products available.
Connects to the Photo-z Server's database and
@@ -229,8 +229,8 @@ Source code for pzserver.core
"""
return self.api.get_products(filters)
-[docs] def display_products_list(self, filters=None):
- """
+[docs] def display_products_list(self, filters=None):
+ """
Displays the list of data products as dataframe
Displays a pandas.io.formats.style.Styler object
@@ -272,8 +272,8 @@ Source code for pzserver.core
display(dataframe.style.hide(axis="index"))
# ---- methods to get data or metadata of one particular product ----#
-[docs] def get_product_metadata(self, product_id=None, mainfile_info=True) -> dict:
- """
+[docs] def get_product_metadata(self, product_id=None, mainfile_info=True) -> dict:
+ """
Fetches the product metadata.
Connects to the Photo-z Server's database and
@@ -309,8 +309,8 @@ Source code for pzserver.core
return metaprod
-[docs] def display_product_metadata(self, product_id=None, show=True):
- """
+[docs] def display_product_metadata(self, product_id=None, show=True):
+ """
Displays the metadata informed by the product owner.
Displays a pandas.io.formats.style.Styler object
@@ -357,8 +357,8 @@ Source code for pzserver.core
return dataframe
-[docs] def download_product(self, product_id=None, save_in="."):
- """
+[docs] def download_product(self, product_id=None, save_in="."):
+ """
Download the data to local.
Connects to the Photo-z Server's database and
@@ -384,8 +384,8 @@ Source code for pzserver.core
else:
print(f"{FONTCOLORERR}Error: {results_dict['message']}{FONTCOLORERR}")
-[docs] def get_product(self, product_id=None, fmt=None):
- """
+[docs] def get_product(self, product_id=None, fmt=None):
+ """
Fetches the data product contents to local.
Connects to the Photo-z Server's database and
@@ -466,8 +466,8 @@ Source code for pzserver.core
print("Done!")
return results
-[docs] def __transform_df(self, dataframe, metadata):
- """
+[docs] def __transform_df(self, dataframe, metadata):
+ """
Transforms the dataframe into an object corresponding to
its product type (currently we have two: Spec-z Catalog or
Training Set) or returns the dataframe.
@@ -489,8 +489,8 @@ Source code for pzserver.core
return results
# ---- Training Set Maker methods ----#
-[docs] def combine_specz_catalogs(self, catalog_list, duplicates_critera="smallest flag"):
- """_summary_
+[docs] def combine_specz_catalogs(self, catalog_list, duplicates_critera="smallest flag"):
+ """_summary_
Args:
catalog_list (_type_): _description_
@@ -505,14 +505,14 @@ Source code for pzserver.core
# return SpeczCatalog object
raise NotImplementedError
-[docs] def make_training_set(
+[docs] def make_training_set(
self,
specz_catalog=None,
photo_catalog=None,
search_radius=1.0,
multiple_match_criteria="select closest",
):
- """_summary_
+ """_summary_
Args:
specz_catalog (_type_, optional): _description_. Defaults to None.
diff --git a/docs/_sources/autoapi/pzserver/catalog/index.rst.txt b/docs/_sources/autoapi/pzserver/catalog/index.rst.txt
index c2a4c82..a67220b 100644
--- a/docs/_sources/autoapi/pzserver/catalog/index.rst.txt
+++ b/docs/_sources/autoapi/pzserver/catalog/index.rst.txt
@@ -26,6 +26,7 @@ Classes
.. py:class:: Catalog(data=None, metadata=None, metadata_df=None)
+
Main class for loading catalog
.. py:method:: display_metadata()
@@ -41,6 +42,7 @@ Classes
.. py:class:: SpeczCatalog(data=None, metadata=None, metadata_df=None)
+
Bases: :py:obj:`Catalog`
SpeczCatalog
@@ -58,6 +60,7 @@ Classes
.. py:class:: TrainingSet(data=None, metadata=None, metadata_df=None)
+
Bases: :py:obj:`Catalog`
TrainingSet
diff --git a/docs/_sources/autoapi/pzserver/communicate/index.rst.txt b/docs/_sources/autoapi/pzserver/communicate/index.rst.txt
index e91f751..f8e424d 100644
--- a/docs/_sources/autoapi/pzserver/communicate/index.rst.txt
+++ b/docs/_sources/autoapi/pzserver/communicate/index.rst.txt
@@ -24,6 +24,7 @@ Classes
.. py:class:: PzRequests(token, host='pz')
+
Responsible for managing all requests to the Pz Server app.
.. py:attribute:: _token
diff --git a/docs/_sources/autoapi/pzserver/core/index.rst.txt b/docs/_sources/autoapi/pzserver/core/index.rst.txt
index 048b175..de9c6e8 100644
--- a/docs/_sources/autoapi/pzserver/core/index.rst.txt
+++ b/docs/_sources/autoapi/pzserver/core/index.rst.txt
@@ -43,6 +43,7 @@ Attributes
.. py:class:: PzServer(token=None, host='pz')
+
Responsible for managing user interactions with the Pz Server app.
.. py:method:: get_product_types() -> list
diff --git a/docs/_sources/autoapi/pzserver/index.rst.txt b/docs/_sources/autoapi/pzserver/index.rst.txt
index 0cc14d0..36a9464 100644
--- a/docs/_sources/autoapi/pzserver/index.rst.txt
+++ b/docs/_sources/autoapi/pzserver/index.rst.txt
@@ -41,6 +41,7 @@ Classes
.. py:class:: Catalog(data=None, metadata=None, metadata_df=None)
+
Main class for loading catalog
.. py:method:: display_metadata()
@@ -56,6 +57,7 @@ Classes
.. py:class:: SpeczCatalog(data=None, metadata=None, metadata_df=None)
+
Bases: :py:obj:`Catalog`
SpeczCatalog
@@ -73,6 +75,7 @@ Classes
.. py:class:: TrainingSet(data=None, metadata=None, metadata_df=None)
+
Bases: :py:obj:`Catalog`
TrainingSet
@@ -90,6 +93,7 @@ Classes
.. py:class:: PzServer(token=None, host='pz')
+
Responsible for managing user interactions with the Pz Server app.
.. py:method:: get_product_types() -> list
diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt
index 873e1ee..98ecea7 100644
--- a/docs/_sources/index.rst.txt
+++ b/docs/_sources/index.rst.txt
@@ -15,7 +15,7 @@ The Photo-z Server Library is a Python package to support the Photo-z Server use
Home page
Install
API Reference
- Notebooks
+ Notebooks
Indices and tables
diff --git a/docs/_sources/nbs.rst.txt b/docs/_sources/nbs.rst.txt
new file mode 100644
index 0000000..b8cbff3
--- /dev/null
+++ b/docs/_sources/nbs.rst.txt
@@ -0,0 +1,6 @@
+Notebooks
+========================================================================================
+
+.. toctree::
+
+ Introducing Pz Server lib
diff --git a/docs/_sources/notebooks/intro_notebook.ipynb.txt b/docs/_sources/notebooks/intro_notebook.ipynb.txt
index 5ef13e6..660cbe7 100644
--- a/docs/_sources/notebooks/intro_notebook.ipynb.txt
+++ b/docs/_sources/notebooks/intro_notebook.ipynb.txt
@@ -1,6 +1,7 @@
{
"cells": [
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -15,42 +16,49 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
- "\n",
- "#### Notebook contents\n",
+ "\n",
+ "\n",
+ "# Notebook contents\n",
+ "\n",
"- PZ Server\n",
- " - [Introduction](#intro) \n",
- " - [How to upload a data product to the PZ Server](#upload)\n",
- " - [How to download a data product from the PZ Server](#download)\n",
+ " - [Introduction](#introduction) \n",
+ " - [How to upload a data product to the PZ Server](#how-to-upload-a-data-product-to-the-pz-server)\n",
+ " - [How to download a data product from the PZ Server](#how-to-download-a-data-product-from-the-pz-server)\n",
"- PZ Server API (Python library pz-server-lib)\n",
- " - [How to get general info from PZ Server](#general)\n",
- " - [How to display the metadata of a data product](#metadata)\n",
- " - [How to download data products as .zip files](#download-zip) \n",
- " - [How to share data products with other RSP users](#share)\n",
- " - [How to retrieve contents of data products (work on memory)](#retrieve-contents)\n",
+ " - [How to get general info from PZ Server](#how-to-get-general-info-from-pz-server)\n",
+ " - [How to display the metadata of a data product](#how-to-display-the-metadata-of-a-data-product)\n",
+ " - [How to download data products as .zip files](#how-to-download-data-products-as-zip-files) \n",
+ " - [How to share data products with other RSP users](#how-to-share-data-products-with-other-rsp-users)\n",
+ " - [How to retrieve contents of data products (work on memory)](#how-to-retrieve-contents-of-data-products-work-on-memory)\n",
"- Product types \n",
- " - [Spec-z Catalogs](#spec)\n",
- " - [Training Sets](#train)\n",
- " - [Photo-z Validation Results](#valid)\n",
- " - [Photo-z Tables](#pz_tables)"
+ " - [Spec-z Catalogs](#spec-z-catalog)\n",
+ " - [Training Sets](#training-sets)\n",
+ " - [Photo-z Validation Results](#photo-z-validation-results)\n",
+ " - [Photo-z Tables](#photo-z-tables)"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
- "\n",
"# The PZ Server\n",
+ "\n",
+ "\n",
+ "\n",
"## Introduction \n"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"tags": []
@@ -62,12 +70,17 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
- "## How to upload a data product to the PZ Server\n",
- " \n",
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "## How to upload a data product to the PZ Server \n",
"\n",
"To upload a data product, click on the button **NEW PRODUCT** on the top left of the **User-generated Data Products** page and fill in the Upload Form with relevant metadata.\n",
"\n",
@@ -80,25 +93,37 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
"## How to download a data product from the PZ Server\n",
- " \n",
"\n",
"To download a data product available on the Photo-z Server, go to one of the two pages by clicking on the card \"LSST PZ Data Products\" (for official products released by LSST DM Team) or \"User-generated Data Products\" (for products uploaded by the members of LSST community. The download button is on the left side of each data product (each row of the list). "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "# The PZ Server API (Python library pz-server-lib)\n",
- " "
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "# The PZ Server API (Python library pz-server-lib)"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -106,7 +131,7 @@
"\n",
"**Using pip**\n",
"\n",
- "The PZ Server API is avalialble on **pip** as `pz-server-lib`. To install the API and its dependencies, type, on the Terminal: \n",
+ "The PZ Server API is avalialble on **pip** as `pzserver`. To install the API and its dependencies, type, on the Terminal: \n",
"\n",
"```\n",
"$ pip install pzserver \n",
@@ -128,10 +153,11 @@
"```\n",
"\n",
"\n",
- "OBS: You might need to restart the kernel on the notebook to incorporate the new library. \n"
+ "OBS: You might need to restart the kernel on the notebook to incorporate the new library.\n"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -140,7 +166,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -151,6 +177,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -158,6 +185,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -170,19 +198,25 @@
"metadata": {},
"outputs": [],
"source": [
- "pz_server = PzServer(token=\"\", host=\"pz-dev\") # \"pz-dev\" is the temporary host for test phase "
+ "pz_server = PzServer(token=\"\", host=\"pz-dev\") # \"pz-dev\" is the temporary host for test phase "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
- "## How to get general info from PZ Server\n",
- " "
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "## How to get general info from PZ Server"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -193,14 +227,55 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " Product type \n",
+ " Description \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Spec-z Catalog \n",
+ " Catalog of spectroscopic redshifts and positions (usually equatorial coordinates). \n",
+ " \n",
+ " \n",
+ " Training Set \n",
+ " Training set for photo-z algorithms (tabular data). It usually contains magnitudes, errors, and true redshifts. \n",
+ " \n",
+ " \n",
+ " Validation Results \n",
+ " Results of a photo-z validation procedure (free format). Usually contains photo-z estimates (single estimates and/or pdf) of a validation set and photo-z validation metrics. \n",
+ " \n",
+ " \n",
+ " Photo-z Table \n",
+ " Results of a photo-z estimation procedure. If the data is larger than the file upload limit (200MB), the product entry stores only the metadata (instructions on accessing the data should be provided in the description field. \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_product_types()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -209,14 +284,63 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " GitHub username \n",
+ " name \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " crisingulani \n",
+ " Cristiano Singulani \n",
+ " \n",
+ " \n",
+ " drewoldag \n",
+ " Drew Oldag \n",
+ " \n",
+ " \n",
+ " glaubervila \n",
+ " Glauber Costa Vila-Verde \n",
+ " \n",
+ " \n",
+ " gschwend \n",
+ " Julia Gschwend \n",
+ " \n",
+ " \n",
+ " gverde \n",
+ " \n",
+ " \n",
+ " \n",
+ " singulani \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_users()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -225,14 +349,43 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " Release \n",
+ " Description \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " LSST DP0 \n",
+ " LSST Data Preview 0 \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_releases()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -243,16 +396,171 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"tags": []
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " id \n",
+ " internal_name \n",
+ " product_name \n",
+ " product_type \n",
+ " release \n",
+ " uploaded_by \n",
+ " official_product \n",
+ " pz_code \n",
+ " description \n",
+ " created_at \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 14 \n",
+ " 14_gama_specz_subsample \n",
+ " GAMA spec-z subsample \n",
+ " Spec-z Catalog \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A small subsample of the GAMA DR3 spec-z catalog (Baldry et al. 2018) as an example of a typical spec-z catalog from the literature. \n",
+ " 2023-03-29T20:02:45.223568Z \n",
+ " \n",
+ " \n",
+ " 13 \n",
+ " 13_vvds_specz_subsample \n",
+ " VVDS spec-z subsample \n",
+ " Spec-z Catalog \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A small subsample of the VVDS spec-z catalog (Le Fèvre et al. 2004, Garilli et al. 2008) as an example of a typical spec-z catalog from the literature. \n",
+ " 2023-03-29T19:50:27.593735Z \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " 12_goldenspike_knn \n",
+ " Goldenspike KNN \n",
+ " Validation Results \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " KNN \n",
+ " Results of photoz validation using KNN on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " 2023-03-29T19:49:35.652295Z \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " 11_goldenspike_flexzboost \n",
+ " Goldenspike FlexZBoost \n",
+ " Validation Results \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " FlexZBoost \n",
+ " Results of photoz validation using FlexZBoost on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " 2023-03-29T19:48:34.864629Z \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " 10_goldenspike_bpz \n",
+ " Goldenspike BPZ \n",
+ " Validation Results \n",
+ " LSST DP0 \n",
+ " gschwend \n",
+ " False \n",
+ " BPZ \n",
+ " Results of photoz validation using BPZ on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " 2023-03-29T19:42:04.424990Z \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " 9_goldenspike_train_data_hdf5 \n",
+ " Goldenspike train data hdf5 \n",
+ " Training Set \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. \r\n",
+ "Test upload of files in hdf5 format. \n",
+ " 2023-03-29T19:12:59.746096Z \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " 8_goldenspike_train_data_fits \n",
+ " Goldenspike train data fits \n",
+ " Training Set \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. \r\n",
+ "Test upload of files in fits format. \n",
+ " 2023-03-29T19:09:12.958883Z \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " 7_goldenspike_train_data_parquet \n",
+ " Goldenspike train data parquet \n",
+ " Training Set \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. Test upload of files in parquet format. \n",
+ " 2023-03-29T19:06:58.473920Z \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " 6_simple_training_set \n",
+ " Simple training set \n",
+ " Training Set \n",
+ " LSST DP0 \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A simple example training set created based on the Jupyter notebook simple_pz_training_set.ipynb created by Melissa Graham, available in the repository delegate-contributions-dp02. The file contains coordinates, redshifts, magnitudes, and errors, as an illustration of a typical training set for photo-z algorithms. \n",
+ " 2023-03-23T19:46:48.807872Z \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1_simple_true_z_catalog \n",
+ " Simple true z catalog \n",
+ " Spec-z Catalog \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A simple example of a spectroscopic (true) redshifts catalog created based on the Jupyter notebook simple_pz_training_set.ipynb created by Melissa Graham, available in the repository delegate-contributions-dp02. The file contains only coordinates and redshifts, as an illustration of a typical spec-z catalog. \n",
+ " 2023-03-23T13:19:32.050795Z \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_products_list() "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -261,15 +569,60 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " id \n",
+ " internal_name \n",
+ " product_name \n",
+ " product_type \n",
+ " release \n",
+ " uploaded_by \n",
+ " official_product \n",
+ " pz_code \n",
+ " description \n",
+ " created_at \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " 6_simple_training_set \n",
+ " Simple training set \n",
+ " Training Set \n",
+ " LSST DP0 \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A simple example training set created based on the Jupyter notebook simple_pz_training_set.ipynb created by Melissa Graham, available in the repository delegate-contributions-dp02. The file contains coordinates, redshifts, magnitudes, and errors, as an illustration of a typical training set for photo-z algorithms. \n",
+ " 2023-03-23T19:46:48.807872Z \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_products_list(filters={\"release\": \"LSST DP0\", \n",
" \"product_type\": \"Training Set\"})"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -278,14 +631,71 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " id \n",
+ " internal_name \n",
+ " product_name \n",
+ " product_type \n",
+ " release \n",
+ " uploaded_by \n",
+ " official_product \n",
+ " pz_code \n",
+ " description \n",
+ " created_at \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " 10_goldenspike_bpz \n",
+ " Goldenspike BPZ \n",
+ " Validation Results \n",
+ " LSST DP0 \n",
+ " gschwend \n",
+ " False \n",
+ " BPZ \n",
+ " Results of photoz validation using BPZ on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " 2023-03-29T19:42:04.424990Z \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " 6_simple_training_set \n",
+ " Simple training set \n",
+ " Training Set \n",
+ " LSST DP0 \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A simple example training set created based on the Jupyter notebook simple_pz_training_set.ipynb created by Melissa Graham, available in the repository delegate-contributions-dp02. The file contains coordinates, redshifts, magnitudes, and errors, as an illustration of a typical training set for photo-z algorithms. \n",
+ " 2023-03-23T19:46:48.807872Z \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_products_list(filters={\"release\": \"DP0\"})"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -294,16 +704,135 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"tags": []
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " id \n",
+ " internal_name \n",
+ " product_name \n",
+ " product_type \n",
+ " release \n",
+ " uploaded_by \n",
+ " official_product \n",
+ " pz_code \n",
+ " description \n",
+ " created_at \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 14 \n",
+ " 14_gama_specz_subsample \n",
+ " GAMA spec-z subsample \n",
+ " Spec-z Catalog \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A small subsample of the GAMA DR3 spec-z catalog (Baldry et al. 2018) as an example of a typical spec-z catalog from the literature. \n",
+ " 2023-03-29T20:02:45.223568Z \n",
+ " \n",
+ " \n",
+ " 13 \n",
+ " 13_vvds_specz_subsample \n",
+ " VVDS spec-z subsample \n",
+ " Spec-z Catalog \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A small subsample of the VVDS spec-z catalog (Le Fèvre et al. 2004, Garilli et al. 2008) as an example of a typical spec-z catalog from the literature. \n",
+ " 2023-03-29T19:50:27.593735Z \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " 9_goldenspike_train_data_hdf5 \n",
+ " Goldenspike train data hdf5 \n",
+ " Training Set \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. \r\n",
+ "Test upload of files in hdf5 format. \n",
+ " 2023-03-29T19:12:59.746096Z \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " 8_goldenspike_train_data_fits \n",
+ " Goldenspike train data fits \n",
+ " Training Set \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. \r\n",
+ "Test upload of files in fits format. \n",
+ " 2023-03-29T19:09:12.958883Z \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " 7_goldenspike_train_data_parquet \n",
+ " Goldenspike train data parquet \n",
+ " Training Set \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. Test upload of files in parquet format. \n",
+ " 2023-03-29T19:06:58.473920Z \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " 6_simple_training_set \n",
+ " Simple training set \n",
+ " Training Set \n",
+ " LSST DP0 \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A simple example training set created based on the Jupyter notebook simple_pz_training_set.ipynb created by Melissa Graham, available in the repository delegate-contributions-dp02. The file contains coordinates, redshifts, magnitudes, and errors, as an illustration of a typical training set for photo-z algorithms. \n",
+ " 2023-03-23T19:46:48.807872Z \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1_simple_true_z_catalog \n",
+ " Simple true z catalog \n",
+ " Spec-z Catalog \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " \n",
+ " A simple example of a spectroscopic (true) redshifts catalog created based on the Jupyter notebook simple_pz_training_set.ipynb created by Melissa Graham, available in the repository delegate-contributions-dp02. The file contains only coordinates and redshifts, as an illustration of a typical spec-z catalog. \n",
+ " 2023-03-23T13:19:32.050795Z \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_products_list(filters={\"product_type__or\": [\"Spec-z Catalog\", \"training set\"]})"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -312,26 +841,84 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {
"tags": []
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[{'id': 12,\n",
+ " 'release': None,\n",
+ " 'release_name': None,\n",
+ " 'product_type': 3,\n",
+ " 'product_type_name': 'Validation Results',\n",
+ " 'uploaded_by': 'gschwend',\n",
+ " 'is_owner': False,\n",
+ " 'internal_name': '12_goldenspike_knn',\n",
+ " 'display_name': 'Goldenspike KNN',\n",
+ " 'official_product': False,\n",
+ " 'pz_code': 'KNN',\n",
+ " 'description': \"Results of photoz validation using KNN on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository.\",\n",
+ " 'created_at': '2023-03-29T19:49:35.652295Z',\n",
+ " 'status': 1},\n",
+ " {'id': 11,\n",
+ " 'release': None,\n",
+ " 'release_name': None,\n",
+ " 'product_type': 3,\n",
+ " 'product_type_name': 'Validation Results',\n",
+ " 'uploaded_by': 'gschwend',\n",
+ " 'is_owner': False,\n",
+ " 'internal_name': '11_goldenspike_flexzboost',\n",
+ " 'display_name': 'Goldenspike FlexZBoost',\n",
+ " 'official_product': False,\n",
+ " 'pz_code': 'FlexZBoost',\n",
+ " 'description': \"Results of photoz validation using FlexZBoost on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository.\",\n",
+ " 'created_at': '2023-03-29T19:48:34.864629Z',\n",
+ " 'status': 1},\n",
+ " {'id': 10,\n",
+ " 'release': 1,\n",
+ " 'release_name': 'LSST DP0',\n",
+ " 'product_type': 3,\n",
+ " 'product_type_name': 'Validation Results',\n",
+ " 'uploaded_by': 'gschwend',\n",
+ " 'is_owner': False,\n",
+ " 'internal_name': '10_goldenspike_bpz',\n",
+ " 'display_name': 'Goldenspike BPZ',\n",
+ " 'official_product': False,\n",
+ " 'pz_code': 'BPZ',\n",
+ " 'description': \"Results of photoz validation using BPZ on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository.\",\n",
+ " 'created_at': '2023-03-29T19:42:04.424990Z',\n",
+ " 'status': 1}]"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"search_results = pz_server.get_products_list(filters={\"product_type\": \"results\"}) # PZ Validation results\n",
"search_results"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
- "## How to display the metadata of a data product\n",
- " "
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "## How to display the metadata of a data product "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -341,6 +928,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -349,9 +937,77 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " key \n",
+ " value \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " release \n",
+ " LSST DP0 \n",
+ " \n",
+ " \n",
+ " product_type \n",
+ " Training Set \n",
+ " \n",
+ " \n",
+ " uploaded_by \n",
+ " gschwend \n",
+ " \n",
+ " \n",
+ " internal_name \n",
+ " 6_simple_training_set \n",
+ " \n",
+ " \n",
+ " product_name \n",
+ " Simple training set \n",
+ " \n",
+ " \n",
+ " official_product \n",
+ " False \n",
+ " \n",
+ " \n",
+ " pz_code \n",
+ " \n",
+ " \n",
+ " \n",
+ " description \n",
+ " A simple example training set created based on the Jupyter notebook simple_pz_training_set.ipynb created by Melissa Graham, available in the repository delegate-contributions-dp02. The file contains coordinates, redshifts, magnitudes, and errors, as an illustration of a typical training set for photo-z algorithms. \n",
+ " \n",
+ " \n",
+ " created_at \n",
+ " 2023-03-23T19:46:48.807872Z \n",
+ " \n",
+ " \n",
+ " main_file \n",
+ " simple_pz_training_set.csv \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"# pz_server.display_product_metadata() \n",
"# pz_server.display_product_metadata(6) \n",
@@ -360,15 +1016,21 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
- "## How to download data products as .zip files\n",
- " "
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "## How to download data products as .zip files "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -377,20 +1039,35 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Connecting to PZ Server...\n",
+ "File saved as: ./14_gama_specz_subsample_f15c0.zip\n",
+ "Done!\n"
+ ]
+ }
+ ],
"source": [
"pz_server.download_product(14, save_in=\".\")"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
+ " \n",
+ "\n",
"## How to share data products with other RSP users\n",
- " \n",
"\n",
"All data products uploaded to the PZ Server are imediately available and visible to all PZ Server users (people with RSP credentials) through the PZ Server website or via the API. Besides informing the product **id** or **internal_name** for programatic access, another way to share a data product is providing the product's URL, which leads to the product's download page. The URL is composed by the PZ Server website address + **/products/** + **internal_name**:\n",
"\n",
@@ -409,15 +1086,21 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
- "## How to retrieve contents of data products (work on memory)\n",
- " "
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "## How to retrieve contents of data products (work on memory)"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -428,9 +1111,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Connecting to PZ Server...\n",
+ "Done!\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"catalog = pz_server.get_product(8)\n",
"catalog"
@@ -438,14 +1140,84 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " key \n",
+ " value \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " 8 \n",
+ " \n",
+ " \n",
+ " release \n",
+ " None \n",
+ " \n",
+ " \n",
+ " product_type \n",
+ " Training Set \n",
+ " \n",
+ " \n",
+ " uploaded_by \n",
+ " gschwend \n",
+ " \n",
+ " \n",
+ " internal_name \n",
+ " 8_goldenspike_train_data_fits \n",
+ " \n",
+ " \n",
+ " product_name \n",
+ " Goldenspike train data fits \n",
+ " \n",
+ " \n",
+ " official_product \n",
+ " False \n",
+ " \n",
+ " \n",
+ " pz_code \n",
+ " \n",
+ " \n",
+ " \n",
+ " description \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. \r\n",
+ "Test upload of files in fits format. \n",
+ " \n",
+ " \n",
+ " created_at \n",
+ " 2023-03-29T19:09:12.958883Z \n",
+ " \n",
+ " \n",
+ " main_file \n",
+ " goldenspike_train_data.fits \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"catalog.display_metadata()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -454,23 +1226,225 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " redshift \n",
+ " mag_u_lsst \n",
+ " mag_err_u_lsst \n",
+ " mag_g_lsst \n",
+ " mag_err_g_lsst \n",
+ " mag_r_lsst \n",
+ " mag_err_r_lsst \n",
+ " mag_i_lsst \n",
+ " mag_err_i_lsst \n",
+ " mag_z_lsst \n",
+ " mag_err_z_lsst \n",
+ " mag_y_lsst \n",
+ " mag_err_y_lsst \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 0.769521 \n",
+ " 26.496852 \n",
+ " 0.288986 \n",
+ " 25.863170 \n",
+ " 0.056997 \n",
+ " 24.729555 \n",
+ " 0.020702 \n",
+ " 23.610683 \n",
+ " 0.012011 \n",
+ " 23.143518 \n",
+ " 0.013714 \n",
+ " 22.915156 \n",
+ " 0.024561 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1.088857 \n",
+ " 26.258727 \n",
+ " 0.237964 \n",
+ " 25.509524 \n",
+ " 0.041668 \n",
+ " 24.469344 \n",
+ " 0.016648 \n",
+ " 23.532860 \n",
+ " 0.011344 \n",
+ " 22.546680 \n",
+ " 0.008992 \n",
+ " 22.070255 \n",
+ " 0.012282 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 1.333098 \n",
+ " 25.373855 \n",
+ " 0.112257 \n",
+ " 24.943293 \n",
+ " 0.025359 \n",
+ " 24.524998 \n",
+ " 0.017431 \n",
+ " 24.013649 \n",
+ " 0.016486 \n",
+ " 23.733274 \n",
+ " 0.022315 \n",
+ " 23.102123 \n",
+ " 0.028906 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 59 \n",
+ " 0.986374 \n",
+ " 26.050653 \n",
+ " 0.200164 \n",
+ " 25.641624 \n",
+ " 0.046837 \n",
+ " 25.161078 \n",
+ " 0.030090 \n",
+ " 24.460152 \n",
+ " 0.024047 \n",
+ " 23.977239 \n",
+ " 0.027567 \n",
+ " 23.831974 \n",
+ " 0.055121 \n",
+ " \n",
+ " \n",
+ " 60 \n",
+ " 0.474281 \n",
+ " 27.048056 \n",
+ " 0.444683 \n",
+ " 26.428211 \n",
+ " 0.093854 \n",
+ " 24.839984 \n",
+ " 0.022755 \n",
+ " 24.209226 \n",
+ " 0.019403 \n",
+ " 23.855082 \n",
+ " 0.024787 \n",
+ " 23.507456 \n",
+ " 0.041329 \n",
+ " \n",
+ " \n",
+ " 61 \n",
+ " 0.561923 \n",
+ " 24.680480 \n",
+ " 0.061182 \n",
+ " 23.958609 \n",
+ " 0.011430 \n",
+ " 22.900135 \n",
+ " 0.006346 \n",
+ " 22.143581 \n",
+ " 0.005820 \n",
+ " 21.867563 \n",
+ " 0.006465 \n",
+ " 21.612692 \n",
+ " 0.008967 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "62 rows × 13 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " redshift mag_u_lsst mag_err_u_lsst mag_g_lsst mag_err_g_lsst \n",
+ "0 0.769521 26.496852 0.288986 25.863170 0.056997 \\\n",
+ "1 1.088857 26.258727 0.237964 25.509524 0.041668 \n",
+ "2 1.333098 25.373855 0.112257 24.943293 0.025359 \n",
+ ".. ... ... ... ... ... \n",
+ "59 0.986374 26.050653 0.200164 25.641624 0.046837 \n",
+ "60 0.474281 27.048056 0.444683 26.428211 0.093854 \n",
+ "61 0.561923 24.680480 0.061182 23.958609 0.011430 \n",
+ "\n",
+ " mag_r_lsst mag_err_r_lsst mag_i_lsst mag_err_i_lsst mag_z_lsst \n",
+ "0 24.729555 0.020702 23.610683 0.012011 23.143518 \\\n",
+ "1 24.469344 0.016648 23.532860 0.011344 22.546680 \n",
+ "2 24.524998 0.017431 24.013649 0.016486 23.733274 \n",
+ ".. ... ... ... ... ... \n",
+ "59 25.161078 0.030090 24.460152 0.024047 23.977239 \n",
+ "60 24.839984 0.022755 24.209226 0.019403 23.855082 \n",
+ "61 22.900135 0.006346 22.143581 0.005820 21.867563 \n",
+ "\n",
+ " mag_err_z_lsst mag_y_lsst mag_err_y_lsst \n",
+ "0 0.013714 22.915156 0.024561 \n",
+ "1 0.008992 22.070255 0.012282 \n",
+ "2 0.022315 23.102123 0.028906 \n",
+ ".. ... ... ... \n",
+ "59 0.027567 23.831974 0.055121 \n",
+ "60 0.024787 23.507456 0.041329 \n",
+ "61 0.006465 21.612692 0.008967 \n",
+ "\n",
+ "[62 rows x 13 columns]"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"catalog.data"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "pandas.core.frame.DataFrame"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"type(catalog.data)"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -479,23 +1453,241 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 62 entries, 0 to 61\n",
+ "Data columns (total 13 columns):\n",
+ " # Column Non-Null Count Dtype\n",
+ "--- ------ -------------- -----\n",
+ " 0 redshift 62 non-null >f8 \n",
+ " 1 mag_u_lsst 61 non-null >f8 \n",
+ " 2 mag_err_u_lsst 61 non-null >f8 \n",
+ " 3 mag_g_lsst 62 non-null >f8 \n",
+ " 4 mag_err_g_lsst 62 non-null >f8 \n",
+ " 5 mag_r_lsst 62 non-null >f8 \n",
+ " 6 mag_err_r_lsst 62 non-null >f8 \n",
+ " 7 mag_i_lsst 62 non-null >f8 \n",
+ " 8 mag_err_i_lsst 62 non-null >f8 \n",
+ " 9 mag_z_lsst 62 non-null >f8 \n",
+ " 10 mag_err_z_lsst 62 non-null >f8 \n",
+ " 11 mag_y_lsst 61 non-null >f8 \n",
+ " 12 mag_err_y_lsst 61 non-null >f8 \n",
+ "dtypes: float64(13)\n",
+ "memory usage: 6.4 KB\n"
+ ]
+ }
+ ],
"source": [
"catalog.data.info()"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " redshift \n",
+ " mag_u_lsst \n",
+ " mag_err_u_lsst \n",
+ " mag_g_lsst \n",
+ " mag_err_g_lsst \n",
+ " mag_r_lsst \n",
+ " mag_err_r_lsst \n",
+ " mag_i_lsst \n",
+ " mag_err_i_lsst \n",
+ " mag_z_lsst \n",
+ " mag_err_z_lsst \n",
+ " mag_y_lsst \n",
+ " mag_err_y_lsst \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 62.000000 \n",
+ " 61.000000 \n",
+ " 61.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 61.000000 \n",
+ " 61.000000 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " 0.780298 \n",
+ " 25.446008 \n",
+ " 0.188050 \n",
+ " 24.820000 \n",
+ " 0.038182 \n",
+ " 24.003970 \n",
+ " 0.018770 \n",
+ " 23.384804 \n",
+ " 0.016165 \n",
+ " 23.074481 \n",
+ " 0.021478 \n",
+ " 22.932354 \n",
+ " 0.054682 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 0.355365 \n",
+ " 1.269277 \n",
+ " 0.193747 \n",
+ " 1.314112 \n",
+ " 0.036398 \n",
+ " 1.387358 \n",
+ " 0.013750 \n",
+ " 1.381587 \n",
+ " 0.010069 \n",
+ " 1.400673 \n",
+ " 0.014961 \n",
+ " 1.540284 \n",
+ " 0.115875 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " 0.764600 \n",
+ " 25.577029 \n",
+ " 0.133815 \n",
+ " 25.069970 \n",
+ " 0.028309 \n",
+ " 24.470215 \n",
+ " 0.016660 \n",
+ " 23.748506 \n",
+ " 0.013390 \n",
+ " 23.514185 \n",
+ " 0.018540 \n",
+ " 23.293384 \n",
+ " 0.034199 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " 0.948494 \n",
+ " 26.263284 \n",
+ " 0.238859 \n",
+ " 25.705486 \n",
+ " 0.049576 \n",
+ " 24.985225 \n",
+ " 0.025802 \n",
+ " 24.488654 \n",
+ " 0.024650 \n",
+ " 24.165944 \n",
+ " 0.032557 \n",
+ " 23.993010 \n",
+ " 0.063585 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " 1.755764 \n",
+ " 28.482391 \n",
+ " 1.154073 \n",
+ " 27.296152 \n",
+ " 0.198195 \n",
+ " 26.036958 \n",
+ " 0.065360 \n",
+ " 24.949645 \n",
+ " 0.036932 \n",
+ " 24.693132 \n",
+ " 0.051883 \n",
+ " 27.342151 \n",
+ " 0.909230 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "8 rows × 13 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " redshift mag_u_lsst mag_err_u_lsst mag_g_lsst mag_err_g_lsst \n",
+ "count 62.000000 61.000000 61.000000 62.000000 62.000000 \\\n",
+ "mean 0.780298 25.446008 0.188050 24.820000 0.038182 \n",
+ "std 0.355365 1.269277 0.193747 1.314112 0.036398 \n",
+ "... ... ... ... ... ... \n",
+ "50% 0.764600 25.577029 0.133815 25.069970 0.028309 \n",
+ "75% 0.948494 26.263284 0.238859 25.705486 0.049576 \n",
+ "max 1.755764 28.482391 1.154073 27.296152 0.198195 \n",
+ "\n",
+ " mag_r_lsst mag_err_r_lsst mag_i_lsst mag_err_i_lsst mag_z_lsst \n",
+ "count 62.000000 62.000000 62.000000 62.000000 62.000000 \\\n",
+ "mean 24.003970 0.018770 23.384804 0.016165 23.074481 \n",
+ "std 1.387358 0.013750 1.381587 0.010069 1.400673 \n",
+ "... ... ... ... ... ... \n",
+ "50% 24.470215 0.016660 23.748506 0.013390 23.514185 \n",
+ "75% 24.985225 0.025802 24.488654 0.024650 24.165944 \n",
+ "max 26.036958 0.065360 24.949645 0.036932 24.693132 \n",
+ "\n",
+ " mag_err_z_lsst mag_y_lsst mag_err_y_lsst \n",
+ "count 62.000000 61.000000 61.000000 \n",
+ "mean 0.021478 22.932354 0.054682 \n",
+ "std 0.014961 1.540284 0.115875 \n",
+ "... ... ... ... \n",
+ "50% 0.018540 23.293384 0.034199 \n",
+ "75% 0.032557 23.993010 0.063585 \n",
+ "max 0.051883 27.342151 0.909230 \n",
+ "\n",
+ "[8 rows x 13 columns]"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"catalog.data.describe()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -504,9 +1696,207 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Connecting to PZ Server...\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " redshift \n",
+ " mag_u_lsst \n",
+ " mag_err_u_lsst \n",
+ " mag_g_lsst \n",
+ " mag_err_g_lsst \n",
+ " mag_r_lsst \n",
+ " mag_err_r_lsst \n",
+ " mag_i_lsst \n",
+ " mag_err_i_lsst \n",
+ " mag_z_lsst \n",
+ " mag_err_z_lsst \n",
+ " mag_y_lsst \n",
+ " mag_err_y_lsst \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 0.769521 \n",
+ " 26.496852 \n",
+ " 0.288986 \n",
+ " 25.863170 \n",
+ " 0.056997 \n",
+ " 24.729555 \n",
+ " 0.020702 \n",
+ " 23.610683 \n",
+ " 0.012011 \n",
+ " 23.143518 \n",
+ " 0.013714 \n",
+ " 22.915156 \n",
+ " 0.024561 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1.088857 \n",
+ " 26.258727 \n",
+ " 0.237964 \n",
+ " 25.509524 \n",
+ " 0.041668 \n",
+ " 24.469344 \n",
+ " 0.016648 \n",
+ " 23.532860 \n",
+ " 0.011344 \n",
+ " 22.546680 \n",
+ " 0.008992 \n",
+ " 22.070255 \n",
+ " 0.012282 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 1.333098 \n",
+ " 25.373855 \n",
+ " 0.112257 \n",
+ " 24.943293 \n",
+ " 0.025359 \n",
+ " 24.524998 \n",
+ " 0.017431 \n",
+ " 24.013649 \n",
+ " 0.016486 \n",
+ " 23.733274 \n",
+ " 0.022315 \n",
+ " 23.102123 \n",
+ " 0.028906 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 59 \n",
+ " 0.986374 \n",
+ " 26.050653 \n",
+ " 0.200164 \n",
+ " 25.641624 \n",
+ " 0.046837 \n",
+ " 25.161078 \n",
+ " 0.030090 \n",
+ " 24.460152 \n",
+ " 0.024047 \n",
+ " 23.977239 \n",
+ " 0.027567 \n",
+ " 23.831974 \n",
+ " 0.055121 \n",
+ " \n",
+ " \n",
+ " 60 \n",
+ " 0.474281 \n",
+ " 27.048056 \n",
+ " 0.444683 \n",
+ " 26.428211 \n",
+ " 0.093854 \n",
+ " 24.839984 \n",
+ " 0.022755 \n",
+ " 24.209226 \n",
+ " 0.019403 \n",
+ " 23.855082 \n",
+ " 0.024787 \n",
+ " 23.507456 \n",
+ " 0.041329 \n",
+ " \n",
+ " \n",
+ " 61 \n",
+ " 0.561923 \n",
+ " 24.680480 \n",
+ " 0.061182 \n",
+ " 23.958609 \n",
+ " 0.011430 \n",
+ " 22.900135 \n",
+ " 0.006346 \n",
+ " 22.143581 \n",
+ " 0.005820 \n",
+ " 21.867563 \n",
+ " 0.006465 \n",
+ " 21.612692 \n",
+ " 0.008967 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "62 rows × 13 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " redshift mag_u_lsst mag_err_u_lsst mag_g_lsst mag_err_g_lsst \n",
+ "0 0.769521 26.496852 0.288986 25.863170 0.056997 \\\n",
+ "1 1.088857 26.258727 0.237964 25.509524 0.041668 \n",
+ "2 1.333098 25.373855 0.112257 24.943293 0.025359 \n",
+ ".. ... ... ... ... ... \n",
+ "59 0.986374 26.050653 0.200164 25.641624 0.046837 \n",
+ "60 0.474281 27.048056 0.444683 26.428211 0.093854 \n",
+ "61 0.561923 24.680480 0.061182 23.958609 0.011430 \n",
+ "\n",
+ " mag_r_lsst mag_err_r_lsst mag_i_lsst mag_err_i_lsst mag_z_lsst \n",
+ "0 24.729555 0.020702 23.610683 0.012011 23.143518 \\\n",
+ "1 24.469344 0.016648 23.532860 0.011344 22.546680 \n",
+ "2 24.524998 0.017431 24.013649 0.016486 23.733274 \n",
+ ".. ... ... ... ... ... \n",
+ "59 25.161078 0.030090 24.460152 0.024047 23.977239 \n",
+ "60 24.839984 0.022755 24.209226 0.019403 23.855082 \n",
+ "61 22.900135 0.006346 22.143581 0.005820 21.867563 \n",
+ "\n",
+ " mag_err_z_lsst mag_y_lsst mag_err_y_lsst \n",
+ "0 0.013714 22.915156 0.024561 \n",
+ "1 0.008992 22.070255 0.012282 \n",
+ "2 0.022315 23.102123 0.028906 \n",
+ ".. ... ... ... \n",
+ "59 0.027567 23.831974 0.055121 \n",
+ "60 0.024787 23.507456 0.041329 \n",
+ "61 0.006465 21.612692 0.008967 \n",
+ "\n",
+ "[62 rows x 13 columns]"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"dataframe = pz_server.get_product(8, fmt=\"pandas\")\n",
"print(type(dataframe))\n",
@@ -515,9 +1905,46 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Connecting to PZ Server...\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "Table length=62\n",
+ "\n",
+ "redshift mag_u_lsst mag_err_u_lsst mag_g_lsst mag_err_g_lsst mag_r_lsst mag_err_r_lsst mag_i_lsst mag_err_i_lsst mag_z_lsst mag_err_z_lsst mag_y_lsst mag_err_y_lsst \n",
+ "float64 float64 float64 float64 float64 float64 float64 float64 float64 float64 float64 float64 float64 \n",
+ "0.7695210576057434 26.49685173335998 0.28898640164514966 25.863170180148593 0.0569968492513252 24.72955523266535 0.020702469899475762 23.610683261247523 0.012011391457007867 23.14351797933142 0.013714272888189844 22.915156068508104 0.02456124411372624 \n",
+ "... ... ... ... ... ... ... ... ... ... ... ... ... \n",
+ "0.4742807149887085 27.048056087407986 0.4446825063577354 26.428211280519175 0.09385433945963481 24.83998360318214 0.02275493531289512 24.2092260174936 0.01940261275081239 23.855082243159934 0.02478730171099941 23.507455929574288 0.041328512368478044 \n",
+ "0.5619226694107056 24.680479530543163 0.061181531929665633 23.958608997973702 0.01142956636817526 22.900134967933102 0.006345869773581998 22.143580633270624 0.005819630970810428 21.867562849329406 0.006465480863342269 21.61269159453626 0.008966510628950788 \n",
+ "
"
+ ],
+ "text/plain": [
+ "\n",
+ " redshift mag_u_lsst mag_err_u_lsst ... mag_err_z_lsst mag_y_lsst mag_err_y_lsst \n",
+ " float64 float64 float64 ... float64 float64 float64 \n",
+ "------------------ ------------------ -------------------- ... -------------------- ------------------ --------------------\n",
+ "0.7695210576057434 26.49685173335998 0.28898640164514966 ... 0.013714272888189844 22.915156068508104 0.02456124411372624\n",
+ " ... ... ... ... ... ... ...\n",
+ "0.4742807149887085 27.048056087407986 0.4446825063577354 ... 0.02478730171099941 23.507455929574288 0.041328512368478044\n",
+ "0.5619226694107056 24.680479530543163 0.061181531929665633 ... 0.006465480863342269 21.61269159453626 0.008966510628950788"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"table = pz_server.get_product(8, fmt=\"astropy\")\n",
"print(type(table))\n",
@@ -525,6 +1952,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -534,7 +1962,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
@@ -542,6 +1970,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -549,16 +1978,21 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- " \n",
- "\n",
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
"\n",
- "# Product types \n"
+ "# Product types "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -567,25 +2001,71 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " Product type \n",
+ " Description \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Spec-z Catalog \n",
+ " Catalog of spectroscopic redshifts and positions (usually equatorial coordinates). \n",
+ " \n",
+ " \n",
+ " Training Set \n",
+ " Training set for photo-z algorithms (tabular data). It usually contains magnitudes, errors, and true redshifts. \n",
+ " \n",
+ " \n",
+ " Validation Results \n",
+ " Results of a photo-z validation procedure (free format). Usually contains photo-z estimates (single estimates and/or pdf) of a validation set and photo-z validation metrics. \n",
+ " \n",
+ " \n",
+ " Photo-z Table \n",
+ " Results of a photo-z estimation procedure. If the data is larger than the file upload limit (200MB), the product entry stores only the metadata (instructions on accessing the data should be provided in the description field. \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_product_types()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
- "\n",
- "## Spec-z Catalog \n",
- " "
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "## Spec-z Catalog "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"tags": []
@@ -606,6 +2086,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -614,23 +2095,101 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Connecting to PZ Server...\n",
+ "Done!\n"
+ ]
+ }
+ ],
"source": [
"gama = pz_server.get_product(14)"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " key \n",
+ " value \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " 14 \n",
+ " \n",
+ " \n",
+ " release \n",
+ " None \n",
+ " \n",
+ " \n",
+ " product_type \n",
+ " Spec-z Catalog \n",
+ " \n",
+ " \n",
+ " uploaded_by \n",
+ " gschwend \n",
+ " \n",
+ " \n",
+ " internal_name \n",
+ " 14_gama_specz_subsample \n",
+ " \n",
+ " \n",
+ " product_name \n",
+ " GAMA spec-z subsample \n",
+ " \n",
+ " \n",
+ " official_product \n",
+ " False \n",
+ " \n",
+ " \n",
+ " pz_code \n",
+ " \n",
+ " \n",
+ " \n",
+ " description \n",
+ " A small subsample of the GAMA DR3 spec-z catalog (Baldry et al. 2018) as an example of a typical spec-z catalog from the literature. \n",
+ " \n",
+ " \n",
+ " created_at \n",
+ " 2023-03-29T20:02:45.223568Z \n",
+ " \n",
+ " \n",
+ " main_file \n",
+ " specz_subsample_gama_example.csv \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"gama.display_metadata()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -639,14 +2198,140 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " ID \n",
+ " RA \n",
+ " DEC \n",
+ " Z \n",
+ " ERR_Z \n",
+ " FLAG_DES \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 2.576000e+03 \n",
+ " 2576.000000 \n",
+ " 2576.000000 \n",
+ " 2576.000000 \n",
+ " 2576.0 \n",
+ " 2576.000000 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " 1.105526e+06 \n",
+ " 154.526343 \n",
+ " -1.101865 \n",
+ " 0.224811 \n",
+ " 99.0 \n",
+ " 3.949534 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 4.006668e+04 \n",
+ " 70.783868 \n",
+ " 2.995036 \n",
+ " 0.102571 \n",
+ " 0.0 \n",
+ " 0.218947 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " 1.103558e+06 \n",
+ " 180.140145 \n",
+ " -0.480830 \n",
+ " 0.217804 \n",
+ " 99.0 \n",
+ " 4.000000 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " 1.140619e+06 \n",
+ " 215.836583 \n",
+ " 1.170363 \n",
+ " 0.291810 \n",
+ " 99.0 \n",
+ " 4.000000 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " 1.176440e+06 \n",
+ " 223.497080 \n",
+ " 2.998180 \n",
+ " 0.728717 \n",
+ " 99.0 \n",
+ " 4.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "8 rows × 6 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " ID RA DEC Z ERR_Z \n",
+ "count 2.576000e+03 2576.000000 2576.000000 2576.000000 2576.0 \\\n",
+ "mean 1.105526e+06 154.526343 -1.101865 0.224811 99.0 \n",
+ "std 4.006668e+04 70.783868 2.995036 0.102571 0.0 \n",
+ "... ... ... ... ... ... \n",
+ "50% 1.103558e+06 180.140145 -0.480830 0.217804 99.0 \n",
+ "75% 1.140619e+06 215.836583 1.170363 0.291810 99.0 \n",
+ "max 1.176440e+06 223.497080 2.998180 0.728717 99.0 \n",
+ "\n",
+ " FLAG_DES \n",
+ "count 2576.000000 \n",
+ "mean 3.949534 \n",
+ "std 0.218947 \n",
+ "... ... \n",
+ "50% 4.000000 \n",
+ "75% 4.000000 \n",
+ "max 4.000000 \n",
+ "\n",
+ "[8 rows x 6 columns]"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"gama.data.describe()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -655,14 +2340,26 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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5ebmStu2bZPuu+8+qXPnzlJlZaW+jtZyraZNmyZ5eHhIu3btkgoKCvSPiooKfZmmfvdqa2ulyMhIaciQIVJmZqa0efNmydfXV5o9e7Yl3hKZ0dq1ayW1Wi2tXLlSys7OlqZOnSp5enrqVwAbP368NGvWLH353377TXJwcJAWLVoknThxQpo3b57k6OgoHT9+3FJvweJMvYYLFy6UnJycpH//+98Gv5OlpaWWegsWZer1uxNXhTL9Gubn50tubm5ScnKydOrUKWnDhg2Sn5+f9Pbbb1vqLVgdJhY24IknnpACAwMlJycn6Z577pGeeOIJ6ezZs/rzN27ckJ577jnJy8tLcnV1lR599FGpoKDAghGLtXPnTglAvceECRMkSbq55Ozrr78u+fv7S2q1WnrooYekU6dOGdRx7do1acyYMVLbtm0ld3d3adKkSXb5YXW3a1VRUSENGTJE8vX1lRwdHaWQkBBpypQpBkulSlLruVYNXScA0ooVK/RljPndy8vLk4YOHSq5uLhIPj4+0vTp06WamhrB74bk8Mknn0gdOnSQnJycpJiYGGn//v36c3/605/0f4Nu+fbbb6UuXbpITk5OUvfu3aWNGzcKjtj6mHINQ0JCGvydnDdvnvjArYSpP4O3Y2Jxk6nXcN++fVJsbKykVqul8PBwacGCBVJtba3gqK2XQpIkSWAHCRERERER2SHOsSAiIiIiohZjYkFERERERC3GxIKIiIiIiFqMiQUREREREbUYEwsiIiIiImoxJhZERERERNRiTCyIiIiIiKjFmFgQEREREVGLMbEgsqBr167Bz88PeXl5jZbZtWsXFAoFioqKzNZudXU1QkNDcejQIbPVSURERK0bEwuiu5g4cSIUCgUUCgUcHR0RFhaGV155BZWVlfXKXrx4EU5OToiMjDS6/gULFuCRRx5BaGioGaNumpOTE15++WXMnDlTaLtERGScW18qNfZ48MEHLR0iUT1MLIiakJiYiIKCApw7dw4ffvghli1bhnnz5tUrt3LlSjz++OMoKSnBgQMHmqy3oqICy5cvx+TJk+UIu0ljx47F3r178fvvv1ukfSIiatz999+PgoKCeo9ly5ZBoVDgueees3SIRPUwsSBqglqtRkBAAIKDgzFy5EjEx8dj69atBmUkScKKFSswfvx4PPXUU1i+fHmT9W7atAlqtRr9+vWrd7xLly5wcXHBgw8+2OAwqb1792LAgAFwcXFBcHAwXnjhBZSXl+vPFxQUYPjw4XBxcUFYWBjWrFmD0NBQfPTRR/oyXl5e6N+/P9auXWvaBSEiItk5OTkhICDA4HH9+nW8/PLLmDNnDh577DFLh0hUDxMLIhNkZWVh3759cHJyMji+c+dOVFRUID4+HuPGjcPatWsNbvQbsmfPHvTu3dvg2IULFzBq1CiMGDECmZmZeOaZZzBr1iyDMjk5OUhMTMTo0aNx7NgxfPPNN9i7dy+Sk5P1ZZ5++mlcvnwZu3btwnfffYfPPvsMhYWF9WKIiYnBnj17TL0MREQkWFFRER555BEMGjQIb731lqXDIWqQg6UDILJ2GzZsQNu2bVFbW4uqqioolUr885//NCizfPlyPPnkk1CpVIiMjER4eDjWrVuHiRMnNlrv+fPnERQUZHBsyZIl6NixIz744AMAQNeuXXH8+HG8++67+jKpqakYO3YsXnzxRQBA586d8fHHH+NPf/oTlixZgry8PGzbtg0HDx5Enz59AAD/+te/0Llz53oxBAUF4fz58825LEREJIhOp8NTTz0FBwcHrF69GgqFwtIhETWIiQVREx588EEsWbIE5eXl+PDDD+Hg4IDRo0frzxcVFeH777/H3r179cfGjRuH5cuX3zWxuHHjBpydnQ2OnThxArGxsQbH4uLiDJ4fPXoUx44dw+rVq/XHJEmCTqdDbm4uTp8+DQcHB9x333368506dYKXl1e9GFxcXFBRUXH3C0BERBY1Z84cpKWlIT09HW5ubpYOh6hRTCyImtCmTRt06tQJAPDFF1+gZ8+eBpOu16xZg8rKSoOE4NaN/unTp9GlS5cG6/Xx8cH169dNjqesrAx/+9vf8MILL9Q716FDB5w+fdrourRaLXx9fU2OgYiIxFi7di0WLVqEjRs3NtjzTGRNOMeCyARKpRJz5szBa6+9hhs3bgC4OQxq+vTpyMzM1D+OHj2KAQMG4Isvvmi0rujoaGRnZxscu/fee5Genm5wbP/+/QbP77vvPmRnZ6NTp071Hk5OTujatStqa2tx5MgR/WvOnj3bYBKTlZWF6Ohok68DERHJLzMzE5MnT8bChQuRkJBg6XCImsTEgshEjz32GFQqFRYvXozMzEwcPnwYzzzzDCIjIw0eY8aMwapVq1BbW9tgPQkJCfj9998NbvifffZZnDlzBjNmzMCpU6ewZs0arFy50uB1M2fOxL59+5CcnIzMzEycOXMGP/74o37ydrdu3RAfH4+pU6ciPT0dR44cwdSpU+Hi4lJvXO6ePXswZMgQ814gIiJqsatXr2LkyJEYNGgQxo0bB41GY/D4448/LB0iUT1MLIhM5ODggOTkZLz33ntYvHgxIiIi0K1bt3rlHn30URQWFmLTpk0N1hMVFYX77rsP3377rf5Yhw4d8N133+GHH35Az549sXTpUrzzzjsGr+vRowd2796N06dPY8CAAYiOjsbcuXMNJoJ/+eWX8Pf3x8CBA/Hoo49iypQpcHNzM5jTkZaWhuLiYvzP//xPSy8JERGZ2caNG3H+/Hls2rQJgYGB9R59+/a1dIhE9SgkSZIsHQRRa7Vx40bMmDEDWVlZUCrly/MvXryI4OBgbNu2DQ899BAA4IknnkDPnj0xZ84c2dolIiKi1oOTt4ksaPjw4Thz5gwuXbqE4OBgs9W7Y8cOlJWVISoqCgUFBXjllVcQGhqKgQMHAgCqq6sRFRWFl156yWxtEhERUevGHgsiO/TLL79g+vTpOHfuHNzc3HD//ffjo48+QkhIiKVDIyIiIjvFxIKIiIiIiFqMk7eJiIiIiKjFmFgQEREREVGLMbEgIiIiIqIWY2JBREREREQtxsSCiIiIiIhajIkFERERERG1GBMLIiIiIiJqMSYWRERERETUYkwsiIiIiIioxf4/O2YF53D9HiQAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"gama.plot()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -671,20 +2368,46 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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1Dbh39Y61DmbkRIfjTxLcpe9OBW1TZe8n0JToNdvJj4XYeJDRKROTFLIl0Cv39261VVfX4/CwkI4HI5LXrPb7V2+RkRE1FMDU+Jwy5BUJj3UI91KfP7whz9g69atnWZSJpMJX3/9NQoLC4MWHBEREVEwdSvx+dvf/obZs2d3+fqjjz6Kv/71rz0OioiIiEgO3Up8jh49iqysrC5fz8rKwtGjR3scFBEREZEcupX4hIeHo6qqqsvXq6qqEBbGGfJERESkTt3KUnJzc/Hhhx92+fqGDRuQm8saCERERKRO3VqkdN68efjJT36C/v37Y86cOQgP/2E9k/b2dvzxj3/Ea6+9hj/96U+yBEpERETUU92u4/P0009j+fLlSEhIgMViAQBYrVY4nU48+eSTeOmll2QJVCms40NERBR6ZC1guGvXLrz77rsoLy+HJEm48sor8cADD2DkyJE9CloNmPgQERGFnkCv39261eU2cuRITSQ5REREpC/dGtz88ssv49y5c57vt23bhubmZs/3jY2NeOyxx4IXncZZbU5sOVKDitomz/dFu46j8IsyvLfruOf5C197b9dxbP3e5vU+IiIiCky3bnWFh4fj9OnTSE1NBQAYjUaUlJR4xvqcOXMGaWlpaG9vlydaBch5q8tqc2JnxVmca2nDv0qrsbuy3vOaKSYC9nNtl7wnJ82IXlHhXtteyL1Qnyk2MqixEhERhRJZbnVdnCNxfdPANLhaMGP1LhSfsHe5TWdJDwAcrPK99tm28lrMLyrGupm89UhEROQPqw3KrMHVgptXfOkz6emJdknC1jIbb3sREREFgImPzB5Zuwf2c62yt3OoSp7EioiISEu6PavrnXfeQXx8PACgra0Na9asQUpKCoAfBjfTf1ltTuw51vnYnGBbu70Sd1ybpkhbREREoapbic+AAQPw9ttve77v27cv/u///u+SbegHx866FGtrd2U9KmqbMDAlTrE2iYiIQk23Ep/KykqZwgiu5uZm5OXlYf/+/SguLsZ1110nJI6M3rGKtldZx8SHiIjIl26P8eno6MCqVatwxx13IDs7Gzk5Obj77ruxbt061czy+uUvf4m0NPG3fSzmeGRfoVz158xkJj1ERES+dCvxkSQJd955Jx555BGcOnUKOTk5uOaaa1BZWYnp06fjnnvukSvOgP3rX//CZ599hldeeUV0KACAF6Zkiw6BiIiI/qNbt7rWrFmDr7/+Gl988QVuueUWr9c2b96MKVOmYN26dZg6dWpQgwzUmTNnMGvWLHz44YeIjQ3sNlNzc7NX9WmHw3fdnO4alp4ES0ocrApMN+etLiIiIt+61eNTVFSEJUuWXJL0AMCtt96KRYsW4d133w1acN0hSRKmT5+O2bNn44Ybbgj4fcuXL4fJZPI80tPTgx5bVIQyVQN4q4uIiMi3bl2RDxw4gIkTJ3b5+qRJk7B///4eB3WhRYsWwWAw+HwcPnwYhYWFaGxsxOLFi7u1/8WLF8Nut3seJ06cCGr8VpsTh6vln+afOyCRvT1ERER+dOtW19mzZ9GnT58uX+/Tpw/q64Nbt2bhwoWYPn26z20sFgs2b96MHTt2IDo62uu1G264AQ8++CDWrl3b6Xujo6MveU8wfetnyYlgsbvkL5JIREQU6rqV+LS3tyMiouu3hIeHo62t8zWnLpfZbIbZbPa73e9//3v85je/8XxfVVWF22+/HX/+85+Rl5cX1Ji6Y832SkXasdY2sY4PERGRH91epHT69Old9pBcOEhYaRcXTnRXlx40aBD69+8vIiRFKzcDHNxMRETkT7cSn2nTpvndRtSMLjVSsnIzwMHNRERE/nQr8Vm9erVccQRdZmam8IKKSq4AOyIzib09REREfnB1dhl1KNRObFQ43pk6QqHWiIiIQhcTHxkptVbX/2T3hSk2UpG2iIiIQhkTHxlZzPHI6B0jezsbD57mdHYiIqIAMPGR2VOTrpa9jfOtHZi+Zpfs7RAREYU6Jj4y+5+cfogIM8jeTvHxBlQosB4YERFRKGPiIzOrzYm2DmVml+201inSDhERUahi4iMzJWv5iJ28T0REpH5MfGSm1MwuALjRkqxYW0RERKGIiY/MesdFIUmBqea56SYWMCQiIvKDiY/MFhSVoF6Bqea/ujtb9jaIiIhCHRMfGVltTmwtsynS1nGF1wUjIiIKRUx8ZKTkwOa12ysVa4uIiChUMfGRkZIDm3dX1rOODxERkR9MfGRkMccjNz1RsfYq65j4EBER+cLER2aSpFx1ncxkzuoiIiLyhYmPjKw2J0pO2hVpKz/LzOnsREREfjDxkZFSg5vN8dEoLMhVpC0iIqJQxsRHRkoNbr5zWD+YFCiSSEREFOqY+MjohEI9PpsP18CuQJFEIiKiUMfER0YlJxsUaefYWRfmFxUr0hYREVEoY+Ijo+v6JyrSjiQBW8tsrONDRETkBxMfGd08JFWRBUrdWMeHiIjINyY+Mls/c6RibbGODxERkW9MfGS27ONvFWkn5woj6/gQERH5wcRHRlabE3uO1SvS1j25/RVph4iIKJQx8ZGRkquzx0SFK9YWERFRqGLiIyMlV2e/0ZKsWFtEREShiomPjCzmeGSnGWVvJz0phuN7iIiIAsDER2bvPnIjwg3ytjFjzEB5GyAiItIIJj4yM8VG4uN5YxAmY/KTlthLvp0TERFpCBMfBbzwz8PokOTb///3RZl8OyciItIQJj4ys9qc2H60TtY2vjvdyOUqiIiIAsDER2Y7K+RNetz+bVWmHSIiolDGxEdmJ+qUqeVzql65mkFEREShiomPzDZ9V6NIO59+W61IO0RERKGMiY+MrDYnymqcirRVdqaJ43yIiIj8YOIjIyWXrACAyjomPkRERL4w8ZGRkktWAEBmMqs3ExER+cLER0YWczzys8yKtJUYE8llK4iIiPxg4iOzR/OVWU6i4Vwrx/gQERH5obnE5x//+Afy8vIQExODpKQkTJkyRWg8y/91WLG2drKWDxERkU8RogMIpr/97W+YNWsWXnzxRdx6661oa2tDaWmpsHisNidKqxyKtSfjqhhERESaoJnEp62tDT//+c+xYsUKzJw50/P80KFDfb6vubkZzc3Nnu8djuAlKkrP6uqfFKNoe0RERKFGM7e69u3bh1OnTiEsLAy5ubno168fJk2a5LfHZ/ny5TCZTJ5Henp60GJSelZXm5wroRIREWmAZhIfq9UKAHjuuefwzDPPYOPGjUhKSsK4ceNw9uzZLt+3ePFi2O12z+PEiRNBi8k9q0upHzKnsxMREfmm+sRn0aJFMBgMPh+HDx9GR0cHAODpp5/Gfffdh+HDh2P16tUwGAx4//33u9x/dHQ0jEaj1yOYfjPlGsRGhwd1n53JzzJzOjsREZEfqh/js3DhQkyfPt3nNhaLBadPnwbgPaYnOjoaFosFx48flzNEn5758BBcze2ytzP7ZovsbRAREYU61Sc+ZrMZZrP/IoDDhw9HdHQ0jhw5grFjxwIAWltbUVlZiYyMDLnD7JTV5sTWMpsibb34r++wcf5NirRFREQUqlSf+ATKaDRi9uzZWLZsGdLT05GRkYEVK1YAAO6//34hMSk5q6v0lAMVtU283UVEROSDZhIfAFixYgUiIiLw8MMP49y5c8jLy8PmzZuRlJQkJB6lZ3VV1jHxISIi8sUgSRLnQF/A4XDAZDLBbrcHZaDz1JW7sK28Fu0K/Ji3PDGOiQ8REelSoNdv1c/qCnWFBbkYMzhF9nY4q4uIiMg/Jj4yM8VGYt3Mkfjjg9fL2s4Tt18p6/6JiIi0gImPAhpcLVj0twOytlHX1CLr/omIiLSAiY/MGlwtyH95Cxzn22RtJyLMIOv+iYiItICJj8weWbtH9qQH4DpdREREgWDiIyOrzYk9x+oVaYvrdBEREfnHxEdGShUwNPaKQO/YKEXaIiIiCmVMfGSkVAHDpuY2zC8qVqQtIiKiUMbER0YWczzys8x+f8gJ0RHoydDkdgnYWmZDRW1TD/ZCRESkfUx8ZFZYkIuxWV0vspqfZcY/F9yExNjIHrdVWcfEh4iIyBdNrdWlRu4ChhW1Taisa/IMQnZ/PTAlDlabE/Wu1h63xQHOREREvjHxUcjAlDivJSXcXze4WvDYu/t6tO8wAzB2MJesICIi8oe3ugRbUFSCw9WNPdrH0DQjCgtygxQRERGRdrHHRxCrzYmdFWextczW430VFlwPUxDGCBEREWkdEx+FNbhasKCoJCgJj8EA3JCRxFtcREREAeKtLoUtKCrBtvLaoOxLkoDdlfWYunIX7EEYHE1ERKR1THwUZLU5sbXMhnYpuOtqbSuvZQFDIiKiADDxUZBcS1i0SxILGBIREQWAiY+C5F7CggUMiYiIfGPioyCLOR7ZaUbZ9s8ChkRERL4x8VHYC/fkBH2f4QYD8rNYwJCIiMgfJj4Kstqc+Pa0A1mp8T1alPRiYwansIAhERFRAFjHRwENrhbMWb8PO6x1Ab8nLiocTS3tfrdbfm8OCkYO6El4REREusEeHwUsKCrpVtIDIKCkBwCukXHMEBERkdYw8ZGZu3aPXF759HvZ9k1ERKQ1THxkJlftHretZTYcONkgaxtERERawcRHZnLX7gGAJRsOyt4GERGRFjDxkZnFHI/8LLOsbZSecrBqMxERUQCY+CigsCAXoyzJsrbBqs1ERET+MfFRgCk2EkU/uxHrfjpStjZYtZmIiMg/Jj4K6p8Ug+wrjAgLZvVCIiIiChgLGCqgwdWCBUUlXU5rj48Oh7M5sLo9Xamsa+KSFURERH6wx0cBC4pKsK281uu5MADZaUZ8NHc0cq5I7HEbvNVFRETkH3t8ZNZVAcMOAKVVDjzzYSm+rWq87P2HGYCxg7lAKRERUSCY+MjMXwHDg6ccPdr/0DQjFyglIiIKEG91yUzuH/C8cYNhio2UuRUiIiJtYOIjsw6Z9/+HLeUyt0BERKQdTHxkJveSFaVVrNpMREQUKCY+MnMvWSHnD/pQlV3GvRMREWkHEx8FFBbk4vqMJJ/bpCf2Qq/Iyzsda7dXXtb7iIiI9EZTic/333+Pu+++GykpKTAajRg7diy2bNkiOiyYYiPx1zmjMSIzCV0VbT7RcB7nWy9vRNDuynre7iIiIgqAphKfO+64A21tbdi8eTP27t2LYcOG4Y477kB1dbXo0AAA70wdgZtkWqmdi5QSERH5p5nEp7a2FmVlZVi0aBGuvfZaZGVl4aWXXoLL5UJpaWmX72tubobD4fB6yMUUG4l1M0fKslgpKzcTERH5p5nEJzk5GUOGDMG6devQ1NSEtrY2vPXWW0hNTcXw4cO7fN/y5cthMpk8j/T0dNljbZekoO5vRGYSKzcTEREFQDOVmw0GAz7//HNMmTIFCQkJCAsLQ2pqKj755BMkJXU9sHjx4sV4/PHHPd87HA5Zkh+rzYljZ13ITI4LerY5bXRmkPdIRESkTapPfBYtWoTf/va3Prf57rvvMGTIEMydOxepqan4+uuvERMTg3feeQd33nkndu/ejX79+nX63ujoaERHR8sROgD/K7MHwzVpJtn2TUREpCUGSQryfZcgs9lsqKur87mNxWLB119/jQkTJqC+vh5Go9HzWlZWFmbOnIlFixYF1J7D4YDJZILdbvfaz+WaunIXtpXXBv32lltSbCS+fOIWLltBRES6Fuj1W/U9PmazGWaz/5lQLtcPi4GGhXnfSAoLC0NHh9wLR3Suq5XZO3Nln3h8f8bp+T4nzYiDVf4HWttdrZhfVIx1M4M/YJqIiEhrVJ/4BGrUqFFISkrCtGnTsHTpUsTExODtt99GRUUFJk+eLCQmfyuzX2jBbVkw9opA8YkGXD8gCW0dEmas3u33fR0AtpbZUFHbxAHOREREfmgm8UlJScEnn3yCp59+GrfeeitaW1txzTXX4KOPPsKwYcOExNSddbqWfHAQjvNtnu+z07p3m62yjokPERGRP5pJfADghhtuwKeffio6DA/3Ol2BjPG5MOkBgG8DuM11oeTYqG7HR0REpDeaqeOjVoUFuRgzOKXb7+vuqKRXPvu+220QERHpjaZ6fNTIXa25orYJ/7bWYfEHB2Vph+N8iIiI/GOPj0IGpsShYOQA5Mu0VhfA9bqIiIj8YeKjsIUTrpRt31yvi4iIyDfe6lLYiW5McQ9UuMGAMYNTeJuLiIjID/b4KKjB1YIlG4I/xmfM4BQUFuQGfb9ERERawx4fBT2yds8l09YvlwHANWlGFD5wPXt6iIiIAsTERyFWmxN7jtUHbX83ZZlRWJDLNbqIiIi6gbe6FNKd5SsC0SZo/TEiIqJQxsRHId1ZviIQ24/WYX5RcVD3SUREpHVMfBTiXr4imD9wd9FCIiIiCgwTHwUVFuRieGZSUPd5qMoe1P0RERFpGRMfhTS4WjC/qBi7K4M3wBkA1m6vDOr+iIiItIyJj0IWFJVgW3lt0Pe7u7Ket7uIiIgCxMRHAVabE1vLbGiXJFn2zzW6iIiIAsPERwHBnsp+Ma7RRUREFBgWMFRAsKeyu3GNLiIiou5hj48CLOZ4JAWhwrKxl3eeyjW6iIiIuoeJjwKsNifqXa092kdcdLjXOl85Vxi5ZAUREVE3MfFRwLdVjh69P8wANDW3ez138JQD417ZAnsPEyoiIiI9YeKjgDU9rLXT0cVksHpXKx5Zu7tH+yYiItITJj4yC/aq7BfbfaweB042yLZ/IiIiLWHiIzO5p7IDwJINB2Vvg4iISAuY+MistwKDj0tPOVi9mYiIKABMfGT2643f+d1mxf+7FsvvzelRO6zeTERE5B8THxkFMr4n+wojhmckIb5XxCV1erqD1ZuJiIj8Y+VmGQUyvicyPAy3/u6rHrWTn2Vm9WYiIqIAsMdHRoEsVVFyoqFHbYzM7M3qzURERAFi4iMjizke2WlGn9v0ZMH2MAC9IsNZvZmIiChATHxk9sI9PRu07EsHgK1lNs7oIiIiChATH5kNS09EfpYZYQb52uCMLiIiosAw8VFAYUEuxg42y7Z/zugiIiIKDBMfBZhiI7Fu5kjkXOF7vE93hRsMnNFFRETUDUx8FGK1OXHwVM9Wab+YMSYCL0zJDuo+iYiItIyJj0LkWLPLfq4VT39YGvT9EhERaRUTHwU0uFrw+ubyoO+3Q+KsLiIiou5g4qOABUUlKD7eINv+OauLiIgoMFyyQmZWmxNby2yytsFZXURERIFh4iMzOcb2uIUbDBgzOIWzuoiIiAIUMre6XnjhBYwePRqxsbFITEzsdJvjx49j8uTJiI2NRWpqKp588km0tbUpG+hFAlmv63LlWbhOFxERUXeETOLT0tKC+++/H3PmzOn09fb2dkyePBktLS3Yvn071q5dizVr1mDp0qUKR+rNYo5HkgxraYUBiAgL4zpdRERE3RAyic+vfvUr/OIXv0BOTudrX3322Wf49ttvsX79elx33XWYNGkSfv3rX+P1119HS0uLwtH+l9XmRL2rNej75TpdRERE3RcyiY8/O3bsQE5ODvr06eN57vbbb4fD4cChQ4e6fF9zczMcDofXI5jkHOMDcEYXERFRd2gm8amurvZKegB4vq+uru7yfcuXL4fJZPI80tPTgxqXnGN8ACBCztVPiYiINEZo4rNo0SIYDAafj8OHD8saw+LFi2G32z2PEydOBHX/FnM88rPkW6D04ZW7MHXlLthluJ1GRESkNUKnsy9cuBDTp0/3uY3FYgloX3379sWuXbu8njtz5oznta5ER0cjOjo6oDYu18IJV8pay2dbuQ3zi4qxbuZI2dogIiLSAqGJj9lshtkcnN6QUaNG4YUXXkBNTQ1SU1MBAJs2bYLRaMTQoUOD0sblOuuSd3B1+wVLV7CmDxERUddCZozP8ePHUVJSguPHj6O9vR0lJSUoKSmB0+kEAEyYMAFDhw7Fww8/jP379+PTTz/FM888g7lz58reo+OP3ON83DjQmYiIyLeQqdy8dOlSrF271vN9bu4Phfu2bNmCcePGITw8HBs3bsScOXMwatQoxMXFYdq0aXj++edFhezhHuezrbwW7ZIkWztcuoKIiMg3gyTJeCUOQQ6HAyaTCXa7HUajMWj7tbtaMb+o2GusT1JsZNBq/IzITML7s0cHZV9EREShJtDrd8j0+IQ6U2wk1s0ciYraJlTWNSEzOQ4DU+I83/9xSzn2HWu4rB6hpNhIvDN1hAxRExERaQsTH4UNTInzGoDs/v769KRLeoSMvSLgOO97rbERGUl4Z9oILl1BREQUACY+KtFVj9CBkw1YsuEgSk/9t6L0iIwkTB+diaFXmDiLi4iIqBs4xucico3x6amLEyIiIiL6L47x0ZiLb5ERERFR94VMHR8iIiKinmLiQ0RERLrBxIeIiIh0g4kPERER6QYTHyIiItINJj5ERESkG0x8iIiISDeY+BAREZFuMPEhIiIi3WDiQ0RERLrBJSsu4l66zOFw+NmSiIiI1MJ93fa3BCkTn4s0NjYCANLT0wVHQkRERN3V2NgIk8nU5etcnf0iHR0dqKqqQkJCAgwGQ5fbORwOpKen48SJE6paxT3Y9HKcgH6OlcepPXo5Vh6ntgT7OCVJQmNjI9LS0hAW1vVIHvb4XCQsLAz9+/cPeHuj0ajpD6abXo4T0M+x8ji1Ry/HyuPUlmAep6+eHjcObiYiIiLdYOJDREREusHE5zJFR0dj2bJliI6OFh2KrPRynIB+jpXHqT16OVYep7aIOk4ObiYiIiLdYI8PERER6QYTHyIiItINJj5ERESkG0x8iIiISDeY+PiwfPlyjBgxAgkJCUhNTcWUKVNw5MgRr23GjRsHg8Hg9Zg9e7agiC/fc889d8lxXHXVVZ7Xz58/j7lz5yI5ORnx8fG47777cObMGYERX57MzMxLjtNgMGDu3LkAQvd8bt26FXfeeSfS0tJgMBjw4Ycfer0uSRKWLl2Kfv36ISYmBuPHj0dZWZnXNmfPnsWDDz4Io9GIxMREzJw5E06nU8GjCIyvY21tbcVTTz2FnJwcxMXFIS0tDVOnTkVVVZXXPjr7HLz00ksKH4lv/s7p9OnTLzmGiRMnem0TCufU33F29vtqMBiwYsUKzzahcD4DuZ4E8nf2+PHjmDx5MmJjY5Gamoonn3wSbW1tSh6KT/6O8+zZs5g/fz6GDBmCmJgYDBgwAAsWLIDdbvfaT2fn/L333gtKjEx8fPjqq68wd+5c/Pvf/8amTZvQ2tqKCRMmoKmpyWu7WbNm4fTp057Hyy+/LCjinrnmmmu8juObb77xvPaLX/wCf//73/H+++/jq6++QlVVFe69916B0V6e3bt3ex3jpk2bAAD333+/Z5tQPJ9NTU0YNmwYXn/99U5ff/nll/H73/8eb775Jnbu3Im4uDjcfvvtOH/+vGebBx98EIcOHcKmTZuwceNGbN26FT/72c+UOoSA+TpWl8uFffv24dlnn8W+ffvwwQcf4MiRI7jrrrsu2fb555/3Os/z589XIvyA+TunADBx4kSvYygqKvJ6PRTOqb/jvPD4Tp8+jVWrVsFgMOC+++7z2k7t5zOQ64m/v7Pt7e2YPHkyWlpasH37dqxduxZr1qzB0qVLRRxSp/wdZ1VVFaqqqvDKK6+gtLQUa9aswSeffIKZM2desq/Vq1d7ndMpU6YEJ0iJAlZTUyMBkL766ivPczfffLP085//XFxQQbJs2TJp2LBhnb7W0NAgRUZGSu+//77nue+++04CIO3YsUOhCOXx85//XBo0aJDU0dEhSZI2zicAacOGDZ7vOzo6pL59+0orVqzwPNfQ0CBFR0dLRUVFkiRJ0rfffisBkHbv3u3Z5l//+pdkMBikU6dOKRZ7d118rJ3ZtWuXBEA6duyY57mMjAzptddekze4IOrsOKdNmybdfffdXb4nFM9pIOfz7rvvlm699Vav50LtfErSpdeTQP7O/vOf/5TCwsKk6upqzzZvvPGGZDQapebmZmUPIECdXTcv9pe//EWKioqSWltbPc8F8lm4XOzx6QZ3V1zv3r29nn/33XeRkpKC7OxsLF68GC6XS0R4PVZWVoa0tDRYLBY8+OCDOH78OABg7969aG1txfjx4z3bXnXVVRgwYAB27NghKtwea2lpwfr16/HTn/7Ua0FarZxPt4qKClRXV3udP5PJhLy8PM/527FjBxITE3HDDTd4thk/fjzCwsKwc+dOxWMOJrvdDoPBgMTERK/nX3rpJSQnJyM3NxcrVqxQ1e2CQH355ZdITU3FkCFDMGfOHNTV1Xle0+I5PXPmDP7xj3902jsQaufz4utJIH9nd+zYgZycHPTp08ezze233w6Hw4FDhw4pGH3gurpuXryN0WhERIT38qFz585FSkoKRo4ciVWrVkEKUtlBLlIaoI6ODvzv//4vxowZg+zsbM/zDzzwADIyMpCWloYDBw7gqaeewpEjR/DBBx8IjLb78vLysGbNGgwZMgSnT5/Gr371K9x0000oLS1FdXU1oqKiLrlw9OnTB9XV1WICDoIPP/wQDQ0NmD59uuc5rZzPC7nP0YV/LN3fu1+rrq5Gamqq1+sRERHo3bt3SJ/j8+fP46mnnkJBQYHXIogLFizA9ddfj969e2P79u1YvHgxTp8+jVdffVVgtN0zceJE3HvvvRg4cCCOHj2KJUuWYNKkSdixYwfCw8M1eU7Xrl2LhISES26zh9r57Ox6Esjf2erq6k5/j92vqU1X180L1dbW4te//vUlt2Cff/553HrrrYiNjcVnn32Gxx57DE6nEwsWLOhxXEx8AjR37lyUlpZ6jXsB4HWycnJy0K9fP9x22204evQoBg0apHSYl23SpEmer6+99lrk5eUhIyMDf/nLXxATEyMwMvmsXLkSkyZNQlpamuc5rZxP+mGg849+9CNIkoQ33njD67XHH3/c8/W1116LqKgoPProo1i+fHnILBPwk5/8xPN1Tk4Orr32WgwaNAhffvklbrvtNoGRyWfVqlV48MEH0atXL6/nQ+18dnU90Rp/x+lwODB58mQMHToUzz33nNdrzz77rOfr3NxcNDU1YcWKFUFJfHirKwDz5s3Dxo0bsWXLFvTv39/ntnl5eQCA8vJyJUKTTWJiIq688kqUl5ejb9++aGlpQUNDg9c2Z86cQd++fcUE2EPHjh3D559/jkceecTndlo4n+5zdPHskAvPX9++fVFTU+P1eltbG86ePRuS59id9Bw7dgybNm3y6u3pTF5eHtra2lBZWalMgDKwWCxISUnxfFa1dk6//vprHDlyxO/vLKDu89nV9SSQv7N9+/bt9PfY/Zqa+LtuNjY2YuLEiUhISMCGDRsQGRnpc395eXk4efIkmpubexwbEx8fJEnCvHnzsGHDBmzevBkDBw70+56SkhIAQL9+/WSOTl5OpxNHjx5Fv379MHz4cERGRuKLL77wvH7kyBEcP34co0aNEhjl5Vu9ejVSU1MxefJkn9tp4XwOHDgQffv29Tp/DocDO3fu9Jy/UaNGoaGhAXv37vVss3nzZnR0dHiSv1DhTnrKysrw+eefIzk52e97SkpKEBYWdsmtoVBy8uRJ1NXVeT6rWjqnwA89tMOHD8ewYcP8bqvG8+nvehLI39lRo0bh4MGDXgmtO7EfOnSoMgfiRyDXTYfDgQkTJiAqKgoff/zxJT14nSkpKUFSUlJwevBkGTKtEXPmzJFMJpP05ZdfSqdPn/Y8XC6XJEmSVF5eLj3//PPSnj17pIqKCumjjz6SLBaLlJ+fLzjy7lu4cKH05ZdfShUVFdK2bduk8ePHSykpKVJNTY0kSZI0e/ZsacCAAdLmzZulPXv2SKNGjZJGjRolOOrL097eLg0YMEB66qmnvJ4P5fPZ2NgoFRcXS8XFxRIA6dVXX5WKi4s9M5leeuklKTExUfroo4+kAwcOSHfffbc0cOBA6dy5c559TJw4UcrNzZV27twpffPNN1JWVpZUUFAg6pC65OtYW1papLvuukvq37+/VFJS4vV76571sn37dum1116TSkpKpKNHj0rr16+XzGazNHXqVMFH5s3XcTY2NkpPPPGEtGPHDqmiokL6/PPPpeuvv17KysqSzp8/79lHKJxTf59dSZIku90uxcbGSm+88cYl7w+V8+nveiJJ/v/OtrW1SdnZ2dKECROkkpIS6ZNPPpHMZrO0ePFiEYfUKX/Habfbpby8PCknJ0cqLy/32qatrU2SJEn6+OOPpbfffls6ePCgVFZWJv3xj3+UYmNjpaVLlwYlRiY+PgDo9LF69WpJkiTp+PHjUn5+vtS7d28pOjpaGjx4sPTkk09KdrtdbOCX4cc//rHUr18/KSoqSrriiiukH//4x1J5ebnn9XPnzkmPPfaYlJSUJMXGxkr33HOPdPr0aYERX75PP/1UAiAdOXLE6/lQPp9btmzp9LM6bdo0SZJ+mNL+7LPPSn369JGio6Ol22677ZLjr6urkwoKCqT4+HjJaDRKM2bMkBobGwUcjW++jrWioqLL39stW7ZIkiRJe/fulfLy8iSTyST16tVLuvrqq6UXX3zRK2FQA1/H6XK5pAkTJkhms1mKjIyUMjIypFmzZnlNc5ak0Din/j67kiRJb731lhQTEyM1NDRc8v5QOZ/+rieSFNjf2crKSmnSpElSTEyMlJKSIi1cuNBrGrho/o6zq/MNQKqoqJAk6YeyC9ddd50UHx8vxcXFScOGDZPefPNNqb29PSgxGv4TKBEREZHmcYwPERER6QYTHyIiItINJj5ERESkG0x8iIiISDeY+BAREZFuMPEhIiIi3WDiQ0RERLrBxIeIiIh0g4kPERER6QYTHyLSlOnTp8NgMMBgMCAyMhIDBw7EL3/5S5w/f95ru5MnTyIqKgrZ2dmCIiUiEZj4EJHmTJw4EadPn4bVasVrr72Gt956C8uWLfPaZs2aNfjRj37kWameiPSBiQ8RaU50dDT69u2L9PR0TJkyBePHj8emTZs8r0uShNWrV+Phhx/GAw88gJUrVwqMloiUxMSHiDSttLQU27dvR1RUlOe5LVu2wOVyYfz48XjooYfw3nvvoampSWCURKQUJj5EpDkbN25EfHw8evXqhZycHNTU1ODJJ5/0vL5y5Ur85Cc/QXh4OLKzs2GxWPD+++8LjJiIlMLEh4g055ZbbkFJSQl27tyJadOmYcaMGbjvvvsAAA0NDfjggw/w0EMPebZ/6KGHeLuLSCciRAdARBRscXFxGDx4MABg1apVGDZsGFauXImZM2fiT3/6E86fP4+8vDzP9pIkoaOjA99//z2uvPJKUWETkQLY40NEmhYWFoYlS5bgmWeewblz57By5UosXLgQJSUlnsf+/ftx0003YdWqVaLDJSKZMfEhIs27//77ER4ejtdffx379u3DI488guzsbK9HQUEB1q5di7a2NtHhEpGMmPgQkeZFRERg3rx5WLx4MTIzM3HVVVddss0999yDmpoa/POf/xQQIREpxSBJkiQ6CCIiIiIlsMeHiIiIdIOJDxEREekGEx8iIiLSDSY+REREpBtMfIiIiEg3mPgQERGRbjDxISIiIt1g4kNERES6wcSHiIiIdIOJDxEREekGEx8iIiLSjf8f3w7C6m4Vh6IAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"gama.data.plot(x=\"RA\", y=\"DEC\", kind=\"scatter\") "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
"## Training Sets \n",
- " \n",
" \n",
"In the context of the PZ Server, Training Sets are defined as the product of matching (spatially) a given Spec-z Catalog (single survey or compilation) to the photometric data, in this case, the LSST Objects Catalog. The PZ Server API offers a tool called _Training Set Maker_ for users to build customized Training Sets based on the Spec-z Catalogs available. Please see the companion Jupyter Notebook `pz_tsm_tutorial.ipynb` for details. \n",
"\n",
@@ -711,27 +2434,106 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {
"tags": []
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Connecting to PZ Server...\n",
+ "Done!\n"
+ ]
+ }
+ ],
"source": [
"train_goldenspike = pz_server.get_product(9)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {
"tags": []
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " key \n",
+ " value \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " release \n",
+ " None \n",
+ " \n",
+ " \n",
+ " product_type \n",
+ " Training Set \n",
+ " \n",
+ " \n",
+ " uploaded_by \n",
+ " gschwend \n",
+ " \n",
+ " \n",
+ " internal_name \n",
+ " 9_goldenspike_train_data_hdf5 \n",
+ " \n",
+ " \n",
+ " product_name \n",
+ " Goldenspike train data hdf5 \n",
+ " \n",
+ " \n",
+ " official_product \n",
+ " False \n",
+ " \n",
+ " \n",
+ " pz_code \n",
+ " \n",
+ " \n",
+ " \n",
+ " description \n",
+ " A mock training set created using the example notebook goldenspike.ipynb available in RAIL's repository. \r\n",
+ "Test upload of files in hdf5 format. \n",
+ " \n",
+ " \n",
+ " created_at \n",
+ " 2023-03-29T19:12:59.746096Z \n",
+ " \n",
+ " \n",
+ " main_file \n",
+ " goldenspike_train_data.hdf5 \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"train_goldenspike.display_metadata()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -740,14 +2542,205 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " \n",
+ " mag_err_g_lsst \n",
+ " mag_err_i_lsst \n",
+ " mag_err_r_lsst \n",
+ " mag_err_u_lsst \n",
+ " mag_err_y_lsst \n",
+ " mag_err_z_lsst \n",
+ " mag_g_lsst \n",
+ " mag_i_lsst \n",
+ " mag_r_lsst \n",
+ " mag_u_lsst \n",
+ " mag_y_lsst \n",
+ " mag_z_lsst \n",
+ " redshift \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 61.000000 \n",
+ " 61.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " 61.000000 \n",
+ " 61.000000 \n",
+ " 62.000000 \n",
+ " 62.000000 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " 0.038182 \n",
+ " 0.016165 \n",
+ " 0.018770 \n",
+ " 0.188050 \n",
+ " 0.054682 \n",
+ " 0.021478 \n",
+ " 24.820000 \n",
+ " 23.384804 \n",
+ " 24.003970 \n",
+ " 25.446008 \n",
+ " 22.932354 \n",
+ " 23.074481 \n",
+ " 0.780298 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 0.036398 \n",
+ " 0.010069 \n",
+ " 0.013750 \n",
+ " 0.193747 \n",
+ " 0.115875 \n",
+ " 0.014961 \n",
+ " 1.314112 \n",
+ " 1.381587 \n",
+ " 1.387358 \n",
+ " 1.269277 \n",
+ " 1.540284 \n",
+ " 1.400673 \n",
+ " 0.355365 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " 0.028309 \n",
+ " 0.013390 \n",
+ " 0.016660 \n",
+ " 0.133815 \n",
+ " 0.034199 \n",
+ " 0.018540 \n",
+ " 25.069970 \n",
+ " 23.748506 \n",
+ " 24.470215 \n",
+ " 25.577029 \n",
+ " 23.293384 \n",
+ " 23.514185 \n",
+ " 0.764600 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " 0.049576 \n",
+ " 0.024650 \n",
+ " 0.025802 \n",
+ " 0.238859 \n",
+ " 0.063585 \n",
+ " 0.032557 \n",
+ " 25.705486 \n",
+ " 24.488654 \n",
+ " 24.985225 \n",
+ " 26.263284 \n",
+ " 23.993010 \n",
+ " 24.165944 \n",
+ " 0.948494 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " 0.198195 \n",
+ " 0.036932 \n",
+ " 0.065360 \n",
+ " 1.154073 \n",
+ " 0.909230 \n",
+ " 0.051883 \n",
+ " 27.296152 \n",
+ " 24.949645 \n",
+ " 26.036958 \n",
+ " 28.482391 \n",
+ " 27.342151 \n",
+ " 24.693132 \n",
+ " 1.755764 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "8 rows × 13 columns
\n",
+ ""
+ ],
+ "text/plain": [
+ " mag_err_g_lsst mag_err_i_lsst mag_err_r_lsst mag_err_u_lsst \n",
+ "count 62.000000 62.000000 62.000000 61.000000 \\\n",
+ "mean 0.038182 0.016165 0.018770 0.188050 \n",
+ "std 0.036398 0.010069 0.013750 0.193747 \n",
+ "... ... ... ... ... \n",
+ "50% 0.028309 0.013390 0.016660 0.133815 \n",
+ "75% 0.049576 0.024650 0.025802 0.238859 \n",
+ "max 0.198195 0.036932 0.065360 1.154073 \n",
+ "\n",
+ " mag_err_y_lsst mag_err_z_lsst mag_g_lsst mag_i_lsst mag_r_lsst \n",
+ "count 61.000000 62.000000 62.000000 62.000000 62.000000 \\\n",
+ "mean 0.054682 0.021478 24.820000 23.384804 24.003970 \n",
+ "std 0.115875 0.014961 1.314112 1.381587 1.387358 \n",
+ "... ... ... ... ... ... \n",
+ "50% 0.034199 0.018540 25.069970 23.748506 24.470215 \n",
+ "75% 0.063585 0.032557 25.705486 24.488654 24.985225 \n",
+ "max 0.909230 0.051883 27.296152 24.949645 26.036958 \n",
+ "\n",
+ " mag_u_lsst mag_y_lsst mag_z_lsst redshift \n",
+ "count 61.000000 61.000000 62.000000 62.000000 \n",
+ "mean 25.446008 22.932354 23.074481 0.780298 \n",
+ "std 1.269277 1.540284 1.400673 0.355365 \n",
+ "... ... ... ... ... \n",
+ "50% 25.577029 23.293384 23.514185 0.764600 \n",
+ "75% 26.263284 23.993010 24.165944 0.948494 \n",
+ "max 28.482391 27.342151 24.693132 1.755764 \n",
+ "\n",
+ "[8 rows x 13 columns]"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"train_goldenspike.data.describe()"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -756,20 +2749,36 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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sfr4448VFhamdevWafny5ZKkH3/8US1btqz3cdatW+f0eMmSJYqMjNSOHTuUkpKiXr16OU0H7Ny5sx577DH99re/1enTp3XBBfwq5EnRoVafLuQ8n3tAc97dI0PcQRBwJabvAQAAAPCYjIwMjR8/Xh07dlRMTIxSU1MlnZnWl5SU1OjjVk3LqxqFVVubtm3bUpBCgzy/+YCy/luQkv53B8EiW7mpuQB/0KhP40OHDslisahjx46SpE8//VRLly5Vjx49dOutt7o0IADA99FvAACq3Hnnnbrssst06NAhDR06VAEBZ/5O3qlTpwatKXU2u92ujIwMDR48WL169aqxTXFxsR555JHz9jsVFRWqqKhwPC4pKWlUHviPIlu55rxb/c6QVXcQbOzoL6YCAmc0aqTUuHHjtGnTJknSkSNHNHToUH366ae677779PDDD7s0IADA99FvAADO1r9/f11//fVq06aNKisrlZeXp0GDBmnw4MGNOl56erry8/MdUwHPVVJSohEjRqhHjx566KGHaj1OVlaWQkNDHVtsbGyj8sB/FBSXyjCq7w+QGn0HwRXbCjV4zkaNW/SJBs/ZqBXbCpsWEvBhjSpK5efn67LLLpMkvfbaa+rVq5c++ugjvfrqq1qyZIkr8wEA/AD9BgCgSkZGhl588UVJUmVlpa644gpdeumlio2NVU5OToOPN2XKFK1du1abNm1yjMg92/HjxzVs2DCFhIQoOztbLVq0qPVYmZmZstlsju3QoUMNzgP/khjeWgGW6vvvHd69USOcimzlyly5W/b/FrqYCojmrlFFqVOnTik4OFiStGHDBv3qV7+SJHXv3l1FRUWuSwcA8Av0GwCAKm+88Yb69OkjSXrrrbdUUFCgPXv26K677tJ9991X7+MYhqEpU6YoOztbGzduVGJiYrU2JSUlSktLU1BQkNasWVPnQurBwcFq27at04bmLTrUqqzRSQq0nKlMBVikzGu767YrOjfqeAXFpY6CVJWqqYBnK7KV66MDxRSr4PcataZUz5499dxzz2nEiBFav369HnnkEUnS4cOH1b59e5cGBAD4PvoNAECV4uJiRUVFSZLeeecd3Xjjjeratat+//vf6+mnn673cdLT07V06VKtXr1aISEhOnLkiCQpNDRUVqvVUZAqKyvTK6+8opKSEscaUREREQoMDHT9yXkZ1i1y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VHXr1k1Wq1VxcXGaNm2abDabianPqM97ftttt6lz586yWq2KiIjQddddpz179piU+H/qk72KYRgaPnx4jf+WPa0+uVNTU2WxWJy222+/3aTEvmPBggVKSEhQy5YtNWDAAH366ae1tl20aJEuv/xyXXjhhbrwwgs1ZMiQau1vvvnmatdh2LBhXnMOS5YsqZavZcuWTm0Mw9ADDzyg6OhoWa1WDRkyxO19VUPOoaafdYvFohEjRjjaePI61NX31yQnJ0eXXnqpgoOD1aVLFy1ZsqRam4a8J03V0HNYuXKlhg4dqoiICLVt21YDBw7Ue++959TmoYceqnYNunfv7jXnkJOTU+PP0ZEjR5zaefN1qOnn3GKxqGfPno42nr4OzQH9Bv1GU9Fv0G+YdQ5m9hs+VZQqLS1Vnz59tGDBghqfnz59utatW6dXXnlFX3zxhTIyMjRlyhStWbPGw0mrO192wzA0atQoffXVV1q9erV27dql+Ph4DRkyRKWlpSak/Z/c3Fylp6dr69atWr9+vU6dOqW0tDSnXHfddZfeeustvf7668rNzdXhw4c1evRoE1OfUZ/sZWVlGjZsmGbOnGliUmd15T58+LAOHz6sJ554Qvn5+VqyZInWrVunW265xeTk9XvP+/Xrp8WLF+uLL77Qe++9J8MwlJaWpsrKShOT1y97lXnz5slisZiQsrr65p48ebKKiooc2+OPP25SYt+wYsUKTZ8+XQ8++KB27typPn366JprrtF3331XY/ucnBzddNNN2rRpkz7++GPFxsYqLS1N3377rVO7YcOGOV2HZcuWec05SFLbtm2d8n399ddOzz/++OP629/+pueee06ffPKJWrdurWuuuUY//fSTV5zDypUrnfLn5+crMDBQN954o1M7T12Huv7fcq6CggKNGDFCV155pfLy8pSRkaE//OEPTv85b8x19eQ5bN68WUOHDtU777yjHTt26Morr9TIkSO1a9cup3Y9e/Z0ugYffvihO+JLavg5VNm7d69TxsjISMdz3n4dnn76aafshw4dUlhYWLV/C568Dv6OfoN+wxXoN+g3XMWn+g3DR0kysrOznfb17NnTePjhh532XXrppcZ9993nwWR1Ozf73r17DUlGfn6+Y19lZaURERFhLFq0yISEtfvuu+8MSUZubq5hGIZx7Ngxo0WLFsbrr7/uaPPFF18Y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kyZNUkhIiLp06aJ3331XklRZWalbbrlFiYmJslqt6tatm55++mmnY54+fVrTpk1Tu3bt1L59e917772aOHGiRo0aVe9M9R1yezbDMPTQQw8pLi5OwcHBiomJ0bRp0xzPP/vss7rooovUsmVLdejQQb/+9a8lSTfffLNyc3P19NNPy2KxyGKx6ODBgw3+/gCA/0lNTdWUKVOUkZGh8PBwXXPNNcrPz9fw4cPVpk0bdejQQRMmTFBxcbHjNaWlpfrd736nNm3aKDo6Wn/961+rHbe2z/Iqdrtdf/7znxUWFqaoqCg99NBDTs+fPQ3DYrFox44devjhh2WxWJSamqpJkybJZrM5+oNzXw8AcA/6DaBuFKXgl15++WWFh4fr008/1dSpU3XHHXfoxhtv1KBBg7Rz506lpaVpwoQJKisrk91uV8eOHfX666/r888/1wMPPKCZM2fqtddecxxv7ty5evXVV7V48WJt2bJFJSUlTvOw3eXNN9/UU089peeff1779u3TqlWrlJSUJEnavn27pk2bpocfflh79+7VunXrlJKSIkl6+umnNXDgQE2ePFlFRUUqKipSbGys2/MCgL97+eWXFRQUpC1btmjOnDm66qqr1LdvX23fvl3r1q3T0aNHNWbMGEf7e+65R7m5uVq9erXef/995eTkaOfOnY7nz/dZfvb3bN26tT755BM9/vjjevjhh7V+/foa8xUVFalnz57605/+pKKiIq1Zs0bz5s1T27ZtHf3B3Xff7Z43BwBQDf0GcH5M34Nf6tOnj/7yl79IkjIzMzVnzhyFh4dr8uTJkqQHHnhACxcu1Geffaaf//znmjVrluO1iYmJ+vjjj/Xaa685Ooj58+crMzNT119/vSTpmWee0TvvvOP28ygsLFRUVJSGDBmiFi1aKC4uTpdddpnjudatW+uXv/ylQkJCFB8fr759+0qSQkNDFRQUpFatWlUbngsAaLyLLrpIjz/+uCTp0UcfVd++fTV79mzH8y+99JJiY2P15ZdfKiYmRi+++KJeeeUVXX311ZLO/KLQsWNHR/vzfZZX6d27tx588EHH93/mmWf0wQcfaOjQodXyRUVF6YILLlCbNm0cn/+hoaGyWCz0BwBgAvoN4PwYKQW/1Lt3b8fXgYGBat++vWOEkSR16NBBkvTdd99JkhYsWKB+/fopIiJCbdq00QsvvKDCwkJJks1m09GjRx3FoKpj9uvXz+3nceONN6q8vFydOnXS5MmTlZ2drdOnT0uShg4dqvj4eHXq1EkTJkzQq6++qrKyMrdnAoDm7OzP/n/961/atGmT2rRp49i6d+8u6cz6HAcOHNDJkyc1YMAAx2vCwsLUrVs3x+P6fJaf3adJUnR0tKP/AgB4N/oN4PwoSsEvnXunO4vF4rTPYrFIOjPfevny5br77rt1yy236P3331deXp4mTZqkkydPejRzTWJjY7V37149++yzslqtuvPOO5WSkqJTp04pJCREO3fu1LJlyxQdHa0HHnhAffr04S4ZAOBGrVu3dnx94sQJjRw5Unl5eU7bvn37qk2lqE19Pstr6tPsdrtLzgcA4F70G8D5UZRCs7dlyxYNGjRId955p/r27asuXbrowIEDjudDQ0PVoUMHbdu2zbGvsrLSaW63O1mtVo0cOVJ/+9vflJOTo48//li7d++WJF1wwQUaMmSIHn/8cX322Wc6ePCgNm7cKEkKCgpSZWWlRzICQHN06aWX6t///rcSEhLUpUsXp61169bq3LmzWrRooU8++cTxmh9//FFffvml03HO91nuCvQHAOAd6DeA6lhTCs3eRRddpL///e967733lJiYqH/84x/atm2bEhMTHW2mTp2qrKwsdenSRd27d9f8+fP1448/OkZcucuSJUtUWVmpAQMGqFWrVnrllVdktVoVHx+vtWvX6quvvlJKSoouvPBCvfPOO7Lb7Y7hvQkJCfrkk0908OBBtWnTRmFhYQoIoA4NAK6Snp6uRYsW6aabbnLc5Wj//v1avny5/t//+39q06aNbrnlFt1zzz1q3769IiMjdd999zl9Ftf1We4KCQkJOnHihD744AP16dNHrVq1UqtWrVx2fABA/dBvANXxGyqavdtuu02jR4/W2LFjNWDAAH3//fe68847ndrce++9uummm/S73/1OAwcOVJs2bXTNNdeoZcuWbs3Wrl07LVq0SIMHD1bv3r21YcMGvfXWW2rfvr3atWunlStX6qqrrtLFF1+s5557TsuWLVPPnj0lSXfffbcCAwPVo0cPRUREONbIAgC4RkxMjLZs2aLKykqlpaUpKSlJGRkZateuneMXiP/7v//T5ZdfrpEjR2rIkCH6xS9+4bS+SF2f5a4waNAg3X777Ro7dqwiIiIcC+4CADyLfgOozmIYhmF2CMDX2O12XXzxxRozZoweeeQRs+MAAAAAAOBzmL4H1MPXX3+t999/X1dccYUqKir0zDPPqKCgQOPGjTM7GgAAAAAAPonpe0A9BAQEaMmSJUpOTtbgwYO1e/dubdiwQRdffLEKCwudbut67nb2tLl//vOf520LAAAAAEBzwfQ9oIlOnz6tgwcP1vp8QkKCLrjgzKDE8vJyffvtt7W27dKli6vjAQAAAADglShKAQAAAAAAwOOYvgcAAAAAAACPoygFAAAAAAAAj6MoBQAAAAAAAI+jKAUAAAAAAACPoygFAAAAAAAAj6MoBQAAAAAAAI+jKAUAAAAAAACPoygFAAAAAAAAj/v/OlrI3uXdrPkAAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"train_goldenspike.plot(mag_name=\"mag_i_lsst\")"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
"## Photo-z Validation Results\n",
- " \n",
" \n",
"Validation Results are the outputs of any photo-z algorithm applied on a Validation Set. The format and number of files of this data product are strongly dependent on the algorithm used to create it, so there are no constraints on these two parameters. In the case of multiple files, for instance, if the user includes the results of training procedures (e.g., neural nets weights, decision trees files, or any machine learning by-product) or additional files (SED templates, filter transmission curves, theoretical magnitudes grid, Bayesian priors, etc.), it will be required to put all files together in a single compressed file (.zip or .tar, or .tar.gz) before uploading it to the Photo-z Server. \n",
"\n",
@@ -778,14 +2787,83 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " id \n",
+ " internal_name \n",
+ " product_name \n",
+ " product_type \n",
+ " release \n",
+ " uploaded_by \n",
+ " official_product \n",
+ " pz_code \n",
+ " description \n",
+ " created_at \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " 12_goldenspike_knn \n",
+ " Goldenspike KNN \n",
+ " Validation Results \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " KNN \n",
+ " Results of photoz validation using KNN on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " 2023-03-29T19:49:35.652295Z \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " 11_goldenspike_flexzboost \n",
+ " Goldenspike FlexZBoost \n",
+ " Validation Results \n",
+ " None \n",
+ " gschwend \n",
+ " False \n",
+ " FlexZBoost \n",
+ " Results of photoz validation using FlexZBoost on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " 2023-03-29T19:48:34.864629Z \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " 10_goldenspike_bpz \n",
+ " Goldenspike BPZ \n",
+ " Validation Results \n",
+ " LSST DP0 \n",
+ " gschwend \n",
+ " False \n",
+ " BPZ \n",
+ " Results of photoz validation using BPZ on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " 2023-03-29T19:42:04.424990Z \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_products_list(filters={\"product_type\": \"Validation Results\"})"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -794,14 +2872,83 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ " \n",
+ " \n",
+ " key \n",
+ " value \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " 11 \n",
+ " \n",
+ " \n",
+ " release \n",
+ " None \n",
+ " \n",
+ " \n",
+ " product_type \n",
+ " Validation Results \n",
+ " \n",
+ " \n",
+ " uploaded_by \n",
+ " gschwend \n",
+ " \n",
+ " \n",
+ " internal_name \n",
+ " 11_goldenspike_flexzboost \n",
+ " \n",
+ " \n",
+ " product_name \n",
+ " Goldenspike FlexZBoost \n",
+ " \n",
+ " \n",
+ " official_product \n",
+ " False \n",
+ " \n",
+ " \n",
+ " pz_code \n",
+ " FlexZBoost \n",
+ " \n",
+ " \n",
+ " description \n",
+ " Results of photoz validation using FlexZBoost on a mock test set from the example notebook goldenspike.ipynb available in RAIL's repository. \n",
+ " \n",
+ " \n",
+ " created_at \n",
+ " 2023-03-29T19:48:34.864629Z \n",
+ " \n",
+ " \n",
+ " main_file \n",
+ " pz_valid_fzboost.tar.gz \n",
+ " \n",
+ " \n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"pz_server.display_product_metadata(\"11_goldenspike_flexzboost\")"
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -812,7 +2959,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
@@ -820,17 +2967,23 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
- "\n",
- "### Photo-z Tables \n",
- " "
+ "\n",
+ "\n",
+ "[back to the top](#notebook-contents)\n",
+ "\n",
+ "\n",
+ "\n",
+ "### Photo-z Tables "
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -841,7 +2994,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
@@ -849,6 +3002,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -876,7 +3030,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.9.16"
+ "version": "3.10.10"
},
"nbsphinx": {
"execute": "never"
diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js
index 8b12b6e..c6c8a74 100644
--- a/docs/_static/documentation_options.js
+++ b/docs/_static/documentation_options.js
@@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
- VERSION: '0.1.dev1+ga41731a',
+ VERSION: '0.2.2.dev7+g095ab2f',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
diff --git a/docs/_static/nbsphinx-code-cells.css b/docs/_static/nbsphinx-code-cells.css
index 199fa5a..a3fb27c 100644
--- a/docs/_static/nbsphinx-code-cells.css
+++ b/docs/_static/nbsphinx-code-cells.css
@@ -62,12 +62,16 @@ div.nblast.container {
}
/* input prompt */
-div.nbinput.container div.prompt pre {
+div.nbinput.container div.prompt pre,
+/* for sphinx_immaterial theme: */
+div.nbinput.container div.prompt pre > code {
color: #307FC1;
}
/* output prompt */
-div.nboutput.container div.prompt pre {
+div.nboutput.container div.prompt pre,
+/* for sphinx_immaterial theme: */
+div.nboutput.container div.prompt pre > code {
color: #BF5B3D;
}
@@ -204,8 +208,10 @@ div.nboutput.container div.output_area > div[class^='highlight']{
overflow-y: hidden;
}
-/* hide copybtn icon on prompts (needed for 'sphinx_copybutton') */
-.prompt .copybtn {
+/* hide copy button on prompts for 'sphinx_copybutton' extension ... */
+.prompt .copybtn,
+/* ... and 'sphinx_immaterial' theme */
+.prompt .md-clipboard.md-icon {
display: none;
}
diff --git a/docs/autoapi/index.html b/docs/autoapi/index.html
index e08b071..45b7776 100644
--- a/docs/autoapi/index.html
+++ b/docs/autoapi/index.html
@@ -4,7 +4,7 @@
- API Reference — pzserver 0.1.dev1+ga41731a documentation
+ API Reference — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -35,7 +35,7 @@
pzserver
- 0.1
+ 0.2
diff --git a/docs/autoapi/pzserver/catalog/index.html b/docs/autoapi/pzserver/catalog/index.html
index efb25c4..7615334 100644
--- a/docs/autoapi/pzserver/catalog/index.html
+++ b/docs/autoapi/pzserver/catalog/index.html
@@ -4,7 +4,7 @@
- pzserver.catalog — pzserver 0.1.dev1+ga41731a documentation
+ pzserver.catalog — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -35,7 +35,7 @@
pzserver
- 0.1
+ 0.2
diff --git a/docs/autoapi/pzserver/communicate/index.html b/docs/autoapi/pzserver/communicate/index.html
index 7bf5396..fb04cee 100644
--- a/docs/autoapi/pzserver/communicate/index.html
+++ b/docs/autoapi/pzserver/communicate/index.html
@@ -4,7 +4,7 @@
- pzserver.communicate — pzserver 0.1.dev1+ga41731a documentation
+ pzserver.communicate — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -35,7 +35,7 @@
pzserver
- 0.1
+ 0.2
diff --git a/docs/autoapi/pzserver/core/index.html b/docs/autoapi/pzserver/core/index.html
index 65fcfc4..c01eb23 100644
--- a/docs/autoapi/pzserver/core/index.html
+++ b/docs/autoapi/pzserver/core/index.html
@@ -4,7 +4,7 @@
- pzserver.core — pzserver 0.1.dev1+ga41731a documentation
+ pzserver.core — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -19,7 +19,7 @@
-
+
@@ -35,7 +35,7 @@
pzserver
- 0.1
+ 0.2
@@ -386,7 +386,7 @@ Attributes
Previous
- Next
+ Next
diff --git a/docs/autoapi/pzserver/index.html b/docs/autoapi/pzserver/index.html
index 326ec5a..0707b75 100644
--- a/docs/autoapi/pzserver/index.html
+++ b/docs/autoapi/pzserver/index.html
@@ -4,7 +4,7 @@
- pzserver — pzserver 0.1.dev1+ga41731a documentation
+ pzserver — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -35,7 +35,7 @@
pzserver
- 0.1
+ 0.2
@@ -134,7 +134,7 @@ Classes
-display_metadata()
+display_metadata()[source]
Displays the catalog’s metadata
Displays a pandas.io.formats.style.Styler object
with the metadata informed by the product owner
@@ -155,7 +155,7 @@
Classes
-plot(savefig=False)
+plot(savefig=False)[source]
Very basic plots to characterize a Spec-z catalog.
- Parameters:
@@ -178,7 +178,7 @@ Classes
-
-plot(mag_name=None, savefig=False)
+plot(mag_name=None, savefig=False)[source]
Very basic plots to characterize a Training Set.
- Parameters:
@@ -195,7 +195,7 @@ Classes
-
-get_product_types() list
+get_product_types() list [source]
Fetches the list of valid product types.
Connects to the Photo-z Server’s administrative
database and fetches the list of valid product
@@ -209,7 +209,7 @@
Classes
-
-display_product_types()
+display_product_types()[source]
Displays the list of product types as dataframe
Displays a pandas.io.formats.style.Styler object
mapping the product type names to the corresponding
@@ -218,7 +218,7 @@
Classes
-
-get_users() list
+get_users() list [source]
Fetches the list of registered users.
Connects to the Photo-z Server’s administrative
database and fetches the list of registered
@@ -232,7 +232,7 @@
Classes
-
-display_users()
+display_users()[source]
Displays the list of users as dataframe
Displays a pandas.io.formats.style.Styler object
mapping the users to corresponding GitHub usernames
@@ -241,7 +241,7 @@
Classes
-
-get_releases() list
+get_releases() list [source]
Fetches the list of valid data releases.
Connects to the Photo-z Server’s administrative
database and fetches the list of valid LSST
@@ -257,7 +257,7 @@
Classes
-
-display_releases()
+display_releases()[source]
Displays the list of data releases as dataframe
Displays a pandas.io.formats.style.Styler object
mapping the the data release tags to their full
@@ -266,7 +266,7 @@
Classes
-
-get_products_list(filters=None) list
+get_products_list(filters=None) list [source]
Fetches the list of data products available.
Connects to the Photo-z Server’s database and
fetches the filtered list of data products
@@ -285,7 +285,7 @@
Classes
-
-display_products_list(filters=None)
+display_products_list(filters=None)[source]
Displays the list of data products as dataframe
Displays a pandas.io.formats.style.Styler object
with the list of all products available with the
@@ -302,7 +302,7 @@
Classes
-
-get_product_metadata(product_id=None, mainfile_info=True) dict
+get_product_metadata(product_id=None, mainfile_info=True) dict [source]
Fetches the product metadata.
Connects to the Photo-z Server’s database and
fetches the metadata informed by the product
@@ -325,7 +325,7 @@
Classes
-
-display_product_metadata(product_id=None, show=True)
+display_product_metadata(product_id=None, show=True)[source]
Displays the metadata informed by the product owner.
Displays a pandas.io.formats.style.Styler object
with the metadata informed by the product owner
@@ -341,7 +341,7 @@
Classes
-
-download_product(product_id=None, save_in='.')
+download_product(product_id=None, save_in='.')[source]
Download the data to local.
Connects to the Photo-z Server’s database and
download a compressed zip file containing all
@@ -361,7 +361,7 @@
Classes
-
-get_product(product_id=None, fmt=None)
+get_product(product_id=None, fmt=None)[source]
Fetches the data product contents to local.
Connects to the Photo-z Server’s database and
fetches the tabular data stored as registered
@@ -387,7 +387,7 @@
Classes
-
-__transform_df(dataframe, metadata)
+__transform_df(dataframe, metadata)[source]
Transforms the dataframe into an object corresponding to
its product type (currently we have two: Spec-z Catalog or
Training Set) or returns the dataframe.
@@ -403,7 +403,7 @@ Classes
-
-abstract combine_specz_catalogs(catalog_list, duplicates_critera='smallest flag')
+abstract combine_specz_catalogs(catalog_list, duplicates_critera='smallest flag')[source]
_summary_
- Parameters:
@@ -420,7 +420,7 @@ Classes
-
-abstract make_training_set(specz_catalog=None, photo_catalog=None, search_radius=1.0, multiple_match_criteria='select closest')
+abstract make_training_set(specz_catalog=None, photo_catalog=None, search_radius=1.0, multiple_match_criteria='select closest')[source]
_summary_
- Parameters:
diff --git a/docs/genindex.html b/docs/genindex.html
index bbda0f3..52388f6 100644
--- a/docs/genindex.html
+++ b/docs/genindex.html
@@ -3,7 +3,7 @@
- Index — pzserver 0.1.dev1+ga41731a documentation
+ Index — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -32,7 +32,7 @@
pzserver
- 0.1
+ 0.2
diff --git a/docs/index.html b/docs/index.html
index ba27822..3955985 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -4,7 +4,7 @@
- Welcome to Photo-z Server Library’s documentation! — pzserver 0.1.dev1+ga41731a documentation
+ Welcome to Photo-z Server Library’s documentation! — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -34,7 +34,7 @@
pzserver
- 0.1
+ 0.2
@@ -91,8 +91,10 @@ Welcome to Photo-z Server Library’s documentation!pzserver
-
- Notebooks
+- Notebooks
- Photo-z Server - Tutorial Notebook
+- Notebook contents
+- The PZ Server
- The PZ Server API (Python library pz-server-lib)
- Product types
diff --git a/docs/installation.html b/docs/installation.html
index 1dfa5c8..781beb2 100644
--- a/docs/installation.html
+++ b/docs/installation.html
@@ -4,7 +4,7 @@
- Installation — pzserver 0.1.dev1+ga41731a documentation
+ Installation — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -35,7 +35,7 @@
pzserver
- 0.1
+ 0.2
diff --git a/docs/nbs.html b/docs/nbs.html
new file mode 100644
index 0000000..abf6771
--- /dev/null
+++ b/docs/nbs.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+ Notebooks — pzserver 0.2.2.dev7+g095ab2f documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Notebooks
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/notebooks/intro_notebook.html b/docs/notebooks/intro_notebook.html
index fdd48ca..f7b129a 100644
--- a/docs/notebooks/intro_notebook.html
+++ b/docs/notebooks/intro_notebook.html
@@ -4,7 +4,7 @@
- Photo-z Server - Tutorial Notebook — pzserver 0.1.dev1+ga41731a documentation
+ Photo-z Server - Tutorial Notebook — pzserver 0.2.2.dev7+g095ab2f documentation
@@ -22,7 +22,7 @@
-
+
@@ -37,7 +37,7 @@
pzserver
- 0.1
+ 0.2